@deliverart/epos
v0.1.1
Published
Transport-neutral Epson ePOS printing primitives
Readme
@deliverart/epos
Transport-neutral primitives for browser-to-printer thermal printing.
The root export contains the immutable EposDocument, builder, PrintClient, typed results, telemetry events, and in-memory queue. Browser-only raster, preview, and Web Locks helpers are exposed from @deliverart/epos/browser. The official Epson browser SDK adapter is exposed from @deliverart/epos/transports/epson-sdk and receives the Epson namespace as a dependency; this package does not redistribute Epson's vendor runtime.
Operational failures are returned as PrintResult values. A timeout after send() produces status: "unknown" and is never retried automatically, because the printer may already have printed the receipt.
The browser canvas preview mirrors Epson's independent text axes: textSize(1, 2) produces tall text at normal character width, textSize(2, 1) doubles only width, and textSize(2, 2) doubles both dimensions. Supply width, printableWidth, and columns from the selected receipt profile to use physical 203 dpi paper geometry. Normal Font A text uses a 24-dot cell with a 30-dot line advance; double-height text occupies 48 dots without adding artificial leading. A trailing newline terminates the current line without creating an additional blank row.
import { createEposDocument, PrintClient } from "@deliverart/epos";
import { createBrowserPrintLock } from "@deliverart/epos/browser";
import { EpsonSdkTransport } from "@deliverart/epos/transports/epson-sdk";
const document = createEposDocument()
.align("center")
.textStyle({ bold: true })
.text("Order 42\n")
.feed(2)
.cut()
.build();
const transport = new EpsonSdkTransport({ sdk: window.epson });
const client = new PrintClient(transport, {
crossContextLock: createBrowserPrintLock(),
});
const result = await client.print({
id: crypto.randomUUID(),
target: {
host: "192.168.1.50",
port: 8043,
tls: true,
deviceId: "local_printer",
},
document,
});