@mmote/niimblue-node
Version:
Headless clients for niimbluelib. Command line interface, simple REST server are also included.
94 lines (93 loc) • 3.52 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadImageFromFile = exports.loadImageFromUrl = exports.loadImageFromBase64 = exports.printImage = exports.initClient = void 0;
const niimbluelib_1 = require("@mmote/niimbluelib");
const fs_1 = __importDefault(require("fs"));
const sharp_1 = __importDefault(require("sharp"));
const stream_1 = require("stream");
const _1 = require(".");
const initClient = (transport, address, debug) => {
let client = null;
if (transport === "serial") {
client = new _1.NiimbotHeadlessSerialClient();
client.setPort(address);
}
else if (transport === "ble") {
client = new _1.NiimbotHeadlessBleClient();
client.setAddress(address);
}
else {
throw new Error("Invalid transport");
}
client.on("printprogress", (e) => {
console.log(`Page ${e.page}/${e.pagesTotal}, Page print ${e.pagePrintProgress}%, Page feed ${e.pageFeedProgress}%`);
});
client.on("heartbeatfailed", (e) => {
const maxFails = 5;
console.warn(`Heartbeat failed ${e.failedAttempts}/${maxFails}`);
if (e.failedAttempts >= maxFails) {
console.warn("Disconnecting");
client.disconnect();
}
});
if (debug) {
client.on("packetsent", (e) => {
console.log(`>> ${niimbluelib_1.Utils.bufToHex(e.packet.toBytes())} (${niimbluelib_1.RequestCommandId[e.packet.command]})`);
});
client.on("packetreceived", (e) => {
console.log(`<< ${niimbluelib_1.Utils.bufToHex(e.packet.toBytes())} (${niimbluelib_1.ResponseCommandId[e.packet.command]})`);
});
client.on("connect", () => {
console.log("Connected");
});
client.on("disconnect", () => {
console.log("Disconnected");
});
}
return client;
};
exports.initClient = initClient;
const printImage = async (client, printTaskName, encoded, options) => {
const printTask = client.abstraction.newPrintTask(printTaskName, {
density: options.density ?? 3,
labelType: options.labelType ?? niimbluelib_1.LabelType.WithGaps,
totalPages: options.quantity ?? 1,
statusPollIntervalMs: 500,
statusTimeoutMs: 8_000,
});
try {
await printTask.printInit();
await printTask.printPage(encoded, options.quantity ?? 1);
await printTask.waitForFinished();
}
catch (e) {
console.error(e);
}
await client.abstraction.printEnd();
};
exports.printImage = printImage;
const loadImageFromBase64 = async (b64) => {
const buf = Buffer.from(b64, "base64");
const stream = stream_1.Readable.from(buf);
return stream.pipe((0, sharp_1.default)());
};
exports.loadImageFromBase64 = loadImageFromBase64;
const loadImageFromUrl = async (url) => {
const { body, ok, status } = await fetch(url);
if (!ok) {
throw new Error(`Can't fetch image, error ${status}`);
}
if (body === null) {
throw new Error("Body is null");
}
return stream_1.Readable.fromWeb(body).pipe((0, sharp_1.default)());
};
exports.loadImageFromUrl = loadImageFromUrl;
const loadImageFromFile = async (path) => {
const stream = fs_1.default.createReadStream(path);
return stream.pipe((0, sharp_1.default)());
};
exports.loadImageFromFile = loadImageFromFile;