Browse Source

inline gm_fetch to 'fix' it

pull/4/head
coomdev 2 years ago
parent
commit
72bed67d81
  1. 1
      build.js
  2. 48
      main.user.js
  3. 47
      src/main.ts

1
build.js

@ -11,7 +11,6 @@ const extheader = `// ==UserScript==
// @match https://boards.4channel.org/g/thread/*
// @icon https://www.google.com/s2/favicons?domain=4channel.org
// @grant GM_xmlhttpRequest
// @require https://greasyfork.org/scripts/421384-gm-fetch/code/GM_fetch.js?version=898562
// @run-at document-start
// @connect 4chan.org
// @connect 4channel.org

48
main.user.js

@ -7,7 +7,6 @@
// @match https://boards.4channel.org/g/thread/*
// @icon https://www.google.com/s2/favicons?domain=4channel.org
// @grant GM_xmlhttpRequest
// @require https://greasyfork.org/scripts/421384-gm-fetch/code/GM_fetch.js?version=898562
// @run-at document-start
// @connect 4chan.org
// @connect 4channel.org
@ -7004,6 +7003,53 @@
var IEND = import_buffer2.Buffer.from("IEND");
var tEXt = import_buffer2.Buffer.from("tEXt");
var CUM0 = import_buffer2.Buffer.from("CUM\x000");
var xmlhttprequest = GM ? GM.xmlHttpRequest : GM_xmlhttpRequest;
function GM_fetch(...[url, opt]) {
function blobTo(to, blob) {
if (to == "arrayBuffer" && blob.arrayBuffer)
return blob.arrayBuffer();
return new Promise((resolve, reject) => {
var fileReader = new FileReader();
fileReader.onload = function(event) {
if (!event)
return;
if (to == "base64")
resolve(event.target.result);
else
resolve(event.target.result);
};
if (to == "arrayBuffer")
fileReader.readAsArrayBuffer(blob);
else if (to == "base64")
fileReader.readAsDataURL(blob);
else if (to == "text")
fileReader.readAsText(blob, "utf-8");
else
reject("unknown to");
});
}
return new Promise((resolve, reject) => {
let gmopt = {
url: url.toString(),
data: opt?.body?.toString(),
responseType: "blob",
method: "GET",
onload: (resp) => {
let blob = resp.response;
const ref = resp;
ref.blob = () => Promise.resolve(blob);
ref.arrayBuffer = () => blobTo("arrayBuffer", blob);
ref.text = () => blobTo("text", blob);
ref.json = async () => JSON.parse(await blobTo("text", blob));
resolve(resp);
},
ontimeout: () => reject("fetch timeout"),
onerror: () => reject("fetch error"),
onabort: () => reject("fetch abort")
};
xmlhttprequest(gmopt);
});
}
var extractEmbedded = async (reader) => {
let magic = false;
let sneed = new PNGDecoder(reader);

47
src/main.ts

@ -9,6 +9,53 @@ const IEND = Buffer.from("IEND");
const tEXt = Buffer.from("tEXt");
const CUM0 = Buffer.from("CUM\0" + "0");
type Awaited<T> = T extends PromiseLike<infer U> ? U : T
const xmlhttprequest = GM ? GM.xmlHttpRequest : GM_xmlhttpRequest;
function GM_fetch(...[url, opt]: Parameters<typeof fetch>) {
function blobTo(to: string, blob: Blob) {
if (to == "arrayBuffer" && blob.arrayBuffer)
return blob.arrayBuffer()
return new Promise((resolve, reject) => {
var fileReader = new FileReader();
fileReader.onload = function (event) {
if (!event) return;
if (to == "base64")
resolve(event.target!.result);
else
resolve(event.target!.result)
}
if (to == "arrayBuffer") fileReader.readAsArrayBuffer(blob)
else if (to == "base64") fileReader.readAsDataURL(blob) // "data:*/*;base64,......"
else if (to == "text") fileReader.readAsText(blob, "utf-8")
else reject("unknown to")
})
}
return new Promise<ReturnType<typeof fetch>>((resolve, reject) => {
// https://www.tampermonkey.net/documentation.php?ext=dhdg#GM_xmlhttpRequest
let gmopt: Tampermonkey.Request<any> = {
url: url.toString(),
data: opt?.body?.toString(),
responseType: "blob",
method: "GET",
onload: (resp) => {
let blob = resp.response as Blob;
const ref = resp as any as Awaited<ReturnType<typeof fetch>>;
ref.blob = () => Promise.resolve(blob)
ref.arrayBuffer = () => blobTo("arrayBuffer", blob) as Promise<ArrayBuffer>
ref.text = () => blobTo("text", blob) as Promise<string>
ref.json = async () => JSON.parse(await (blobTo("text", blob) as Promise<any>))
resolve(resp as any)
},
ontimeout: () => reject("fetch timeout"),
onerror: () => reject("fetch error"),
onabort: () => reject("fetch abort")
}
xmlhttprequest(gmopt)
})
}
let extractEmbedded = async (reader: ReadableStreamDefaultReader<Uint8Array>) => {
let magic = false;

Loading…
Cancel
Save