1 | "use strict";
|
2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4 | return new (P || (P = Promise))(function (resolve, reject) {
|
5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8 | step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9 | });
|
10 | };
|
11 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
12 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
13 | };
|
14 | Object.defineProperty(exports, "__esModule", { value: true });
|
15 | const debug_1 = __importDefault(require("debug"));
|
16 | const fast_xml_parser_1 = __importDefault(require("fast-xml-parser"));
|
17 | const fs_1 = require("fs");
|
18 | const path_1 = __importDefault(require("path"));
|
19 | const debug = debug_1.default("RequestResponseLog");
|
20 | class RequestResponseLog {
|
21 | constructor() {
|
22 | this.baseDirectory = RequestResponseLog.defaultLogDirectory;
|
23 | this.entries = [];
|
24 | this.baseDirectory = RequestResponseLog.defaultLogDirectory;
|
25 | this.context = "";
|
26 | }
|
27 | static deleteInstance() {
|
28 | RequestResponseLog.log = null;
|
29 | }
|
30 | static getInstance() {
|
31 | if (!RequestResponseLog.log) {
|
32 | RequestResponseLog.log = new RequestResponseLog();
|
33 | }
|
34 | return RequestResponseLog.log;
|
35 | }
|
36 | addEntry(logEntry) {
|
37 | return __awaiter(this, void 0, void 0, function* () {
|
38 | debug("addEntry");
|
39 | if (!this.context) {
|
40 | debug("Error while recording, context not set");
|
41 | throw new Error("Error while recording, context not set");
|
42 | }
|
43 | if (logEntry.response.body && logEntry.response.contentType) {
|
44 | if (logEntry.response.contentType.indexOf("application/xml") !== -1) {
|
45 | logEntry.response.jsonBody = this.xmlToJson(logEntry.response.body);
|
46 | }
|
47 | if (logEntry.response.contentType.indexOf("application/json") !== -1) {
|
48 | logEntry.response.jsonBody = JSON.parse(logEntry.response.body);
|
49 | }
|
50 | }
|
51 | if (logEntry.request.body) {
|
52 | if (logEntry.request.body.indexOf("<?xml version") !== -1) {
|
53 | logEntry.request.jsonBody = this.xmlToJson(logEntry.request.body);
|
54 | }
|
55 | }
|
56 | this.entries.push(logEntry);
|
57 | yield fs_1.promises.writeFile(this.getFileName(), JSON.stringify(this.entries, null, 4));
|
58 | });
|
59 | }
|
60 | getEntries() {
|
61 | return __awaiter(this, void 0, void 0, function* () {
|
62 | debug("getEntries");
|
63 | if (!this.context) {
|
64 | debug("Error while getting recording request, context not set");
|
65 | throw new Error("Error while getting recording request, context not set");
|
66 | }
|
67 | const entries = yield fs_1.promises.readFile(this.getFileName(), { encoding: "utf8" });
|
68 | return JSON.parse(entries);
|
69 | });
|
70 | }
|
71 | setContext(context) {
|
72 | return __awaiter(this, void 0, void 0, function* () {
|
73 | debug("setContext");
|
74 | const newContext = context.replace(/ |:|\./g, "_");
|
75 |
|
76 | this.context = newContext;
|
77 | this.entries = [];
|
78 |
|
79 |
|
80 | yield this.assertDirectory(this.getFileName());
|
81 | });
|
82 | }
|
83 | getFileName() {
|
84 | return `${this.baseDirectory}${this.context}.json`;
|
85 | }
|
86 | xmlToJson(xml) {
|
87 | if (fast_xml_parser_1.default.validate(xml) === true) {
|
88 | return fast_xml_parser_1.default.parse(xml, { ignoreNameSpace: true });
|
89 | }
|
90 | return { info: "invalid xml" };
|
91 | }
|
92 | assertDirectory(filename) {
|
93 | return __awaiter(this, void 0, void 0, function* () {
|
94 | const directory = path_1.default.dirname(filename);
|
95 | const pathArray = directory.split("/");
|
96 | let p = "";
|
97 | for (const dir of pathArray) {
|
98 | if (p === "") {
|
99 | p = dir;
|
100 | }
|
101 | else {
|
102 | p = p + "/" + dir;
|
103 | }
|
104 | try {
|
105 | yield fs_1.promises.mkdir(p);
|
106 | debug(`directory "${p}" created`);
|
107 | }
|
108 | catch (e) {
|
109 | debug(`directory "${p}" already exists`);
|
110 | }
|
111 | }
|
112 | });
|
113 | }
|
114 | }
|
115 | exports.default = RequestResponseLog;
|
116 | RequestResponseLog.defaultLogDirectory = "RequestResponseLog/";
|
117 | RequestResponseLog.log = null;
|