@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
JavaScript
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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