Decodes Base64 search queries into URLs or text.
// ==UserScript==
// @name Search Decode
// @namespace http://tampermonkey.net/
// @version 1.0.0
// @description Decodes Base64 search queries into URLs or text.
// @author bewf, KHROTU
// @match https://www.google.com/search*
// @match https://www.bing.com/search*
// @match https://duckduckgo.com/*
// @match https://search.brave.com/search*
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_registerMenuCommand
// @run-at document-start
// @license MIT
// ==/UserScript==
(function() {
'use strict';
const enabled = GM_getValue('sd_enabled', true);
const mode = GM_getValue('sd_mode', 'url_only');
GM_registerMenuCommand(enabled ? 'Search Decode: Enabled' : 'Search Decode: Disabled', () => { GM_setValue('sd_enabled', !enabled); location.reload(); });
GM_registerMenuCommand(mode === 'url_only' ? 'Search Decode: URL Only' : 'Search Decode: URL + Text', () => { GM_setValue('sd_mode', mode === 'url_only' ? 'all' : 'url_only'); location.reload(); });
if (!enabled) return;
const q = new URL(location.href).searchParams.get('q');
if (!q) return;
let decoded;
try { decoded = decodeURIComponent(escape(atob(q))).trim(); } catch { return; }
if (!decoded) return;
const isUrl = /^(https?:\/\/|www\.|[a-zA-Z0-9-]+\.[a-zA-Z]{2,})/.test(decoded);
if (mode === 'url_only') {
if (isUrl) location.replace(decoded.startsWith('http') ? decoded : 'https://' + decoded);
} else {
if (isUrl) location.replace(decoded.startsWith('http') ? decoded : 'https://' + decoded);
else {
const href = location.href, encoded = encodeURIComponent(decoded);
if (href.includes('duckduckgo.com')) location.replace('https://duckduckgo.com/?q=' + encoded);
else if (href.includes('bing.com')) location.replace('https://www.bing.com/search?q=' + encoded);
else if (href.includes('brave.com')) location.replace('https://search.brave.com/search?q=' + encoded);
else location.replace('https://www.google.com/search?q=' + encoded);
}
}
})();