import { Interface } from "./interface"; export class PrinterInterface implements Interface { public driver: any; private name: string; /** * @param printerName Name of the printer * @param driver Drivers to use. e.g.: const driver = require('printer') OR const driver = require('electron-printer'); */ constructor(printerName: string, driver: any) { this.name = printerName; if (driver && typeof driver === "object") { this.driver = driver; } else { throw new Error("No driver set!"); } } getPrinterName() { var name = this.name; if (!name || name === "auto") { const pl = this.driver.getPrinters().filter((p: any) => { return p.attributes.indexOf("RAW-ONLY") > -1; }); if (pl.length > 0) { name = pl[0].name; } } if (!name || name === "auto") { throw new Error( "A RAW-ONLY Printer could not be detected. Please configure a Printer-Name" ); } return name; } async isPrinterConnected(): Promise { const foundPrinter = this.driver.getPrinter(this.getPrinterName()); if (foundPrinter && foundPrinter.status.indexOf("NOT-AVAILABLE") === -1) { return true; } else { return false; } } async execute(buffer: Uint8Array): Promise { return new Promise((resolve, reject) => { this.driver.printDirect({ data: buffer, printer: this.getPrinterName(), type: "RAW", success: function (jobID: string) { resolve(); }, error: function (err: Error) { reject(err); }, }); }); } }