feat: add gblob scheme support for extension (#1358)

This commit is contained in:
Levi authored and GitHub committed 2026-04-19 19:15:48 +08:00
1 parent ae70dc240c
commit a205c0b8d7
18 files changed
+2664 -147

No files matched your search

+62
View File
@@ -0,0 +1,62 @@
gopeed.events.onResolve(async function (ctx) {
if (ctx.req.url.endsWith("/blob")) {
const blob = new Blob(["hello world"], {type: "text/plain"});
const url = URL.createObjectURL(blob);
ctx.res = {
name: "gblob-blob",
files: [
{
name: "hello.txt",
size: 11,
req: {
url,
}
}
]
};
return;
}
const transform = new TransformStream();
const writer = transform.writable.getWriter();
const url = URL.createObjectURL(transform.writable);
if (ctx.req.url.endsWith("/stream-unknown")) {
(async () => {
await writer.write(new TextEncoder().encode("line 1\n"));
await new Promise((resolve) => setTimeout(resolve, 120));
await writer.write(new TextEncoder().encode("line 2\n"));
await writer.close();
})();
ctx.res = {
name: "gblob-stream-unknown",
files: [
{
name: "stream-unknown.txt",
req: {
url,
}
}
]
};
return;
}
await writer.write(new TextEncoder().encode("line 1\n"));
await writer.write(new TextEncoder().encode("line 2\n"));
await writer.close();
ctx.res = {
name: "gblob-stream",
files: [
{
name: "stream.txt",
size: 14,
req: {
url,
}
}
]
};
});
+16
View File
@@ -0,0 +1,16 @@
{
"name": "gblob",
"title": "gopeed extension gblob test",
"version": "0.0.1",
"scripts": [
{
"event": "onResolve",
"match": {
"urls": [
"*://example.com/*"
]
},
"entry": "index.js"
}
]
}
+42
View File
@@ -0,0 +1,42 @@
gopeed.events.onResolve(async function (ctx) {
if (!ctx.req.url.endsWith("/recover")) {
return;
}
const transform = new TransformStream();
const writer = transform.writable.getWriter();
const url = URL.createObjectURL(transform.writable);
(async () => {
await writer.write(new TextEncoder().encode("stale\n"));
await new Promise((resolve) => setTimeout(resolve, 50));
await writer.abort("expired");
})();
ctx.res = {
name: "gblob-recover",
files: [
{
name: "recover.txt",
req: {
url,
}
}
]
};
});
gopeed.events.onError(async function (ctx) {
const req = ctx.task.meta.req;
if (!req.rawUrl || !req.rawUrl.endsWith("/recover")) {
return;
}
req.labels = req.labels || {};
if (req.labels.recovered === "true") {
return;
}
req.labels.recovered = "true";
req.url = URL.createObjectURL(new Blob(["recovered\n"], { type: "text/plain" }));
ctx.task.continue();
});
@@ -0,0 +1,25 @@
{
"name": "gblob-recover",
"title": "gopeed extension gblob recover test",
"version": "0.0.1",
"scripts": [
{
"event": "onResolve",
"match": {
"urls": [
"*://example.com/*"
]
},
"entry": "index.js"
},
{
"event": "onError",
"match": {
"urls": [
"*://example.com/*"
]
},
"entry": "index.js"
}
]
}