From 54a41f2431c3d60f5845a15447f13413299e41f2 Mon Sep 17 00:00:00 2001 From: memdmp Date: Mon, 24 Feb 2025 01:09:00 +0100 Subject: feat: da extension --- src/background.ts | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/background.ts (limited to 'src/background.ts') diff --git a/src/background.ts b/src/background.ts new file mode 100644 index 0000000..65d7187 --- /dev/null +++ b/src/background.ts @@ -0,0 +1,67 @@ +import browser from 'webextension-polyfill'; +import type { UserlandBrowser } from './routes/userland'; + +console.debug('Loading Extension'); +setTimeout(async () => { + const { sc } = await browser.storage.local.get('sc'); + if (typeof sc === 'undefined') { + console.warn('No value set!'); + } else if (typeof sc !== 'string') { + throw new Error('typeof sc is not str nor undefined'); + } else { + console.debug('Found Script (length', sc.length, ':3)'); + console.debug('Loading esbuild-wasm'); + const { initialize, transform } = await import('esbuild-wasm').catch( + (e) => { + console.error('Failed to load esbuild-wasm!'); + throw e; + } + ); + console.debug("Loading esbuild's WASM Module"); + const wasmModule = new WebAssembly.Module( + await fetch('./generated/esbuild.wasm') + .catch((e) => { + console.error('Failed to fetch() the esbuild wasm file.'); + throw e; + }) + .then((v) => v.arrayBuffer()) + ); + console.debug('Attempting to initialize esbuild-wasm'); + try { + await initialize({ + wasmModule, + worker: false, + }); + } catch (error) { + console.error(error); + throw new Error('Failed to initialize esbuild - see above error'); + } + console.debug('Transforming Content'); + const built = await transform(sc, { + loader: 'ts', + }); + console.debug('Got result', built); + const b = browser; + const brow: UserlandBrowser = { + get webRequest() { + return b.webRequest; + }, + }; + const f = new Function( + 'browser', + built.code.includes('await') + ? `return (async()=>{${built.code} +})();` + : built.code + ); + console.debug('Environment Information:', { + func: f, + browser: brow, + realBrowser: b, + }); + (globalThis as any).browser = brow; + console.debug('Evaluating...'); + await f(brow); + console.debug('Function Exited'); + } +}, 0); -- cgit v1.2.3