Can embed any file in a PNG/WebM/GIF/JPEG and upload it to a third-party host through 4chan
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

163 lines
4.4 KiB

/* eslint-disable */
import { spawnSync } from 'child_process';
import { writeFileSync, readFileSync, copyFileSync } from 'fs'
import inlineWorkerPlugin from 'esbuild-plugin-inline-worker';
import esbuild from "esbuild";
import esbuildSvelte from "esbuild-svelte";
import sveltePreprocess from "svelte-preprocess";
//import path from 'path';
//import ChromeExtension from 'crx';
//const crx = new ChromeExtension({
// codebase: 'https://github.com/coomdev/pngextraembedder/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/PEE-chrome.crx',
// privateKey: readFileSync('./key.pem')
//});
let res = spawnSync("git", ["rev-list", "--count", "HEAD"]);
let rev = +res.stdout;
const domains = [
"https://*.coom.tech/*",
"https://*.4chan.org/*",
"https://*.4channel.org/*",
"https://*.4plebs.org/*",
"https://desuarchive.org/*",
"https://archived.moe/*",
"https://archive.nyafuu.org/*",
"https://arch.b4k.co/*",
"https://archive.wakarimasen.moe/*",
"https://b4k.co/*",
"https://fireden.net/*",
"https://thebarchive.com/*",
"https://archiveofsins.com/*",
"https://kohlchan.net/*",
"https://*.kohlchan.net/*"
];
const manif3 = {
manifest_version: 3,
// "update_url": "https://github.com/coomdev/pngextraembedder/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/chrome_update.xml",
name: "PngExtraEmbedder",
description: "Discover embedded files on 4chan and archives!",
version: "0." + rev,
icons: {
64: "1449696017588.png"
},
permissions: [
"storage",
"activeTab",
"scripting",
"declarativeNetRequestWithHostAccess"
],
background: {
service_worker: "bg.js"
},
"host_permissions": ["<all_urls>"],
web_accessible_resources: [{
resources: ["*.html", "*.js"],
matches: ["<all_urls>"]
}],
content_scripts: [
{
matches: domains,
css: [],
run_at: "document_start",
js: ["dist/main.js"],
world: "ISOLATED"
}
],
declarative_net_request: {
rule_resources: [
{
id: "rule1",
enabled: true,
path: "b4k-csp.json"
}
]
}
};
(async () => {
let res;
const lmanif = manif3;
res = await esbuild
.build({
entryPoints: ["src/main.ts"],
bundle: true,
treeShaking: true,
outfile: "./chrome/dist/main.js",
define: {
global: 'window',
execution_mode: '"chrome_api"',
manifest: lmanif.version,
isBackground: 'false',
BUILD_VERSION: JSON.stringify([0, rev])
},
inject: ['./esbuild.inject.js'],
plugins: [
esbuildSvelte({
compilerOptions: { css: true, accessors: true },
preprocess: sveltePreprocess(),
}),
inlineWorkerPlugin({
minify: false,
bundle: true,
treeShaking: true,
target: "es2022",
loader: {
'.css': 'text',
'.png': 'binary'
},
define: {
global: 'self',
execution_mode: '"worker"',
manifest: lmanif.version,
isBackground: 'false',
BUILD_VERSION: JSON.stringify([0, rev])
},
inject: ['./esbuild.inject.js'],
})
],
loader: {
'.css': 'text',
'.png': 'binary'
},
metafile: true
})
console.log(res.metafile.inputs);
console.log(Object.entries(res.metafile.inputs).sort((a, b) => a[1].bytes - b[1].bytes).map(e => `${e[0]} -> ${e[1].bytes}`).join('\n'));
res = await esbuild
.build({
entryPoints: ["src/background.ts"],
bundle: true,
treeShaking: true,
outfile: "./chrome/dist/background.js",
define: {
global: 'window',
execution_mode: '"chrome_api"',
manifest: lmanif.version,
isBackground: 'true',
BUILD_VERSION: JSON.stringify([0, rev])
},
inject: ['./esbuild.inject.js'],
metafile: true
});
console.log(res.metafile.inputs);
console.log(Object.entries(res.metafile.inputs).sort((a, b) => a[1].bytes - b[1].bytes).map(e => `${e[0]} -> ${e[1].bytes}`).join('\n'));
writeFileSync('./chrome/manifest.json', JSON.stringify(lmanif, null, 2));
copyFileSync("./logo.png", "./chrome/1449696017588.png");
//const ext = await crx.load('./chrome');
//const crxBuffer = await ext.pack();
//const updateXML = crx.generateUpdateXML();
//writeFileSync('./chrome_update.xml', updateXML);
//writeFileSync('./PEE-chrome.crx', crxBuffer);
})();