browser-cookie-bridge 1.1.0 → 1.3.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/README.md CHANGED
@@ -4,16 +4,16 @@
4
4
 
5
5
  <h1>Browser Cookie Bridge</h1>
6
6
 
7
- <strong>Move cookies and signed-in sessions between browserslocally on your Mac.</strong>
7
+ <strong>Move signed-in sessions locallyor explicitly upload one to Browserless Cloud.</strong>
8
8
 
9
- <p>Brave, Chrome, Edge, Arc, Vivaldi, Opera, and Comet · browser-to-browser transfer · import into ChatGPT Codex.</p>
9
+ <p>Brave, Chrome, Edge, Arc, Vivaldi, Opera, and Comet · ChatGPT Codex import · optional Browserless authenticated profiles.</p>
10
10
 
11
11
  <p>
12
12
  <img src="https://img.shields.io/badge/macOS-13.5%2B-111111?logo=apple&logoColor=white" alt="macOS 13.5+" />
13
13
  <img src="https://img.shields.io/badge/Swift-6-8E2735?logo=swift&logoColor=white" alt="Swift 6" />
14
- <img src="https://img.shields.io/badge/Node.js-22.5%2B-3C873A?logo=nodedotjs&logoColor=white" alt="Node.js 22.5+" />
14
+ <img src="https://img.shields.io/badge/Node.js-24%2B-3C873A?logo=nodedotjs&logoColor=white" alt="Node.js 24+" />
15
15
  <a href="https://www.npmjs.com/package/browser-cookie-bridge"><img src="https://img.shields.io/npm/v/browser-cookie-bridge?logo=npm&color=CB3837" alt="browser-cookie-bridge on npm" /></a>
16
- <img src="https://img.shields.io/badge/local--first-no%20cloud-C68B3C" alt="Local-first, no cloud" />
16
+ <img src="https://img.shields.io/badge/local--first-cloud%20optional-C68B3C" alt="Local-first, cloud optional" />
17
17
  <img src="https://img.shields.io/github/stars/apoorvdarshan/browser-cookie-bridge?logo=github&color=C68B3C" alt="GitHub stars" />
18
18
  <a href="https://www.producthunt.com/products/browser-cookie-bridge"><img src="https://img.shields.io/badge/Product%20Hunt-View%20launch-DA552F?logo=producthunt&logoColor=white" alt="Browser Cookie Bridge on Product Hunt" /></a>
19
19
  <img src="https://img.shields.io/badge/license-MIT-3DA639" alt="MIT License" />
@@ -44,24 +44,25 @@
44
44
 
45
45
  ---
46
46
 
47
- > **Version 1.1.0 adds self-contained DMG downloads.** Importing into ChatGPT Codex is an intentionally unsupported direct integration and requires Codex to be completely closed.
47
+ > **Version 1.3.0 makes large Browserless uploads observable and recoverable.** The app measures the local profile and IndexedDB without reading their contents, streams capture progress and elapsed time, supports cancellation with deterministic temporary-data cleanup, reports auto-fit omissions, and verifies the cloud profile after upload.
48
48
 
49
49
  ## Why Browser Cookie Bridge
50
50
 
51
51
  Signing into the same sites across several browsers is repetitive. Export files are awkward, password managers do not move active sessions, and ChatGPT Codex does not currently offer a Brave import button.
52
52
 
53
- Browser Cookie Bridge gives those local browser profiles a small, native control panel. Pick where data comes from, pick where it goes, choose cookies or history, and sync. Transfers stay on the Mac you are using.
53
+ Browser Cookie Bridge gives those browser profiles a small, native control panel. Local browser and Codex transfers stay on the Mac. If you explicitly select Browserless Cloud and click Upload, the app can instead send authenticated profile state to your own Browserless account.
54
54
 
55
55
  ## Features
56
56
 
57
57
  - 🍪 **Cookie and session transfer** — cookies are enabled by default, including supported domain, path, expiry, security, `SameSite`, and partition attributes.
58
58
  - 🌐 **Seven Chromium browsers** — Brave, Chrome, Edge, Arc, Vivaldi, Opera, and Perplexity Comet can be sources or destinations.
59
59
  - ✨ **ChatGPT Codex import** — merge selected local browser data into Codex's built-in browser; Codex is destination-only.
60
+ - ☁️ **Optional Browserless upload** — create or refresh a Browserless authenticated profile with cookies, local storage, and IndexedDB; see a local size preflight, live progress, cancellation, and post-upload verification.
60
61
  - 🕘 **Background automation** — sync when you sign in, at a fixed daily time, or whenever you choose.
