@ravi-hq/ravi 0.1.0 → 0.2.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/README.md +56 -6
- package/dist/auth.d.ts +39 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +97 -0
- package/dist/auth.js.map +1 -0
- package/dist/bin/ravi-secrets.d.ts +23 -0
- package/dist/bin/ravi-secrets.d.ts.map +1 -0
- package/dist/bin/ravi-secrets.js +113 -0
- package/dist/bin/ravi-secrets.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +142 -188
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +4 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +26 -17
- package/dist/client.js.map +1 -1
- package/dist/crypto.d.ts +13 -0
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +45 -5
- package/dist/crypto.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -46
- package/dist/index.js.map +1 -1
- package/dist/service.d.ts +7 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +11 -0
- package/dist/service.js.map +1 -1
- package/dist/sse.d.ts +9 -0
- package/dist/sse.d.ts.map +1 -1
- package/dist/sse.js +20 -2
- package/dist/sse.js.map +1 -1
- package/dist/tools/email-send.js +1 -1
- package/dist/tools/email-send.js.map +1 -1
- package/dist/tools/feedback.d.ts +2 -3
- package/dist/tools/feedback.d.ts.map +1 -1
- package/dist/tools/feedback.js +26 -18
- package/dist/tools/feedback.js.map +1 -1
- package/dist/tools/inbox.d.ts.map +1 -1
- package/dist/tools/inbox.js +15 -56
- package/dist/tools/inbox.js.map +1 -1
- package/dist/tools/passwords.d.ts.map +1 -1
- package/dist/tools/passwords.js +21 -51
- package/dist/tools/passwords.js.map +1 -1
- package/dist/tools/vault.d.ts.map +1 -1
- package/dist/tools/vault.js +4 -8
- package/dist/tools/vault.js.map +1 -1
- package/dist/types.d.ts +10 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +6 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +18 -0
- package/dist/utils.js.map +1 -1
- package/openclaw.plugin.json +3 -23
- package/package.json +5 -3
- package/skills/CLAUDE.md +0 -36
- package/skills/ravi/SKILL.md +0 -46
- package/skills/ravi-email-send/SKILL.md +0 -44
- package/skills/ravi-feedback/SKILL.md +0 -37
- package/skills/ravi-identity/SKILL.md +0 -50
- package/skills/ravi-inbox/SKILL.md +0 -58
- package/skills/ravi-login/SKILL.md +0 -42
- package/skills/ravi-passwords/SKILL.md +0 -48
- package/skills/ravi-vault/SKILL.md +0 -54
package/dist/cli.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { execFile } from "node:child_process";
|
|
2
|
-
import {
|
|
3
|
-
import { mkdirSync, writeFileSync } from "node:fs";
|
|
4
|
-
import { join } from "node:path";
|
|
5
|
-
import { homedir, platform } from "node:os";
|
|
2
|
+
import { platform } from "node:os";
|
|
6
3
|
import { RAVI_API_URL } from "./config.js";
|
|
7
4
|
import { RaviClient, RaviApiError } from "./client.js";
|
|
5
|
+
import { loadAuth, saveAuth, saveConfig, saveRecoveryKey } from "./auth.js";
|
|
8
6
|
/** Try to open a URL in the user's default browser. Non-fatal on failure. */
|
|
9
7
|
function openBrowser(url) {
|
|
10
8
|
const cmd = platform() === "darwin" ? "open" :
|
|
@@ -15,49 +13,69 @@ function openBrowser(url) {
|
|
|
15
13
|
// Silently ignore errors — user can open the URL manually
|
|
16
14
|
});
|
|
17
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Try to set an OpenClaw config value via `openclaw config set`.
|
|
18
|
+
* Returns true on success, false on failure (command not found, schema error, etc.).
|
|
19
|
+
*/
|
|
20
|
+
function openclawConfigSet(path, value) {
|
|
21
|
+
return new Promise((resolve) => {
|
|
22
|
+
execFile("openclaw", ["config", "set", path, value], (err) => {
|
|
23
|
+
resolve(!err);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
}
|
|
18
27
|
/**
|
|
19
28
|
* Prompt the user for a 6-digit PIN via stdin (hidden input).
|
|
20
29
|
* Matches the CLI's interactive PIN prompt behavior.
|
|
21
30
|
*/
|
|
22
31
|
async function promptPIN(prompt) {
|
|
23
32
|
return new Promise((resolve, reject) => {
|
|
24
|
-
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
25
|
-
// Mute output to hide PIN typing (write prompt to stderr like the CLI)
|
|
26
33
|
process.stderr.write(prompt);
|
|
27
34
|
const stdin = process.stdin;
|
|
28
35
|
const wasRaw = stdin.isRaw;
|
|
29
36
|
if (stdin.isTTY && stdin.setRawMode) {
|
|
30
37
|
stdin.setRawMode(true);
|
|
31
38
|
}
|
|
39
|
+
stdin.resume();
|
|
32
40
|
let pin = "";
|
|
41
|
+
const timeout = setTimeout(() => {
|
|
42
|
+
cleanup();
|
|
43
|
+
reject(new Error("PIN prompt timed out — no input received within 60 seconds."));
|
|
44
|
+
}, 60_000);
|
|
45
|
+
const cleanup = () => {
|
|
46
|
+
clearTimeout(timeout);
|
|
47
|
+
if (stdin.isTTY && stdin.setRawMode)
|
|
48
|
+
stdin.setRawMode(wasRaw ?? false);
|
|
49
|
+
stdin.removeListener("data", onData);
|
|
50
|
+
stdin.removeListener("end", onEnd);
|
|
51
|
+
stdin.pause();
|
|
52
|
+
};
|
|
53
|
+
const onEnd = () => {
|
|
54
|
+
cleanup();
|
|
55
|
+
reject(new Error("stdin closed — cannot read PIN in non-interactive mode."));
|
|
56
|
+
};
|
|
33
57
|
const onData = (key) => {
|
|
34
58
|
const ch = key.toString();
|
|
35
59
|
if (ch === "\r" || ch === "\n") {
|
|
36
|
-
|
|
37
|
-
if (stdin.isTTY && stdin.setRawMode)
|
|
38
|
-
stdin.setRawMode(wasRaw ?? false);
|
|
39
|
-
stdin.removeListener("data", onData);
|
|
60
|
+
cleanup();
|
|
40
61
|
process.stderr.write("\n");
|
|
41
|
-
rl.close();
|
|
42
62
|
resolve(pin);
|
|
43
63
|
}
|
|
44
64
|
else if (ch === "\x03") {
|
|
45
65
|
// Ctrl+C
|
|
46
|
-
|
|
47
|
-
stdin.setRawMode(wasRaw ?? false);
|
|
48
|
-
stdin.removeListener("data", onData);
|
|
49
|
-
rl.close();
|
|
66
|
+
cleanup();
|
|
50
67
|
reject(new Error("Cancelled"));
|
|
51
68
|
}
|
|
52
69
|
else if (ch === "\x7f" || ch === "\b") {
|
|
53
70
|
// Backspace
|
|
54
71
|
pin = pin.slice(0, -1);
|
|
55
72
|
}
|
|
56
|
-
else if (ch
|
|
73
|
+
else if (/^\d$/.test(ch)) {
|
|
57
74
|
pin += ch;
|
|
58
75
|
}
|
|
59
76
|
};
|
|
60
77
|
stdin.on("data", onData);
|
|
78
|
+
stdin.on("end", onEnd);
|
|
61
79
|
});
|
|
62
80
|
}
|
|
63
81
|
/**
|
|
@@ -82,17 +100,6 @@ async function promptExistingPIN() {
|
|
|
82
100
|
}
|
|
83
101
|
return pin;
|
|
84
102
|
}
|
|
85
|
-
/**
|
|
86
|
-
* Save recovery key to ~/.ravi/recovery-key.txt (same location as CLI).
|
|
87
|
-
* Creates ~/.ravi/ directory if needed. File permissions: 0600.
|
|
88
|
-
*/
|
|
89
|
-
function saveRecoveryKey(recoveryKey) {
|
|
90
|
-
const raviDir = join(homedir(), ".ravi");
|
|
91
|
-
mkdirSync(raviDir, { recursive: true, mode: 0o700 });
|
|
92
|
-
const filePath = join(raviDir, "recovery-key.txt");
|
|
93
|
-
writeFileSync(filePath, recoveryKey + "\n", { mode: 0o600 });
|
|
94
|
-
return filePath;
|
|
95
|
-
}
|
|
96
103
|
// ─── Command Definitions ────────────────────────────────────────────────────
|
|
97
104
|
/**
|
|
98
105
|
* All CLI commands exposed by the Ravi plugin.
|
|
@@ -105,7 +112,7 @@ export const cliCommands = [
|
|
|
105
112
|
{
|
|
106
113
|
name: "login",
|
|
107
114
|
description: "Authenticate with Ravi using device code flow. Opens a browser for login.",
|
|
108
|
-
handler: async (_args,
|
|
115
|
+
handler: async (_args, _config) => {
|
|
109
116
|
const apiUrl = RAVI_API_URL;
|
|
110
117
|
// Step 1: Initiate device code flow
|
|
111
118
|
const response = await fetch(`${apiUrl}/api/auth/device/`, {
|
|
@@ -118,8 +125,9 @@ export const cliCommands = [
|
|
|
118
125
|
}
|
|
119
126
|
const data = (await response.json());
|
|
120
127
|
// Step 2: Open browser and display user code
|
|
121
|
-
|
|
122
|
-
|
|
128
|
+
const url = new URL(data.verification_uri);
|
|
129
|
+
url.searchParams.set("user_code", data.user_code);
|
|
130
|
+
const verifyUrl = url.toString();
|
|
123
131
|
openBrowser(verifyUrl);
|
|
124
132
|
let output = `\nTo authenticate, visit: ${verifyUrl}\n`;
|
|
125
133
|
output += `Code: ${data.user_code}\n`;
|
|
@@ -150,126 +158,125 @@ export const cliCommands = [
|
|
|
150
158
|
consecutiveNetworkErrors = 0;
|
|
151
159
|
if (tokenResponse.ok) {
|
|
152
160
|
const tokenData = (await tokenResponse.json());
|
|
153
|
-
// Step 4: Check encryption status and handle PIN setup/verification
|
|
154
161
|
const client = new RaviClient({ apiUrl, token: tokenData.access });
|
|
155
162
|
output += `\nAuthenticated as ${tokenData.user.email}\n\n`;
|
|
156
|
-
//
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
163
|
+
// Build auth.json — tokens first, encryption keys added below
|
|
164
|
+
const authData = {
|
|
165
|
+
access_token: tokenData.access,
|
|
166
|
+
refresh_token: tokenData.refresh,
|
|
167
|
+
user_email: tokenData.user.email,
|
|
168
|
+
};
|
|
169
|
+
// Step 4: Encryption setup — derive keypair and store in auth.json
|
|
160
170
|
let meta = null;
|
|
161
171
|
try {
|
|
162
172
|
meta = await client.getEncryptionMeta();
|
|
163
173
|
}
|
|
164
174
|
catch (err) {
|
|
165
175
|
const msg = err instanceof Error ? err.message : String(err);
|
|
166
|
-
output += `WARNING: Could not check encryption status: ${msg}\n`;
|
|
167
|
-
output += `Encryption features may not work correctly.\n\n`;
|
|
176
|
+
output += `WARNING: Could not check encryption status: ${msg}\n\n`;
|
|
168
177
|
}
|
|
169
178
|
if (meta && !meta.public_key) {
|
|
170
|
-
// First-time setup — prompt for PIN
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
179
|
+
// First-time setup — prompt for PIN, derive keypair, store keys
|
|
180
|
+
try {
|
|
181
|
+
const pin = await promptAndConfirmPIN();
|
|
182
|
+
const { setupEncryption } = await import("./crypto.js");
|
|
183
|
+
const setup = await setupEncryption(pin);
|
|
184
|
+
const recoveryPath = saveRecoveryKey(setup.recoveryKey);
|
|
185
|
+
await client.updateEncryptionMeta({
|
|
186
|
+
salt: setup.salt,
|
|
187
|
+
public_key: setup.publicKey,
|
|
188
|
+
verifier: setup.verifier,
|
|
189
|
+
});
|
|
190
|
+
// Store derived keypair in auth.json (returned by setupEncryption)
|
|
191
|
+
const { bytesToBase64 } = await import("./crypto.js");
|
|
192
|
+
authData.pin_salt = setup.salt;
|
|
193
|
+
authData.public_key = setup.publicKey;
|
|
194
|
+
authData.private_key = bytesToBase64(setup.keyPair.secretKey);
|
|
195
|
+
output += `E2E encryption set up successfully!\n`;
|
|
196
|
+
output += `Recovery key saved to ${recoveryPath} — back this up!\n\n`;
|
|
180
197
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
// Register with server
|
|
188
|
-
await client.updateEncryptionMeta({
|
|
189
|
-
salt: setup.salt,
|
|
190
|
-
public_key: setup.publicKey,
|
|
191
|
-
verifier: setup.verifier,
|
|
192
|
-
});
|
|
193
|
-
output += `E2E encryption set up successfully!\n`;
|
|
194
|
-
output += `Recovery key saved to ${recoveryPath} — back this up!\n\n`;
|
|
195
|
-
}
|
|
196
|
-
catch (err) {
|
|
197
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
198
|
-
output += `Failed to set up encryption: ${msg}\n`;
|
|
199
|
-
output += `You can try again by running 'openclaw ravi login'.\n\n`;
|
|
200
|
-
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
if (err instanceof Error && err.message === "Cancelled")
|
|
200
|
+
throw err;
|
|
201
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
202
|
+
output += `PIN setup skipped: ${msg}\n`;
|
|
203
|
+
output += `Run 'openclaw ravi login' again to set up encryption.\n\n`;
|
|
201
204
|
}
|
|
202
205
|
}
|
|
203
206
|
else if (meta && meta.public_key) {
|
|
204
|
-
// Existing encryption — verify PIN
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
207
|
+
// Existing encryption — verify PIN, derive and store keypair
|
|
208
|
+
try {
|
|
209
|
+
const pin = await promptExistingPIN();
|
|
210
|
+
const { deriveKeyPair, verify } = await import("./crypto.js");
|
|
211
|
+
const kp = await deriveKeyPair(pin, meta.salt);
|
|
212
|
+
const valid = await verify(kp, meta.verifier);
|
|
213
|
+
if (valid) {
|
|
214
|
+
const { bytesToBase64 } = await import("./crypto.js");
|
|
215
|
+
authData.pin_salt = meta.salt;
|
|
216
|
+
authData.public_key = meta.public_key;
|
|
217
|
+
authData.private_key = bytesToBase64(kp.secretKey);
|
|
218
|
+
output += `PIN verified — E2E encryption is ready.\n\n`;
|
|
208
219
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
output += `
|
|
220
|
+
else {
|
|
221
|
+
output += `WARNING: PIN does not match! Encryption keys not saved.\n`;
|
|
222
|
+
output += `Run 'openclaw ravi login' again with the correct PIN.\n\n`;
|
|
212
223
|
}
|
|
213
224
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
if (valid) {
|
|
220
|
-
output += `PIN verified — E2E encryption is ready.\n\n`;
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
output += `WARNING: PIN does not match! Check your PIN.\n\n`;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
catch (err) {
|
|
227
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
228
|
-
output += `PIN verification failed: ${msg}\n\n`;
|
|
229
|
-
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
if (err instanceof Error && err.message === "Cancelled")
|
|
227
|
+
throw err;
|
|
228
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
229
|
+
output += `PIN entry skipped: ${msg}\n\n`;
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
|
-
//
|
|
233
|
-
|
|
232
|
+
// Save auth to ~/.ravi/auth.json (like CLI)
|
|
233
|
+
saveAuth(authData);
|
|
234
|
+
output += `Credentials saved to ~/.ravi/auth.json\n\n`;
|
|
235
|
+
// Step 5: Identity selection + OpenClaw config update
|
|
234
236
|
try {
|
|
235
237
|
const identities = await client.listIdentities();
|
|
238
|
+
let selectedUuid;
|
|
236
239
|
if (identities.length === 1) {
|
|
237
|
-
|
|
238
|
-
|
|
240
|
+
selectedUuid = identities[0].uuid;
|
|
241
|
+
saveConfig({
|
|
242
|
+
identity_uuid: identities[0].uuid,
|
|
243
|
+
identity_name: identities[0].name,
|
|
244
|
+
});
|
|
245
|
+
output += `Auto-selected identity: ${identities[0].name}\n\n`;
|
|
239
246
|
}
|
|
240
247
|
else if (identities.length > 1) {
|
|
241
|
-
|
|
248
|
+
// Default to first identity; user can change later
|
|
249
|
+
selectedUuid = identities[0].uuid;
|
|
250
|
+
saveConfig({
|
|
251
|
+
identity_uuid: identities[0].uuid,
|
|
252
|
+
identity_name: identities[0].name,
|
|
253
|
+
});
|
|
254
|
+
output += `Identities:\n`;
|
|
242
255
|
for (const identity of identities) {
|
|
243
|
-
output += `
|
|
256
|
+
output += ` ${identity.name}: ${identity.uuid}\n`;
|
|
244
257
|
}
|
|
245
|
-
output += `\n`;
|
|
258
|
+
output += `\nUsing: ${identities[0].name} (first identity)\n\n`;
|
|
246
259
|
}
|
|
247
260
|
else {
|
|
248
|
-
output += `No identities found. Create one
|
|
261
|
+
output += `No identities found. Create one with the ravi_identity_create tool.\n`;
|
|
262
|
+
}
|
|
263
|
+
// Try to auto-configure OpenClaw with the selected identity
|
|
264
|
+
if (selectedUuid) {
|
|
265
|
+
const configPath = "plugins.entries.ravi.config.identityUuid";
|
|
266
|
+
const ok = await openclawConfigSet(configPath, selectedUuid);
|
|
267
|
+
if (ok) {
|
|
268
|
+
output += `OpenClaw config updated automatically (identityUuid set).\n`;
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
output += `To complete setup, run:\n\n`;
|
|
272
|
+
output += ` openclaw config set ${configPath} "${selectedUuid}"\n`;
|
|
273
|
+
}
|
|
249
274
|
}
|
|
250
275
|
}
|
|
251
|
-
catch {
|
|
252
|
-
|
|
276
|
+
catch (err) {
|
|
277
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
278
|
+
output += `Could not list identities: ${detail}\nAdd identityUuid to your config manually.\n`;
|
|
253
279
|
}
|
|
254
|
-
// Output config snippet
|
|
255
|
-
output += `Plugin config:\n\n`;
|
|
256
|
-
output += `{\n`;
|
|
257
|
-
output += ` "plugins": {\n`;
|
|
258
|
-
output += ` "entries": {\n`;
|
|
259
|
-
output += ` "ravi": {\n`;
|
|
260
|
-
output += ` "enabled": true,\n`;
|
|
261
|
-
output += ` "config": {\n`;
|
|
262
|
-
// apiUrl is baked in at build time — not part of user config
|
|
263
|
-
output += ` "token": "${tokenData.access}",\n`;
|
|
264
|
-
output += ` "refreshToken": "${tokenData.refresh}",\n`;
|
|
265
|
-
output += identityUuidLine;
|
|
266
|
-
output += ` "pin": "${resolvedPin ?? "YOUR_6_DIGIT_PIN"}"\n`;
|
|
267
|
-
output += ` }\n`;
|
|
268
|
-
output += ` }\n`;
|
|
269
|
-
output += ` }\n`;
|
|
270
|
-
output += ` }\n`;
|
|
271
|
-
output += `}\n\n`;
|
|
272
|
-
output += `Run 'openclaw ravi setup' to configure channels.\n`;
|
|
273
280
|
return output;
|
|
274
281
|
}
|
|
275
282
|
// Check whether the error is "still waiting" or a terminal failure
|
|
@@ -285,16 +292,18 @@ export const cliCommands = [
|
|
|
285
292
|
{
|
|
286
293
|
name: "status",
|
|
287
294
|
description: "Show authentication status and available identities.",
|
|
288
|
-
handler: async (_args,
|
|
289
|
-
|
|
290
|
-
|
|
295
|
+
handler: async (_args, _config) => {
|
|
296
|
+
const auth = loadAuth();
|
|
297
|
+
if (!auth?.access_token) {
|
|
298
|
+
return `Not logged in. Run 'openclaw ravi login' to authenticate.`;
|
|
291
299
|
}
|
|
292
300
|
const apiUrl = RAVI_API_URL;
|
|
293
|
-
const client = new RaviClient({ apiUrl, token:
|
|
301
|
+
const client = new RaviClient({ apiUrl, token: auth.access_token });
|
|
294
302
|
try {
|
|
295
303
|
const identities = await client.listIdentities();
|
|
304
|
+
const hasKeypair = !!(auth.public_key && auth.private_key);
|
|
296
305
|
let output = `Authenticated to ${apiUrl}\n`;
|
|
297
|
-
output += `
|
|
306
|
+
output += `E2E encryption: ${hasKeypair ? "Yes" : "No"}\n`;
|
|
298
307
|
output += `\nIdentities (${identities.length}):\n`;
|
|
299
308
|
for (const identity of identities) {
|
|
300
309
|
output += ` - ${identity.name} (${identity.uuid})\n`;
|
|
@@ -303,9 +312,9 @@ export const cliCommands = [
|
|
|
303
312
|
if (identity.phone)
|
|
304
313
|
output += ` Phone: ${identity.phone}\n`;
|
|
305
314
|
}
|
|
306
|
-
if (!
|
|
307
|
-
output += `\nWARNING: No
|
|
308
|
-
output += `
|
|
315
|
+
if (!hasKeypair) {
|
|
316
|
+
output += `\nWARNING: No encryption keypair — encrypted data (passwords, vault) will not be readable.\n`;
|
|
317
|
+
output += `Run 'openclaw ravi login' to set up E2E encryption.\n`;
|
|
309
318
|
}
|
|
310
319
|
return output;
|
|
311
320
|
}
|
|
@@ -321,69 +330,14 @@ export const cliCommands = [
|
|
|
321
330
|
}
|
|
322
331
|
},
|
|
323
332
|
},
|
|
324
|
-
// ── setup
|
|
333
|
+
// ── setup (alias for login) ─────────────────────────────────────────────
|
|
325
334
|
{
|
|
326
335
|
name: "setup",
|
|
327
|
-
description: "
|
|
328
|
-
handler: async (
|
|
329
|
-
|
|
330
|
-
const
|
|
331
|
-
|
|
332
|
-
if (identities.length === 0) {
|
|
333
|
-
return "No identities found. Create one first with the 'ravi_identity_create' tool.";
|
|
334
|
-
}
|
|
335
|
-
let output = "Channel Configuration\n";
|
|
336
|
-
output += "=====================\n\n";
|
|
337
|
-
// Suggest identityUuid for plugin config
|
|
338
|
-
if (identities.length === 1) {
|
|
339
|
-
output += `Tip: Add this to your plugin config to scope all tools to this identity:\n`;
|
|
340
|
-
output += ` "identityUuid": "${identities[0].uuid}"\n\n`;
|
|
341
|
-
}
|
|
342
|
-
else {
|
|
343
|
-
output += `Tip: Add "identityUuid" to your plugin config to scope all tools to one identity:\n`;
|
|
344
|
-
for (const identity of identities) {
|
|
345
|
-
output += ` - ${identity.name}: "${identity.uuid}"\n`;
|
|
346
|
-
}
|
|
347
|
-
output += `\n`;
|
|
348
|
-
}
|
|
349
|
-
output += "Add this to your OpenClaw config under the 'channels' key.\n\n";
|
|
350
|
-
output += `"channels": {\n`;
|
|
351
|
-
// Email accounts
|
|
352
|
-
const emailIdentities = identities.filter(i => i.email);
|
|
353
|
-
if (emailIdentities.length > 0) {
|
|
354
|
-
output += ` "ravi-email": {\n`;
|
|
355
|
-
output += ` "accounts": {\n`;
|
|
356
|
-
for (const [idx, identity] of emailIdentities.entries()) {
|
|
357
|
-
output += ` "${identity.uuid}": {\n`;
|
|
358
|
-
output += ` "identityUuid": "${identity.uuid}",\n`;
|
|
359
|
-
output += ` "identityName": "${identity.name}",\n`;
|
|
360
|
-
output += ` "email": "${identity.email}"\n`;
|
|
361
|
-
output += ` }${idx < emailIdentities.length - 1 ? "," : ""}\n`;
|
|
362
|
-
}
|
|
363
|
-
output += ` }\n`;
|
|
364
|
-
output += ` },\n`;
|
|
365
|
-
}
|
|
366
|
-
// SMS accounts
|
|
367
|
-
const phoneIdentities = identities.filter(i => i.phone);
|
|
368
|
-
if (phoneIdentities.length > 0) {
|
|
369
|
-
output += ` "ravi-sms": {\n`;
|
|
370
|
-
output += ` "accounts": {\n`;
|
|
371
|
-
for (const [idx, identity] of phoneIdentities.entries()) {
|
|
372
|
-
output += ` "${identity.uuid}": {\n`;
|
|
373
|
-
output += ` "identityUuid": "${identity.uuid}",\n`;
|
|
374
|
-
output += ` "identityName": "${identity.name}",\n`;
|
|
375
|
-
output += ` "phone": "${identity.phone}"\n`;
|
|
376
|
-
output += ` }${idx < phoneIdentities.length - 1 ? "," : ""}\n`;
|
|
377
|
-
}
|
|
378
|
-
output += ` }\n`;
|
|
379
|
-
output += ` }\n`;
|
|
380
|
-
}
|
|
381
|
-
output += `}\n\n`;
|
|
382
|
-
output += `NOTE: Messages from your personal email (owner) and other Ravi identities (self)\n`;
|
|
383
|
-
output += `give the agent full access. Messages from unknown senders (external) are delivered\n`;
|
|
384
|
-
output += `as read-only context — the agent can see them but cannot respond or use write tools.\n`;
|
|
385
|
-
output += `To allow someone full access, add them as a personal email on the Ravi dashboard.\n`;
|
|
386
|
-
return output;
|
|
336
|
+
description: "Alias for 'login' — authenticates and configures everything in one step.",
|
|
337
|
+
handler: async (args, config) => {
|
|
338
|
+
// Delegate to the login handler
|
|
339
|
+
const loginCmd = cliCommands.find((c) => c.name === "login");
|
|
340
|
+
return loginCmd.handler(args, config);
|
|
387
341
|
},
|
|
388
342
|
},
|
|
389
343
|
];
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export interface RaviClientConfig {
|
|
|
9
9
|
refreshToken?: string;
|
|
10
10
|
/** Optional identity UUID — sets the `X-Ravi-Identity` header on scoped requests. */
|
|
11
11
|
identityUuid?: string;
|
|
12
|
+
/** Callback invoked after a successful token refresh — use to persist the new token. */
|
|
13
|
+
onTokenRefresh?: (newToken: string) => void;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* Error thrown when the Ravi API returns a non-OK response.
|
|
@@ -43,7 +45,8 @@ export declare class RaviClient {
|
|
|
43
45
|
private token;
|
|
44
46
|
private refreshToken?;
|
|
45
47
|
private identityUuid?;
|
|
46
|
-
private
|
|
48
|
+
private refreshPromise;
|
|
49
|
+
private onTokenRefresh?;
|
|
47
50
|
constructor(config: RaviClientConfig);
|
|
48
51
|
/**
|
|
49
52
|
* Set the identity UUID used for scoped requests.
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,eAAe,EACf,UAAU,EACV,aAAa,EACb,WAAW,EACX,cAAc,EACf,MAAM,YAAY,CAAC;AAIpB,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -40,12 +40,14 @@ export class RaviClient {
|
|
|
40
40
|
token;
|
|
41
41
|
refreshToken;
|
|
42
42
|
identityUuid;
|
|
43
|
-
|
|
43
|
+
refreshPromise = null;
|
|
44
|
+
onTokenRefresh;
|
|
44
45
|
constructor(config) {
|
|
45
46
|
this.apiUrl = config.apiUrl.replace(/\/$/, "");
|
|
46
47
|
this.token = config.token;
|
|
47
48
|
this.refreshToken = config.refreshToken;
|
|
48
49
|
this.identityUuid = config.identityUuid;
|
|
50
|
+
this.onTokenRefresh = config.onTokenRefresh;
|
|
49
51
|
}
|
|
50
52
|
/**
|
|
51
53
|
* Set the identity UUID used for scoped requests.
|
|
@@ -82,28 +84,35 @@ export class RaviClient {
|
|
|
82
84
|
});
|
|
83
85
|
};
|
|
84
86
|
let response = await doFetch();
|
|
85
|
-
// Auto-refresh: on 401, try refreshing the token once and retry
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
87
|
+
// Auto-refresh: on 401, try refreshing the token once and retry.
|
|
88
|
+
// Uses a shared promise so concurrent requests coalesce into a single refresh.
|
|
89
|
+
if (response.status === 401 && this.refreshToken) {
|
|
90
|
+
const tokenBefore = this.token;
|
|
91
|
+
if (!this.refreshPromise) {
|
|
92
|
+
this.refreshPromise = (async () => {
|
|
93
|
+
const refreshResponse = await fetch(`${this.apiUrl}/api/auth/token/refresh/`, {
|
|
94
|
+
method: "POST",
|
|
95
|
+
headers: { "Content-Type": "application/json" },
|
|
96
|
+
body: JSON.stringify({ refresh: this.refreshToken }),
|
|
97
|
+
});
|
|
98
|
+
if (refreshResponse.ok) {
|
|
99
|
+
const data = (await refreshResponse.json());
|
|
100
|
+
this.token = data.access;
|
|
101
|
+
this.onTokenRefresh?.(data.access);
|
|
102
|
+
}
|
|
103
|
+
})().finally(() => {
|
|
104
|
+
this.refreshPromise = null;
|
|
93
105
|
});
|
|
94
|
-
if (refreshResponse.ok) {
|
|
95
|
-
const data = (await refreshResponse.json());
|
|
96
|
-
this.token = data.access;
|
|
97
|
-
response = await doFetch();
|
|
98
|
-
}
|
|
99
106
|
}
|
|
100
|
-
|
|
101
|
-
|
|
107
|
+
await this.refreshPromise;
|
|
108
|
+
// Only retry if the token was actually refreshed
|
|
109
|
+
if (this.token !== tokenBefore) {
|
|
110
|
+
response = await doFetch();
|
|
102
111
|
}
|
|
103
112
|
}
|
|
104
113
|
if (!response.ok) {
|
|
105
114
|
const detail = await response.text().catch(() => "(unable to read response body)");
|
|
106
|
-
throw new RaviApiError(method, path, response.status, detail);
|
|
115
|
+
throw new RaviApiError(method, path, response.status, detail.slice(0, 500));
|
|
107
116
|
}
|
|
108
117
|
// 204 No Content — nothing to parse
|
|
109
118
|
if (response.status === 204)
|