function _JS_WebRequest_Send(requestId, ptr, length, arg, onresponse, onprogress) {
var requestOptions = wr.requests[requestId];
var abortController = wr.abortControllers[requestId];
function ClearTimeout() {
if (wr.timer[requestId]) {
clearTimeout(wr.timer[requestId]);
delete wr.timer[requestId]
}
}
function HandleSuccess(response, body) {
ClearTimeout();
if (!onresponse) {
return
}
var kWebRequestOK = 0;
if (body.length != 0) {
var buffer = _malloc(body.length);
HEAPU8.set(body, buffer);
dynCall("viiiiii", onresponse, [arg, response.status, buffer, body.length, 0, kWebRequestOK])
} else {
dynCall("viiiiii", onresponse, [arg, response.status, 0, 0, 0, kWebRequestOK])
}
}
function HandleError(err, code) {
ClearTimeout();
if (!onresponse) {
return
}
var len = lengthBytesUTF8(err) + 1;
var buffer = _malloc(len);
stringToUTF8(err, buffer, len);
dynCall("viiiiii", onresponse, [arg, 500, 0, 0, buffer, code]);
_free(buffer)
}
function HandleProgress(e) {
if (!onprogress || !e.lengthComputable) {
return
}
dynCall("viii", onprogress, [arg, e.loaded, e.total])
}
try {
const method = (requestOptions.init.method || 'GET').toUpperCase();
if (['GET', 'HEAD'].includes(method)) {
console.warn(`Body not allowed for ${method} request`);
delete requestOptions.init.body;
} else if (length > 0) {
var postData = HEAPU8.subarray(ptr, ptr + length);
requestOptions.init.body = new Blob([postData])
}
if (requestOptions.timeout) {
wr.timer[requestId] = setTimeout(function () {
requestOptions.isTimedOut = true;
abortController.abort()
}, requestOptions.timeout)
}
var fetchImpl = Module.fetchWithProgress;
requestOptions.init.onProgress = HandleProgress;
if (Module.companyName && Module.productName && Module.cachedFetch) {
fetchImpl = Module.cachedFetch;
requestOptions.init.companyName = Module.companyName;
requestOptions.init.productName = Module.productName;
requestOptions.control = Module.cacheControl(requestOptions.url)
}
fetchImpl(requestOptions.url, requestOptions.init).then(function (response) {
wr.responses[requestId] = response;
HandleSuccess(response, response.parsedBody)
}).catch(function (error) {
var kWebErrorUnknown = 2;
var kWebErrorAborted = 17;
var kWebErrorTimeout = 14;
if (requestOptions.isTimedOut) {
HandleError("Connection timed out.", kWebErrorTimeout)
} else if (abortController.signal.aborted) {
HandleError("Aborted.", kWebErrorAborted)
} else {
HandleError(error.message, kWebErrorUnknown)
}
})
} catch (error) {
var kWebErrorUnknown = 2;
HandleError(error.message, kWebErrorUnknown)
}
}

