UNPKG

@ministryofjustice/hmpps-digital-prison-reporting-frontend

Version:

The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.

125 lines (124 loc) 5.19 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const superagent_1 = __importDefault(require("superagent")); const agentkeepalive_1 = __importStar(require("agentkeepalive")); const logger_1 = __importDefault(require("../utils/logger")); const sanitisedError_1 = __importDefault(require("../utils/sanitisedError")); class RestClient { constructor(name, config) { this.name = name; this.config = config; this.agent = config.url.startsWith('https') ? new agentkeepalive_1.HttpsAgent(config.agent) : new agentkeepalive_1.default(config.agent); } apiUrl() { return this.config.url; } timeoutConfig() { return this.config.agent.timeout; } async get(request) { return this.getWithHeaders(request).then((result) => result.data); } async getWithHeaders({ path = null, query = {}, headers = {}, responseType = '', raw = false, token, }) { const loggerData = { path: `${this.config.url}${path}`, query, }; logger_1.default.info(`${this.name}: ${JSON.stringify(loggerData, null, 2)}`); try { const result = await superagent_1.default .get(`${this.apiUrl()}${path}`) .agent(this.agent) .retry(2, (err) => { if (err) logger_1.default.info(`Retry handler found API error with ${err.code} ${err.message}`); return undefined; // retry handler only for logging retries, not to influence retry logic }) .query(query) .auth(token, { type: 'bearer' }) .set(headers) .responseType(responseType) .timeout(this.timeoutConfig()); return { data: raw ? result : result.body, headers: result.headers, }; } catch (error) { const sanitisedError = (0, sanitisedError_1.default)(error); logger_1.default.warn({ ...sanitisedError, query }, `Error calling ${this.name}, path: '${path}', verb: 'GET'`); throw sanitisedError; } } async deleteWithHeaders({ path = null, query = {}, headers = {}, responseType = '', raw = false, token, }) { const loggerData = { path: `${this.config.url}${path}`, query, }; logger_1.default.info(`${this.name}: ${JSON.stringify(loggerData, null, 2)}`); try { const result = await superagent_1.default .delete(`${this.apiUrl()}${path}`) .agent(this.agent) .retry(2, (err) => { if (err) logger_1.default.info(`Retry handler found API error with ${err.code} ${err.message}`); return undefined; // retry handler only for logging retries, not to influence retry logic }) .query(query) .auth(token, { type: 'bearer' }) .set(headers) .responseType(responseType) .timeout(this.timeoutConfig()); return { data: raw ? result : result.body, headers: result.headers, }; } catch (error) { const sanitisedError = (0, sanitisedError_1.default)(error); logger_1.default.warn({ ...sanitisedError, query }, `Error calling ${this.name}, path: '${path}', verb: 'GET'`); throw sanitisedError; } } async delete(request) { return this.deleteWithHeaders(request).then((result) => result.data); } } exports.default = RestClient;