@ccpocket/bridge 1.11.1 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/claude-auth-login.d.ts +37 -0
- package/dist/claude-auth-login.js +249 -0
- package/dist/claude-auth-login.js.map +1 -0
- package/dist/mdns.d.ts +1 -0
- package/dist/mdns.js +8 -1
- package/dist/mdns.js.map +1 -1
- package/dist/parser.d.ts +20 -0
- package/dist/parser.js +10 -0
- package/dist/parser.js.map +1 -1
- package/dist/sdk-process.d.ts +12 -0
- package/dist/sdk-process.js +48 -17
- package/dist/sdk-process.js.map +1 -1
- package/dist/usage.d.ts +35 -0
- package/dist/usage.js +131 -1
- package/dist/usage.js.map +1 -1
- package/dist/websocket.d.ts +3 -0
- package/dist/websocket.js +77 -6
- package/dist/websocket.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
export type ClaudeAuthLoginState = "idle" | "starting" | "waiting_browser" | "waiting_code" | "authorizing" | "success" | "error" | "cancelled";
|
|
3
|
+
export interface ClaudeAuthSnapshot {
|
|
4
|
+
authenticated: boolean;
|
|
5
|
+
source?: "api_key" | "oauth" | "none";
|
|
6
|
+
loginInProgress: boolean;
|
|
7
|
+
state: ClaudeAuthLoginState;
|
|
8
|
+
message?: string;
|
|
9
|
+
errorCode?: string;
|
|
10
|
+
loginUrl?: string;
|
|
11
|
+
prompt?: string;
|
|
12
|
+
}
|
|
13
|
+
interface ClaudeAuthLoginEvents {
|
|
14
|
+
update: [ClaudeAuthSnapshot];
|
|
15
|
+
}
|
|
16
|
+
export declare class ClaudeAuthLoginManager extends EventEmitter<ClaudeAuthLoginEvents> {
|
|
17
|
+
private child;
|
|
18
|
+
private snapshot;
|
|
19
|
+
private recentOutput;
|
|
20
|
+
private cancelled;
|
|
21
|
+
private authPollTimer;
|
|
22
|
+
getStatus(): Promise<ClaudeAuthSnapshot>;
|
|
23
|
+
start(): Promise<ClaudeAuthSnapshot>;
|
|
24
|
+
submitCode(code: string): ClaudeAuthSnapshot;
|
|
25
|
+
cancel(): ClaudeAuthSnapshot;
|
|
26
|
+
private spawnLoginProcess;
|
|
27
|
+
private handleChunk;
|
|
28
|
+
private handleExit;
|
|
29
|
+
private startPolling;
|
|
30
|
+
private stopPolling;
|
|
31
|
+
private pollForCompletion;
|
|
32
|
+
private lastRelevantLine;
|
|
33
|
+
private snapshotFromStatus;
|
|
34
|
+
private finish;
|
|
35
|
+
private update;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { getClaudeAuthStatus } from "./usage.js";
|
|
4
|
+
const URL_REGEX = /https:\/\/[^\s"'<>]+/g;
|
|
5
|
+
const ANSI_REGEX = /\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g;
|
|
6
|
+
function stripAnsi(text) {
|
|
7
|
+
return text.replaceAll(ANSI_REGEX, "");
|
|
8
|
+
}
|
|
9
|
+
function isWaitingForCode(text) {
|
|
10
|
+
return /paste.*code|enter.*code|verification code|one[- ]time code|authorization code/i.test(text);
|
|
11
|
+
}
|
|
12
|
+
function isSuccessful(text) {
|
|
13
|
+
return /login successful|logged in|authentication complete|successfully authenticated/i.test(text);
|
|
14
|
+
}
|
|
15
|
+
export class ClaudeAuthLoginManager extends EventEmitter {
|
|
16
|
+
child = null;
|
|
17
|
+
snapshot = {
|
|
18
|
+
authenticated: false,
|
|
19
|
+
source: "none",
|
|
20
|
+
loginInProgress: false,
|
|
21
|
+
state: "idle",
|
|
22
|
+
message: "Claude Code is not authenticated.",
|
|
23
|
+
errorCode: "auth_login_required",
|
|
24
|
+
};
|
|
25
|
+
recentOutput = "";
|
|
26
|
+
cancelled = false;
|
|
27
|
+
authPollTimer = null;
|
|
28
|
+
async getStatus() {
|
|
29
|
+
if (this.child) {
|
|
30
|
+
return this.snapshot;
|
|
31
|
+
}
|
|
32
|
+
const status = await getClaudeAuthStatus();
|
|
33
|
+
this.snapshot = this.snapshotFromStatus(status);
|
|
34
|
+
return this.snapshot;
|
|
35
|
+
}
|
|
36
|
+
async start() {
|
|
37
|
+
if (this.child) {
|
|
38
|
+
return this.snapshot;
|
|
39
|
+
}
|
|
40
|
+
this.cancelled = false;
|
|
41
|
+
this.recentOutput = "";
|
|
42
|
+
this.stopPolling();
|
|
43
|
+
this.update({
|
|
44
|
+
authenticated: false,
|
|
45
|
+
source: "none",
|
|
46
|
+
loginInProgress: true,
|
|
47
|
+
state: "starting",
|
|
48
|
+
message: "Starting Claude Code login on the Bridge machine...",
|
|
49
|
+
});
|
|
50
|
+
this.child = this.spawnLoginProcess();
|
|
51
|
+
this.child.stdout.on("data", (chunk) => this.handleChunk(chunk.toString("utf-8")));
|
|
52
|
+
this.child.stderr.on("data", (chunk) => this.handleChunk(chunk.toString("utf-8")));
|
|
53
|
+
this.child.on("error", (err) => {
|
|
54
|
+
this.finish({
|
|
55
|
+
authenticated: false,
|
|
56
|
+
source: "none",
|
|
57
|
+
loginInProgress: false,
|
|
58
|
+
state: "error",
|
|
59
|
+
message: `Failed to start claude auth login: ${err.message}`,
|
|
60
|
+
errorCode: "auth_api_error",
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
this.child.on("exit", () => {
|
|
64
|
+
void this.handleExit();
|
|
65
|
+
});
|
|
66
|
+
this.startPolling();
|
|
67
|
+
return this.snapshot;
|
|
68
|
+
}
|
|
69
|
+
submitCode(code) {
|
|
70
|
+
if (!this.child) {
|
|
71
|
+
return this.snapshot;
|
|
72
|
+
}
|
|
73
|
+
this.child.stdin.write(`${code.trim()}\n`);
|
|
74
|
+
this.update({
|
|
75
|
+
...this.snapshot,
|
|
76
|
+
loginInProgress: true,
|
|
77
|
+
state: "authorizing",
|
|
78
|
+
prompt: "Submitted code. Waiting for Claude Code to finish authentication...",
|
|
79
|
+
message: "Completing authentication...",
|
|
80
|
+
});
|
|
81
|
+
return this.snapshot;
|
|
82
|
+
}
|
|
83
|
+
cancel() {
|
|
84
|
+
if (!this.child) {
|
|
85
|
+
return this.snapshot;
|
|
86
|
+
}
|
|
87
|
+
this.cancelled = true;
|
|
88
|
+
this.child.kill("SIGTERM");
|
|
89
|
+
return this.snapshot;
|
|
90
|
+
}
|
|
91
|
+
spawnLoginProcess() {
|
|
92
|
+
return spawn("claude", ["auth", "login"], {
|
|
93
|
+
env: process.env,
|
|
94
|
+
stdio: "pipe",
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
handleChunk(rawChunk) {
|
|
98
|
+
const chunk = stripAnsi(rawChunk);
|
|
99
|
+
this.recentOutput = `${this.recentOutput}${chunk}`.slice(-8000);
|
|
100
|
+
const urls = chunk.match(URL_REGEX) ?? [];
|
|
101
|
+
const loginUrl = urls.length > 0 ? urls[0] : this.snapshot.loginUrl;
|
|
102
|
+
const lines = chunk
|
|
103
|
+
.split(/\r?\n/)
|
|
104
|
+
.map((line) => line.trim())
|
|
105
|
+
.filter((line) => line.length > 0);
|
|
106
|
+
const latestLine = lines.length > 0 ? lines[lines.length - 1] : undefined;
|
|
107
|
+
if (isSuccessful(chunk)) {
|
|
108
|
+
this.update({
|
|
109
|
+
...this.snapshot,
|
|
110
|
+
loginInProgress: true,
|
|
111
|
+
state: "success",
|
|
112
|
+
loginUrl,
|
|
113
|
+
message: latestLine ?? "Claude Code authentication completed.",
|
|
114
|
+
prompt: undefined,
|
|
115
|
+
});
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (isWaitingForCode(chunk)) {
|
|
119
|
+
this.update({
|
|
120
|
+
...this.snapshot,
|
|
121
|
+
loginInProgress: true,
|
|
122
|
+
state: "waiting_code",
|
|
123
|
+
loginUrl,
|
|
124
|
+
prompt: latestLine ?? "Paste the verification code shown after browser authentication.",
|
|
125
|
+
message: "Waiting for verification code...",
|
|
126
|
+
});
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (loginUrl && this.snapshot.loginUrl != loginUrl) {
|
|
130
|
+
this.update({
|
|
131
|
+
...this.snapshot,
|
|
132
|
+
loginInProgress: true,
|
|
133
|
+
state: this.snapshot.state === "waiting_code" ? "waiting_code" : "waiting_browser",
|
|
134
|
+
loginUrl,
|
|
135
|
+
message: "Finish sign-in in your browser.",
|
|
136
|
+
prompt: "Open the login page and complete the browser flow. If Claude shows a verification code, return here and paste it.",
|
|
137
|
+
});
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (latestLine != null &&
|
|
141
|
+
!latestLine.includes("http") &&
|
|
142
|
+
(this.snapshot.state === "starting" || this.snapshot.state === "waiting_browser")) {
|
|
143
|
+
this.update({
|
|
144
|
+
...this.snapshot,
|
|
145
|
+
message: latestLine,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async handleExit() {
|
|
150
|
+
this.child = null;
|
|
151
|
+
this.stopPolling();
|
|
152
|
+
if (this.cancelled) {
|
|
153
|
+
this.finish({
|
|
154
|
+
authenticated: false,
|
|
155
|
+
source: "none",
|
|
156
|
+
loginInProgress: false,
|
|
157
|
+
state: "cancelled",
|
|
158
|
+
message: "Claude Code login was cancelled.",
|
|
159
|
+
errorCode: "auth_login_required",
|
|
160
|
+
loginUrl: this.snapshot.loginUrl,
|
|
161
|
+
});
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const status = await getClaudeAuthStatus();
|
|
165
|
+
if (status.authenticated) {
|
|
166
|
+
this.finish({
|
|
167
|
+
authenticated: true,
|
|
168
|
+
source: status.source,
|
|
169
|
+
loginInProgress: false,
|
|
170
|
+
state: "success",
|
|
171
|
+
message: "Claude Code is authenticated.",
|
|
172
|
+
});
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
this.finish({
|
|
176
|
+
authenticated: false,
|
|
177
|
+
source: status.source,
|
|
178
|
+
loginInProgress: false,
|
|
179
|
+
state: "error",
|
|
180
|
+
loginUrl: this.snapshot.loginUrl,
|
|
181
|
+
prompt: this.snapshot.prompt,
|
|
182
|
+
message: status.message ?? this.lastRelevantLine() ?? "Claude Code authentication failed.",
|
|
183
|
+
errorCode: status.errorCode ?? "auth_api_error",
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
startPolling() {
|
|
187
|
+
if (this.authPollTimer) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
this.authPollTimer = setInterval(() => {
|
|
191
|
+
void this.pollForCompletion();
|
|
192
|
+
}, 1500);
|
|
193
|
+
}
|
|
194
|
+
stopPolling() {
|
|
195
|
+
if (!this.authPollTimer) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
clearInterval(this.authPollTimer);
|
|
199
|
+
this.authPollTimer = null;
|
|
200
|
+
}
|
|
201
|
+
async pollForCompletion() {
|
|
202
|
+
if (!this.child || this.cancelled) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
try {
|
|
206
|
+
const status = await getClaudeAuthStatus();
|
|
207
|
+
if (!status.authenticated) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
this.update({
|
|
211
|
+
authenticated: true,
|
|
212
|
+
source: status.source,
|
|
213
|
+
loginInProgress: false,
|
|
214
|
+
state: "success",
|
|
215
|
+
message: "Claude Code is authenticated.",
|
|
216
|
+
});
|
|
217
|
+
this.child.kill("SIGTERM");
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Ignore transient polling failures while the login process is still active.
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
lastRelevantLine() {
|
|
224
|
+
const lines = this.recentOutput
|
|
225
|
+
.split(/\r?\n/)
|
|
226
|
+
.map((line) => line.trim())
|
|
227
|
+
.filter((line) => line.length > 0);
|
|
228
|
+
return lines.length > 0 ? lines[lines.length - 1] : undefined;
|
|
229
|
+
}
|
|
230
|
+
snapshotFromStatus(status) {
|
|
231
|
+
return {
|
|
232
|
+
authenticated: status.authenticated,
|
|
233
|
+
source: status.source,
|
|
234
|
+
loginInProgress: false,
|
|
235
|
+
state: status.authenticated ? "success" : "idle",
|
|
236
|
+
message: status.message,
|
|
237
|
+
errorCode: status.errorCode,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
finish(snapshot) {
|
|
241
|
+
this.snapshot = snapshot;
|
|
242
|
+
this.emit("update", this.snapshot);
|
|
243
|
+
}
|
|
244
|
+
update(snapshot) {
|
|
245
|
+
this.snapshot = snapshot;
|
|
246
|
+
this.emit("update", this.snapshot);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=claude-auth-login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-auth-login.js","sourceRoot":"","sources":["../src/claude-auth-login.ts"],"names":[],"mappings":"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"}
|
package/dist/mdns.d.ts
CHANGED
package/dist/mdns.js
CHANGED
|
@@ -2,9 +2,16 @@ import { Bonjour } from "bonjour-service";
|
|
|
2
2
|
export class MdnsAdvertiser {
|
|
3
3
|
bonjour = null;
|
|
4
4
|
service = null;
|
|
5
|
+
disabled = false;
|
|
5
6
|
start(port, apiKey) {
|
|
7
|
+
if (this.disabled)
|
|
8
|
+
return;
|
|
6
9
|
try {
|
|
7
|
-
this.bonjour = new Bonjour()
|
|
10
|
+
this.bonjour = new Bonjour({}, (err) => {
|
|
11
|
+
console.warn(`[bridge] mDNS: transport error (non-fatal): ${err.message}`);
|
|
12
|
+
this.disabled = true;
|
|
13
|
+
this.stop();
|
|
14
|
+
});
|
|
8
15
|
this.service = this.bonjour.publish({
|
|
9
16
|
name: "ccpocket-bridge",
|
|
10
17
|
type: "ccpocket",
|
package/dist/mdns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdns.js","sourceRoot":"","sources":["../src/mdns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgB,MAAM,iBAAiB,CAAC;AAExD,MAAM,OAAO,cAAc;IACjB,OAAO,GAAmB,IAAI,CAAC;IAC/B,OAAO,GAAmB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"mdns.js","sourceRoot":"","sources":["../src/mdns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgB,MAAM,iBAAiB,CAAC;AAExD,MAAM,OAAO,cAAc;IACjB,OAAO,GAAmB,IAAI,CAAC;IAC/B,OAAO,GAAmB,IAAI,CAAC;IAC/B,QAAQ,GAAG,KAAK,CAAC;IAEzB,KAAK,CAAC,IAAY,EAAE,MAAe;QACjC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,GAAU,EAAE,EAAE;gBAC5C,OAAO,CAAC,IAAI,CACV,+CAA+C,GAAG,CAAC,OAAO,EAAE,CAC7D,CAAC;gBACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;gBAClC,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,KAAK;gBACf,IAAI;gBACJ,KAAK,EAAE,KAAK,EAAE,qDAAqD;gBACnE,GAAG,EAAE;oBACH,OAAO,EAAE,GAAG;oBACZ,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;iBACnC;aACF,CAAC,CAAC;YACH,sEAAsE;YACtE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBACtC,OAAO,CAAC,IAAI,CAAC,6CAA6C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CACT,qDAAqD,IAAI,EAAE,CAC5D,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,mDAAmD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5G,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;CACF"}
|
package/dist/parser.d.ts
CHANGED
|
@@ -190,6 +190,15 @@ export type ClientMessage = {
|
|
|
190
190
|
includeDiff?: boolean;
|
|
191
191
|
} | {
|
|
192
192
|
type: "get_usage";
|
|
193
|
+
} | {
|
|
194
|
+
type: "get_claude_auth_status";
|
|
195
|
+
} | {
|
|
196
|
+
type: "start_claude_auth_login";
|
|
197
|
+
} | {
|
|
198
|
+
type: "submit_claude_auth_code";
|
|
199
|
+
code: string;
|
|
200
|
+
} | {
|
|
201
|
+
type: "cancel_claude_auth_login";
|
|
193
202
|
} | {
|
|
194
203
|
type: "list_recordings";
|
|
195
204
|
} | {
|
|
@@ -285,6 +294,17 @@ export type ServerMessage = {
|
|
|
285
294
|
} | {
|
|
286
295
|
type: "error";
|
|
287
296
|
message: string;
|
|
297
|
+
errorCode?: string;
|
|
298
|
+
} | {
|
|
299
|
+
type: "claude_auth_status";
|
|
300
|
+
authenticated: boolean;
|
|
301
|
+
source?: "api_key" | "oauth" | "none";
|
|
302
|
+
loginInProgress: boolean;
|
|
303
|
+
state: "idle" | "starting" | "waiting_browser" | "waiting_code" | "authorizing" | "success" | "error" | "cancelled";
|
|
304
|
+
message?: string;
|
|
305
|
+
errorCode?: string;
|
|
306
|
+
loginUrl?: string;
|
|
307
|
+
prompt?: string;
|
|
288
308
|
} | {
|
|
289
309
|
type: "status";
|
|
290
310
|
status: ProcessStatus;
|
package/dist/parser.js
CHANGED
|
@@ -205,6 +205,16 @@ export function parseClientMessage(data) {
|
|
|
205
205
|
break;
|
|
206
206
|
case "get_usage":
|
|
207
207
|
break;
|
|
208
|
+
case "get_claude_auth_status":
|
|
209
|
+
break;
|
|
210
|
+
case "start_claude_auth_login":
|
|
211
|
+
break;
|
|
212
|
+
case "submit_claude_auth_code":
|
|
213
|
+
if (typeof msg.code !== "string" || msg.code.trim().length === 0)
|
|
214
|
+
return null;
|
|
215
|
+
break;
|
|
216
|
+
case "cancel_claude_auth_login":
|
|
217
|
+
break;
|
|
208
218
|
case "list_recordings":
|
|
209
219
|
break;
|
|
210
220
|
case "get_recording":
|
package/dist/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk-process.d.ts
CHANGED
|
@@ -26,6 +26,18 @@ export declare function matchesSessionRule(toolName: string, input: Record<strin
|
|
|
26
26
|
* Others: tool name only (e.g., "Edit")
|
|
27
27
|
*/
|
|
28
28
|
export declare function buildSessionRule(toolName: string, input: Record<string, unknown>): string;
|
|
29
|
+
export type AuthErrorCode = "auth_login_required" | "auth_token_expired" | "auth_api_error";
|
|
30
|
+
export interface AuthCheckResult {
|
|
31
|
+
authenticated: boolean;
|
|
32
|
+
message?: string;
|
|
33
|
+
errorCode?: AuthErrorCode;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build a user-friendly auth error result.
|
|
37
|
+
* The `message` field is designed to be helpful even without errorCode parsing
|
|
38
|
+
* (i.e. for older app versions that only display the raw message text).
|
|
39
|
+
*/
|
|
40
|
+
export declare function buildAuthError(reason: "no_credentials" | "no_access_token" | "token_expired" | "general", detail?: string): AuthCheckResult;
|
|
29
41
|
export interface StartOptions {
|
|
30
42
|
sessionId?: string;
|
|
31
43
|
continueMode?: boolean;
|
package/dist/sdk-process.js
CHANGED
|
@@ -2,7 +2,7 @@ import { existsSync, mkdirSync } from "node:fs";
|
|
|
2
2
|
import { EventEmitter } from "node:events";
|
|
3
3
|
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
4
4
|
import { normalizeToolResultContent, } from "./parser.js";
|
|
5
|
-
import { getClaudeOAuthCredentials, isTokenExpired, getValidClaudeAccessToken, } from "./usage.js";
|
|
5
|
+
import { getClaudeOAuthCredentials, isTokenExpired, getValidClaudeAccessToken, validateClaudeAccessToken, } from "./usage.js";
|
|
6
6
|
// Tools that are auto-approved in acceptEdits mode
|
|
7
7
|
export const ACCEPT_EDITS_AUTO_APPROVE = new Set([
|
|
8
8
|
"Read", "Glob", "Grep",
|
|
@@ -95,6 +95,40 @@ export function buildSessionRule(toolName, input) {
|
|
|
95
95
|
}
|
|
96
96
|
return toolName;
|
|
97
97
|
}
|
|
98
|
+
const AUTH_REMEDY = "Fix: Run this command in the terminal on the machine running Bridge:\n claude auth login";
|
|
99
|
+
/**
|
|
100
|
+
* Build a user-friendly auth error result.
|
|
101
|
+
* The `message` field is designed to be helpful even without errorCode parsing
|
|
102
|
+
* (i.e. for older app versions that only display the raw message text).
|
|
103
|
+
*/
|
|
104
|
+
export function buildAuthError(reason, detail) {
|
|
105
|
+
switch (reason) {
|
|
106
|
+
case "no_credentials":
|
|
107
|
+
return {
|
|
108
|
+
authenticated: false,
|
|
109
|
+
errorCode: "auth_login_required",
|
|
110
|
+
message: `⚠ Claude Code authentication required\n\nClaude is not logged in on this machine.\nCredentials file not found (~/.claude/.credentials.json).\n\n${AUTH_REMEDY}`,
|
|
111
|
+
};
|
|
112
|
+
case "no_access_token":
|
|
113
|
+
return {
|
|
114
|
+
authenticated: false,
|
|
115
|
+
errorCode: "auth_login_required",
|
|
116
|
+
message: `⚠ Claude Code authentication required\n\nCredentials file exists but contains no access token.\n\n${AUTH_REMEDY}`,
|
|
117
|
+
};
|
|
118
|
+
case "token_expired":
|
|
119
|
+
return {
|
|
120
|
+
authenticated: false,
|
|
121
|
+
errorCode: "auth_token_expired",
|
|
122
|
+
message: `⚠ Claude Code session expired\n\nYour login session has expired and could not be refreshed automatically.\n\n${AUTH_REMEDY}`,
|
|
123
|
+
};
|
|
124
|
+
case "general":
|
|
125
|
+
return {
|
|
126
|
+
authenticated: false,
|
|
127
|
+
errorCode: "auth_api_error",
|
|
128
|
+
message: `⚠ Claude Code authentication failed\n\n${detail ?? "Unknown error"}\n\n${AUTH_REMEDY}`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
98
132
|
/**
|
|
99
133
|
* Check if Claude CLI is authenticated and ensure the access token is valid.
|
|
100
134
|
* If the token is expired, automatically refreshes it using the refresh token.
|
|
@@ -108,24 +142,26 @@ async function checkClaudeAuth() {
|
|
|
108
142
|
try {
|
|
109
143
|
const creds = await getClaudeOAuthCredentials();
|
|
110
144
|
if (!creds.accessToken) {
|
|
111
|
-
return
|
|
112
|
-
authenticated: false,
|
|
113
|
-
message: "Claude credentials found but no access token. Please run: claude auth login",
|
|
114
|
-
};
|
|
145
|
+
return buildAuthError("no_access_token");
|
|
115
146
|
}
|
|
116
147
|
// If token is not expired, we're good
|
|
117
148
|
if (!isTokenExpired(creds.expiresAt)) {
|
|
149
|
+
const validation = await validateClaudeAccessToken();
|
|
150
|
+
if (!validation.ok) {
|
|
151
|
+
return buildAuthError("general", validation.detail);
|
|
152
|
+
}
|
|
118
153
|
return { authenticated: true };
|
|
119
154
|
}
|
|
120
155
|
// Token is expired — attempt refresh before starting the SDK
|
|
121
156
|
console.log("[sdk-process] Access token expired, attempting refresh...");
|
|
122
157
|
if (!creds.refreshToken) {
|
|
123
|
-
return
|
|
124
|
-
authenticated: false,
|
|
125
|
-
message: "Claude access token expired and no refresh token available. Please run: claude auth login",
|
|
126
|
-
};
|
|
158
|
+
return buildAuthError("token_expired");
|
|
127
159
|
}
|
|
128
160
|
await getValidClaudeAccessToken();
|
|
161
|
+
const validation = await validateClaudeAccessToken();
|
|
162
|
+
if (!validation.ok) {
|
|
163
|
+
return buildAuthError("general", validation.detail);
|
|
164
|
+
}
|
|
129
165
|
console.log("[sdk-process] Access token refreshed successfully");
|
|
130
166
|
return { authenticated: true };
|
|
131
167
|
}
|
|
@@ -133,15 +169,9 @@ async function checkClaudeAuth() {
|
|
|
133
169
|
const detail = err instanceof Error ? err.message : String(err);
|
|
134
170
|
// Distinguish between missing credentials and refresh failure
|
|
135
171
|
if (detail.includes("not found")) {
|
|
136
|
-
return
|
|
137
|
-
authenticated: false,
|
|
138
|
-
message: "Claude credentials not found (~/.claude/.credentials.json). Please run: claude auth login",
|
|
139
|
-
};
|
|
172
|
+
return buildAuthError("no_credentials");
|
|
140
173
|
}
|
|
141
|
-
return
|
|
142
|
-
authenticated: false,
|
|
143
|
-
message: `Claude auth failed: ${detail}`,
|
|
144
|
-
};
|
|
174
|
+
return buildAuthError("general", detail);
|
|
145
175
|
}
|
|
146
176
|
}
|
|
147
177
|
/**
|
|
@@ -336,6 +366,7 @@ export class SdkProcess extends EventEmitter {
|
|
|
336
366
|
this.emitMessage({
|
|
337
367
|
type: "error",
|
|
338
368
|
message: authCheck.message ?? "Claude is not authenticated. Please run: claude auth login",
|
|
369
|
+
...(authCheck.errorCode ? { errorCode: authCheck.errorCode } : {}),
|
|
339
370
|
});
|
|
340
371
|
this.setStatus("idle");
|
|
341
372
|
this.emit("exit", 1);
|