UNPKG

pink-bears

Version:

Intelligent rate limiting middleware with MongoDB integration and caching for Node.js applications

126 lines (109 loc) 5.13 kB
const {emitEvent} = require('./errorEmitter'); const {errorConstants} = require('./constants'); const axiosWrapper = require('./AxiosWrapper'); let Axios; class Fetch { constructor(domain, token, iframeUrl, productId, userId, traceId, appVersion, userInstalledId, accountId) { this.domain = domain; this.token = token; this.iframeUrl = iframeUrl; this.productId = productId; this.traceId = traceId; this.appVersion = appVersion; this.userInstalledId = userInstalledId; this.accountId = accountId; this.userId = userId; this.initializeAxiosWrapper(); } initializeAxiosWrapper = () => { const AxiosWrapper = new axiosWrapper(this.domain, this.userId); Axios = AxiosWrapper.getAxiosInstance(); } get = async (url, options, params) => { try { const request = {pId: this.productId, function: "Request", method: "GET", url:url, options: options, params: params, iframeUrl: this.iframeUrl, appVersion: this.appVersion, userInstalledId: this.userInstalledId, accountId: this.accountId} let response; if(this.traceId){ response = await Axios.post(`${this.domain}/api/sparrow-apps`, { "request": request }, { headers: { "Content-type": "application/json; charset=UTF-8", "auth": this.token, "traceId": this.traceId } }); }else{ response = await Axios.post(`${this.domain}/api/sparrow-apps`, { "request": request }, { headers: { "Content-type": "application/json; charset=UTF-8", "auth": this.token } }); } console.log("RESPONSE FOR THE API CALL", response?.data) return { data: response?.data?.body, status: response?.data?.statusCodeValue }; } catch (error) { console.log("Error occured while making API call", error) await emitEvent(errorConstants.fetch, error); return { data: error.response?.data || error, status: error.response?.status || error } } } post = async (url, payload, options) => { try { return await this._makeAPICall(url, options, payload, 'POST'); } catch (error) { console.log("Error occured while making API call", error); await emitEvent(errorConstants.fetch, error); return { data: error.response?.data || error, status: error.response?.status || error }; } } put = async (url, payload, options) => { try { return await this._makeAPICall(url, options, payload, 'PUT'); } catch (error) { console.log("Error occured while making API call", error); await emitEvent(errorConstants.fetch, error); return { data: error.response?.data || error, status: error.response?.status || error }; } } patch = async (url, payload, options) => { try { return await this._makeAPICall(url, options, payload, 'PATCH'); } catch (error) { console.log("Error occured while making API call", error); await emitEvent(errorConstants.fetch, error); return { data: error.response?.data || error, status: error.response?.status || error }; } } delete = async (url, payload, options) => { try { return await this._makeAPICall(url, options, payload, 'DELETE'); } catch (error) { console.log("Error occured while making API call", error); await emitEvent(errorConstants.fetch, error); return { data: error.response?.data || error, status: error.response?.status || error }; } } async _makeAPICall(url, options, payload, method) { const request = { pId: this.productId, function: "Request", method, url: url, options: options, body: payload, iframeUrl: this.iframeUrl, appVersion: this.appVersion, userInstalledId: this.userInstalledId, accountId: this.accountId }; let response; if (this.traceId) { response = await Axios.post(`${this.domain}/api/sparrow-apps`, { "request": request }, { headers: { "Content-type": "application/json; charset=UTF-8", "auth": this.token, "traceId": this.traceId } }); } else { response = await Axios.post(`${this.domain}/api/sparrow-apps`, { "request": request }, { headers: { "Content-type": "application/json; charset=UTF-8", "auth": this.token, } }); } console.log("RESPONSE FOR THE API CALL", response?.data); return { data: response?.data?.body, status: response?.data?.statusCodeValue }; } } module.exports = Fetch;