UNPKG

@api.global/typedrequest

Version:

A TypeScript library for making typed requests towards APIs, including facilities for handling requests, routing, and virtual stream handling.

75 lines 6.2 kB
import * as plugins from './plugins.js'; import { VirtualStream } from './classes.virtualstream.js'; import { TypedResponseError } from './classes.typedresponseerror.js'; import { TypedRouter } from './classes.typedrouter.js'; import { TypedTarget } from './classes.typedtarget.js'; const webrequestInstance = new plugins.webrequest.WebRequest(); export class TypedRequest { /** * @param postEndPointArg * @param methodArg */ constructor(postTarget, methodArg) { if (typeof postTarget === 'string') { this.urlEndPoint = postTarget; } else { this.typedTarget = postTarget; } this.method = methodArg; } /** * fires the request */ async fire(fireArg, useCacheArg = false) { let payloadSending = { method: this.method, request: fireArg, response: null, correlation: { id: plugins.isounique.uni(), phase: 'request', }, }; // lets preprocess the payload payloadSending = VirtualStream.encodePayloadForNetwork(payloadSending, { sendMethod: (payloadArg) => { return this.postTrObject(payloadArg); } }); let payloadReceiving; payloadReceiving = await this.postTrObject(payloadSending, useCacheArg); // lets preprocess the response payloadReceiving = VirtualStream.decodePayloadFromNetwork(payloadReceiving, { sendMethod: (payloadArg) => { return this.postTrObject(payloadArg); } }); return payloadReceiving.response; } async postTrObject(payloadSendingArg, useCacheArg = false) { let payloadReceiving; if (this.urlEndPoint) { const response = await webrequestInstance.postJson(this.urlEndPoint, payloadSendingArg, useCacheArg); payloadReceiving = response; } else { payloadReceiving = await this.typedTarget.post(payloadSendingArg); } if (payloadReceiving.error) { console.error(`method: >>${this.method}<< got an ERROR: "${payloadReceiving.error.text}" with data ${JSON.stringify(payloadReceiving.error.data, null, 2)}`); if (!payloadReceiving.retry) { throw new TypedResponseError(payloadReceiving.error.text, payloadReceiving.error.data); } return null; } if (payloadReceiving.retry) { console.log(`server requested retry for the following reason: ${payloadReceiving.retry.reason}`); await plugins.smartdelay.delayFor(payloadReceiving.retry.waitForMs); // tslint:disable-next-line: no-return-await payloadReceiving = await this.postTrObject(payloadSendingArg, useCacheArg); } return payloadReceiving; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50eXBlZHJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnR5cGVkcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RCxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUUvRCxNQUFNLE9BQU8sWUFBWTtJQWF2Qjs7O09BR0c7SUFDSCxZQUFZLFVBQWdDLEVBQUUsU0FBc0I7UUFDbEUsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQXFCLEVBQUUsY0FBdUIsS0FBSztRQUNuRSxJQUFJLGNBQWMsR0FBaUQ7WUFDakUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsV0FBVyxFQUFFO2dCQUNYLEVBQUUsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDM0IsS0FBSyxFQUFFLFNBQVM7YUFDakI7U0FDRixD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