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 +35 -13
- package/THIRD_PARTY_NOTICES.md +11 -0
- package/bin/brave-codex-cookie-sync.js +10 -2
- package/extension-template/manifest.json +1 -1
- package/macos-app/Info.plist +2 -2
- package/macos-app/Resources/BrowserIcons/browserless.svg +6 -0
- package/macos-app/Sources/BraveCodexSyncApp/BraveCodexSyncApp.swift +342 -62
- package/macos-app/Sources/BraveCodexSyncApp/SyncModel.swift +400 -34
- package/package.json +11 -6
- package/src/browserless-preflight.js +113 -0
- package/src/browserless-runner.js +13 -0
- package/src/browserless.js +281 -0
- package/src/cli.js +76 -6
- package/src/config.js +38 -4
- package/src/paths.js +1 -1
package/README.md
CHANGED
|
@@ -4,16 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
<h1>Browser Cookie Bridge</h1>
|
|
6
6
|
|
|
7
|
-
<strong>Move
|
|
7
|
+
<strong>Move signed-in sessions locally—or explicitly upload one to Browserless Cloud.</strong>
|
|
8
8
|
|
|
9
|
-
<p>Brave, Chrome, Edge, Arc, Vivaldi, Opera, and Comet ·
|
|
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-
|
|
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-
|
|
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.
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
|
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"],
|
package/macos-app/Info.plist
CHANGED
|
@@ -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.
|
|
14
|
-
<key>CFBundleVersion</key><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
|
+
|