61
62
  - ◉ **Native menu-bar app** — closing the window removes the Dock icon while the helper continues running.
62
63
  - 🧯 **Backup and rollback** — Codex's database is backed up, modified on a separate copy, integrity-checked, and restored if replacement fails.
63
64
  - ⬆️ **Built-in updates** — checks for GitHub releases, verifies the DMG checksum, installs in place, and relaunches the app.
64
- - 🔒 **Local-first** — no account, analytics, cloud service, cookie logs, or remote relay.
65
+ - 🔒 **Local-first** — local paths use no account, analytics, cookie logs, or remote relay; the separate Browserless path runs only after explicit selection and confirmation.
65
66
 
66
67
  ## What it transfers
67
68
 
@@ -69,6 +70,7 @@ Browser Cookie Bridge gives those local browser profiles a small, native control
69
70
  |---|---:|---|
70
71
  | **Cookies and sessions** | ✅ Default | Transfers supported cookie values and attributes |
71
72
  | **History URLs** | ◐ Optional | Original visit times and page titles cannot be preserved |
73
+ | **Local storage and IndexedDB** | ◐ Browserless only | Included only in an explicit Browserless authenticated-profile upload |
72
74
  | **Passwords** | — Never | Chromium extensions cannot read the browser password store |
73
75
  | **Bookmarks, autofill, payments** | — Never | Not requested or accessed |
74
76
  | **iCloud Keychain** | — Never | Remains completely separate |
@@ -80,7 +82,7 @@ Some websites bind sessions to a specific device or browser and may ask you to s
80
82
  - **macOS 13.5+**
81
83
  - A supported Chromium browser, or ChatGPT Codex as the destination
82
84
 
83
- The DMG is self-contained. Node.js 22.5+ and Xcode Command Line Tools are required only for npm or source installation.
85
+ The DMG is self-contained. Node.js 24+ and Xcode Command Line Tools are required only for npm or source installation.
84
86
 
85
87
  ## Installation
86
88
 
@@ -140,12 +142,29 @@ Browser-to-browser transfers use a small unpacked extension at each selected end
140
142
 
141
143
  Generated extensions live under `~/Library/Application Support/BraveCodexCookieSync/` and contain a random, user-only local broker token. Do not share those folders.
142
144
 
145
+ ### Browser → Browserless Cloud (optional)
146
+
147
+ This path uses the official Browserless CLI and is deliberately separate from local sync.
148
+
149
+ 1. Select **Browserless Cloud** as the destination.
150
+ 2. Enter your Browserless API token, cloud profile name, region, and optional domain allowlist. The token is stored in macOS Keychain; it is never written to the app configuration or command arguments.
151
+ 3. Quit the selected source browser so its profile can be copied consistently.
152
+ 4. Review the cloud warning and click **Upload now**.
153
+
154
+ The upload creates the named Browserless profile the first time and refreshes it on later runs. It may contain cookies, local storage, and IndexedDB; history and saved passwords are excluded. The app measures the profile, IndexedDB, local storage, and available disk space locally before capture. Progress and elapsed time remain visible, Cancel upload terminates the isolated capture process group, and the dedicated temporary workspace is removed after success, failure, timeout, or cancellation.
155
+
156
+ Browserless currently caps the serialized authenticated-profile artifact at **2 MB**. A large on-disk IndexedDB does not mean all of it will be uploaded: the official CLI's `--auto-fit` behavior drops the heaviest origins until the artifact fits while keeping cookies. Browser Cookie Bridge reports those omissions in the final result and verifies that the named cloud profile can be read back after upload. Use the domain allowlist when you need specific sites or want a faster, smaller capture.
157
+
158
+ Browserless uploads never run from Daily sync or Sync at login. Browser Cookie Bridge disables Browserless CLI telemetry for this integration. Comet is not currently supported by the Browserless capture CLI. The default cloud timeout is 15 minutes; `--timeout` can override it.
159
+
160
+ The official CLI records the Browserless upload-disclaimer acceptance timestamp in `~/.browserless/config.json`. Browser Cookie Bridge does not store its API token there.
161
+
143
162
  ## Usage
144
163
 
145
164
  | Control | What it does |
146
165
  |---|---|
147
166
  | **Export from** | Selects the browser whose data will be read |
148
- | **Import into** | Selects a different browser or ChatGPT Codex |
167
+ | **Import into** | Selects a different browser, ChatGPT Codex, or optional Browserless Cloud |
149
168
  | **Cookies** | Moves cookies and supported session attributes; on by default |
150
169
  | **History URLs** | Adds visited URLs without their original timestamps or titles |
