UNPKG

@intuitionrobotics/bug-report

Version:
54 lines 2.36 kB
import { addItemToArray, auditBy, filterInstances, generateHex, Module, padNumber } from "@intuitionrobotics/ts-common"; import { FirebaseModule, FirestoreCollection, StorageWrapper } from "@intuitionrobotics/firebase/backend"; import {} from "../../index.js"; import JSZip from "jszip"; export class BugReportModule_Class extends Module { constructor() { super("BugReportModule"); } // Resolved lazily on first use (was init()). _bugReport; _storage; ticketCreatorApis = []; get bugReport() { return this._bugReport ??= FirebaseModule.createAdminSession().getFirestore().getCollection('bug-report', ["_id"]); } get storage() { return this._storage ??= FirebaseModule.createAdminSession().getStorage(); } addTicketCreator(ticketCreator) { addItemToArray(this.ticketCreatorApis, ticketCreator); } saveLog = async (report, id) => { const zip = new JSZip(); report.log.forEach((message, i) => zip.file(`${report.name}_${padNumber(i, 2)}.txt`, message)); const buffer = await zip.generateAsync({ type: "nodebuffer" }); const bucket = await this.storage.getOrCreateBucket(this.config?.bucket); const fileName = `${id}-${report.name}.zip`; const file = await bucket.getFile(fileName); await file.write(buffer); return { path: `https://storage.cloud.google.com/${file.file.metadata.bucket}/${file.file.metadata.name}`, name: fileName }; }; saveFile = async (bugReport, email) => { const _id = generateHex(16); const logs = await Promise.all(bugReport.reports.map(report => this.saveLog(report, _id))); const instance = { _id, subject: bugReport.subject, description: bugReport.description, reports: logs, _audit: auditBy(email || "bug-report"), }; if (this.config?.bucket) instance.bucket = this.config.bucket; const tickets = await Promise.all(this.ticketCreatorApis.map(api => api(bugReport, logs, email))); instance.tickets = filterInstances(tickets); await this.bugReport.insert(instance); return instance.tickets; }; } export const BugReportModule = new BugReportModule_Class(); //# sourceMappingURL=BugReportModule.js.map