UNPKG

@intuitionrobotics/bug-report

Version:
65 lines 3.47 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BugReportModule = exports.BugReportModule_Class = void 0; const ts_common_1 = require("@intuitionrobotics/ts-common"); const backend_1 = require("@intuitionrobotics/firebase/backend"); const JSZip = require("jszip"); class BugReportModule_Class extends ts_common_1.Module { constructor() { super("BugReportModule"); this.ticketCreatorApis = []; this.saveLog = (report, id) => __awaiter(this, void 0, void 0, function* () { var _a; const zip = new JSZip(); report.log.forEach((message, i) => zip.file(`${report.name}_${(0, ts_common_1.padNumber)(i, 2)}.txt`, message)); const buffer = yield zip.generateAsync({ type: "nodebuffer" }); const bucket = yield this.storage.getOrCreateBucket((_a = this.config) === null || _a === void 0 ? void 0 : _a.bucket); const fileName = `${id}-${report.name}.zip`; const file = yield bucket.getFile(fileName); yield file.write(buffer); return { path: `https://storage.cloud.google.com/${file.file.metadata.bucket}/${file.file.metadata.name}`, name: fileName }; }); this.saveFile = (bugReport, email) => __awaiter(this, void 0, void 0, function* () { var _a; const _id = (0, ts_common_1.generateHex)(16); const logs = yield Promise.all(bugReport.reports.map(report => this.saveLog(report, _id))); const instance = { _id, subject: bugReport.subject, description: bugReport.description, reports: logs, _audit: (0, ts_common_1.auditBy)(email || "bug-report"), }; if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.bucket) instance.bucket = this.config.bucket; const tickets = yield Promise.all(this.ticketCreatorApis.map(api => api(bugReport, logs, email))); instance.tickets = (0, ts_common_1.filterInstances)(tickets); yield this.bugReport.insert(instance); return instance.tickets; }); } init() { const sessionAdmin = backend_1.FirebaseModule.createAdminSession(); const firestore = sessionAdmin.getFirestore(); this.bugReport = firestore.getCollection('bug-report', ["_id"]); this.storage = sessionAdmin.getStorage(); } addTicketCreator(ticketCreator) { (0, ts_common_1.addItemToArray)(this.ticketCreatorApis, ticketCreator); } } exports.BugReportModule_Class = BugReportModule_Class; exports.BugReportModule = new BugReportModule_Class(); //# sourceMappingURL=BugReportModule.js.map