@ccpocket/bridge 1.57.0 → 1.57.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.
@@ -12,11 +12,18 @@
12
12
  * so that Bridge restarts reuse the same UID instead of creating
13
13
  * a new anonymous account each time.
14
14
  */
15
+ export interface FirebaseAuthClientOptions {
16
+ credentialsFile?: string;
17
+ fetchImpl?: typeof fetch;
18
+ }
15
19
  export declare class FirebaseAuthClient {
20
+ private readonly credentialsFile;
21
+ private readonly fetchImpl;
16
22
  private _uid;
17
23
  private _idToken;
18
24
  private _refreshToken;
19
25
  private _expiresAt;
26
+ constructor(options?: FirebaseAuthClientOptions);
20
27
  get uid(): string;
21
28
  /**
22
29
  * Initialize Firebase auth.
@@ -14,17 +14,29 @@
14
14
  */
15
15
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
16
16
  import { homedir } from "node:os";
17
- import { join } from "node:path";
17
+ import { dirname, join } from "node:path";
18
18
  const FIREBASE_API_KEY = "AIzaSyAptNnokWPqJIgv2Lr3I8ETN6bqZb5BGvc";
19
19
  const SIGN_UP_URL = `https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=${FIREBASE_API_KEY}`;
20
20
  const REFRESH_URL = `https://securetoken.googleapis.com/v1/token?key=${FIREBASE_API_KEY}`;
21
21
  const CREDENTIALS_DIR = join(homedir(), ".ccpocket");
22
22
  const CREDENTIALS_FILE = join(CREDENTIALS_DIR, "firebase-credentials.json");
23
- function loadCredentials() {
23
+ class FirebaseTokenRefreshError extends Error {
24
+ status;
25
+ responseText;
26
+ constructor(status, responseText) {
27
+ super(`Firebase token refresh failed (${status}): ${responseText}`);
28
+ this.status = status;
29
+ this.responseText = responseText;
30
+ }
31
+ }
32
+ function isRecoverableRefreshError(err) {
33
+ return err instanceof FirebaseTokenRefreshError && err.status === 400;
34
+ }
35
+ function loadCredentials(credentialsFile) {
24
36
  try {
25
- if (!existsSync(CREDENTIALS_FILE))
37
+ if (!existsSync(credentialsFile))
26
38
  return null;
27
- const raw = readFileSync(CREDENTIALS_FILE, "utf-8");
39
+ const raw = readFileSync(credentialsFile, "utf-8");
28
40
  const data = JSON.parse(raw);
29
41
  if (typeof data.uid === "string" && typeof data.refreshToken === "string") {
30
42
  return { uid: data.uid, refreshToken: data.refreshToken };
@@ -35,20 +47,26 @@ function loadCredentials() {
35
47
  return null;
36
48
  }
37
49
  }
38
- function saveCredentials(creds) {
50
+ function saveCredentials(credentialsFile, creds) {
39
51
  try {
40
- mkdirSync(CREDENTIALS_DIR, { recursive: true });
41
- writeFileSync(CREDENTIALS_FILE, JSON.stringify(creds, null, 2), "utf-8");
52
+ mkdirSync(dirname(credentialsFile), { recursive: true });
53
+ writeFileSync(credentialsFile, JSON.stringify(creds, null, 2), "utf-8");
42
54
  }
43
55
  catch (err) {
44
56
  console.warn("[firebase-auth] Failed to persist credentials:", err);
45
57
  }
46
58
  }
47
59
  export class FirebaseAuthClient {
60
+ credentialsFile;
61
+ fetchImpl;
48
62
  _uid = null;
49
63
  _idToken = null;
50
64
  _refreshToken = null;
51
65
  _expiresAt = 0;
66
+ constructor(options = {}) {
67
+ this.credentialsFile = options.credentialsFile ?? CREDENTIALS_FILE;
68
+ this.fetchImpl = options.fetchImpl ?? fetch;
69
+ }
52
70
  get uid() {
53
71
  if (!this._uid)
54
72
  throw new Error("Firebase auth not initialized");
@@ -60,7 +78,7 @@ export class FirebaseAuthClient {
60
78
  * creating a new anonymous account if restoration fails.
61
79
  */
62
80
  async initialize() {
63
- const saved = loadCredentials();
81
+ const saved = loadCredentials(this.credentialsFile);
64
82
  if (saved) {
65
83
  try {
66
84
  await this.restoreSession(saved);
@@ -68,7 +86,10 @@ export class FirebaseAuthClient {
68
86
  return;
69
87
  }
70
88
  catch (err) {
71
- console.warn("[firebase-auth] Failed to restore session, creating new account:", err);
89
+ const message = isRecoverableRefreshError(err)
90
+ ? "Saved Firebase session is no longer valid, creating new account"
91
+ : "Failed to restore session, creating new account";
92
+ console.warn(`[firebase-auth] ${message}:`, err);
72
93
  }
73
94
  }
74
95
  await this.signUpAnonymously();
@@ -83,12 +104,21 @@ export class FirebaseAuthClient {
83
104
  throw new Error("Firebase auth not initialized");
84
105
  }
85
106
  if (Date.now() >= this._expiresAt) {
86
- await this.refreshIdToken();
107
+ try {
108
+ await this.refreshIdToken();
109
+ }
110
+ catch (err) {
111
+ if (!isRecoverableRefreshError(err)) {
112
+ throw err;
113
+ }
114
+ console.warn("[firebase-auth] Saved Firebase session is no longer valid, creating new account:", err);
115
+ await this.signUpAnonymously();
116
+ }
87
117
  }
88
118
  return this._idToken;
89
119
  }
90
120
  async signUpAnonymously() {
91
- const res = await fetch(SIGN_UP_URL, {
121
+ const res = await this.fetchImpl(SIGN_UP_URL, {
92
122
  method: "POST",
93
123
  headers: { "Content-Type": "application/json" },
94
124
  body: JSON.stringify({ returnSecureToken: true }),
@@ -102,7 +132,7 @@ export class FirebaseAuthClient {
102
132
  this._idToken = data.idToken;
103
133
  this._refreshToken = data.refreshToken;
104
134
  this._expiresAt = Date.now() + (parseInt(data.expiresIn, 10) || 3600) * 1000 - 60_000;
105
- saveCredentials({ uid: this._uid, refreshToken: this._refreshToken });
135
+ saveCredentials(this.credentialsFile, { uid: this._uid, refreshToken: this._refreshToken });
106
136
  }
107
137
  async restoreSession(saved) {
108
138
  this._uid = saved.uid;
@@ -110,17 +140,17 @@ export class FirebaseAuthClient {
110
140
  // Force a token refresh to validate the saved credentials
111
141
  await this.refreshIdToken();
112
142
  // Persist potentially rotated refresh token
113
- saveCredentials({ uid: this._uid, refreshToken: this._refreshToken });
143
+ saveCredentials(this.credentialsFile, { uid: this._uid, refreshToken: this._refreshToken });
114
144
  }
115
145
  async refreshIdToken() {
116
- const res = await fetch(REFRESH_URL, {
146
+ const res = await this.fetchImpl(REFRESH_URL, {
117
147
  method: "POST",
118
148
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
119
149
  body: `grant_type=refresh_token&refresh_token=${encodeURIComponent(this._refreshToken)}`,
120
150
  });
121
151
  if (!res.ok) {
122
152
  const text = await res.text();
123
- throw new Error(`Firebase token refresh failed (${res.status}): ${text}`);
153
+ throw new FirebaseTokenRefreshError(res.status, text);
124
154
  }
125
155
  const data = (await res.json());
126
156
  this._idToken = data.id_token;
@@ -1 +1 @@
1
- {"version":3,"file":"firebase-auth.js","sourceRoot":"","sources":["../src/firebase-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firebase-auth.js","sourceRoot":"","sources":["../src/firebase-auth.ts"],"names":[],"mappings":"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"}
@@ -19,19 +19,18 @@ export class PushRelayClient {
19
19
  async registerToken(token, platform, locale) {
20
20
  if (!this.isConfigured)
21
21
  return;
22
- await this.post({ op: "register", token, platform, locale, bridgeId: this.bridgeId });
22
+ await this.post({ op: "register", token, platform, locale });
23
23
  }
24
24
  async unregisterToken(token) {
25
25
  if (!this.isConfigured)
26
26
  return;
27
- await this.post({ op: "unregister", token, bridgeId: this.bridgeId });
27
+ await this.post({ op: "unregister", token });
28
28
  }
29
29
  async notify(payload) {
30
30
  if (!this.isConfigured)
31
31
  return;
32
32
  await this.post({
33
33
  op: "notify",
34
- bridgeId: this.bridgeId,
35
34
  eventType: payload.eventType,
36
35
  title: payload.title,
37
36
  body: payload.body,
@@ -42,8 +41,12 @@ export class PushRelayClient {
42
41
  async post(payload) {
43
42
  if (!this.isConfigured || !this.firebaseAuth)
44
43
  return;
45
- console.log(`[push-relay] ${payload.op} → ${this.relayUrl} (bridgeId: ${payload.bridgeId})`);
46
44
  const idToken = await this.firebaseAuth.getIdToken();
45
+ const requestPayload = {
46
+ ...payload,
47
+ bridgeId: this.bridgeId,
48
+ };
49
+ console.log(`[push-relay] ${payload.op} → ${this.relayUrl} (bridgeId: ${requestPayload.bridgeId})`);
47
50
  const controller = new AbortController();
48
51
  const timer = setTimeout(() => controller.abort(), this.timeoutMs);
49
52
  try {
@@ -53,7 +56,7 @@ export class PushRelayClient {
53
56
  "Content-Type": "application/json",
54
57
  "Authorization": `Bearer ${idToken}`,
55
58
  },
56
- body: JSON.stringify(payload),
59
+ body: JSON.stringify(requestPayload),
57
60
  signal: controller.signal,
58
61
  });
59
62
  const responseText = (await response.text()).trim().slice(0, 200);
@@ -1 +1 @@
1
- {"version":3,"file":"push-relay.js","sourceRoot":"","sources":["../src/push-relay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push-relay.js","sourceRoot":"","sources":["../src/push-relay.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ccpocket/bridge",
3
- "version": "1.57.0",
3
+ "version": "1.57.1",
4
4
  "description": "Bridge server that connects Claude Agent SDK and Codex CLI sessions to mobile devices via WebSocket",
5
5
  "private": false,
6
6
  "type": "module",