151
170
  | **Daily sync** | Runs at one fixed local time; off by default |
@@ -154,7 +173,7 @@ Generated extensions live under `~/Library/Application Support/BraveCodexCookieS
154
173
  | **Show in menu bar** | Keeps sync, status, updates, and support actions close at hand |
155
174
  | **Check for updates** | Finds a newer GitHub release, verifies its DMG, and offers install + relaunch |
156
175
 
157
- Automation always uses the source, destination, and data choices currently saved in the app. A scheduled Codex sync safely exits without making changes when Codex is open.
176
+ Automation uses the saved source, destination, and data choices for local transfers. A scheduled Codex sync safely exits without making changes when Codex is open. Browserless cloud uploads are always manual and require an explicit upload action.
158
177
 
159
178
  ## CLI
160
179
 
@@ -162,7 +181,8 @@ Automation always uses the source, destination, and data choices currently saved
162
181
  browser-cookie-bridge install-app [--no-open]
163
182
  browser-cookie-bridge setup [--hour 9] [--minute 0] [--no-schedule]
164
183
  browser-cookie-bridge preferences --source brave --target codex --cookies on --history off
165
- browser-cookie-bridge sync [--timeout 300]
184
+ browser-cookie-bridge sync [--timeout 300] [--allow-cloud-upload]
185
+ browser-cookie-bridge browserless-preflight
166
186
  browser-cookie-bridge doctor
167
187
  browser-cookie-bridge enable-login-sync
168
188
  browser-cookie-bridge disable-login-sync
@@ -171,7 +191,7 @@ browser-cookie-bridge disable-app-login
171
191
  browser-cookie-bridge remove-schedule
172
192
  ```
173
193
 
174
- Supported source IDs are `brave`, `chrome`, `edge`, `arc`, `vivaldi`, `opera`, and `comet`. Target IDs are the same plus `codex`. The same browser cannot be both endpoints.
194
+ Supported source IDs are `brave`, `chrome`, `edge`, `arc`, `vivaldi`, `opera`, and `comet`. Target IDs are the same plus `codex` and `browserless`. The same browser cannot be both endpoints. Browserless requires `BROWSERLESS_TOKEN` and the explicit `--allow-cloud-upload` flag; the native app supplies the token from Keychain without placing it in the OS command line or app configuration.
175
195
 
176
196
  ## How it works
177
197
 
@@ -179,6 +199,7 @@ Supported source IDs are `brave`, `chrome`, `edge`, `arc`, `vivaldi`, `opera`, a
179
199
  |---|---|
180
200
  | **Browser → browser** | Unpacked extensions connect to a short-lived broker on IPv4 loopback. Selected data stays in memory and is never written to logs. |
181
201
  | **Browser → Codex** | The app reads the selected local Chromium profile, creates a consistent Codex SQLite backup, merges into a working copy, validates it, then replaces the destination atomically. |
202
+ | **Browser → Browserless** | The bundled official Browserless CLI copies a closed local profile, captures cookies/local storage/IndexedDB, and uploads it directly to the selected Browserless region. |
182
203
 
183
204
  The broker validates a random token and extension origin, limits payload size, and normally exits after five minutes. Only the endpoints selected in the app respond to a transfer.
184
205
 
@@ -190,6 +211,7 @@ The broker validates a random token and extension origin, limits payload size, a
190
211
  - The app refuses unknown Codex database schemas instead of guessing.
191
212
  - Imported Codex rows use an empty `encrypted_value` because OpenAI's Safe Storage key is protected by a private macOS Keychain access group. Those imported rows can therefore remain readable to software running as your macOS user until the website refreshes them.
192
213
  - Anyone who can use your logged-in macOS account or modify a generated extension may be able to access transferred browser sessions.
214
+ - The optional Browserless destination sends authenticated state to Browserless under their terms and privacy practices. Its API token is stored in macOS Keychain, uploads are manual, and Browserless CLI telemetry is disabled by the app.
193
215
 
194
216
  Cookies are credentials. Review the source, protect your macOS account, and transfer only between profiles you trust.
195
217
 
@@ -237,4 +259,4 @@ npm run web
237
259
 
