@vibetechnologies/chrome-sync 0.4.1 → 0.5.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 CHANGED
@@ -11,6 +11,7 @@ import type { StorageState } from "./extract.js";
11
11
  interface AuthConfig {
12
12
  apiUrl: string;
13
13
  token: string;
14
+ refreshToken?: string;
14
15
  username: string;
15
16
  subdomain: string;
16
17
  }
package/dist/api.js CHANGED
@@ -50,11 +50,13 @@ export async function loginViaBrowser(apiUrl = "https://console.openclaw.vibebro
50
50
  const url = new URL(req.url ?? "/", `http://localhost`);
51
51
  if (url.pathname === "/callback") {
52
52
  const token = url.searchParams.get("token");
53
+ const refreshToken = url.searchParams.get("refresh_token");
53
54
  const username = url.searchParams.get("username");
54
55
  const subdomain = url.searchParams.get("subdomain");
55
56
  if (!token) {
56
57
  res.writeHead(400, { "Content-Type": "text/html" });
57
58
  res.end("<html><body><h2>Authentication failed</h2><p>No token received. Close this window and try again.</p></body></html>");
59
+ server.closeAllConnections();
58
60
  server.close();
59
61
  reject(new Error("No token received from server"));
60
62
  return;
@@ -62,12 +64,15 @@ export async function loginViaBrowser(apiUrl = "https://console.openclaw.vibebro
62
64
  const config = {
63
65
  apiUrl,
64
66
  token,
67
+ refreshToken: refreshToken || undefined,
65
68
  username: username || "user",
66
69
  subdomain: subdomain || "",
67
70
  };
68
71
  saveAuth(config);
69
72
  res.writeHead(200, { "Content-Type": "text/html" });
70
73
  res.end(`<html><body><h2>✓ Authenticated as ${config.username}</h2><p>You can close this window and return to the terminal.</p></body></html>`);
74
+ clearTimeout(timeout);
75
+ server.closeAllConnections();
71
76
  server.close();
72
77
  resolve(config);
73
78
  }
@@ -98,7 +103,8 @@ export async function loginViaBrowser(apiUrl = "https://console.openclaw.vibebro
98
103
  console.log(` If it doesn't open, visit: ${authUrl}`);
99
104
  });
100
105
  // Timeout after 2 minutes
101
- setTimeout(() => {
106
+ const timeout = setTimeout(() => {
107
+ server.closeAllConnections();
102
108
  server.close();
103
109
  reject(new Error("Authentication timed out (2 minutes). Try again."));
104
110
  }, 120_000);
@@ -123,6 +129,27 @@ export async function loginWithToken(apiUrl, token) {
123
129
  saveAuth(config);
124
130
  return config;
125
131
  }
132
+ /**
133
+ * Refresh the access token using the stored refresh token.
134
+ * Updates the saved auth config with the new access token.
135
+ */
136
+ async function refreshAccessToken(auth) {
137
+ if (!auth.refreshToken)
138
+ return null;
139
+ const res = await fetch(`${auth.apiUrl}/api/v1/auth/refresh`, {
140
+ method: "POST",
141
+ headers: { "Content-Type": "application/json" },
142
+ body: JSON.stringify({ refreshToken: auth.refreshToken }),
143
+ });
144
+ if (!res.ok)
145
+ return null;
146
+ const data = (await res.json());
147
+ if (!data.accessToken)
148
+ return null;
149
+ const updated = { ...auth, token: data.accessToken };
150
+ saveAuth(updated);
151
+ return updated;
152
+ }
126
153
  /**
127
154
  * Push cookies to the tenant's cloud browser.
128
155
  */
@@ -143,8 +170,33 @@ export async function pushCookies(storageState, options) {
143
170
  subdomain: subdomain || undefined,
144
171
  }),
145
172
  });
173
+ // Auto-refresh on 401 and retry once
174
+ if (res.status === 401) {
175
+ const refreshed = await refreshAccessToken(auth);
176
+ if (refreshed) {
177
+ const retry = await fetch(`${refreshed.apiUrl}/admin/api/browser-sync/cookies`, {
178
+ method: "POST",
179
+ headers: {
180
+ Authorization: `Bearer ${refreshed.token}`,
181
+ "Content-Type": "application/json",
182
+ },
183
+ body: JSON.stringify({
184
+ storageState,
185
+ subdomain: subdomain || undefined,
186
+ }),
187
+ });
188
+ if (!retry.ok) {
189
+ const body = await retry.text();
190
+ throw new Error(`Failed to push cookies: ${retry.status} — ${body}`);
191
+ }
192
+ return retry.json();
193
+ }
194
+ }
146
195
  if (!res.ok) {
147
196
  const body = await res.text();
197
+ if (res.status === 401) {
198
+ throw new Error(`Session expired. Run \`chrome-sync login\` to re-authenticate.`);
199
+ }
148
200
  throw new Error(`Failed to push cookies: ${res.status} — ${body}`);
149
201
  }
150
202
  return res.json();
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAUjD,6BAA6B;AAC7B,MAAM,UAAU,QAAQ,CAAC,MAAkB;IACzC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,SAAS;IACvB,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,aAAa,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAiB,0CAA0C;IAE3D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACvC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;YAExD,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC5C,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC3D,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAClD,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAEpD,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC,oHAAoH,CAAC,CAAC;oBAC9H,MAAM,CAAC,mBAAmB,EAAE,CAAC;oBAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;oBACnD,OAAO;gBACT,CAAC;gBAED,MAAM,MAAM,GAAe;oBACzB,MAAM;oBACN,KAAK;oBACL,YAAY,EAAE,YAAY,IAAI,SAAS;oBACvC,QAAQ,EAAE,QAAQ,IAAI,MAAM;oBAC5B,SAAS,EAAE,SAAS,IAAI,EAAE;iBAC3B,CAAC;gBACF,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAEjB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,sCAAsC,MAAM,CAAC,QAAQ,iFAAiF,CAAC,CAAC;gBAChJ,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;YACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,MAAM,OAAO,GAAG,GAAG,MAAM,2BAA2B,IAAI,EAAE,CAAC;YAE3D,eAAe;YACf,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC7C,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,QAAQ;oBAC3B,CAAC,CAAC,SAAS,OAAO,GAAG;oBACrB,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;wBAC5B,CAAC,CAAC,aAAa,OAAO,GAAG;wBACzB,CAAC,CAAC,aAAa,OAAO,GAAG,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;QACxE,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,KAAa;IAChE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,kBAAkB,EAAE;QACnD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;KAC9C,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,MAAM,GAAe;QACzB,MAAM;QACN,KAAK;QACL,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,EAAE;KACd,CAAC;IAEF,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAAC,IAAgB;IAChD,IAAI,CAAC,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,sBAAsB,EAAE;QAC5D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;KAC1D,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA6B,CAAC;IAC5D,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,OAAO,GAAe,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACjE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,YAA0B,EAC1B,OAAgC;IAEhC,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;IAEvD,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,IAAI,CAAC,MAAM,iCAAiC,EAC/C;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;YACrC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,YAAY;YACZ,SAAS,EAAE,SAAS,IAAI,SAAS;SAClC,CAAC;KACH,CACF,CAAC;IAEF,qCAAqC;IACrC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,MAAM,KAAK,CACvB,GAAG,SAAS,CAAC,MAAM,iCAAiC,EACpD;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,SAAS,CAAC,KAAK,EAAE;oBAC1C,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,YAAY;oBACZ,SAAS,EAAE,SAAS,IAAI,SAAS;iBAClC,CAAC;aACH,CACF,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBACd,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,EAAqD,CAAC;QACzE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAqD,CAAC;AACvE,CAAC"}
package/dist/cli.js CHANGED
@@ -39,6 +39,7 @@ program
39
39
  console.log(` Tenant: ${config.subdomain}`);
40
40
  }
