fix(core): update
This commit is contained in:
		
							
								
								
									
										1173
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1173
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -16,17 +16,18 @@ | ||||
|     "@gitzone/tsbuild": "^2.1.63", | ||||
|     "@gitzone/tsbundle": "^2.0.4", | ||||
|     "@gitzone/tstest": "^1.0.71", | ||||
|     "@pushrocks/smartexpress": "^4.0.4", | ||||
|     "@pushrocks/smartexpress": "^4.0.5", | ||||
|     "@pushrocks/tapbundle": "^5.0.3", | ||||
|     "@types/node": "^17.0.35", | ||||
|     "@types/node": "^17.0.36", | ||||
|     "tslint": "^6.1.3", | ||||
|     "tslint-config-prettier": "^1.18.0" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@pushrocks/smartdelay": "^2.0.13", | ||||
|     "@pushrocks/smartenv": "^5.0.1", | ||||
|     "@pushrocks/smartenv": "^5.0.2", | ||||
|     "@pushrocks/smartjson": "^4.0.6", | ||||
|     "@pushrocks/smartpromise": "^3.1.7", | ||||
|     "@pushrocks/webstore": "^2.0.3", | ||||
|     "node-fetch": "^3.2.4" | ||||
|   }, | ||||
|   "files": [ | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| import { expect, tap } from '@pushrocks/tapbundle'; | ||||
| import * as webrequest from '../ts/index.js'; | ||||
|  | ||||
| tap.test('first test', async (tools) => { | ||||
| tap.test('should run multiendpoint request', async (tools) => { | ||||
|   const done = tools.defer(); | ||||
|   const response = await new webrequest.WebRequest() | ||||
|     .request(['https://lossless.com'], { | ||||
|     .requestMultiEndpoint(['https://lossless.com'], { | ||||
|       method: 'GET', | ||||
|     }) | ||||
|     .catch((e) => { | ||||
|   | ||||
							
								
								
									
										17
									
								
								test/test.ts
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								test/test.ts
									
									
									
									
									
								
							| @@ -43,12 +43,14 @@ tap.test('setup test server', async () => { | ||||
| }); | ||||
|  | ||||
| tap.test('first test', async (tools) => { | ||||
|   const response = await new webrequest.WebRequest().getJson([ | ||||
|   const response = await (await new webrequest.WebRequest().requestMultiEndpoint([ | ||||
|     'http://localhost:2345/apiroute1', | ||||
|     'http://localhost:2345/apiroute2', | ||||
|     'http://localhost:2345/apiroute4', | ||||
|     'http://localhost:2345/apiroute3', | ||||
|   ]); | ||||
|   ], { | ||||
|     method: 'GET' | ||||
|   })).json(); | ||||
|  | ||||
|   const response2 = await new webrequest.WebRequest().getJson('http://localhost:2345/apiroute3'); | ||||
|  | ||||
| @@ -59,8 +61,13 @@ tap.test('first test', async (tools) => { | ||||
|   expect(response2).toHaveProperty('hithere'); //.to.equal('hi'); | ||||
| }); | ||||
|  | ||||
| tap.test('tear down server', async () => { | ||||
|   testServer.stop(); | ||||
| }); | ||||
| tap.test('should cache response', async () => { | ||||
|   const webrequestInstance = new webrequest.WebRequest(); | ||||
|   const response = await webrequestInstance.getJson('http://localhost:2345/apiroute3', true); | ||||
|   expect(response).toHaveProperty('hithere'); | ||||
|   await testServer.stop(); | ||||
|   const response2 = await webrequestInstance.getJson('http://localhost:2345/apiroute3', true); | ||||
|   expect(response2).toHaveProperty('hithere'); | ||||
| }) | ||||
|  | ||||
| tap.start(); | ||||
|   | ||||
| @@ -3,6 +3,6 @@ | ||||
|  */ | ||||
| export const commitinfo = { | ||||
|   name: '@pushrocks/webrequest', | ||||
|   version: '3.0.4', | ||||
|   version: '3.0.5', | ||||
|   description: 'securely request from browsers' | ||||
| } | ||||
|   | ||||
							
								
								
									
										75
									
								
								ts/index.ts
									
									
									
									
									
								
							
							
						
						
									
										75
									
								
								ts/index.ts
									
									
									
									
									
								
							| @@ -14,20 +14,27 @@ export class WebRequest { | ||||
|     const smartenv = new plugins.smartenv.Smartenv(); | ||||
|     if (!smartenv.isBrowser) { | ||||
|       this.polyfillStatusEvaluated = true; | ||||
|       const fetch = await smartenv.getSafeNodeModule('node-fetch'); | ||||
|       globalThis.fetch = fetch.default; | ||||
|       const fetchMod = await smartenv.getSafeNodeModule('node-fetch'); | ||||
|       globalThis.Response = fetchMod.Response; | ||||
|       globalThis.fetch = fetchMod.default; | ||||
|     } | ||||
|     this.neededPolyfillsLoadedDeferred.resolve(); | ||||
|   } | ||||
|  | ||||
|   public cacheStore = new plugins.webstore.WebStore({ | ||||
|     dbName: 'webrequest', | ||||
|     storeName: 'webrequest', | ||||
|   }); | ||||
|  | ||||
|   constructor() { | ||||
|     WebRequest.loadNeededPolyfills(); | ||||
|   } | ||||
|  | ||||
|   public async getJson(urlArg: string | string[]) { | ||||
|   public async getJson(urlArg: string, useCacheArg: boolean = false) { | ||||
|     await WebRequest.neededPolyfillsLoadedDeferred.promise; | ||||
|     const response: Response = await this.request(urlArg, { | ||||
|       method: 'GET', | ||||
|       useCache: useCacheArg, | ||||
|     }); | ||||
|     const responseText = await response.text(); | ||||
|     const responseResult = plugins.smartjson.parse(responseText); | ||||
| @@ -37,7 +44,7 @@ export class WebRequest { | ||||
|   /** | ||||
|    * postJson | ||||
|    */ | ||||
|   public async postJson(urlArg: string, requestBody?: any) { | ||||
|   public async postJson(urlArg: string, requestBody?: any, useStoreAsFallback: boolean = false) { | ||||
|     await WebRequest.neededPolyfillsLoadedDeferred.promise; | ||||
|     const response: Response = await this.request(urlArg, { | ||||
|       body: plugins.smartjson.stringify(requestBody), | ||||
| @@ -51,7 +58,7 @@ export class WebRequest { | ||||
|   /** | ||||
|    * put js | ||||
|    */ | ||||
|   public async putJson(urlArg: string, requestBody?: any) { | ||||
|   public async putJson(urlArg: string, requestBody?: any, useStoreAsFallback: boolean = false) { | ||||
|     await WebRequest.neededPolyfillsLoadedDeferred.promise; | ||||
|     const response: Response = await this.request(urlArg, { | ||||
|       body: plugins.smartjson.stringify(requestBody), | ||||
| @@ -65,7 +72,7 @@ export class WebRequest { | ||||
|   /** | ||||
|    * put js | ||||
|    */ | ||||
|   public async deleteJson(urlArg: string) { | ||||
|   public async deleteJson(urlArg: string, useStoreAsFallback: boolean = false) { | ||||
|     await WebRequest.neededPolyfillsLoadedDeferred.promise; | ||||
|     const response: Response = await this.request(urlArg, { | ||||
|       method: 'GET', | ||||
| @@ -75,10 +82,60 @@ export class WebRequest { | ||||
|     return responseResult; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * a fault tolerant request | ||||
|    */ | ||||
|   public async request( | ||||
|     urlArg: string, | ||||
|     optionsArg: { | ||||
|       method: 'GET' | 'POST' | 'PUT' | 'DELETE'; | ||||
|       body?: any; | ||||
|       headers?: HeadersInit; | ||||
|       useCache?: boolean; | ||||
|       timeoutMs?: number; | ||||
|     } | ||||
|   ) { | ||||
|     await WebRequest.neededPolyfillsLoadedDeferred.promise; | ||||
|     const controller = new AbortController(); | ||||
|     if (optionsArg.timeoutMs) { | ||||
|       plugins.smartdelay.delayFor(optionsArg.timeoutMs).then(() => { | ||||
|         controller.abort(); | ||||
|       }); | ||||
|     } | ||||
|     let cachedResponseDeferred = plugins.smartpromise.defer<Response>(); | ||||
|     let cacheUsed = false; | ||||
|     if (optionsArg.useCache && this.cacheStore.check(urlArg)) { | ||||
|       const responseBuffer: ArrayBuffer = await this.cacheStore.get(urlArg) | ||||
|       cachedResponseDeferred.resolve(new Response(responseBuffer, {})); | ||||
|     } else { | ||||
|       cachedResponseDeferred.resolve(null); | ||||
|     } | ||||
|     const response: Response = await fetch(urlArg, { | ||||
|       signal: controller.signal, | ||||
|       method: optionsArg.method, | ||||
|       headers: { | ||||
|         'Content-Type': 'application/json', | ||||
|         ...(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 (!cacheUsed && optionsArg.useCache && response.status < 300) { | ||||
|       const buffer = await response.clone().arrayBuffer(); | ||||
|       await this.cacheStore.set(urlArg, buffer); | ||||
|     } | ||||
|     console.log(`${urlArg} answers with status: ${response.status}`); | ||||
|     return response; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * a multi endpoint, fault tolerant request function | ||||
|    */ | ||||
|   public async requestMultiEndpoint( | ||||
|     urlArg: string | string[], | ||||
|     optionsArg: { | ||||
|       method: 'GET' | 'POST' | 'PUT' | 'DELETE'; | ||||
|   | ||||
| @@ -2,5 +2,6 @@ import * as smartdelay from '@pushrocks/smartdelay'; | ||||
| import * as smartenv from '@pushrocks/smartenv'; | ||||
| import * as smartjson from '@pushrocks/smartjson'; | ||||
| import * as smartpromise from '@pushrocks/smartpromise'; | ||||
| import * as webstore from '@pushrocks/webstore'; | ||||
|  | ||||
| export { smartdelay, smartenv, smartjson, smartpromise }; | ||||
| export { smartdelay, smartenv, smartjson, smartpromise, webstore }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user