@ccpocket/bridge 1.14.0 → 1.16.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.
@@ -1,249 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-auth-login.js","sourceRoot":"","sources":["../src/claude-auth-login.ts"],"names":[],"mappings":"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"}