@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.23 kB
JavaScript
import * as plugins from './plugins.js';
import { VirtualStream } from './typedrequest.classes.virtualstream.js';
import { TypedResponseError } from './typedrequest.classes.typedresponseerror.js';
import { TypedRouter } from './typedrequest.classes.typedrouter.js';
import { TypedTarget } from './typedrequest.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(`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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRyZXF1ZXN0LmNsYXNzZXMudHlwZWRyZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdHlwZWRyZXF1ZXN0LmNsYXNzZXMudHlwZWRyZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXBFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBRS9ELE1BQU0sT0FBTyxZQUFZO0lBYXZCOzs7T0FHRztJQUNILFlBQVksVUFBZ0MsRUFBRSxTQUFzQjtRQUNsRSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBcUIsRUFBRSxjQUF1QixLQUFLO1FBQ25FLElBQUksY0FBYyxHQUFpRDtZQUNqRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxFQUFFLElBQUk7WUFDZCxXQUFXLEVBQUU7Z0JBQ1gsRUFBRSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMzQixL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