UNPKG

nextcloud-node-client

Version:

Nextcloud client API for node.js TypeScript applications

120 lines (119 loc) 5.05 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const debug_1 = __importDefault(require("debug")); const fast_xml_parser_1 = __importDefault(require("fast-xml-parser")); const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); const debug = debug_1.default("RequestResponseLog"); class RequestResponseLog { constructor() { this.baseDirectory = RequestResponseLog.defaultLogDirectory; this.entries = []; this.baseDirectory = RequestResponseLog.defaultLogDirectory; this.context = ""; } static deleteInstance() { RequestResponseLog.log = null; } static getInstance() { if (!RequestResponseLog.log) { RequestResponseLog.log = new RequestResponseLog(); } return RequestResponseLog.log; } addEntry(logEntry) { return __awaiter(this, void 0, void 0, function* () { debug("addEntry"); if (!this.context) { debug("Error while recording, context not set"); throw new Error("Error while recording, context not set"); } if (logEntry.response.body && logEntry.response.contentType) { if (logEntry.response.contentType.indexOf("application/xml") !== -1) { logEntry.response.jsonBody = this.xmlToJson(logEntry.response.body); } if (logEntry.response.contentType.indexOf("application/json") !== -1) { logEntry.response.jsonBody = JSON.parse(logEntry.response.body); } } if (logEntry.request.body) { if (logEntry.request.body.indexOf && logEntry.request.body.indexOf("<?xml version") !== -1) { logEntry.request.jsonBody = this.xmlToJson(logEntry.request.body); } } this.entries.push(logEntry); yield fs_1.promises.writeFile(this.getFileName(), JSON.stringify(this.entries, null, 4)); }); } getEntries() { return __awaiter(this, void 0, void 0, function* () { debug("getEntries"); if (!this.context) { debug("Error while getting recording request, context not set"); throw new Error("Error while getting recording request, context not set"); } const entries = yield fs_1.promises.readFile(this.getFileName(), { encoding: "utf8" }); return JSON.parse(entries); }); } setContext(context) { return __awaiter(this, void 0, void 0, function* () { debug("setContext"); const newContext = context.replace(/ |:|\./g, "_"); // if (this.context !== newContext) { this.context = newContext; this.entries = []; // } // create the directory yield this.assertDirectory(this.getFileName()); }); } getFileName() { return `${this.baseDirectory}${this.context}.json`; } xmlToJson(xml) { if (fast_xml_parser_1.default.validate(xml) === true) { return fast_xml_parser_1.default.parse(xml, { ignoreNameSpace: true }); } return { info: "invalid xml" }; } assertDirectory(filename) { return __awaiter(this, void 0, void 0, function* () { const directory = path_1.default.dirname(filename); const pathArray = directory.split("/"); let p = ""; for (const dir of pathArray) { if (p === "") { p = dir; } else { p = p + "/" + dir; } try { yield fs_1.promises.mkdir(p); /* istanbul ignore next */ debug(`directory "${p}" created`); } catch (e) { /* istanbul ignore next */ debug(`directory "${p}" already exists`); } } }); } } exports.default = RequestResponseLog; RequestResponseLog.defaultLogDirectory = "RequestResponseLog/"; RequestResponseLog.log = null;