Browse Source

add resource

pull/46/head
coomdev 2 years ago
parent
commit
11047fb50a
  1. 3
      build.js
  2. 2
      main.d.ts
  3. 2
      main.meta.js
  4. 108
      main.user.js
  5. BIN
      src/assets/hasembed.png
  6. 5
      src/main.ts
  7. 81
      src/pomf.ts
  8. 5
      src/requests.ts

3
build.js

@ -30,7 +30,8 @@ let rev = +res.stdout;
})
],
loader: {
'.css': 'text'
'.css': 'text',
'.png': 'binary'
},
metafile: true
})

2
main.d.ts

@ -3,5 +3,5 @@ declare module '*.css' {
}
declare module '*.png' {
export default Uint8Array;
export default new Uint8Array;
}

2
main.meta.js

@ -1,7 +1,7 @@
// ==UserScript==
// @name PNGExtraEmbed
// @namespace https://coom.tech/
// @version 0.114
// @version 0.115
// @description uhh
// @author You
// @match https://boards.4channel.org/*

108
main.user.js

@ -1,7 +1,7 @@
// ==UserScript==
// @name PNGExtraEmbed
// @namespace https://coom.tech/
// @version 0.114
// @version 0.115
// @description uhh
// @author You
// @match https://boards.4channel.org/*
@ -43,6 +43,22 @@
var __toESM = (module, isNodeMode) => {
return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", !isNodeMode && module && module.__esModule ? { get: () => module.default, enumerable: true } : { value: module, enumerable: true })), module);
};
var __toBinary = /* @__PURE__ */ (() => {
var table = new Uint8Array(128);
for (var i = 0; i < 64; i++)
table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;
return (base64) => {
var n = base64.length, bytes = new Uint8Array((n - (base64[n - 1] == "=") - (base64[n - 2] == "=")) * 3 / 4 | 0);
for (var i2 = 0, j = 0; i2 < n; ) {
var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)];
var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)];
bytes[j++] = c0 << 2 | c1 >> 4;
bytes[j++] = c1 << 4 | c2 >> 2;
bytes[j++] = c2 << 6 | c3;
}
return bytes;
};
})();
// node_modules/base64-js/index.js
var require_base64_js = __commonJS({
@ -11189,7 +11205,7 @@
return [ret, () => b];
};
var inject = async (container, inj) => {
const [writestream, extract5] = BufferWriteStream();
const [writestream, extract6] = BufferWriteStream();
const encoder = new PNGEncoder(writestream);
const decoder = new PNGDecoder(container.stream().getReader());
let magic2 = false;
@ -11208,7 +11224,7 @@
import_buffer.Buffer.from(await inj.arrayBuffer()).copy(injb, 4 + inj.name.length);
await encoder.insertchunk(["IDAT", buildChunk("IDAT", injb), 0, 0]);
await encoder.insertchunk(["IEND", buildChunk("IEND", import_buffer.Buffer.from([])), 0, 0]);
return extract5();
return extract6();
};
var has_embed = async (png) => {
const reader = BufferReadStream(png).getReader();
@ -11429,7 +11445,7 @@
}
};
var inject3 = async (container, inj) => {
const [writestream, extract5] = BufferWriteStream();
const [writestream, extract6] = BufferWriteStream();
const writer = writestream.getWriter();
const contbuff = import_buffer3.Buffer.from(await container.arrayBuffer());
debugger;
@ -11443,7 +11459,7 @@
await writer.write(contbuff.slice(0, endo));
await write_embedding(writer, import_buffer3.Buffer.from(await inj.arrayBuffer()));
await writer.write(contbuff.slice(endo));
return extract5();
return extract6();
};
var has_embed3 = (gif) => {
const field = gif.readUInt8(10);
@ -11493,7 +11509,10 @@
data: opt?.body?.toString(),
method: "HEAD",
onload: (resp) => {
resolve(resp.responseHeaders);
if (resp.status / 100 >= 4)
reject("response error");
else
resolve(resp.responseHeaders);
},
ontimeout: () => reject("fetch timeout"),
onerror: () => reject("fetch error"),
@ -11714,6 +11733,80 @@
match: (fn) => !!fn.match(/^[0-9a-fA-F]{32}\.....?/)
};
// src/pomf.ts
init_esbuild_inject();
// src/assets/hasembed.png
var hasembed_default = __toBinary("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");
// src/pomf.ts
var sources = [
{ host: "Catbox", prefix: "https://files.catbox.moe/" },
{ host: "Litter", prefix: "https://litter.catbox.moe/" },
{ host: "Pomf", prefix: "https://a.pomf.cat/" }
];
var getExt = (fn) => {
const isDum = fn.match(/^([a-z0-9]{6}\.(?:jpe?g|png|webm|gif))/gi);
const isB64 = fn.match(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/);
const isExt = fn.match(/\[.*=(.*)\]/);
let ext;
if (isDum) {
ext = isDum[0];
} else if (isB64) {
ext = atob(isB64[1]);
} else if (isExt) {
ext = isExt[1];
}
return ext;
};
var extract5 = async (b, fn) => {
const ext = getExt(fn);
let rsource;
for (const source of sources) {
try {
await GM_head(source.prefix + ext);
rsource = source.prefix + ext;
break;
} catch {
}
}
return {
filename: ext,
data: async (lsn) => {
try {
return (await GM_fetch(rsource, void 0, lsn)).arrayBuffer();
} catch (e) {
}
},
thumbnail: hasembed_default
};
};
var has_embed5 = async (b, fn) => {
const ext = getExt(fn);
if (!ext)
return false;
for (const source of sources) {
try {
const e = await GM_head(source.prefix + ext);
return true;
} catch {
}
}
return false;
};
var pomf_default = {
skip: true,
extract: extract5,
has_embed: has_embed5,
match: (fn) => {
const base = fn.split(".").slice(0, -1).join(".");
const isDum = !!fn.match(/^([a-z0-9]{6}\.(?:jpe?g|png|webm|gif))/gi);
const isB64 = !!fn.match(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/);
const isExt = !!fn.match(/\[.*=.*\]/);
return isB64 || isExt || isDum;
}
};
// src/App.svelte
init_esbuild_inject();
@ -16473,13 +16566,14 @@
// src/main.ts
var csettings2;
var processors = [thirdeye_default, png_default, webm_default, gif_default];
var processors = [thirdeye_default, pomf_default, png_default, webm_default, gif_default];
var cappState;
settings.subscribe((b) => {
csettings2 = b;
processors = [
...!csettings2.te ? [thirdeye_default] : [],
png_default,
pomf_default,
webm_default,
gif_default
];

BIN
src/assets/hasembed.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

5
src/main.ts

@ -6,6 +6,7 @@ import png from "./png";
import webm from "./webm";
import gif from "./gif";
import thirdeye from "./thirdeye";
import pomf from "./pomf";
import { GM_fetch, GM_head, headerStringToObject } from "./requests";
@ -26,12 +27,12 @@ export interface ImageProcessor {
export let csettings: Parameters<typeof settings['set']>[0];
let processors: ImageProcessor[] =
[thirdeye, png, webm, gif];
[thirdeye, pomf, png, webm, gif];
let cappState: Parameters<typeof appState['set']>[0];
settings.subscribe(b => {
csettings = b;
processors = [...(!csettings.te ? [thirdeye] : []), png, webm, gif
processors = [...(!csettings.te ? [thirdeye] : []), png, pomf, webm, gif
];
});

81
src/pomf.ts

@ -0,0 +1,81 @@
import type { EmbeddedFile, ImageProcessor } from "./main";
import { GM_fetch, GM_head } from "./requests";
import type { Buffer } from "buffer";
import thumbnail from "./assets/hasembed.png";
const sources = [
{ host: 'Catbox', prefix: 'https://files.catbox.moe/' },
{ host: 'Litter', prefix: 'https://litter.catbox.moe/' },
{ host: 'Pomf', prefix: 'https://a.pomf.cat/' },
];
const getExt = (fn: string) => {
const isDum = fn!.match(/^([a-z0-9]{6}\.(?:jpe?g|png|webm|gif))/gi);
const isB64 = fn!.match(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/);
const isExt = fn!.match(/\[.*=(.*)\]/);
let ext;
if (isDum) {
ext = isDum[0];
} else if (isB64) {
ext = atob(isB64[1]);
} else if (isExt) {
ext = isExt[1];
}
return ext;
};
const extract = async (b: Buffer, fn?: string) => {
const ext = getExt(fn!);
let rsource: string;
for (const source of sources) {
try {
await GM_head(source.prefix + ext);
rsource = source.prefix + ext;
break;
} catch {
// 404
}
}
return {
filename: ext,
data: async (lsn) => {
try {
return (await GM_fetch(rsource, undefined, lsn)).arrayBuffer();
} catch (e) {
//404
}
},
thumbnail
} as EmbeddedFile;
};
const has_embed = async (b: Buffer, fn?: string) => {
const ext = getExt(fn!);
if (!ext)
return false;
for (const source of sources) {
try {
const e = await GM_head(source.prefix + ext);
return true;
} catch {
// 404
}
}
return false;
};
export default {
skip: true,
extract,
has_embed,
match: fn => {
const base = fn.split('.').slice(0, -1).join('.');
const isDum = !!fn.match(/^([a-z0-9]{6}\.(?:jpe?g|png|webm|gif))/gi);
const isB64 = !!fn.match(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/);
const isExt = !!fn.match(/\[.*=.*\]/);
return isB64 || isExt || isDum;
}
} as ImageProcessor;

5
src/requests.ts

@ -20,7 +20,10 @@ export function GM_head(...[url, opt]: Parameters<typeof fetch>) {
data: opt?.body?.toString(),
method: "HEAD",
onload: (resp) => {
resolve(resp.responseHeaders);
if ((resp.status / 100) >= 4)
reject("response error");
else
resolve(resp.responseHeaders);
},
ontimeout: () => reject("fetch timeout"),
onerror: () => reject("fetch error"),

Loading…
Cancel
Save