41
41
  console.log(` API: ${config.apiUrl}`);
42
+ process.exit(0);
42
43
  }
43
44
  catch (err) {
44
45
  console.error(`✗ Login failed: ${err.message}`);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/extract.js CHANGED
@@ -198,18 +198,35 @@ export async function extractCookies(domains, profile = "Default") {
198
198
  const value = decryptCookieValue(row.encrypted_value, key);
199
199
  if (!value)
200
200
  continue;
201
+ // Skip cookies with empty name or domain — CDP will reject them
202
+ if (!row.name || !row.host_key)
203
+ continue;
204
+ const sameSite = mapSameSite(row.samesite);
205
+ let secure = row.is_secure === 1;
206
+ // sameSite=None requires secure=true per spec; Chrome CDP rejects otherwise
207
+ if (sameSite === "None" && !secure) {
208
+ secure = true;
209
+ }
210
+ // Chrome stores expires as microseconds since 1601-01-01; convert to Unix seconds
211
+ // -1 = session cookie (no expiry)
212
+ const expires = row.expires_utc === 0
213
+ ? -1
214
+ : Math.floor((row.expires_utc / 1000000) - 11644473600);
215
+ // Skip already-expired cookies — CDP may reject them
216
+ const now = Math.floor(Date.now() / 1000);
217
+ if (expires > 0 && expires <= now)
218
+ continue;
219
+ // Strip null bytes from cookie values — CDP rejects them
220
+ const cleanValue = value.replace(/\0/g, "");
201
221
  cookies.push({
202
222
  name: row.name,
203
- value,
223
+ value: cleanValue,
204
224
  domain: row.host_key,
205
- path: row.path,
206
- // Chrome stores expires as microseconds since 1601-01-01; convert to Unix seconds
207
- expires: row.expires_utc === 0
208
- ? -1
209
- : Math.floor((row.expires_utc / 1000000) - 11644473600),
225
+ path: row.path || "/",
226
+ expires,
210
227
  httpOnly: row.is_httponly === 1,
211
- secure: row.is_secure === 1,
212
- sameSite: mapSameSite(row.samesite),
228
+ secure,
229
+ sameSite,
213
230
  });
214
231
  }
215
232
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../src/extract.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -11,6 +11,14 @@ interface BrowserSyncRequest {
11
11
  storageState: StorageState;
12
12
  subdomain?: string;
13
13
  }
14
+ /**
15
+ * Sanitize cookies for CDP Network.setCookies compatibility.
16
+ * Filters out invalid entries and fixes common issues (sameSite/secure mismatch).
17
+ */
18
+ declare function sanitizeCookiesForCDP(cookies: StorageState["cookies"]): {
19
+ valid: Array<Record<string, unknown>>;
20
+ skipped: string[];
21
+ };
14
22
  /**
15
23
  * Express/Hono-style handler for the browser-sync cookie push endpoint.
16
24
  * Integrate with the bot's admin API router.
@@ -19,4 +27,5 @@ export declare function handleBrowserSyncPush(body: BrowserSyncRequest, resolveC
19
27
  injected: number;
20
28
  errors: string[];
21
29
  }>;
30
+ export { sanitizeCookiesForCDP };
22
31
  export type { BrowserSyncRequest };
package/dist/server.js CHANGED
@@ -6,64 +6,139 @@
6
6
  *
7
7
  * Mount at: POST /admin/api/browser-sync/cookies
8
8
  */
9
+ /** Batch size for CDP cookie injection — avoids one bad cookie killing entire push */
10
+ const BATCH_SIZE = 100;
11
+ /**
12
+ * Sanitize cookies for CDP Network.setCookies compatibility.
13
+ * Filters out invalid entries and fixes common issues (sameSite/secure mismatch).
14
+ */
15
+ function sanitizeCookiesForCDP(cookies) {
16
+ const valid = [];
17
+ const skipped = [];
18
+ for (const c of cookies) {
19
+ // CDP requires non-empty name and domain
20
+ if (!c.name || !c.domain) {
21
+ skipped.push(`empty name/domain: ${c.name || "(empty)"}@${c.domain || "(empty)"}`);
22
+ continue;
23
+ }
24
+ let sameSite = c.sameSite;
25
+ let secure = c.secure ?? false;
26
+ // Chrome rejects sameSite=None without secure=true
27
+ if (sameSite === "None" && !secure) {
28
+ secure = true;
29
+ }
30
+ // CDP only accepts "Strict", "Lax", "None" — strip anything else
31
+ if (sameSite && !["Strict", "Lax", "None"].includes(sameSite)) {
32
+ sameSite = undefined;
33
+ }
34
+ let expires = c.expires != null ? c.expires : -1;
35
+ if (expires > 0) {
36
+ // Detect Chrome's microseconds-since-1601 format (values > 1e13)
37
+ // Chrome timestamps are ~13e15 range; Unix seconds max ~1e10 for year 2286
38
+ if (expires > 10_000_000_000_000) {
39
+ expires = Math.floor(expires / 1000000) - 11644473600;
40
+ }
41
+ // Skip already-expired cookies — CDP may reject them
42
+ if (expires <= Math.floor(Date.now() / 1000)) {
43
+ skipped.push(`expired: ${c.name}@${c.domain}`);
44
+ continue;
45
+ }
46
+ }
47
+ else {
48
+ expires = -1;
49
+ }
50
+ // Strip null bytes from cookie values — CDP rejects them
51
+ const cleanValue = (c.value || "").replace(/\0/g, "");
52
+ valid.push({
53
+ name: c.name,
54
+ value: cleanValue,
55
+ domain: c.domain,
56
+ path: c.path || "/",
57
+ expires,
58
+ httpOnly: c.httpOnly ?? false,
59
+ secure,
60
+ sameSite: sameSite || undefined,
61
+ });
62
+ }
63
+ return { valid, skipped };
64
+ }
9
65
  /**
10
66
  * Inject cookies into a tenant's cloud Chrome via CDP.
11
67
  *
12
- * @param cdpUrl - The Chrome DevTools Protocol WebSocket URL (e.g., ws://localhost:3000)
68
+ * @param cdpUrl - The Chrome DevTools Protocol base URL (e.g., http://localhost:9222)
13
69
  * @param cookies - Playwright-format cookies to inject
14
70
  */
15
71
  async function injectCookiesViaCDP(cdpUrl, cookies) {
16
- // Connect to Chrome via CDP WebSocket
72
+ const { valid: cdpCookies, skipped } = sanitizeCookiesForCDP(cookies);
73
+ if (!cdpCookies.length) {
74
+ return { injected: 0, errors: ["All cookies were invalid and filtered out"], skipped };
75
+ }
76
+ // Connect to a page-level target (Network.setCookies requires a page target)
17
77
  const ws = await connectCDP(cdpUrl);
18
78
  const errors = [];
19
- let injected = 0;
79
+ let totalInjected = 0;
20
80
  try {
21
- // Convert to CDP Network.CookieParam format
22
- const cdpCookies = cookies.map((c) => ({
23
- name: c.name,
24
- value: c.value,
25
- domain: c.domain,
26
- path: c.path,
27
- expires: c.expires > 0 ? c.expires : undefined,
28
- httpOnly: c.httpOnly,
29
- secure: c.secure,
30
- sameSite: c.sameSite,
31
- }));
32
- // Inject via Network.setCookies (batch)
33
- const result = await sendCDPCommand(ws, "Network.setCookies", {
34
- cookies: cdpCookies,
35
- });
36
- if (result.error) {
37
- errors.push(result.error.message);
38
- }
39
- else {
40
- injected = cdpCookies.length;
81
+ // Inject in batches to avoid a single bad cookie failing the entire push
82
+ for (let i = 0; i < cdpCookies.length; i += BATCH_SIZE) {
83
+ const batch = cdpCookies.slice(i, i + BATCH_SIZE);
84
+ const result = await sendCDPCommand(ws, "Network.setCookies", {
85
+ cookies: batch,
86
+ });
87
+ if (result.error) {
88
+ errors.push(`batch ${Math.floor(i / BATCH_SIZE) + 1}: ${result.error.message}`);
89
+ }
90
+ else {
91
+ totalInjected += batch.length;
92
+ }
41
93
  }
42
94
  }
43
95
  finally {
44
96
  ws.close();
45
97
  }
46
- return { injected, errors };
98
+ return { injected: totalInjected, errors, skipped };
47
99
  }
48
- /** Connect to Chrome CDP endpoint */
100
+ /** Connect to Chrome CDP endpoint — prefers page targets over browser-level */
49
101
  async function connectCDP(cdpUrl) {
50
- // Get the debugger WebSocket URL from /json/version
51
102
  const httpUrl = cdpUrl.replace("ws://", "http://").replace("wss://", "https://");
52
- const versionRes = await fetch(`${httpUrl}/json/version`);
53
- const version = (await versionRes.json());
103
+ // Try /json/list first for a page-level target (required for Network.setCookies)
104
+ let wsUrl;
105
+ try {
106
+ const listRes = await fetch(`${httpUrl}/json/list`);
107
+ if (listRes.ok) {
108
+ const targets = (await listRes.json());
109
+ const pageTarget = targets.find((t) => t.type === "page") || targets[0];
110
+ if (pageTarget?.webSocketDebuggerUrl) {
111
+ wsUrl = pageTarget.webSocketDebuggerUrl;
112
+ }
113
+ }
114
+ }
115
+ catch {
116
+ // Fall through to /json/version
117
+ }
118
+ // Fallback to browser-level target
119
+ if (!wsUrl) {
120
+ const versionRes = await fetch(`${httpUrl}/json/version`);
121
+ const version = (await versionRes.json());
122
+ wsUrl = version.webSocketDebuggerUrl;
123
+ }
54
124
  return new Promise((resolve, reject) => {
55
- const ws = new WebSocket(version.webSocketDebuggerUrl);
125
+ const ws = new WebSocket(wsUrl);
56
126
  ws.onopen = () => resolve(ws);
57
127
  ws.onerror = (err) => reject(new Error(`CDP connection failed: ${err}`));
58
128
  });
59
129
  }
60
- /** Send a CDP command and wait for response */
130
+ /** Send a CDP command and wait for response (15s timeout) */
61
131
  function sendCDPCommand(ws, method, params) {
62
- const id = Math.floor(Math.random() * 1e9);
132
+ const id = sendCDPCommand._nextId = (sendCDPCommand._nextId || 0) + 1;
63
133
  return new Promise((resolve) => {
134
+ const timeout = setTimeout(() => {
135
+ ws.removeEventListener("message", handler);
136
+ resolve({ error: { message: "CDP timeout (15s)" } });
137
+ }, 15_000);
64
138
  const handler = (event) => {
65
139
  const data = JSON.parse(String(event.data));
66
140
  if (data.id === id) {
141
+ clearTimeout(timeout);
67
142
  ws.removeEventListener("message", handler);
68
143
  resolve(data);
69
144
  }
@@ -72,6 +147,7 @@ function sendCDPCommand(ws, method, params) {
72
147
  ws.send(JSON.stringify({ id, method, params }));
73
148
  });
74
149
  }
150
+ sendCDPCommand._nextId = 0;
75
151
  /**
76
152
  * Express/Hono-style handler for the browser-sync cookie push endpoint.
77
153
  * Integrate with the bot's admin API router.
@@ -82,6 +158,8 @@ export async function handleBrowserSyncPush(body, resolveCdpUrl) {
82
158
  return { injected: 0, errors: ["No cookies provided"] };
83
159
  }
84
160
  const cdpUrl = await resolveCdpUrl(subdomain);
85
- return injectCookiesViaCDP(cdpUrl, storageState.cookies);
161
+ const result = await injectCookiesViaCDP(cdpUrl, storageState.cookies);
162
+ return { injected: result.injected, errors: result.errors };
86
163
  }
164
+ export { sanitizeCookiesForCDP };
87
165
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibetechnologies/chrome-sync",
3
- "version": "0.4.1",
3
+ "version": "0.5.1",
4
4
  "description": "Sync browser cookies and sessions from your local Chrome to OpenClaw cloud browser",
5
5
  "type": "module",
6
6
  "bin": {
package/src/api.ts CHANGED
@@ -20,6 +20,7 @@ const TOKEN_FILE = join(CONFIG_DIR, "auth.json");
20
20
  interface AuthConfig {
21
21
  apiUrl: string;
22
22
  token: string;
23
+ refreshToken?: string;
23
24
  username: string;
24
25
  subdomain: string;
25
26
  }
@@ -65,12 +66,14 @@ export async function loginViaBrowser(
65
66
 
66
67
  if (url.pathname === "/callback") {
67
68
  const token = url.searchParams.get("token");
69
+ const refreshToken = url.searchParams.get("refresh_token");
68
70
  const username = url.searchParams.get("username");
69
71
  const subdomain = url.searchParams.get("subdomain");
70
72
 
71
73
  if (!token) {
72
74
  res.writeHead(400, { "Content-Type": "text/html" });
73
75
  res.end("<html><body><h2>Authentication failed</h2><p>No token received. Close this window and try again.</p></body></html>");
76
+ server.closeAllConnections();
74
77
  server.close();
75
78
  reject(new Error("No token received from server"));
76
79
  return;
@@ -79,6 +82,7 @@ export async function loginViaBrowser(
79
82
  const config: AuthConfig = {
80
83
  apiUrl,
81
84
  token,
85
+ refreshToken: refreshToken || undefined,
82
86
  username: username || "user",
83
87
  subdomain: subdomain || "",
84
88
  };
@@ -87,6 +91,7 @@ export async function loginViaBrowser(
87
91
  res.writeHead(200, { "Content-Type": "text/html" });
88
92
  res.end(`<html><body><h2>✓ Authenticated as ${config.username}</h2><p>You can close this window and return to the terminal.</p></body></html>`);
89
93
  clearTimeout(timeout);
94
+ server.closeAllConnections();
90
95
  server.close();
91
96
  resolve(config);
92
97
  } else {
@@ -123,6 +128,7 @@ export async function loginViaBrowser(
123
128
 
124
129
  // Timeout after 2 minutes
125
130
  const timeout = setTimeout(() => {
131
+ server.closeAllConnections();
126
132
  server.close();
127
133
  reject(new Error("Authentication timed out (2 minutes). Try again."));
128
134
  }, 120_000);
@@ -152,6 +158,29 @@ export async function loginWithToken(apiUrl: string, token: string): Promise<Aut
152
158
  return config;
153
159
  }
154
160
 
161
+ /**
162
+ * Refresh the access token using the stored refresh token.
163
+ * Updates the saved auth config with the new access token.
164
+ */
165
+ async function refreshAccessToken(auth: AuthConfig): Promise<AuthConfig | null> {
166
+ if (!auth.refreshToken) return null;
167
+
168
+ const res = await fetch(`${auth.apiUrl}/api/v1/auth/refresh`, {
169
+ method: "POST",
170
+ headers: { "Content-Type": "application/json" },
171
+ body: JSON.stringify({ refreshToken: auth.refreshToken }),
172
+ });
173
+
174
+ if (!res.ok) return null;
175
+
176
+ const data = (await res.json()) as { accessToken?: string };
177
+ if (!data.accessToken) return null;
178
+
179
+ const updated: AuthConfig = { ...auth, token: data.accessToken };
180
+ saveAuth(updated);
181
+ return updated;
182
+ }
183
+
155
184
  /**
156
185
  * Push cookies to the tenant's cloud browser.
157
186
  */
@@ -181,8 +210,37 @@ export async function pushCookies(
181
210
  }
182
211
  );
183
212
 
213
+ // Auto-refresh on 401 and retry once
214
+ if (res.status === 401) {
215
+ const refreshed = await refreshAccessToken(auth);
216
+ if (refreshed) {
217
+ const retry = await fetch(
218
+ `${refreshed.apiUrl}/admin/api/browser-sync/cookies`,
219
+ {
220
+ method: "POST",
221
+ headers: {
222
+ Authorization: `Bearer ${refreshed.token}`,
223
+ "Content-Type": "application/json",
224
+ },
225
+ body: JSON.stringify({
226
+ storageState,
227
+ subdomain: subdomain || undefined,
228
+ }),
229
+ }
230
+ );
231
+ if (!retry.ok) {
232
+ const body = await retry.text();
233
+ throw new Error(`Failed to push cookies: ${retry.status} — ${body}`);
234
+ }
235
+ return retry.json() as Promise<{ injected: number; errors: string[] }>;
236
+ }
237
+ }
238
+
184
239
  if (!res.ok) {
185
240
  const body = await res.text();
241
+ if (res.status === 401) {
242
+ throw new Error(`Session expired. Run \`chrome-sync login\` to re-authenticate.`);
243
+ }
186
244
  throw new Error(`Failed to push cookies: ${res.status} — ${body}`);
187
245
  }
188
246
 
package/src/extract.ts CHANGED
@@ -287,19 +287,39 @@ export async function extractCookies(
287
287
  const value = decryptCookieValue(row.encrypted_value, key);
288
288
  if (!value) continue;
289
289
 
290
+ // Skip cookies with empty name or domain — CDP will reject them
291
+ if (!row.name || !row.host_key) continue;
292
+
293
+ const sameSite = mapSameSite(row.samesite);
294
+ let secure = row.is_secure === 1;
295
+ // sameSite=None requires secure=true per spec; Chrome CDP rejects otherwise
296
+ if (sameSite === "None" && !secure) {
297
+ secure = true;
298
+ }
299
+
300
+ // Chrome stores expires as microseconds since 1601-01-01; convert to Unix seconds
301
+ // -1 = session cookie (no expiry)
302
+ const expires =
303
+ row.expires_utc === 0
304
+ ? -1
305
+ : Math.floor((row.expires_utc / 1000000) - 11644473600);
306
+
307
+ // Skip already-expired cookies — CDP may reject them
308
+ const now = Math.floor(Date.now() / 1000);
309
+ if (expires > 0 && expires <= now) continue;
310
+
311
+ // Strip null bytes from cookie values — CDP rejects them
312
+ const cleanValue = value.replace(/\0/g, "");
313
+
290
314
  cookies.push({
291
315
  name: row.name,
292
- value,
316
+ value: cleanValue,
293
317
  domain: row.host_key,
294
- path: row.path,
295
- // Chrome stores expires as microseconds since 1601-01-01; convert to Unix seconds
296
- expires:
297
- row.expires_utc === 0
298
- ? -1
299
- : Math.floor((row.expires_utc / 1000000) - 11644473600),
318
+ path: row.path || "/",
319
+ expires,
300
320
  httpOnly: row.is_httponly === 1,
301
- secure: row.is_secure === 1,
302
- sameSite: mapSameSite(row.samesite),
321
+ secure,
322
+ sameSite,
303
323
  });
304
324
  } catch {
305
325
  // Skip cookies that fail to decrypt (stale entries, etc.)
package/src/server.ts CHANGED
@@ -15,77 +15,164 @@ interface BrowserSyncRequest {
15
15
  subdomain?: string;
16
16
  }
17
17
 
18
+ /** Batch size for CDP cookie injection — avoids one bad cookie killing entire push */
19
+ const BATCH_SIZE = 100;
20
+
21
+ /**
22
+ * Sanitize cookies for CDP Network.setCookies compatibility.
23
+ * Filters out invalid entries and fixes common issues (sameSite/secure mismatch).
24
+ */
25
+ function sanitizeCookiesForCDP(
26
+ cookies: StorageState["cookies"]
27
+ ): { valid: Array<Record<string, unknown>>; skipped: string[] } {
28
+ const valid: Array<Record<string, unknown>> = [];
29
+ const skipped: string[] = [];
30
+
31
+ for (const c of cookies) {
32
+ // CDP requires non-empty name and domain
33
+ if (!c.name || !c.domain) {
34
+ skipped.push(`empty name/domain: ${c.name || "(empty)"}@${c.domain || "(empty)"}`);
35
+ continue;
36
+ }
37
+
38
+ let sameSite: string | undefined = c.sameSite;
39
+ let secure = c.secure ?? false;
40
+
41
+ // Chrome rejects sameSite=None without secure=true
42
+ if (sameSite === "None" && !secure) {
43
+ secure = true;
44
+ }
45
+ // CDP only accepts "Strict", "Lax", "None" — strip anything else
46
+ if (sameSite && !["Strict", "Lax", "None"].includes(sameSite)) {
47
+ sameSite = undefined;
48
+ }
49
+
50
+ let expires = c.expires != null ? c.expires : -1;
51
+ if (expires > 0) {
52
+ // Detect Chrome's microseconds-since-1601 format (values > 1e13)
53
+ // Chrome timestamps are ~13e15 range; Unix seconds max ~1e10 for year 2286
54
+ if (expires > 10_000_000_000_000) {
55
+ expires = Math.floor(expires / 1000000) - 11644473600;
56
+ }
57
+ // Skip already-expired cookies — CDP may reject them
58
+ if (expires <= Math.floor(Date.now() / 1000)) {
59
+ skipped.push(`expired: ${c.name}@${c.domain}`);
60
+ continue;
61
+ }
62
+ } else {
63
+ expires = -1;
64
+ }
65
+
66
+ // Strip null bytes from cookie values — CDP rejects them
67
+ const cleanValue = (c.value || "").replace(/\0/g, "");
68
+
69
+ valid.push({
70
+ name: c.name,
71
+ value: cleanValue,
72
+ domain: c.domain,
73
+ path: c.path || "/",
74
+ expires,
75
+ httpOnly: c.httpOnly ?? false,
76
+ secure,
77
+ sameSite: sameSite || undefined,
78
+ });
79
+ }
80
+
81
+ return { valid, skipped };
82
+ }
83
+
18
84
  /**
19
85
  * Inject cookies into a tenant's cloud Chrome via CDP.
20
86
  *
21
- * @param cdpUrl - The Chrome DevTools Protocol WebSocket URL (e.g., ws://localhost:3000)
87
+ * @param cdpUrl - The Chrome DevTools Protocol base URL (e.g., http://localhost:9222)
22
88
  * @param cookies - Playwright-format cookies to inject
23
89
  */
24
90
  async function injectCookiesViaCDP(
25
91
  cdpUrl: string,
26
92
  cookies: StorageState["cookies"]
27
- ): Promise<{ injected: number; errors: string[] }> {
28
- // Connect to Chrome via CDP WebSocket
93
+ ): Promise<{ injected: number; errors: string[]; skipped: string[] }> {
94
+ const { valid: cdpCookies, skipped } = sanitizeCookiesForCDP(cookies);
95
+
96
+ if (!cdpCookies.length) {
97
+ return { injected: 0, errors: ["All cookies were invalid and filtered out"], skipped };
98
+ }
99
+
100
+ // Connect to a page-level target (Network.setCookies requires a page target)
29
101
  const ws = await connectCDP(cdpUrl);
30
102
  const errors: string[] = [];
31
- let injected = 0;
103
+ let totalInjected = 0;
32
104
 
33
105
  try {
34
- // Convert to CDP Network.CookieParam format
35
- const cdpCookies = cookies.map((c) => ({
36
- name: c.name,
37
- value: c.value,
38
- domain: c.domain,
39
- path: c.path,
40
- expires: c.expires > 0 ? c.expires : undefined,
41
- httpOnly: c.httpOnly,
42
- secure: c.secure,
43
- sameSite: c.sameSite,
44
- }));
45
-
46
- // Inject via Network.setCookies (batch)
47
- const result = await sendCDPCommand(ws, "Network.setCookies", {
48
- cookies: cdpCookies,
49
- });
106
+ // Inject in batches to avoid a single bad cookie failing the entire push
107
+ for (let i = 0; i < cdpCookies.length; i += BATCH_SIZE) {
108
+ const batch = cdpCookies.slice(i, i + BATCH_SIZE);
109
+ const result = await sendCDPCommand(ws, "Network.setCookies", {
110
+ cookies: batch,
111
+ });
50
112
 
51
- if (result.error) {
52
- errors.push(result.error.message);
53
- } else {
54
- injected = cdpCookies.length;
113
+ if (result.error) {
114
+ errors.push(`batch ${Math.floor(i / BATCH_SIZE) + 1}: ${result.error.message}`);
115
+ } else {
116
+ totalInjected += batch.length;
117
+ }
55
118
  }
56
119
  } finally {
57
120
  ws.close();
58
121
  }
59
122
 
60
- return { injected, errors };
123
+ return { injected: totalInjected, errors, skipped };
61
124
  }
62
125
 
63
- /** Connect to Chrome CDP endpoint */
126
+ /** Connect to Chrome CDP endpoint — prefers page targets over browser-level */
64
127
  async function connectCDP(cdpUrl: string): Promise<WebSocket> {
65
- // Get the debugger WebSocket URL from /json/version
66
128
  const httpUrl = cdpUrl.replace("ws://", "http://").replace("wss://", "https://");
67
- const versionRes = await fetch(`${httpUrl}/json/version`);
68
- const version = (await versionRes.json()) as { webSocketDebuggerUrl: string };
129
+
130
+ // Try /json/list first for a page-level target (required for Network.setCookies)
131
+ let wsUrl: string | undefined;
132
+ try {
133
+ const listRes = await fetch(`${httpUrl}/json/list`);
134
+ if (listRes.ok) {
135
+ const targets = (await listRes.json()) as Array<{ webSocketDebuggerUrl: string; type: string }>;
136
+ const pageTarget = targets.find((t) => t.type === "page") || targets[0];
137
+ if (pageTarget?.webSocketDebuggerUrl) {
138
+ wsUrl = pageTarget.webSocketDebuggerUrl;
139
+ }
140
+ }
141
+ } catch {
142
+ // Fall through to /json/version
143
+ }
144
+
145
+ // Fallback to browser-level target
146
+ if (!wsUrl) {
147
+ const versionRes = await fetch(`${httpUrl}/json/version`);
148
+ const version = (await versionRes.json()) as { webSocketDebuggerUrl: string };
149
+ wsUrl = version.webSocketDebuggerUrl;
150
+ }
69
151
 
70
152
  return new Promise((resolve, reject) => {
71
- const ws = new WebSocket(version.webSocketDebuggerUrl);
153
+ const ws = new WebSocket(wsUrl!);
72
154
  ws.onopen = () => resolve(ws);
73
155
  ws.onerror = (err) => reject(new Error(`CDP connection failed: ${err}`));
74
156
  });
75
157
  }
76
158
 
77
- /** Send a CDP command and wait for response */
159
+ /** Send a CDP command and wait for response (15s timeout) */
78
160
  function sendCDPCommand(
79
161
  ws: WebSocket,
80
162
  method: string,
81
163
  params: Record<string, unknown>
82
164
  ): Promise<{ error?: { message: string }; result?: unknown }> {
83
- const id = Math.floor(Math.random() * 1e9);
165
+ const id = sendCDPCommand._nextId = (sendCDPCommand._nextId || 0) + 1;
84
166
 
85
167
  return new Promise((resolve) => {
168
+ const timeout = setTimeout(() => {
169
+ ws.removeEventListener("message", handler);
170
+ resolve({ error: { message: "CDP timeout (15s)" } });
171
+ }, 15_000);
86
172
  const handler = (event: MessageEvent) => {
87
173
  const data = JSON.parse(String(event.data));
88
174
  if (data.id === id) {
175
+ clearTimeout(timeout);
89
176
  ws.removeEventListener("message", handler);
90
177
  resolve(data);
91
178
  }
@@ -94,6 +181,7 @@ function sendCDPCommand(
94
181
  ws.send(JSON.stringify({ id, method, params }));
95
182
  });
96
183
  }
184
+ sendCDPCommand._nextId = 0;
97
185
 
98
186
  /**
99
187
  * Express/Hono-style handler for the browser-sync cookie push endpoint.
@@ -110,7 +198,9 @@ export async function handleBrowserSyncPush(
110
198
  }
111
199
 
112
200
  const cdpUrl = await resolveCdpUrl(subdomain);
113
- return injectCookiesViaCDP(cdpUrl, storageState.cookies);
201
+ const result = await injectCookiesViaCDP(cdpUrl, storageState.cookies);
202
+ return { injected: result.injected, errors: result.errors };
114
203
  }
115
204
 
205
+ export { sanitizeCookiesForCDP };
116
206
  export type { BrowserSyncRequest };