238
260
  [MIT](LICENSE) © 2026 [Apoorv Darshan](https://github.com/apoorvdarshan)
239
261
 
240
- <sub>Not affiliated with Brave, Google, Microsoft, The Browser Company, Vivaldi, Opera, Perplexity, or OpenAI. Their names and marks belong to their respective owners.</sub>
262
+ <sub>Not affiliated with Brave, Google, Microsoft, The Browser Company, Vivaldi, Opera, Perplexity, OpenAI, or Browserless. Their names and marks belong to their respective owners.</sub>
@@ -0,0 +1,11 @@
1
+ # Third-party notices
2
+
3
+ Browser Cookie Bridge includes the official Browserless CLI for the optional, user-initiated Browserless Cloud destination.
4
+
5
+ ## @browserless.io/cli
6
+
7
+ - Version: 0.3.0
8
+ - License: MIT
9
+ - Source: https://github.com/browserless/browserless-cli
10
+
11
+ The Browserless CLI's license and the licenses shipped with its npm dependencies remain included inside `node_modules` in self-contained app builds. Browser Cookie Bridge disables Browserless CLI telemetry for uploads started through this app.
@@ -2,7 +2,15 @@
2
2
 
3
3
  import { main } from "../src/cli.js";
4
4
 
5
- main(process.argv.slice(2)).catch((error) => {
5
+ const controller = new AbortController();
6
+ const cancel = () => controller.abort();
7
+ process.once("SIGINT", cancel);
8
+ process.once("SIGTERM", cancel);
9
+
10
+ main(process.argv.slice(2), { signal: controller.signal }).catch((error) => {
6
11
  console.error(`Error: ${error.message}`);
7
- process.exitCode = 1;
12
+ process.exitCode = controller.signal.aborted ? 130 : 1;
13
+ }).finally(() => {
14
+ process.removeListener("SIGINT", cancel);
15
+ process.removeListener("SIGTERM", cancel);
8
16
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "Browser Cookie Bridge",
4
- "version": "1.1.0",
4
+ "version": "1.3.0",
5
5
  "description": "Transfers selected browser data locally between supported browsers and into ChatGPT Codex.",
6
6
  "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5o6lDkXzU/23Jm2QRk4mfuxNnr3VlEIjRHcZr93Gdo7PI7asHJQhigaMGT6UOz0lkaTn1F+TGIPlsJo9GNBSsxbCfxWoBSXcFQFrPolY5LEfKaMtZQQ6eb4UAnp+bbUwb1den4On0piWU47Yzl6i0Jcdg4EG5H1kCSF/6nJsbKgF7OTaR/3drULu40yRvflzSXRhly3UDO7c5mgHJsaMwVV+VILsxbcPOoRINjuo3zDC737HFs67dpf38xF3tjSVL0HURAWKKobMvfABiDfVEm5O0Lvf+57d1Ib12QLT2qtVXNDy3iYwX+w2S0wH2vIMsfvoFPlRdmeqft70kZOqXwIDAQAB",
7
7
  "permissions": ["alarms", "cookies", "history"],
@@ -10,8 +10,8 @@
10
10
  <key>CFBundleInfoDictionaryVersion</key><string>6.0</string>
11
11
  <key>CFBundleName</key><string>Browser Cookie Bridge</string>
12
12
  <key>CFBundlePackageType</key><string>APPL</string>
13
- <key>CFBundleShortVersionString</key><string>1.1.0</string>
14
- <key>CFBundleVersion</key><string>25</string>
13
+ <key>CFBundleShortVersionString</key><string>1.3.0</string>
14
+ <key>CFBundleVersion</key><string>27</string>
15
15
  <key>LSMinimumSystemVersion</key><string>13.5</string>
16
16
  <key>NSHighResolutionCapable</key><true/>
17
17
  </dict>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" width="256px" height="256px" viewBox="0 0 256 256">
3
+ <style>.s0{fill:black}@media (prefers-color-scheme:dark){.s0{fill:white}}</style>
4
+ <path class="s0" d="M 60.96875 0 C 61.0625 0.03125 67.5625 3.75 89.75 16.625 L 89.75 119.5625 C 89.75 217.46875 89.78125 222.5 90.1875 222.375 C 90.4375 222.3125 107.625 213.875 166.21875 185.125 L 166.25 169.6875 C 166.25 157.4375 166.1875 154.28125 165.9375 154.34375 C 165.78125 154.40625 155.03125 159.34375 142.0625 165.34375 C 129.09375 171.34375 118.4375 176.21875 118.375 176.1875 C 118.3125 176.15625 118.3125 144.09375 118.375 33.78125 L 147.25 50.78125 L 147.53125 114.875 L 195.375 142.71875 L 195.5 203.625 L 142.21875 229.75 C 112.9375 244.125 88.75 255.90625 88.53125 255.9375 C 88.3125 256 81.90625 251.875 60.46875 237.625 L 60.5 163.5 C 60.5 122.71875 60.5625 69.28125 60.6875 44.6875 C 60.75 20.09375 60.90625 0 60.96875 0 Z" />
5
+ </svg>
6
+