fix(core): update

This commit is contained in:
2023-02-12 17:54:00 +01:00
parent ac65f4c85f
commit a46af3a431
9 changed files with 71 additions and 14666 deletions

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@pushrocks/webrequest',
version: '3.0.15',
version: '3.0.16',
description: 'securely request from browsers'
}

View File

@ -10,10 +10,10 @@ export interface IWebrequestContructorOptions {
export class WebRequest {
private static polyfillStatusEvaluated = false;
private static neededPolyfillsLoadedDeferred = plugins.smartpromise.defer<{
fetch: typeof fetch,
Response: typeof Response,
AbortController?: typeof AbortController,
helixTimeout?: any,
fetch: typeof fetch;
Response: typeof Response;
AbortController?: typeof AbortController;
helixTimeout?: any;
}>();
/**
@ -42,7 +42,7 @@ export class WebRequest {
return fetch(...args);
},
Response: globalThis.Response,
AbortController: globalThis.AbortController
AbortController: globalThis.AbortController,
});
}
}
@ -57,8 +57,8 @@ export class WebRequest {
constructor(public optionsArg: IWebrequestContructorOptions = {}) {
this.options = {
logging: true,
...optionsArg
}
...optionsArg,
};
WebRequest.loadNeededPolyfills();
}
@ -139,7 +139,7 @@ export class WebRequest {
useCache: false,
...optionsArg,
};
const fetchObject = await WebRequest.neededPolyfillsLoadedDeferred.promise;
let controller: AbortController;
if (optionsArg.timeoutMs) {
@ -150,34 +150,36 @@ export class WebRequest {
});
} else {
controller = {
signal: fetchObject.helixTimeout(optionsArg.timeoutMs)
signal: fetchObject.helixTimeout(optionsArg.timeoutMs),
} as any;
}
}
let cachedResponseDeferred = plugins.smartpromise.defer<Response>();
let cacheUsed = false;
if (optionsArg.useCache && await this.cacheStore.check(urlArg)) {
if (optionsArg.useCache && (await this.cacheStore.check(urlArg))) {
const responseBuffer: ArrayBuffer = await this.cacheStore.get(urlArg);
cachedResponseDeferred.resolve(new Response(responseBuffer, {}));
} else {
cachedResponseDeferred.resolve(null);
}
let response: Response = await fetchObject.fetch(urlArg, {
signal: controller ? controller.signal : null,
method: optionsArg.method,
headers: {
...(optionsArg.headers || {}),
},
body: optionsArg.body,
}).catch(async (err) => {
if (optionsArg.useCache && (await cachedResponseDeferred.promise)) {
cacheUsed = true;
const cachedResponse = cachedResponseDeferred.promise;
return cachedResponse;
} else {
return err;
}
});
let response: Response = await fetchObject
.fetch(urlArg, {
signal: controller ? controller.signal : null,
method: optionsArg.method,
headers: {
...(optionsArg.headers || {}),
},
body: optionsArg.body,
})
.catch(async (err) => {
if (optionsArg.useCache && (await cachedResponseDeferred.promise)) {
cacheUsed = true;
const cachedResponse = cachedResponseDeferred.promise;
return cachedResponse;
} else {
return err;
}
});
if (optionsArg.useCache && (await cachedResponseDeferred.promise) && response.status === 500) {
cacheUsed = true;
response = await cachedResponseDeferred.promise;