@opendatalabs/connect 0.10.1 → 0.11.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.
Files changed (41) hide show
  1. package/README.md +2 -2
  2. package/dist/cli/auth.d.ts +112 -0
  3. package/dist/cli/auth.d.ts.map +1 -0
  4. package/dist/cli/auth.js +339 -0
  5. package/dist/cli/auth.js.map +1 -0
  6. package/dist/cli/index.d.ts +1 -0
  7. package/dist/cli/index.d.ts.map +1 -1
  8. package/dist/cli/index.js +648 -191
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/cli/queries.d.ts.map +1 -1
  11. package/dist/cli/queries.js +16 -9
  12. package/dist/cli/queries.js.map +1 -1
  13. package/dist/cli/render/connect-renderer.d.ts +5 -0
  14. package/dist/cli/render/connect-renderer.d.ts.map +1 -1
  15. package/dist/cli/render/connect-renderer.js +62 -58
  16. package/dist/cli/render/connect-renderer.js.map +1 -1
  17. package/dist/cli/render/flow-theme.d.ts +17 -0
  18. package/dist/cli/render/flow-theme.d.ts.map +1 -0
  19. package/dist/cli/render/flow-theme.js +26 -0
  20. package/dist/cli/render/flow-theme.js.map +1 -0
  21. package/dist/cli/render/index.d.ts +1 -0
  22. package/dist/cli/render/index.d.ts.map +1 -1
  23. package/dist/cli/render/index.js +1 -0
  24. package/dist/cli/render/index.js.map +1 -1
  25. package/dist/cli/render/theme.d.ts +1 -0
  26. package/dist/cli/render/theme.d.ts.map +1 -1
  27. package/dist/cli/render/theme.js +19 -3
  28. package/dist/cli/render/theme.js.map +1 -1
  29. package/dist/core/cli-types.d.ts +3 -0
  30. package/dist/core/cli-types.d.ts.map +1 -1
  31. package/dist/core/cli-types.js +1 -1
  32. package/dist/core/cli-types.js.map +1 -1
  33. package/dist/personal-server/client.d.ts +1 -1
  34. package/dist/personal-server/client.d.ts.map +1 -1
  35. package/dist/personal-server/client.js +31 -17
  36. package/dist/personal-server/client.js.map +1 -1
  37. package/dist/personal-server/index.d.ts +12 -2
  38. package/dist/personal-server/index.d.ts.map +1 -1
  39. package/dist/personal-server/index.js +52 -18
  40. package/dist/personal-server/index.js.map +1 -1
  41. package/package.json +1 -1
