Compare commits

..

10 Commits

Author SHA1 Message Date
342d93e34d 3.0.29 2023-07-10 22:31:55 +02:00
4a0f2288ca fix(core): update 2023-07-10 22:31:55 +02:00
5c7f9e5bfa 3.0.28 2023-07-09 17:24:53 +02:00
14bda0bfa3 fix(core): update 2023-07-09 17:24:52 +02:00
4a57f7070a 3.0.27 2023-07-09 17:20:12 +02:00
f36bdcb181 fix(core): update 2023-07-09 17:20:12 +02:00
d3c90b0e7e 3.0.26 2023-07-03 10:08:45 +02:00
2397e69572 fix(core): update 2023-07-03 10:08:44 +02:00
7f7738d69f 3.0.25 2023-07-03 10:08:16 +02:00
f375e36a99 fix(core): update 2023-07-03 10:08:16 +02:00
6 changed files with 113 additions and 329 deletions

View File

@ -7,10 +7,10 @@
"projectType": "npm", "projectType": "npm",
"module": { "module": {
"githost": "gitlab.com", "githost": "gitlab.com",
"gitscope": "pushrocks", "gitscope": "push.rocks",
"gitrepo": "webrequest", "gitrepo": "webrequest",
"description": "securely request from browsers", "description": "securely request from browsers",
"npmPackagename": "@pushrocks/webrequest", "npmPackagename": "@push.rocks/webrequest",
"license": "MIT" "license": "MIT"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@pushrocks/webrequest", "name": "@push.rocks/webrequest",
"version": "3.0.24", "version": "3.0.29",
"private": false, "private": false,
"description": "securely request from browsers", "description": "securely request from browsers",
"main": "dist_ts/index.js", "main": "dist_ts/index.js",
@ -18,12 +18,12 @@
"@gitzone/tsbundle": "^2.0.8", "@gitzone/tsbundle": "^2.0.8",
"@gitzone/tsrun": "^1.2.42", "@gitzone/tsrun": "^1.2.42",
"@gitzone/tstest": "^1.0.73", "@gitzone/tstest": "^1.0.73",
"@pushrocks/smartexpress": "^4.0.35",
"@pushrocks/tapbundle": "^5.0.8", "@pushrocks/tapbundle": "^5.0.8",
"@types/node": "^20.3.3" "@types/node": "^20.3.3"
}, },
"dependencies": { "dependencies": {
"@adobe/fetch": "^4.0.13", "@adobe/fetch": "^4.0.13",
"@apiglobal/typedserver": "^2.0.65",
"@pushrocks/smartdelay": "^3.0.1", "@pushrocks/smartdelay": "^3.0.1",
"@pushrocks/smartenv": "^5.0.2", "@pushrocks/smartenv": "^5.0.2",
"@pushrocks/smartjson": "^5.0.6", "@pushrocks/smartjson": "^5.0.6",

348
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -2,12 +2,12 @@ import { expect, tap } from '@pushrocks/tapbundle';
import * as webrequest from '../ts/index.js'; import * as webrequest from '../ts/index.js';
// test dependencies // test dependencies
import * as smartexpress from '@pushrocks/smartexpress'; import * as typedserver from '@apiglobal/typedserver';
let testServer: smartexpress.Server; let testServer: typedserver.servertools.Server;
tap.test('setup test server', async () => { tap.test('setup test server', async () => {
testServer = new smartexpress.Server({ testServer = new typedserver.servertools.Server({
cors: false, cors: false,
forceSsl: false, forceSsl: false,
port: 2345, port: 2345,
@ -15,7 +15,7 @@ tap.test('setup test server', async () => {
testServer.addRoute( testServer.addRoute(
'/apiroute1', '/apiroute1',
new smartexpress.Handler('GET', (req, res) => { new typedserver.servertools.Handler('GET', (req, res) => {
res.status(429); res.status(429);
res.end(); res.end();
}) })
@ -23,7 +23,7 @@ tap.test('setup test server', async () => {
testServer.addRoute( testServer.addRoute(
'/apiroute2', '/apiroute2',
new smartexpress.Handler('GET', (req, res) => { new typedserver.servertools.Handler('GET', (req, res) => {
res.status(500); res.status(500);
res.end(); res.end();
}) })
@ -31,7 +31,7 @@ tap.test('setup test server', async () => {
testServer.addRoute( testServer.addRoute(
'/apiroute3', '/apiroute3',
new smartexpress.Handler('GET', (req, res) => { new typedserver.servertools.Handler('GET', (req, res) => {
res.status(200); res.status(200);
res.send({ res.send({
hithere: 'hi', hithere: 'hi',

View File

@ -2,7 +2,7 @@
* autocreated commitinfo by @pushrocks/commitinfo * autocreated commitinfo by @pushrocks/commitinfo
*/ */
export const commitinfo = { export const commitinfo = {
name: '@pushrocks/webrequest', name: '@push.rocks/webrequest',
version: '3.0.24', version: '3.0.29',
description: 'securely request from browsers' description: 'securely request from browsers'
} }

View File

@ -8,44 +8,6 @@ export interface IWebrequestContructorOptions {
* web request * web request
*/ */
export class WebRequest { export class WebRequest {
private static polyfillStatusEvaluated = false;
private static neededPolyfillsLoadedDeferred = plugins.smartpromise.defer<{
fetch: typeof fetch;
Response: typeof Response;
AbortController?: typeof AbortController;
helixTimeout?: any;
}>();
/**
* loads the needed polyfill
* @returns
*/
public static async loadNeededPolyfills() {
if (this.polyfillStatusEvaluated) {
return this.neededPolyfillsLoadedDeferred.promise;
}
this.polyfillStatusEvaluated = true;
const smartenv = new plugins.smartenv.Smartenv();
if (!smartenv.isBrowser) {
console.log('webrequest using node context.');
this.polyfillStatusEvaluated = true;
const fetchMod = await smartenv.getSafeNodeModule('@adobe/fetch');
this.neededPolyfillsLoadedDeferred.resolve({
fetch: fetchMod.fetch,
Response: fetchMod.Response,
helixTimeout: fetchMod.timeoutSignal,
});
} else {
console.log('webrequest using browser context.');
this.neededPolyfillsLoadedDeferred.resolve({
fetch: (...args) => {
return fetch(...args);
},
Response: globalThis.Response,
AbortController: globalThis.AbortController,
});
}
}
public cacheStore = new plugins.webstore.WebStore({ public cacheStore = new plugins.webstore.WebStore({
dbName: 'webrequest', dbName: 'webrequest',
@ -59,11 +21,9 @@ export class WebRequest {
logging: true, logging: true,
...optionsArg, ...optionsArg,
}; };
WebRequest.loadNeededPolyfills();
} }
public async getJson(urlArg: string, useCacheArg: boolean = false) { public async getJson(urlArg: string, useCacheArg: boolean = false) {
await WebRequest.neededPolyfillsLoadedDeferred.promise;
const response: Response = await this.request(urlArg, { const response: Response = await this.request(urlArg, {
method: 'GET', method: 'GET',
useCache: useCacheArg, useCache: useCacheArg,
@ -77,7 +37,6 @@ export class WebRequest {
* postJson * postJson
*/ */
public async postJson(urlArg: string, requestBody?: any, useCacheArg: boolean = false) { public async postJson(urlArg: string, requestBody?: any, useCacheArg: boolean = false) {
await WebRequest.neededPolyfillsLoadedDeferred.promise;
const response: Response = await this.request(urlArg, { const response: Response = await this.request(urlArg, {
method: 'POST', method: 'POST',
headers: { headers: {
@ -95,7 +54,6 @@ export class WebRequest {
* put js * put js
*/ */
public async putJson(urlArg: string, requestBody?: any, useStoreAsFallback: boolean = false) { public async putJson(urlArg: string, requestBody?: any, useStoreAsFallback: boolean = false) {
await WebRequest.neededPolyfillsLoadedDeferred.promise;
const response: Response = await this.request(urlArg, { const response: Response = await this.request(urlArg, {
method: 'PUT', method: 'PUT',
headers: { headers: {
@ -112,7 +70,6 @@ export class WebRequest {
* put js * put js
*/ */
public async deleteJson(urlArg: string, useStoreAsFallback: boolean = false) { public async deleteJson(urlArg: string, useStoreAsFallback: boolean = false) {
await WebRequest.neededPolyfillsLoadedDeferred.promise;
const response: Response = await this.request(urlArg, { const response: Response = await this.request(urlArg, {
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -140,20 +97,10 @@ export class WebRequest {
...optionsArg, ...optionsArg,
}; };
const fetchObject = await WebRequest.neededPolyfillsLoadedDeferred.promise; let controller = new AbortController();
let controller: AbortController; plugins.smartdelay.delayFor(optionsArg.timeoutMs).then(() => {
if (optionsArg.timeoutMs) { controller.abort();
if (fetchObject.AbortController) { });
controller = new fetchObject.AbortController();
plugins.smartdelay.delayFor(optionsArg.timeoutMs).then(() => {
controller.abort();
});
} else {
controller = {
signal: fetchObject.helixTimeout(optionsArg.timeoutMs),
} as any;
}
}
let cachedResponseDeferred = plugins.smartpromise.defer<Response>(); let cachedResponseDeferred = plugins.smartpromise.defer<Response>();
let cacheUsed = false; let cacheUsed = false;
if (optionsArg.useCache && (await this.cacheStore.check(urlArg))) { if (optionsArg.useCache && (await this.cacheStore.check(urlArg))) {
@ -162,9 +109,8 @@ export class WebRequest {
} else { } else {
cachedResponseDeferred.resolve(null); cachedResponseDeferred.resolve(null);
} }
let response: Response = await fetchObject let response: Response = await fetch(urlArg, {
.fetch(urlArg, { signal: controller.signal,
signal: controller ? controller.signal : null,
method: optionsArg.method, method: optionsArg.method,
headers: { headers: {
...(optionsArg.headers || {}), ...(optionsArg.headers || {}),
@ -203,7 +149,7 @@ export class WebRequest {
headers?: HeadersInit; headers?: HeadersInit;
} }
): Promise<Response> { ): Promise<Response> {
await WebRequest.neededPolyfillsLoadedDeferred.promise;
let allUrls: string[]; let allUrls: string[];
let usedUrlIndex = 0; let usedUrlIndex = 0;