Last active
September 27, 2025 23:15
-
-
Save jithatsonei/22592380dc1a721649eaa0fc8041891b to your computer and use it in GitHub Desktop.
The Business Journal paywall bypass userscript
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ==UserScript== | |
| // @name BizJournals Auto-Unblock | |
| // @namespace https://bizjournals.com/ | |
| // @version 20250927-2 | |
| // @icon https://www.bizjournals.com/favicon.ico | |
| // @description Attempts to utilize a hidden nuxt function to bypass Business Journal paywalls | |
| // @author ji~ | |
| // @updateURL https://gist.githubusercontent.com/jithatsonei/22592380dc1a721649eaa0fc8041891b/raw | |
| // @downloadURL https://gist.githubusercontent.com/jithatsonei/22592380dc1a721649eaa0fc8041891b/raw | |
| // @match *://*.bizjournals.com/* | |
| // @run-at document-end | |
| // @grant none | |
| // ==/UserScript== | |
| (function() { | |
| 'use strict'; | |
| function tryUnblock() { | |
| const root = document.getElementById('__nuxt'); | |
| if (!root) return false; | |
| const app = root.__vue_app__ || root.__vueParentComponent?.appContext?.app; | |
| if (!app) return false; | |
| const pinia = app.config?.globalProperties?.$pinia || app._context?.provides?.pinia; | |
| if (!pinia || !pinia._s) return false; | |
| let store = pinia._s.get('content') || pinia._s.get('Content'); | |
| if (!store) { | |
| for (const [id, s] of pinia._s) { | |
| if (typeof s?.unblock === 'function') { | |
| store = s; | |
| console.log(`[BizJournals Auto-Unblock] Found unblock() on store "${id}"`); | |
| break; | |
| } | |
| } | |
| } | |
| if (!store) return false; | |
| try { | |
| const result = store.unblock(); | |
| console.log(`[BizJournals Auto-Unblock] unblock() called`, { result, state: { ...store.$state } }); | |
| } catch (err) { console.warn(`[BizJournals Auto-Unblock] Error calling unblock():`, err); } | |
| return true; | |
| } | |
| let attempts = 0; | |
| const maxAttempts = 5; | |
| const interval = setInterval(() => { | |
| attempts++; | |
| if (tryUnblock() || attempts >= maxAttempts) { | |
| clearInterval(interval); | |
| } | |
| }, 500); | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment