import * as plugins from './typedrequest.plugins'; export class TypedRequest { public urlEndPoint: string; public method: string; // STATIC constructor(urlEndPointArg: string, methodArg: T['method']) { this.urlEndPoint = urlEndPointArg; this.method = methodArg; } /** * firest the request */ public async fire(fireArg: T['request']): Promise { const response = await plugins.smartrequest.postJson(this.urlEndPoint, { requestBody: { method: this.method, request: fireArg, response: null } }); const responseBody: T = response.body; if (responseBody.error) { console.log(responseBody.error.text); console.log(responseBody.error.data); return null; } if (responseBody.retry) { console.log(`server requested retry for the following reason: ${responseBody.retry.reason}`); await plugins.smartdelay.delayFor(responseBody.retry.waitForMs); // tslint:disable-next-line: no-return-await return await this.fire(fireArg); } return responseBody.response; } }