cohvu 2.1.1 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.d.ts +42 -26
- package/dist/api.js +43 -59
- package/dist/api.js.map +1 -1
- package/dist/auth.d.ts +2 -13
- package/dist/auth.js +41 -105
- package/dist/auth.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.js +59 -103
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +2 -2
- package/dist/instructions.js +22 -26
- package/dist/instructions.js.map +1 -1
- package/dist/platforms.js +22 -25
- package/dist/platforms.js.map +1 -1
- package/dist/proxy.js +26 -14
- package/dist/proxy.js.map +1 -1
- package/dist/setup.d.ts +0 -1
- package/dist/setup.js +43 -75
- package/dist/setup.js.map +1 -1
- package/dist/tui/App.d.ts +1 -0
- package/dist/tui/App.js +1090 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/components/Banner.d.ts +4 -0
- package/dist/tui/components/Banner.js +78 -0
- package/dist/tui/components/Banner.js.map +1 -0
- package/dist/tui/components/Divider.d.ts +1 -0
- package/dist/tui/components/Divider.js +7 -0
- package/dist/tui/components/Divider.js.map +1 -0
- package/dist/tui/components/Footer.d.ts +4 -0
- package/dist/tui/components/Footer.js +143 -0
- package/dist/tui/components/Footer.js.map +1 -0
- package/dist/tui/components/Header.d.ts +4 -0
- package/dist/tui/components/Header.js +53 -0
- package/dist/tui/components/Header.js.map +1 -0
- package/dist/tui/components/Modal.d.ts +5 -0
- package/dist/tui/components/Modal.js +99 -0
- package/dist/tui/components/Modal.js.map +1 -0
- package/dist/tui/components/TabBar.d.ts +4 -0
- package/dist/tui/components/TabBar.js +16 -0
- package/dist/tui/components/TabBar.js.map +1 -0
- package/dist/tui/components/Toast.d.ts +4 -0
- package/dist/tui/components/Toast.js +9 -0
- package/dist/tui/components/Toast.js.map +1 -0
- package/dist/tui/index.js +20 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/platform-detect.d.ts +1 -1
- package/dist/tui/platform-detect.js +19 -22
- package/dist/tui/platform-detect.js.map +1 -1
- package/dist/tui/state.d.ts +33 -6
- package/dist/tui/state.js +65 -17
- package/dist/tui/state.js.map +1 -1
- package/dist/tui/tabs/BillingTab.d.ts +4 -0
- package/dist/tui/tabs/BillingTab.js +68 -0
- package/dist/tui/tabs/BillingTab.js.map +1 -0
- package/dist/tui/tabs/KnowledgeTab.d.ts +5 -0
- package/dist/tui/tabs/KnowledgeTab.js +83 -0
- package/dist/tui/tabs/KnowledgeTab.js.map +1 -0
- package/dist/tui/tabs/ProjectTab.d.ts +4 -0
- package/dist/tui/tabs/ProjectTab.js +31 -0
- package/dist/tui/tabs/ProjectTab.js.map +1 -0
- package/dist/tui/tabs/TeamTab.d.ts +4 -0
- package/dist/tui/tabs/TeamTab.js +42 -0
- package/dist/tui/tabs/TeamTab.js.map +1 -0
- package/dist/tui/tabs/YouTab.d.ts +4 -0
- package/dist/tui/tabs/YouTab.js +9 -0
- package/dist/tui/tabs/YouTab.js.map +1 -0
- package/dist/tui/utils.d.ts +6 -0
- package/dist/tui/utils.js +58 -0
- package/dist/tui/utils.js.map +1 -0
- package/package.json +9 -2
- package/dist/tui/ansi.d.ts +0 -41
- package/dist/tui/ansi.js +0 -117
- package/dist/tui/ansi.js.map +0 -1
- package/dist/tui/dashboard.js +0 -1250
- package/dist/tui/dashboard.js.map +0 -1
- package/dist/tui/keys.d.ts +0 -31
- package/dist/tui/keys.js +0 -56
- package/dist/tui/keys.js.map +0 -1
- package/dist/tui/render.d.ts +0 -5
- package/dist/tui/render.js +0 -158
- package/dist/tui/render.js.map +0 -1
- package/dist/tui/views/billing.d.ts +0 -3
- package/dist/tui/views/billing.js +0 -127
- package/dist/tui/views/billing.js.map +0 -1
- package/dist/tui/views/knowledge.d.ts +0 -3
- package/dist/tui/views/knowledge.js +0 -203
- package/dist/tui/views/knowledge.js.map +0 -1
- package/dist/tui/views/modals.d.ts +0 -3
- package/dist/tui/views/modals.js +0 -198
- package/dist/tui/views/modals.js.map +0 -1
- package/dist/tui/views/project.d.ts +0 -3
- package/dist/tui/views/project.js +0 -76
- package/dist/tui/views/project.js.map +0 -1
- package/dist/tui/views/team.d.ts +0 -3
- package/dist/tui/views/team.js +0 -106
- package/dist/tui/views/team.js.map +0 -1
- package/dist/tui/views/you.d.ts +0 -3
- package/dist/tui/views/you.js +0 -40
- package/dist/tui/views/you.js.map +0 -1
- /package/dist/tui/{dashboard.d.ts → index.d.ts} +0 -0
package/dist/api.d.ts
CHANGED
|
@@ -4,19 +4,38 @@ export interface MeResponse {
|
|
|
4
4
|
email: string;
|
|
5
5
|
name: string;
|
|
6
6
|
active_project_id: string | null;
|
|
7
|
+
has_used_trial: boolean;
|
|
8
|
+
trial_ends_at: string | null;
|
|
7
9
|
created_at: string;
|
|
8
10
|
};
|
|
9
|
-
|
|
11
|
+
individual_subscription: {
|
|
12
|
+
status: string;
|
|
13
|
+
current_period_end: string;
|
|
14
|
+
cancel_at_period_end: boolean;
|
|
15
|
+
} | null;
|
|
16
|
+
personal_projects: Array<{
|
|
10
17
|
project_id: string;
|
|
11
18
|
slug: string;
|
|
12
19
|
name: string;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
created_at: string;
|
|
21
|
+
}>;
|
|
22
|
+
teams: Array<{
|
|
23
|
+
team_id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
slug: string;
|
|
19
26
|
role: string;
|
|
27
|
+
subscription: {
|
|
28
|
+
status: string;
|
|
29
|
+
seat_count: number;
|
|
30
|
+
current_period_end: string;
|
|
31
|
+
cancel_at_period_end: boolean;
|
|
32
|
+
} | null;
|
|
33
|
+
projects: Array<{
|
|
34
|
+
project_id: string;
|
|
35
|
+
slug: string;
|
|
36
|
+
name: string;
|
|
37
|
+
created_at: string;
|
|
38
|
+
}>;
|
|
20
39
|
}>;
|
|
21
40
|
}
|
|
22
41
|
export interface MemoryItem {
|
|
@@ -37,7 +56,7 @@ export interface MemberItem {
|
|
|
37
56
|
export interface BillingInfo {
|
|
38
57
|
subscription: {
|
|
39
58
|
status: string;
|
|
40
|
-
seat_count
|
|
59
|
+
seat_count?: number;
|
|
41
60
|
current_period_end: string;
|
|
42
61
|
cancel_at_period_end: boolean;
|
|
43
62
|
} | null;
|
|
@@ -96,33 +115,30 @@ export declare class ApiClient {
|
|
|
96
115
|
clearMemories(projectId: string): Promise<{
|
|
97
116
|
memories_removed: number;
|
|
98
117
|
}>;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
118
|
+
listTeamMembers(teamId: string): Promise<MemberItem[]>;
|
|
119
|
+
removeTeamMember(teamId: string, userId: string): Promise<void>;
|
|
120
|
+
changeTeamRole(teamId: string, userId: string, role: string): Promise<void>;
|
|
121
|
+
listTeamInviteLinks(teamId: string): Promise<InviteLink[]>;
|
|
122
|
+
regenerateTeamInviteLink(teamId: string, role: string): Promise<InviteLink>;
|
|
123
|
+
getIndividualBilling(): Promise<BillingInfo>;
|
|
124
|
+
getTeamBilling(teamId: string): Promise<BillingInfo>;
|
|
125
|
+
createIndividualCheckout(): Promise<{
|
|
126
|
+
checkout_url: string;
|
|
103
127
|
}>;
|
|
104
|
-
|
|
105
|
-
|
|
128
|
+
getIndividualPortalUrl(): Promise<{
|
|
129
|
+
url: string;
|
|
130
|
+
}>;
|
|
131
|
+
createTeamCheckout(teamId: string): Promise<{
|
|
106
132
|
checkout_url: string;
|
|
107
133
|
}>;
|
|
108
|
-
|
|
134
|
+
getTeamPortalUrl(teamId: string): Promise<{
|
|
109
135
|
url: string;
|
|
110
136
|
}>;
|
|
111
|
-
createProject(name: string, slug: string): Promise<ProjectInfo>;
|
|
137
|
+
createProject(name: string, slug: string, ownerId?: string): Promise<ProjectInfo>;
|
|
112
138
|
renameProject(projectId: string, name: string, slug: string): Promise<void>;
|
|
113
139
|
deleteProject(projectId: string): Promise<void>;
|
|
114
|
-
changeRole(projectId: string, userId: string, role: string): Promise<void>;
|
|
115
|
-
listInviteLinks(projectId: string): Promise<InviteLink[]>;
|
|
116
|
-
regenerateInviteLink(projectId: string, role: string): Promise<InviteLink>;
|
|
117
|
-
listApprovals(projectId: string): Promise<PendingApproval[]>;
|
|
118
|
-
initiateApproval(projectId: string, action: string, targetUserId?: string): Promise<PendingApproval>;
|
|
119
|
-
approveAction(projectId: string, approvalId: string): Promise<void>;
|
|
120
|
-
cancelApproval(projectId: string, approvalId: string): Promise<void>;
|
|
121
140
|
listNotifications(): Promise<Notification[]>;
|
|
122
141
|
markNotificationsSeen(): Promise<void>;
|
|
123
|
-
createApiKey(): Promise<{
|
|
124
|
-
key: string;
|
|
125
|
-
}>;
|
|
126
142
|
connectFeed(projectId: string, callbacks: {
|
|
127
143
|
onEvent: (eventType: string, data: Record<string, unknown>) => void;
|
|
128
144
|
onConnected?: () => void;
|
package/dist/api.js
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Typed API client for the Cohvu REST API.
|
|
3
2
|
// Centralizes all fetch calls with auth headers and error handling.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const DEFAULT_BASE_URL = "https://api.cohvu.com";
|
|
8
|
-
class ApiClient {
|
|
3
|
+
import { getApiKey } from "./auth.js";
|
|
4
|
+
import { DEFAULT_BASE_URL } from "./constants.js";
|
|
5
|
+
export class ApiClient {
|
|
9
6
|
baseUrl;
|
|
10
7
|
constructor(baseUrl) {
|
|
11
8
|
this.baseUrl = baseUrl ?? process.env.COHVU_API_URL ?? DEFAULT_BASE_URL;
|
|
12
9
|
}
|
|
13
|
-
|
|
14
|
-
const
|
|
10
|
+
headers() {
|
|
11
|
+
const apiKey = getApiKey();
|
|
12
|
+
if (!apiKey)
|
|
13
|
+
throw new Error("Not logged in. Run `npx cohvu` first.");
|
|
15
14
|
return {
|
|
16
|
-
Authorization: `Bearer ${
|
|
15
|
+
Authorization: `Bearer ${apiKey}`,
|
|
17
16
|
"Content-Type": "application/json",
|
|
18
17
|
};
|
|
19
18
|
}
|
|
20
19
|
async request(path, init) {
|
|
21
|
-
const h =
|
|
20
|
+
const h = this.headers();
|
|
22
21
|
const opts = {
|
|
23
22
|
...init,
|
|
24
23
|
headers: { ...h, ...init?.headers },
|
|
@@ -85,59 +84,50 @@ class ApiClient {
|
|
|
85
84
|
async clearMemories(projectId) {
|
|
86
85
|
return this.del(`/v1/projects/${projectId}/knowledge`);
|
|
87
86
|
}
|
|
88
|
-
//
|
|
89
|
-
async
|
|
90
|
-
return this.get(`/v1/
|
|
87
|
+
// Teams
|
|
88
|
+
async listTeamMembers(teamId) {
|
|
89
|
+
return this.get(`/v1/teams/${teamId}/members`);
|
|
91
90
|
}
|
|
92
|
-
async
|
|
93
|
-
await this.del(`/v1/
|
|
91
|
+
async removeTeamMember(teamId, userId) {
|
|
92
|
+
await this.del(`/v1/teams/${teamId}/members/${userId}`);
|
|
94
93
|
}
|
|
95
|
-
async
|
|
96
|
-
|
|
94
|
+
async changeTeamRole(teamId, userId, role) {
|
|
95
|
+
await this.patch(`/v1/teams/${teamId}/members/${userId}`, { role });
|
|
97
96
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return this.get(`/v1/projects/${projectId}/billing`);
|
|
97
|
+
async listTeamInviteLinks(teamId) {
|
|
98
|
+
return this.get(`/v1/teams/${teamId}/invite-links`);
|
|
101
99
|
}
|
|
102
|
-
async
|
|
103
|
-
return this.post(`/v1/
|
|
100
|
+
async regenerateTeamInviteLink(teamId, role) {
|
|
101
|
+
return this.post(`/v1/teams/${teamId}/invite-links/regenerate`, { role });
|
|
104
102
|
}
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
// Billing — individual or team
|
|
104
|
+
async getIndividualBilling() {
|
|
105
|
+
return this.get("/v1/billing");
|
|
107
106
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return this.post("/v1/projects", { name, slug });
|
|
111
|
-
}
|
|
112
|
-
async renameProject(projectId, name, slug) {
|
|
113
|
-
await this.patch(`/v1/projects/${projectId}`, { name, slug });
|
|
114
|
-
}
|
|
115
|
-
async deleteProject(projectId) {
|
|
116
|
-
await this.del(`/v1/projects/${projectId}`);
|
|
107
|
+
async getTeamBilling(teamId) {
|
|
108
|
+
return this.get(`/v1/teams/${teamId}/billing`);
|
|
117
109
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
await this.patch(`/v1/projects/${projectId}/members/${userId}`, { role });
|
|
110
|
+
async createIndividualCheckout() {
|
|
111
|
+
return this.post("/v1/billing/checkout");
|
|
121
112
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
return this.get(`/v1/projects/${projectId}/invite-links`);
|
|
113
|
+
async getIndividualPortalUrl() {
|
|
114
|
+
return this.post("/v1/billing/portal", { return_url: this.baseUrl });
|
|
125
115
|
}
|
|
126
|
-
async
|
|
127
|
-
return this.post(`/v1/
|
|
116
|
+
async createTeamCheckout(teamId) {
|
|
117
|
+
return this.post(`/v1/teams/${teamId}/billing/checkout`);
|
|
128
118
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return this.get(`/v1/projects/${projectId}/approvals`);
|
|
119
|
+
async getTeamPortalUrl(teamId) {
|
|
120
|
+
return this.post(`/v1/teams/${teamId}/billing/portal`, { return_url: this.baseUrl });
|
|
132
121
|
}
|
|
133
|
-
|
|
134
|
-
|
|
122
|
+
// Project
|
|
123
|
+
async createProject(name, slug, ownerId) {
|
|
124
|
+
return this.post("/v1/projects", { name, slug, owner_id: ownerId });
|
|
135
125
|
}
|
|
136
|
-
async
|
|
137
|
-
await this.
|
|
126
|
+
async renameProject(projectId, name, slug) {
|
|
127
|
+
await this.patch(`/v1/projects/${projectId}`, { name, slug });
|
|
138
128
|
}
|
|
139
|
-
async
|
|
140
|
-
await this.del(`/v1/projects/${projectId}
|
|
129
|
+
async deleteProject(projectId) {
|
|
130
|
+
await this.del(`/v1/projects/${projectId}`);
|
|
141
131
|
}
|
|
142
132
|
// Notifications
|
|
143
133
|
async listNotifications() {
|
|
@@ -146,10 +136,6 @@ class ApiClient {
|
|
|
146
136
|
async markNotificationsSeen() {
|
|
147
137
|
await this.post(`/v1/notifications/seen`);
|
|
148
138
|
}
|
|
149
|
-
// API keys
|
|
150
|
-
async createApiKey() {
|
|
151
|
-
return this.post(`/v1/api-keys`, { name: "CLI proxy" });
|
|
152
|
-
}
|
|
153
139
|
// SSE feed — returns a disconnect function
|
|
154
140
|
connectFeed(projectId, callbacks) {
|
|
155
141
|
let aborted = false;
|
|
@@ -161,9 +147,9 @@ class ApiClient {
|
|
|
161
147
|
return;
|
|
162
148
|
currentController = new AbortController();
|
|
163
149
|
try {
|
|
164
|
-
const
|
|
150
|
+
const h = this.headers();
|
|
165
151
|
const res = await fetch(`${this.baseUrl}/v1/projects/${projectId}/memories/feed`, {
|
|
166
|
-
headers: { Authorization:
|
|
152
|
+
headers: { Authorization: h.Authorization },
|
|
167
153
|
signal: currentController.signal,
|
|
168
154
|
});
|
|
169
155
|
if (!res.ok || !res.body) {
|
|
@@ -236,8 +222,7 @@ class ApiClient {
|
|
|
236
222
|
};
|
|
237
223
|
}
|
|
238
224
|
}
|
|
239
|
-
|
|
240
|
-
class ApiError extends Error {
|
|
225
|
+
export class ApiError extends Error {
|
|
241
226
|
status;
|
|
242
227
|
body;
|
|
243
228
|
constructor(status, body) {
|
|
@@ -246,5 +231,4 @@ class ApiError extends Error {
|
|
|
246
231
|
this.body = body;
|
|
247
232
|
}
|
|
248
233
|
}
|
|
249
|
-
exports.ApiError = ApiError;
|
|
250
234
|
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.d.ts
CHANGED
|
@@ -1,15 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
access_token: string;
|
|
3
|
-
refresh_token: string;
|
|
4
|
-
expires_at: string;
|
|
5
|
-
base_url: string;
|
|
6
|
-
}
|
|
7
|
-
/** Read the long-lived API key for proxy use. Returns null if not stored. */
|
|
1
|
+
/** Read the long-lived API key. Returns null if not stored. */
|
|
8
2
|
export declare function getApiKey(): string | null;
|
|
9
3
|
export declare function storeApiKey(key: string): void;
|
|
10
|
-
export declare function deviceAuthFlow(baseUrl: string): Promise<
|
|
11
|
-
export declare function getAuthToken(baseUrl: string): Promise<{
|
|
12
|
-
accessToken: string;
|
|
13
|
-
baseUrl: string;
|
|
14
|
-
}>;
|
|
15
|
-
export {};
|
|
4
|
+
export declare function deviceAuthFlow(baseUrl: string): Promise<string>;
|
package/dist/auth.js
CHANGED
|
@@ -1,89 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const path_1 = require("path");
|
|
12
|
-
const child_process_1 = require("child_process");
|
|
13
|
-
const CONFIG_DIR = (0, path_1.join)((0, os_1.homedir)(), ".cohvu");
|
|
14
|
-
const TOKENS_FILE = (0, path_1.join)(CONFIG_DIR, "tokens.json");
|
|
15
|
-
const API_KEY_FILE = (0, path_1.join)(CONFIG_DIR, "credentials");
|
|
1
|
+
// Device auth flow + API key storage for the Cohvu CLI.
|
|
2
|
+
// Stores API key in ~/.cohvu/credentials.
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, renameSync } from "fs";
|
|
4
|
+
import { homedir } from "os";
|
|
5
|
+
import { join } from "path";
|
|
6
|
+
import { exec, execFile } from "child_process";
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
import ora from "ora";
|
|
9
|
+
const CONFIG_DIR = join(homedir(), ".cohvu");
|
|
10
|
+
const API_KEY_FILE = join(CONFIG_DIR, "credentials");
|
|
16
11
|
const POLL_INTERVAL_MS = 5000;
|
|
17
12
|
function ensureConfigDir() {
|
|
18
|
-
if (!
|
|
19
|
-
|
|
13
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
14
|
+
mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
20
15
|
}
|
|
21
16
|
}
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
/** Read the long-lived API key. Returns null if not stored. */
|
|
18
|
+
export function getApiKey() {
|
|
19
|
+
if (!existsSync(API_KEY_FILE))
|
|
24
20
|
return null;
|
|
25
21
|
try {
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/** Read the long-lived API key for proxy use. Returns null if not stored. */
|
|
33
|
-
function getApiKey() {
|
|
34
|
-
if (!(0, fs_1.existsSync)(API_KEY_FILE))
|
|
35
|
-
return null;
|
|
36
|
-
try {
|
|
37
|
-
const key = (0, fs_1.readFileSync)(API_KEY_FILE, "utf-8").trim();
|
|
22
|
+
const key = readFileSync(API_KEY_FILE, "utf-8").trim();
|
|
38
23
|
return key.startsWith("chv_") ? key : null;
|
|
39
24
|
}
|
|
40
25
|
catch {
|
|
41
26
|
return null;
|
|
42
27
|
}
|
|
43
28
|
}
|
|
44
|
-
function storeApiKey(key) {
|
|
29
|
+
export function storeApiKey(key) {
|
|
45
30
|
ensureConfigDir();
|
|
46
31
|
const tmp = `${API_KEY_FILE}.${process.pid}.tmp`;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
function storeTokens(tokens) {
|
|
51
|
-
ensureConfigDir();
|
|
52
|
-
const tmp = `${TOKENS_FILE}.${process.pid}.tmp`;
|
|
53
|
-
(0, fs_1.writeFileSync)(tmp, JSON.stringify(tokens, null, 2), { mode: 0o600 });
|
|
54
|
-
(0, fs_1.renameSync)(tmp, TOKENS_FILE);
|
|
32
|
+
writeFileSync(tmp, key, { mode: 0o600 });
|
|
33
|
+
renameSync(tmp, API_KEY_FILE);
|
|
55
34
|
}
|
|
56
35
|
function openBrowser(url) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
function isExpired(expiresAt) {
|
|
65
|
-
return new Date(expiresAt) < new Date();
|
|
66
|
-
}
|
|
67
|
-
async function refreshAccessToken(baseUrl, refreshToken) {
|
|
68
|
-
const res = await fetch(`${baseUrl}/v1/auth/refresh`, {
|
|
69
|
-
method: "POST",
|
|
70
|
-
headers: { "Content-Type": "application/json" },
|
|
71
|
-
body: JSON.stringify({ refresh_token: refreshToken }),
|
|
72
|
-
signal: AbortSignal.timeout(10_000),
|
|
73
|
-
});
|
|
74
|
-
if (!res.ok)
|
|
75
|
-
return null;
|
|
76
|
-
const data = (await res.json());
|
|
77
|
-
const tokens = {
|
|
78
|
-
access_token: data.tokens.access_token,
|
|
79
|
-
refresh_token: data.tokens.refresh_token,
|
|
80
|
-
expires_at: data.tokens.expires_at,
|
|
81
|
-
base_url: baseUrl,
|
|
82
|
-
};
|
|
83
|
-
storeTokens(tokens);
|
|
84
|
-
return tokens;
|
|
36
|
+
if (process.platform === "win32") {
|
|
37
|
+
exec(`start "" "${url}"`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const cmd = process.platform === "darwin" ? "open" : "xdg-open";
|
|
41
|
+
execFile(cmd, [url], () => { });
|
|
42
|
+
}
|
|
85
43
|
}
|
|
86
|
-
async function deviceAuthFlow(baseUrl) {
|
|
44
|
+
export async function deviceAuthFlow(baseUrl) {
|
|
87
45
|
// Request device code
|
|
88
46
|
const deviceRes = await fetch(`${baseUrl}/v1/auth/device`, {
|
|
89
47
|
method: "POST",
|
|
@@ -93,12 +51,13 @@ async function deviceAuthFlow(baseUrl) {
|
|
|
93
51
|
throw new Error(`Device auth request failed: ${deviceRes.status}`);
|
|
94
52
|
}
|
|
95
53
|
const deviceData = (await deviceRes.json());
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
54
|
+
console.log('');
|
|
55
|
+
console.log(chalk.dim(' sign in at ') + deviceData.verification_url);
|
|
56
|
+
console.log(chalk.dim(' code: ') + deviceData.user_code);
|
|
57
|
+
console.log('');
|
|
100
58
|
openBrowser(deviceData.verification_url);
|
|
101
|
-
|
|
59
|
+
const spinner = ora({ text: 'waiting for sign in', indent: 2 }).start();
|
|
60
|
+
// Poll for API key
|
|
102
61
|
const deadline = Date.now() + deviceData.expires_in * 1000;
|
|
103
62
|
while (Date.now() < deadline) {
|
|
104
63
|
await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
|
|
@@ -111,41 +70,18 @@ async function deviceAuthFlow(baseUrl) {
|
|
|
111
70
|
const body = (await tokenRes.json());
|
|
112
71
|
if (body.error === "authorization_pending")
|
|
113
72
|
continue;
|
|
114
|
-
if (body.error === "expired_token")
|
|
73
|
+
if (body.error === "expired_token") {
|
|
74
|
+
spinner.fail('sign in expired');
|
|
115
75
|
throw new Error("Device code expired");
|
|
76
|
+
}
|
|
116
77
|
continue;
|
|
117
78
|
}
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
expires_at: tokenData.expires_at,
|
|
123
|
-
base_url: baseUrl,
|
|
124
|
-
};
|
|
125
|
-
storeTokens(tokens);
|
|
126
|
-
// Store long-lived API key for proxy use
|
|
127
|
-
if (tokenData.api_key) {
|
|
128
|
-
storeApiKey(tokenData.api_key);
|
|
129
|
-
}
|
|
130
|
-
process.stderr.write("Authenticated.\n\n");
|
|
131
|
-
return tokens;
|
|
79
|
+
const data = (await tokenRes.json());
|
|
80
|
+
storeApiKey(data.api_key);
|
|
81
|
+
spinner.succeed('signed in');
|
|
82
|
+
return data.api_key;
|
|
132
83
|
}
|
|
84
|
+
spinner.fail('sign in timed out');
|
|
133
85
|
throw new Error("Device auth timed out");
|
|
134
86
|
}
|
|
135
|
-
async function getAuthToken(baseUrl) {
|
|
136
|
-
// Try stored tokens
|
|
137
|
-
const stored = loadStoredTokens();
|
|
138
|
-
if (stored && stored.base_url === baseUrl) {
|
|
139
|
-
if (!isExpired(stored.expires_at)) {
|
|
140
|
-
return { accessToken: stored.access_token, baseUrl: stored.base_url };
|
|
141
|
-
}
|
|
142
|
-
// Try refresh
|
|
143
|
-
const refreshed = await refreshAccessToken(baseUrl, stored.refresh_token);
|
|
144
|
-
if (refreshed) {
|
|
145
|
-
return { accessToken: refreshed.access_token, baseUrl: refreshed.base_url };
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
// No valid tokens — don't auto-trigger device flow from proxy
|
|
149
|
-
throw new Error("Not logged in. Run `npx cohvu` first.");
|
|
150
|
-
}
|
|
151
87
|
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const DEFAULT_BASE_URL = "https://api.cohvu.com";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC"}
|