Integração Pangolin Proxy

This commit is contained in:
2025-12-06 21:11:34 -03:00
parent dc7c446254
commit 5291d8ccae
2008 changed files with 1062 additions and 477 deletions

View File

@@ -98,8 +98,12 @@ class EmscriptenHTTPConnection:
) -> None:
self._closed = False
if url.startswith("/"):
if self.port is not None:
port = f":{self.port}"
else:
port = ""
# no scheme / host / port included, make a full url
url = f"{self.scheme}://{self.host}:{self.port}" + url
url = f"{self.scheme}://{self.host}{port}{url}"
request = EmscriptenRequest(
url=url,
method=method,

View File

@@ -5,19 +5,19 @@ let Status = {
ERROR_EXCEPTION: -4,
};
let connections = {};
let connections = new Map();
let nextConnectionID = 1;
const encoder = new TextEncoder();
self.addEventListener("message", async function (event) {
if (event.data.close) {
let connectionID = event.data.close;
delete connections[connectionID];
connections.delete(connectionID);
return;
} else if (event.data.getMore) {
let connectionID = event.data.getMore;
let { curOffset, value, reader, intBuffer, byteBuffer } =
connections[connectionID];
connections.get(connectionID);
// if we still have some in buffer, then just send it back straight away
if (!value || curOffset >= value.length) {
// read another buffer if required
@@ -26,7 +26,7 @@ self.addEventListener("message", async function (event) {
if (readResponse.done) {
// read everything - clear connection and return
delete connections[connectionID];
connections.delete(connectionID);
Atomics.store(intBuffer, 0, Status.SUCCESS_EOF);
Atomics.notify(intBuffer, 0);
// finished reading successfully
@@ -34,7 +34,7 @@ self.addEventListener("message", async function (event) {
return;
}
curOffset = 0;
connections[connectionID].value = readResponse.value;
connections.get(connectionID).value = readResponse.value;
value = readResponse.value;
} catch (error) {
console.log("Request exception:", error);
@@ -57,7 +57,7 @@ self.addEventListener("message", async function (event) {
Atomics.store(intBuffer, 0, curLen); // store current length in bytes
Atomics.notify(intBuffer, 0);
curOffset += curLen;
connections[connectionID].curOffset = curOffset;
connections.get(connectionID).curOffset = curOffset;
return;
} else {
@@ -84,13 +84,13 @@ self.addEventListener("message", async function (event) {
byteBuffer.set(headerBytes);
intBuffer[1] = written;
// make a connection
connections[connectionID] = {
connections.set(connectionID, {
reader: response.body.getReader(),
intBuffer: intBuffer,
byteBuffer: byteBuffer,
value: undefined,
curOffset: 0,
};
});
// set header ready
Atomics.store(intBuffer, 0, Status.SUCCESS_HEADER);
Atomics.notify(intBuffer, 0);

View File

@@ -67,12 +67,6 @@ SUCCESS_EOF = -2
ERROR_TIMEOUT = -3
ERROR_EXCEPTION = -4
_STREAMING_WORKER_CODE = (
files(__package__)
.joinpath("emscripten_fetch_worker.js")
.read_text(encoding="utf-8")
)
class _RequestError(Exception):
def __init__(
@@ -207,9 +201,13 @@ class _StreamingFetcher:
def __init__(self) -> None:
# make web-worker and data buffer on startup
self.streaming_ready = False
streaming_worker_code = (
files(__package__)
.joinpath("emscripten_fetch_worker.js")
.read_text(encoding="utf-8")
)
js_data_blob = js.Blob.new(
to_js([_STREAMING_WORKER_CODE], create_pyproxies=False),
to_js([streaming_worker_code], create_pyproxies=False),
_obj_from_dict({"type": "application/javascript"}),
)