nextcloud-node-client
Version:
Nextcloud client API for node.js TypeScript applications
120 lines (119 loc) • 5.05 kB
JavaScript
;
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;