@intuitionrobotics/bug-report
Version:
65 lines • 3.47 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());
});
};
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