browser-cookie-bridge 1.5.3 → 1.5.5
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,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "Browser Cookie Bridge",
|
|
4
|
-
"version": "1.5.
|
|
4
|
+
"version": "1.5.5",
|
|
5
5
|
"description": "Transfers selected browser data locally between supported browsers and embedded app browsers.",
|
|
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.5.
|
|
14
|
-
<key>CFBundleVersion</key><string>
|
|
13
|
+
<key>CFBundleShortVersionString</key><string>1.5.5</string>
|
|
14
|
+
<key>CFBundleVersion</key><string>42</string>
|
|
15
15
|
<key>LSMinimumSystemVersion</key><string>13.5</string>
|
|
16
16
|
<key>NSHighResolutionCapable</key><true/>
|
|
17
17
|
</dict>
|
|
@@ -691,9 +691,11 @@ final class SyncModel: ObservableObject {
|
|
|
691
691
|
private func startGrokBotExport(showMenuBarAlert: Bool) {
|
|
692
692
|
let panel = NSSavePanel()
|
|
693
693
|
panel.title = "Save Grok Bot transfer file"
|
|
694
|
-
|
|
694
|
+
// Base name only: including ".bcbx" here plus allowedContentTypes often makes macOS append a second extension (GrokBot-Import.bcbx.bcbx) and breaks Replace on an existing file.
|
|
695
|
+
panel.nameFieldStringValue = "GrokBot-Import"
|
|
695
696
|
panel.canCreateDirectories = true
|
|
696
697
|
panel.isExtensionHidden = false
|
|
698
|
+
panel.allowsOtherFileTypes = false
|
|
697
699
|
if #available(macOS 12.0, *) {
|
|
698
700
|
panel.allowedContentTypes = [UTType(filenameExtension: "bcbx") ?? .data]
|
|
699
701
|
} else {
|
|
@@ -756,12 +758,14 @@ final class SyncModel: ObservableObject {
|
|
|
756
758
|
self.secondaryStatus = "No cloud profile was changed; temporary profile data was removed"
|
|
757
759
|
} else if success {
|
|
758
760
|
self.state = partial ? .warning : .success
|
|
759
|
-
if self.isGrokBotTarget
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
self.
|
|
761
|
+
if self.isGrokBotTarget {
|
|
762
|
+
let parsed = self.parseGrokBotResult(from: output)
|
|
763
|
+
let outputPath = parsed?.outputPath ?? grokBotOutputPath ?? self.grokBotOutputPath
|
|
764
|
+
self.grokBotOutputPath = outputPath
|
|
765
|
+
self.grokBotPrompt = parsed?.prompt ?? Self.grokBotFallbackPrompt
|
|
763
766
|
self.primaryStatus = partial ? "Grok Bot transfer created with warnings" : "Grok Bot transfer file ready"
|
|
764
767
|
self.secondaryStatus = self.lastMeaningfulLine(output) ?? "Attach the .bcbx file to any Grok Bot and paste the prompt"
|
|
768
|
+
self.presentGrokBotResultSheet()
|
|
765
769
|
} else {
|
|
766
770
|
self.primaryStatus = self.isBrowserlessTarget
|
|
767
771
|
? (partial ? "Browserless profile uploaded with omissions" : "Browserless profile uploaded")
|
|
@@ -1167,6 +1171,21 @@ final class SyncModel: ObservableObject {
|
|
|
1167
1171
|
isDirectTarget || selectedTargetID == "browserless" || isGrokBotTarget ? [] : [selectedSourceID, selectedTargetID]
|
|
1168
1172
|
}
|
|
1169
1173
|
|
|
1174
|
+
private static let grokBotFallbackPrompt = """
|
|
1175
|
+
On your Grok Bot cloud computer only — do not access my local Mac and do not print cookie values.
|
|
1176
|
+
|
|
1177
|
+
1. Save the attached GrokBot-Import.bcbx to the cloud computer.
|
|
1178
|
+
2. Unzip it: unzip -o GrokBot-Import.bcbx -d bcb-import && cd bcb-import
|
|
1179
|
+
3. Run: node import.mjs
|
|
1180
|
+
4. Report only how many cookies were imported per domain, then delete the bcb-import folder and any copies of the bundle.
|
|
1181
|
+
"""
|
|
1182
|
+
|
|
1183
|
+
private func presentGrokBotResultSheet() {
|
|
1184
|
+
DispatchQueue.main.async { [weak self] in
|
|
1185
|
+
self?.showingGrokBotResult = true
|
|
1186
|
+
}
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1170
1189
|
private struct GrokBotResultPayload: Decodable {
|
|
1171
1190
|
let outputPath: String
|
|
1172
1191
|
let prompt: String
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -13,6 +13,7 @@ import { isChromiumBrowserRunning, readChromiumProfile } from "./chromium-reader
|
|
|
13
13
|
import { uploadBrowserlessProfile } from "./browserless.js";
|
|
14
14
|
import { inspectBrowserlessProfile } from "./browserless-preflight.js";
|
|
15
15
|
import {
|
|
16
|
+
formatGrokBotResultLine,
|
|
16
17
|
grokBotSummary,
|
|
17
18
|
writeGrokBotBundle,
|
|
18
19
|
} from "./grok-bot-export.js";
|
|
@@ -310,13 +311,10 @@ async function sync(args, { signal } = {}) {
|
|
|
310
311
|
});
|
|
311
312
|
result.sourceCookieSkipped = payload.cookieStats.skipped;
|
|
312
313
|
console.log(grokBotSummary(result));
|
|
313
|
-
console.log(
|
|
314
|
+
console.log(formatGrokBotResultLine({
|
|
314
315
|
outputPath: result.outputPath,
|
|
315
|
-
cookieCount: result.cookieCount,
|
|
316
|
-
domainCount: result.domainCount,
|
|
317
|
-
domains: result.domains,
|
|
318
316
|
prompt: result.prompt,
|
|
319
|
-
})
|
|
317
|
+
}));
|
|
320
318
|
return result;
|
|
321
319
|
}
|
|
322
320
|
if (target === "browserless") {
|
package/src/grok-bot-export.js
CHANGED
|
@@ -157,6 +157,11 @@ export function grokBotSummary(result) {
|
|
|
157
157
|
return `Grok Bot transfer file created: ${result.cookieCount} cookies across ${domainNote} from ${result.sourceBrowser}.${skipped} Attach ${path.basename(result.outputPath)} to any Grok Bot and paste the prompt. The bundle includes the decryption key—treat the file as credentials and do not share it.`;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
+
/** Machine-readable sync result for the macOS app (keep small — no domain lists). */
|
|
161
|
+
export function formatGrokBotResultLine({ outputPath, prompt }) {
|
|
162
|
+
return `BCB_GROK_RESULT ${JSON.stringify({ outputPath, prompt })}`;
|
|
163
|
+
}
|
|
164
|
+
|
|
160
165
|
export function filterCookies(cookies, onlyDomains = []) {
|
|
161
166
|
const domains = normalizeDomainFilters(onlyDomains);
|
|
162
167
|
if (!domains.length) return cookies;
|