6 Commits

Author SHA1 Message Date
ObjectAscended c57ed620c7 Merge pull request #8 from ShyVortex/main
Add support for macOS
2026-06-19 01:27:45 -07:00
Angelo Trotta 4ffaca5fcc Cleanup .DS_Store 2026-06-19 09:34:04 +02:00
Angelo Trotta 27a4a172cb refactor macos support into single file 2026-06-19 09:29:51 +02:00
Angelo Trotta 386611bc3a Cleanup .vscode folder 2026-06-18 18:26:07 +02:00
Angelo Trotta 46a5966ed3 Add support for macOS 2026-06-18 18:15:57 +02:00
ObjectAscended ba5de278ee Add Brave-Origin to versions and reformat README 2026-06-04 21:09:49 -07:00
4 changed files with 84 additions and 14 deletions
+3
View File
@@ -0,0 +1,3 @@
dist/
.vscode/
.DS_Store
+46 -11
View File
@@ -1,6 +1,6 @@
# Brave Origin Windows Unlocker
# Brave Origin Unlocker
A TypeScript utility for unlocking Brave Origin features on Windows by modifying the local application state.
A TypeScript utility for unlocking Brave Origin features on Windows and macOS by modifying the local application state.
## Overview
@@ -11,34 +11,69 @@ This tool modifies the Brave Origin browser's local state configuration to unloc
- ✅ Unlocks Brave Origin features
- ✅ Modifies purchase validation state
- ✅ Updates SKU credentials
- ✅ Windows-compatible local data path handling
- ✅ Windows and macOS auto-detection & compatibility
- ✅ Easy execution and cross-compilation via Deno tasks
## Requirements
- **Deno** - Modern JavaScript/TypeScript runtime
- **Windows OS** - Designed for Windows file paths
- **Windows OS or macOS** - Supported operating systems
- **Brave Origin** - The browser being modified
- **File Write Permissions** - Access to `%LOCALAPPDATA%` directory
- **File Write Permissions** - Access to browser configurations
## Installation
1. Install [Deno](https://deno.land/) if you haven't already
1. Install [Deno](https://deno.land/) if you haven't already.
2. Clone this repository:
```bash
git clone https://github.com/ObjectAscended/brave-origin-windows-unlocker.git
cd brave-origin-windows-unlocker
```
## How to Run 🚀
The script automatically detects whether you are running on Windows or macOS. You can run the unlocker directly with:
```bash
deno task unlock
```
---
## How to Compile / Cross-Compile 📦
You can build standalone binaries for different operating systems and architectures using the pre-configured compilation tasks:
### Compile for Windows (x64)
```bash
deno task compile-win
```
### Compile for macOS Apple Silicon (ARM64)
```bash
deno task compile-mac-arm
```
### Compile for macOS Intel (x64)
```bash
deno task compile-mac-x64
```
These tasks will output the built binaries into the `dist/` directory.
---
## Pre-Bundled Deno Binaries 🎉
In our latest releases, we offer **pre-bundled Deno binaries** that make running the Windows unlocker easier than ever! 🚀 You can download them from our [latest release page](https://github.com/ObjectAscended/brave-origin-windows-unlocker/releases/latest). These binaries ensure a smooth setup and save you time, so you can focus on enjoying your experience without unnecessary hassle! 🕒
In our latest releases, we offer **pre-bundled Deno binaries** that make running the unlocker easier than ever! 🚀 You can download them from our [latest release page](https://github.com/ObjectAscended/brave-origin-windows-unlocker/releases/latest). These binaries ensure a smooth setup and save you time.
## Why Run the Windows Unlocker Instead of WSL? 🤔
## Why Run the Unlocker Natively? 🤔
Running the Windows unlocker natively is typically a better choice than running a browser inside WSL. Here's why:
Running the unlocker natively is typically a better choice than running a browser inside virtual/emulated environments. Here's why:
1. **Performance**: The native Windows experience generally offers better performance than emulated environments like WSL. ⚡
1. **Performance**: The native experience generally offers better performance than emulated environments. ⚡
2. **Simplicity**: You avoid complex setups and configurations, making it more straightforward for users of all levels. 🛠️
3. **Compatibility**: Some features and functionalities might only work seamlessly in a Windows environment, ensuring you get the most out of your tools. 🔗
3. **Compatibility**: Some features and functionalities might only work seamlessly in a native environment, ensuring you get the most out of your tools. 🔗
4. **User Experience**: Enjoy a more intuitive interface and fewer problems managing dependencies. 😊
Enjoy using our tool! 🎈
+8
View File
@@ -0,0 +1,8 @@
{
"tasks": {
"unlock": "deno run --allow-env --allow-read --allow-write unlock.ts",
"compile-win": "deno compile --allow-env --allow-read --allow-write --target x86_64-pc-windows-msvc --output dist/unlock-win.exe unlock.ts",
"compile-mac-arm": "deno compile --allow-env --allow-read --allow-write --target aarch64-apple-darwin --output dist/unlock-mac-arm unlock.ts",
"compile-mac-x64": "deno compile --allow-env --allow-read --allow-write --target x86_64-apple-darwin --output dist/unlock-mac-x64 unlock.ts"
}
}
+27 -3
View File
@@ -1,14 +1,38 @@
const localAppData = Deno.env.get("LOCALAPPDATA");
const os = Deno.build.os;
const versions = ["Brave-Origin-Beta", "Brave-Origin-Nightly"];
let localStatePathPattern: (version: string) => string;
if (os === "windows") {
const localAppData = Deno.env.get("LOCALAPPDATA");
if (!localAppData) {
console.error("Error: LOCALAPPDATA environment variable not found.");
Deno.exit(1);
}
localStatePathPattern = (version) =>
`${localAppData}\\BraveSoftware\\${version}\\User Data\\Local State`;
} else if (os === "darwin") {
const homeDir = Deno.env.get("HOME");
if (!homeDir) {
console.error("Error: HOME environment variable not found.");
Deno.exit(1);
}
localStatePathPattern = (version) =>
`${homeDir}/Library/Application Support/BraveSoftware/${version}/Local State`;
} else {
console.error(`Error: Unsupported operating system: ${os}`);
Deno.exit(1);
}
const versions = ["Brave-Origin", "Brave-Origin-Beta", "Brave-Origin-Nightly"];
let foundAny = false;
for (const version of versions) {
const localStatePath = localAppData + "\\BraveSoftware\\" + version + "\\User Data\\Local State";
const localStatePath = localStatePathPattern(version);
try {
const localState = JSON.parse(await Deno.readTextFile(localStatePath));
localState.brave = localState.brave || {};
localState.brave.origin = { purchase_validated: true };
localState.skus = {