package/README.md CHANGED
@@ -9,7 +9,7 @@ The `vana` CLI collects your personal data from any platform. See the **[CLI REA
9
9
  Install on macOS with Homebrew:
10
10
 
11
11
  ```bash
12
- brew tap vana-com/vana
12
+ brew tap vana-com/tap
13
13
  brew install vana
14
14
  vana status
15
15
  ```
@@ -17,7 +17,7 @@ vana status
17
17
  Or use the hosted prerelease installer on macOS/Linux:
18
18
 
19
19
  ```bash
20
- curl -fsSL https://raw.githubusercontent.com/vana-com/vana-connect/feat/connect-cli-v1/install/install.sh | sh -s -- --version canary-feat-connect-cli-v1
20
+ curl -fsSL https://raw.githubusercontent.com/vana-com/vana-connect/main/install/install.sh | sh
21
21
  ```
22
22
 
23
23
  Branch prerelease:
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Credential management for Vana CLI authentication.
3
+ *
4
+ * Stores and retrieves auth credentials from ~/.vana/auth.json.
5
+ * Supports the device code flow for browser-based login and
6
+ * env var overrides for CI/automation.
7
+ */
8
+ export interface VanaCredentials {
9
+ account: {
10
+ address: string;
11
+ session_token: string;
12
+ expires_at: string;
13
+ };
14
+ personal_server: {
15
+ url: string;
16
+ session_token: string;
17
+ expires_at: string;
18
+ } | null;
19
+ }
20
+ /**
21
+ * Load credentials from disk or env vars.
22
+ *
23
+ * Priority:
24
+ * 1. Env vars (VANA_SESSION_TOKEN, VANA_PS_TOKEN, VANA_PS_URL)
25
+ * 2. File (~/.vana/auth.json)
26
+ *
27
+ * Returns null if no credentials are available or if they are expired.
28
+ */
29
+ export declare function loadCredentials(): VanaCredentials | null;
30
+ /**
31
+ * Save credentials to ~/.vana/auth.json with 0600 permissions.
32
+ */
33
+ export declare function saveCredentials(creds: VanaCredentials): Promise<void>;
34
+ /**
35
+ * Delete ~/.vana/auth.json.
36
+ */
37
+ export declare function clearCredentials(): Promise<void>;
38
+ /**
39
+ * Check if the account session token has expired.
40
+ */
41
+ export declare function isExpired(creds: VanaCredentials): boolean;
42
+ /**
43
+ * Format an address for display: 0x2Ab3...fa1
44
+ */
45
+ export declare function formatAddress(address: string): string;
46
+ /**
47
+ * Return human-readable time until expiry: "29 days", "3 hours", etc.
48
+ */
49
+ export declare function formatExpiresIn(expiresAt: string): string;
50
+ export interface DeviceCodeResponse {
51
+ device_code: string;
52
+ user_code: string;
53
+ verification_uri: string;
54
+ expires_in: number;
55
+ interval: number;
56
+ }
57
+ export interface DeviceCodePollAuthorized {
58
+ status: "authorized";
59
+ session_token: string;
60
+ personal_server_url?: string;
61
+ personal_server_session_token?: string;
62
+ ps_access_token?: string;
63
+ address: string;
64
+ expires_in?: number;
65
+ expires_at?: string;
66
+ }
67
+ export interface DeviceCodePollPending {
68
+ status: "pending";
69
+ }
70
+ export interface DeviceCodePollSlowDown {
71
+ status: "slow_down";
72
+ }
73
+ export interface DeviceCodePollExpired {
74
+ status: "expired";
75
+ }
76
+ export type DeviceCodePollResponse = DeviceCodePollAuthorized | DeviceCodePollPending | DeviceCodePollSlowDown | DeviceCodePollExpired;
77
+ /**
78
+ * Request a device code from the auth server.
79
+ */
80
+ export declare function requestDeviceCode(): Promise<DeviceCodeResponse>;
81
+ /**
82
+ * Poll for device code authorization.
83
+ */
84
+ export declare function pollDeviceCode(deviceCode: string): Promise<DeviceCodePollResponse>;
85
+ /**
86
+ * Open a URL in the user's default browser.
87
+ * Best-effort — failures are silently ignored.
88
+ */
89
+ export declare function openBrowser(url: string): void;
90
+ /**
91
+ * Run the full device code login flow.
92
+ *
93
+ * Returns credentials on success, or null if the code expired.
94
+ * Calls the provided callbacks for UI updates.
95
+ */
96
+ export declare function runDeviceCodeFlow(callbacks: {
97
+ onCode: (code: string, verificationUri: string) => void;
98
+ onWaiting: () => void;
99
+ onAuthorized: (creds: VanaCredentials) => void | Promise<void>;
100
+ onExpired: () => void;
101
+ onError: (error: Error) => void;
102
+ }): Promise<VanaCredentials | null>;
103
+ export type AuthTarget = "cloud" | "self-hosted";
104
+ export declare function getAuthTarget(psUrl: string | null): AuthTarget;
105
+ export declare function resolvePersonalServerUrl(): string | undefined;
106
+ export declare function runSelfHostedLoginFlow(serverUrl: string, onLoginUrl: (url: string) => void): Promise<{
107
+ server: string;
108
+ address: string;
109
+ session_token: string;
110
+ expires_at: string;
111
+ }>;
112
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,339 @@
1
+ /**
2
+ * Credential management for Vana CLI authentication.
3
+ *
4
+ * Stores and retrieves auth credentials from ~/.vana/auth.json.
5
+ * Supports the device code flow for browser-based login and
6
+ * env var overrides for CI/automation.
7
+ */
8
+ import { spawnSync } from "node:child_process";
9
+ import fs from "node:fs";
10
+ import fsp from "node:fs/promises";
11
+ import path from "node:path";
12
+ import os from "node:os";
13
+ const AUTH_FILE = "auth.json";
14
+ function getAuthFilePath() {
15
+ return path.join(os.homedir(), ".vana", AUTH_FILE);
16
+ }
17
+ function normalizeCredentials(creds) {
18
+ if (!creds.account || typeof creds.account.session_token !== "string") {
19
+ return null;
20
+ }
21
+ const personalServer = creds.personal_server;
22
+ return {
23
+ account: creds.account,
24
+ personal_server: personalServer
25
+ ? {
26
+ url: personalServer.url,
27
+ session_token: personalServer.session_token ?? personalServer.access_token ?? "",
28
+ expires_at: personalServer.expires_at,
29
+ }
30
+ : null,
31
+ };
32
+ }
33
+ /**
34
+ * Load credentials from disk or env vars.
35
+ *
36
+ * Priority:
37
+ * 1. Env vars (VANA_SESSION_TOKEN, VANA_PS_TOKEN, VANA_PS_URL)
38
+ * 2. File (~/.vana/auth.json)
39
+ *
40
+ * Returns null if no credentials are available or if they are expired.
41
+ */
42
+ export function loadCredentials() {
43
+ // Check env var overrides first
44
+ const envSessionToken = process.env.VANA_SESSION_TOKEN;
45
+ const envPsToken = process.env.VANA_PS_TOKEN;
46
+ const envPsUrl = process.env.VANA_PS_URL ?? process.env.VANA_PERSONAL_SERVER_URL;
47
+ if (envSessionToken) {
48
+ // Build credentials from env vars — no expiry tracking for env-based tokens
49
+ const farFuture = new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toISOString();
50
+ return {
51
+ account: {
52
+ address: "env",
53
+ session_token: envSessionToken,
54
+ expires_at: farFuture,
55
+ },
56
+ personal_server: envPsToken && envPsUrl
57
+ ? {
58
+ url: envPsUrl,
59
+ session_token: envPsToken,
60
+ expires_at: farFuture,
61
+ }
62
+ : null,
63
+ };
64
+ }
65
+ // Read from file
66
+ const filePath = getAuthFilePath();
67
+ try {
68
+ const raw = fs.readFileSync(filePath, "utf8");
69
+ const creds = normalizeCredentials(JSON.parse(raw));
70
+ if (!creds) {
71
+ return null;
72
+ }
73
+ if (isExpired(creds)) {
74
+ return null;
75
+ }
76
+ return creds;
77
+ }
78
+ catch {
79
+ return null;
80
+ }
81
+ }
82
+ /**
83
+ * Save credentials to ~/.vana/auth.json with 0600 permissions.
84
+ */
85
+ export async function saveCredentials(creds) {
86
+ const filePath = getAuthFilePath();
87
+ const dir = path.dirname(filePath);
88
+ await fsp.mkdir(dir, { recursive: true });
89
+ await fsp.writeFile(filePath, JSON.stringify(creds, null, 2) + "\n", {
90
+ mode: 0o600,
91
+ });
92
+ }
93
+ /**
94
+ * Delete ~/.vana/auth.json.
95
+ */
96
+ export async function clearCredentials() {
97
+ const filePath = getAuthFilePath();
98
+ try {
99
+ await fsp.unlink(filePath);
100
+ }
101
+ catch (err) {
102
+ // Ignore if file doesn't exist
103
+ if (err.code !== "ENOENT") {
104
+ throw err;
105
+ }
106
+ }
107
+ }
108
+ /**
109
+ * Check if the account session token has expired.
110
+ */
111
+ export function isExpired(creds) {
112
+ try {
113
+ const expiresAt = new Date(creds.account.expires_at);
114
+ return expiresAt.getTime() <= Date.now();
115
+ }
116
+ catch {
117
+ return true;
118
+ }
119
+ }
120
+ /**
121
+ * Format an address for display: 0x2Ab3...fa1
122
+ */
123
+ export function formatAddress(address) {
124
+ if (address.length <= 10)
125
+ return address;
126
+ return `${address.slice(0, 6)}...${address.slice(-3)}`;
127
+ }
128
+ function isWalletAddress(address) {
129
+ return /^0x[a-fA-F0-9]{40}$/.test(address);
130
+ }
131
+ /**
132
+ * Return human-readable time until expiry: "29 days", "3 hours", etc.
133
+ */
134
+ export function formatExpiresIn(expiresAt) {
135
+ const ms = new Date(expiresAt).getTime() - Date.now();
136
+ if (ms <= 0)
137
+ return "expired";
138
+ const days = Math.floor(ms / (24 * 60 * 60 * 1000));
139
+ if (days > 0)
140
+ return `${days} day${days === 1 ? "" : "s"}`;
141
+ const hours = Math.floor(ms / (60 * 60 * 1000));
142
+ if (hours > 0)
143
+ return `${hours} hour${hours === 1 ? "" : "s"}`;
144
+ const minutes = Math.floor(ms / (60 * 1000));
145
+ return `${minutes} minute${minutes === 1 ? "" : "s"}`;
146
+ }
147
+ function resolveCredentialExpiry(params) {
148
+ if (params.expiresAt) {
149
+ const parsed = new Date(params.expiresAt);
150
+ if (!Number.isNaN(parsed.getTime())) {
151
+ return parsed.toISOString();
152
+ }
153
+ }
154
+ const expiresIn = params.expiresIn ?? 30 * 24 * 60 * 60;
155
+ return new Date(Date.now() + expiresIn * 1000).toISOString();
156
+ }
157
+ function getAccountUrl() {
158
+ return (process.env.VANA_ACCOUNT_URL?.replace(/\/+$/, "") ??
159
+ "https://account.vana.org");
160
+ }
161
+ /**
162
+ * Request a device code from the auth server.
163
+ */
164
+ export async function requestDeviceCode() {
165
+ const url = `${getAccountUrl()}/api/auth/device`;
166
+ const response = await fetch(url, {
167
+ method: "POST",
168
+ headers: { "Content-Type": "application/json" },
169
+ });
170
+ if (!response.ok) {
171
+ const text = await response.text().catch(() => "");
172
+ throw new Error(`Failed to start device code flow: HTTP ${response.status}${text ? ` — ${text}` : ""}`);
173
+ }
174
+ return (await response.json());
175
+ }
176
+ /**
177
+ * Poll for device code authorization.
178
+ */
179
+ export async function pollDeviceCode(deviceCode) {
180
+ const url = `${getAccountUrl()}/api/auth/device/poll?device_code=${encodeURIComponent(deviceCode)}`;
181
+ const response = await fetch(url, {
182
+ method: "GET",
183
+ signal: AbortSignal.timeout(10_000),
184
+ });
185
+ if (!response.ok) {
186
+ const text = await response.text().catch(() => "");
187
+ throw new Error(`Poll failed: HTTP ${response.status}${text ? ` — ${text}` : ""}`);
188
+ }
189
+ return (await response.json());
190
+ }
191
+ /**
192
+ * Open a URL in the user's default browser.
193
+ * Best-effort — failures are silently ignored.
194
+ */
195
+ export function openBrowser(url) {
196
+ // Use spawnSync with args array to prevent shell injection.
197
+ // A malicious server could return a URL with shell metacharacters.
198
+ const platform = process.platform;
199
+ try {
200
+ const opener = platform === "darwin"
201
+ ? "open"
202
+ : platform === "win32"
203
+ ? "start"
204
+ : "xdg-open";
205
+ spawnSync(opener, [url], { stdio: "ignore" });
206
+ }
207
+ catch {
208
+ // Best-effort — user can open manually
209
+ }
210
+ }
211
+ /**
212
+ * Run the full device code login flow.
213
+ *
214
+ * Returns credentials on success, or null if the code expired.
215
+ * Calls the provided callbacks for UI updates.
216
+ */
217
+ export async function runDeviceCodeFlow(callbacks) {
218
+ try {
219
+ const deviceCode = await requestDeviceCode();
220
+ callbacks.onCode(deviceCode.user_code, deviceCode.verification_uri);
221
+ // Try to open browser
222
+ openBrowser(deviceCode.verification_uri);
223
+ callbacks.onWaiting();
224
+ const interval = (deviceCode.interval ?? 5) * 1000;
225
+ const deadline = Date.now() + deviceCode.expires_in * 1000;
226
+ while (Date.now() < deadline) {
227
+ await new Promise((resolve) => setTimeout(resolve, interval));
228
+ try {
229
+ const result = await pollDeviceCode(deviceCode.device_code);
230
+ if (result.status === "authorized") {
231
+ const expiresAt = resolveCredentialExpiry({
232
+ expiresAt: result.expires_at,
233
+ expiresIn: result.expires_in,
234
+ });
235
+ const creds = {
236
+ account: {
237
+ address: result.address,
238
+ session_token: result.session_token,
239
+ expires_at: expiresAt,
240
+ },
241
+ personal_server: result.personal_server_url &&
242
+ (result.personal_server_session_token ?? result.ps_access_token)
243
+ ? {
244
+ url: result.personal_server_url,
245
+ session_token: result.personal_server_session_token ??
246
+ result.ps_access_token ??
247
+ "",
248
+ expires_at: expiresAt,
249
+ }
250
+ : null,
251
+ };
252
+ await callbacks.onAuthorized(creds);
253
+ return creds;
254
+ }
255
+ if (result.status === "expired") {
256
+ callbacks.onExpired();
257
+ return null;
258
+ }
259
+ if (result.status === "slow_down") {
260
+ continue;
261
+ }
262
+ // status === "pending" — continue polling
263
+ }
264
+ catch {
265
+ // Transient poll error — retry on next interval
266
+ }
267
+ }
268
+ // Timed out
269
+ callbacks.onExpired();
270
+ return null;
271
+ }
272
+ catch (error) {
273
+ callbacks.onError(error instanceof Error ? error : new Error(String(error)));
274
+ return null;
275
+ }
276
+ }
277
+ export function getAuthTarget(psUrl) {
278
+ if (!psUrl)
279
+ return "cloud";
280
+ if (psUrl.includes(".myvana.app"))
281
+ return "cloud";
282
+ return "self-hosted";
283
+ }
284
+ export function resolvePersonalServerUrl() {
285
+ return (process.env.VANA_PS_URL ||
286
+ process.env.VANA_PERSONAL_SERVER_URL ||
287
+ loadCredentials()?.personal_server?.url);
288
+ }
289
+ const SELF_HOSTED_POLL_INTERVAL_MS = 5_000;
290
+ function resolveLoginV2Url(serverUrl, endpoint) {
291
+ return new URL(endpoint, `${serverUrl.replace(/\/$/, "")}/`).toString();
292
+ }
293
+ export async function runSelfHostedLoginFlow(serverUrl, onLoginUrl) {
294
+ const base = serverUrl.replace(/\/$/, "");
295
+ // 1. Initiate login flow
296
+ const initRes = await fetch(`${base}/auth/device`, { method: "POST" });
297
+ if (!initRes.ok) {
298
+ throw new Error(`Server at ${base} does not support CLI login (${initRes.status})`);
299
+ }
300
+ const init = (await initRes.json());
301
+ // 2. Open browser
302
+ onLoginUrl(resolveLoginV2Url(base, init.login));
303
+ // 3. Poll for completion (5 min timeout)
304
+ const deadline = Date.now() + 5 * 60 * 1000;
305
+ const pollUrl = resolveLoginV2Url(base, init.poll.endpoint);
306
+ while (Date.now() < deadline) {
307
+ await new Promise((r) => setTimeout(r, SELF_HOSTED_POLL_INTERVAL_MS));
308
+ const pollRes = await fetch(`${pollUrl}?token=${encodeURIComponent(init.poll.token)}`);
309
+ if (pollRes.status === 200) {
310
+ const result = (await pollRes.json());
311
+ if (!isWalletAddress(result.address)) {
312
+ throw new Error("Personal Server did not report a valid owner wallet address. Ensure VANA_MASTER_KEY_SIGNATURE is configured.");
313
+ }
314
+ return {
315
+ server: result.server,
316
+ address: result.address,
317
+ session_token: result.access_token,
318
+ expires_at: result.expires_at,
319
+ };
320
+ }
321
+ if (pollRes.status === 404 || pollRes.status === 202) {
322
+ const result = (await pollRes
323
+ .json()
324
+ .catch(() => null));
325
+ if (result?.status === "expired") {
326
+ throw new Error("Authorization expired. Please try again.");
327
+ }
328
+ continue;
329
+ }
330
+ if (pollRes.status === 429) {
331
+ continue;
332
+ }
333
+ if (!pollRes.ok) {
334
+ throw new Error(`Poll failed: ${pollRes.status}`);
335
+ }
336
+ }
337
+ throw new Error("Authorization timed out. Please try again.");
338
+ }
339
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,7 @@ export declare function getSourceStatusPresentation(source: SourceStatus): {
69
69
  export declare function toneForRuntime(runtime: CliStatus["runtime"]): RenderTone;
70
70
  export declare function loadRegistrySources(): Promise<AvailableSource[]>;
71
71
  export declare function compareSourceStatusOrder(left: SourceStatus, right: SourceStatus): number;
72
+ export declare function isSourceAttention(source: SourceStatus): boolean;
72
73
  export declare function rankSourceStatus(source: SourceStatus): number;
73
74
  export declare function readResultSummary(resultPath: string): Promise<{
74
75
  lines: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}