@thermal-label/brother-ql-node 0.6.1 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,242 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { TransportTimeoutError } from '@thermal-label/contracts';
3
+ import { DEVICES, MEDIA } from '@thermal-label/brother-ql-core';
4
+ const { snmpGet } = vi.hoisted(() => ({ snmpGet: vi.fn() }));
5
+ vi.mock('@thermal-label/transport/node', async (importOriginal) => {
6
+ const actual = await importOriginal();
7
+ return { PRINTER_MIB: actual.PRINTER_MIB, snmpGet };
8
+ });
9
+ import { PRINTER_MIB } from '@thermal-label/transport/node';
10
+ import { BrotherQLPrinter } from '../printer.js';
11
+ const HOST = '192.168.1.67';
12
+ function makeTransport() {
13
+ const written = [];
14
+ const transport = {
15
+ get connected() {
16
+ return true;
17
+ },
18
+ write: vi.fn((data) => {
19
+ written.push(new Uint8Array(data));
20
+ return Promise.resolve();
21
+ }),
22
+ read: vi.fn(() => Promise.resolve(new Uint8Array(0))),
23
+ close: vi.fn(() => Promise.resolve()),
24
+ };
25
+ return { transport, written };
26
+ }
27
+ function str(value) {
28
+ return { type: 'string', value, raw: new TextEncoder().encode(value) };
29
+ }
30
+ function int(value) {
31
+ return { type: 'integer', value };
32
+ }
33
+ /** The bench QL-820NWBc with DK-11201 loaded, idle, no errors. */
34
+ function benchStatus() {
35
+ return {
36
+ [PRINTER_MIB.hrPrinterStatus]: int(3),
37
+ [PRINTER_MIB.hrPrinterDetectedErrorState]: { type: 'octets', raw: new Uint8Array([0]) },
38
+ [PRINTER_MIB.prtInputMediaName]: str('29mm x 90mm / 1.1" x 3.5"'),
39
+ [PRINTER_MIB.prtInputDimUnit]: int(4),
40
+ [PRINTER_MIB.prtInputMediaDimFeedDir]: int(-1),
41
+ [PRINTER_MIB.prtInputMediaDimXFeedDir]: int(-1),
42
+ };
43
+ }
44
+ function counter(count, printing = false) {
45
+ return {
46
+ [PRINTER_MIB.prtMarkerLifeCount]: int(count),
47
+ [PRINTER_MIB.hrPrinterStatus]: int(printing ? 4 : 3),
48
+ };
49
+ }
50
+ function solidRgba(width, height) {
51
+ return { width, height, data: new Uint8Array(width * height * 4).fill(0) };
52
+ }
53
+ /**
54
+ * Drive a promise to completion under fake timers: the print path
55
+ * schedules its timers behind async hops, so a single advance would
56
+ * return before they exist.
57
+ */
58
+ async function settle(p) {
59
+ let result;
60
+ void p.then(value => (result = { value }), (error) => (result = { error }));
61
+ while (result === undefined)
62
+ await vi.advanceTimersByTimeAsync(100);
63
+ return result;
64
+ }
65
+ function tcpPrinter(community) {
66
+ const { transport, written } = makeTransport();
67
+ const printer = new BrotherQLPrinter(DEVICES.QL_820NWBc, transport, 'tcp', {
68
+ host: HOST,
69
+ ...(community === undefined ? {} : { community }),
70
+ });
71
+ return { printer, written };
72
+ }
73
+ beforeEach(() => {
74
+ snmpGet.mockReset();
75
+ });
76
+ describe('BrotherQLPrinter over TCP: status', () => {
77
+ it('getStatus() reads the Printer-MIB over SNMP and never touches the socket', async () => {
78
+ snmpGet.mockResolvedValueOnce(benchStatus());
79
+ const { transport, written } = makeTransport();
80
+ const printer = new BrotherQLPrinter(DEVICES.QL_820NWBc, transport, 'tcp', { host: HOST });
81
+ const status = await printer.getStatus();
82
+ expect(status.ready).toBe(true);
83
+ expect(status.detectedMedia?.id).toBe(271);
84
+ expect(status.rawBytes.length).toBe(0);
85
+ expect(written).toHaveLength(0);
86
+ // eslint-disable-next-line @typescript-eslint/unbound-method
87
+ expect(vi.mocked(transport.read)).not.toHaveBeenCalled();
88
+ expect(snmpGet).toHaveBeenCalledWith(HOST, [
89
+ PRINTER_MIB.hrPrinterStatus,
90
+ PRINTER_MIB.hrPrinterDetectedErrorState,
91
+ PRINTER_MIB.prtInputMediaName,
92
+ PRINTER_MIB.prtInputDimUnit,
93
+ PRINTER_MIB.prtInputMediaDimFeedDir,
94
+ PRINTER_MIB.prtInputMediaDimXFeedDir,
95
+ ], { community: 'public' });
96
+ });
97
+ it('getStatus() forwards the community and tolerates missing objects', async () => {
98
+ snmpGet.mockResolvedValueOnce({
99
+ [PRINTER_MIB.hrPrinterStatus]: int(3),
100
+ [PRINTER_MIB.prtInputMediaName]: str('62mm / 2.4"'),
101
+ });
102
+ const { printer } = tcpPrinter('office');
103
+ const status = await printer.getStatus();
104
+ expect(snmpGet.mock.calls[0]?.[2]).toEqual({ community: 'office' });
105
+ expect(status.detectedMedia?.id).toBe(259);
106
+ expect(status.errors).toEqual([]);
107
+ expect(status.details?.map(d => d.label)).toContain('Two-colour');
108
+ });
109
+ it('getStatus() reads a bit string that decoded as printable text via raw', async () => {
110
+ // 0x08 = doorOpen (bit 4) is printable ASCII (backspace is not, but
111
+ // 0x08 lands in `octets`); use 0x40 '@' = lowToner... keep it real:
112
+ // bit 4 doorOpen = 0x08 → octets, bit 1 noPaper = 0x40 → '@' string.
113
+ snmpGet.mockResolvedValueOnce({
114
+ ...benchStatus(),
115
+ [PRINTER_MIB.hrPrinterDetectedErrorState]: str('@'),
116
+ });
117
+ const { printer } = tcpPrinter();
118
+ const status = await printer.getStatus();
119
+ expect(status.ready).toBe(false);
120
+ expect(status.errors.map(e => e.code)).toEqual(['no_media']);
121
+ });
122
+ it('getStatus() wraps an SNMP failure with the port-9100 explanation', async () => {
123
+ snmpGet.mockRejectedValueOnce(new TransportTimeoutError('tcp', 2000));
124
+ const { printer } = tcpPrinter();
125
+ await expect(printer.getStatus()).rejects.toThrow(/Could not read status from 192\.168\.1\.67 over SNMP \(Read timed out after 2000ms\); port 9100 carries no status/);
126
+ });
127
+ it('getStatus() on a TCP printer built without its host says so', async () => {
128
+ const { transport } = makeTransport();
129
+ const printer = new BrotherQLPrinter(DEVICES.QL_820NWBc, transport, 'tcp');
130
+ await expect(printer.getStatus()).rejects.toThrow(/constructed without its host/);
131
+ expect(snmpGet).not.toHaveBeenCalled();
132
+ });
133
+ });
134
+ describe('BrotherQLPrinter over TCP: print confirmation', () => {
135
+ beforeEach(() => {
136
+ vi.useFakeTimers();
137
+ });
138
+ afterEach(() => {
139
+ vi.useRealTimers();
140
+ });
141
+ it('getStatus() feeds a later print() with the detected media', async () => {
142
+ snmpGet.mockResolvedValueOnce(benchStatus());
143
+ const { printer, written } = tcpPrinter();
144
+ await printer.getStatus();
145
+ const done = await settle(printer.print(solidRgba(64, 64), undefined, { confirm: false }));
146
+ expect(done.error).toBeUndefined();
147
+ expect(written.length).toBeGreaterThan(0);
148
+ });
149
+ it('resolves once prtMarkerLifeCount moves', async () => {
150
+ snmpGet
151
+ .mockResolvedValueOnce(counter(41)) // before
152
+ .mockResolvedValueOnce(counter(41, true)) // still printing
153
+ .mockResolvedValueOnce(counter(42)); // done
154
+ const { printer, written } = tcpPrinter();
155
+ const done = await settle(printer.print(solidRgba(64, 64), MEDIA[271]));
156
+ expect(done.error).toBeUndefined();
157
+ expect(written.length).toBeGreaterThan(0);
158
+ expect(snmpGet).toHaveBeenCalledTimes(3);
159
+ expect(snmpGet.mock.calls[1]?.[1]).toEqual([
160
+ PRINTER_MIB.prtMarkerLifeCount,
161
+ PRINTER_MIB.hrPrinterStatus,
162
+ ]);
163
+ });
164
+ it('rejects when the counter never moves and the printer is idle', async () => {
165
+ snmpGet.mockResolvedValue(counter(41));
166
+ const { printer } = tcpPrinter();
167
+ const done = await settle(printer.print(solidRgba(64, 64), MEDIA[271]));
168
+ expect(done.error.message).toMatch(/Job sent to 192\.168\.1\.67 but the page counter did not move in 1\d s: the printer did not print it\.$/);
169
+ });
170
+ it('adds the two-colour hint on a 62 mm roll', async () => {
171
+ snmpGet.mockResolvedValue(counter(7));
172
+ const { printer } = tcpPrinter();
173
+ const done = await settle(printer.print(solidRgba(64, 64), MEDIA[259]));
174
+ const message = done.error.message;
175
+ expect(message).toMatch(/did not print it\. 62 mm rolls come in a two-colour variant/);
176
+ expect(message).toMatch(/DK-22251 = id 251/);
177
+ });
178
+ it('keeps waiting past the idle budget while the agent reports printing', async () => {
179
+ snmpGet.mockResolvedValueOnce(counter(41));
180
+ snmpGet.mockResolvedValue(counter(41, true));
181
+ const { printer } = tcpPrinter();
182
+ let result;
183
+ void printer.print(solidRgba(64, 64), MEDIA[271]).then(() => (result = {}), (error) => (result = { error }));
184
+ await vi.advanceTimersByTimeAsync(30_000);
185
+ expect(result).toBeUndefined();
186
+ snmpGet.mockResolvedValue(counter(42));
187
+ await vi.advanceTimersByTimeAsync(1_000);
188
+ expect(result).toEqual({});
189
+ });
190
+ it('gives up after the hard cap even while printing', async () => {
191
+ snmpGet.mockResolvedValueOnce(counter(41));
192
+ snmpGet.mockResolvedValue(counter(41, true));
193
+ const { printer } = tcpPrinter();
194
+ const done = await settle(printer.print(solidRgba(64, 64), MEDIA[271]));
195
+ expect(done.error.message).toMatch(/did not move in 6\d s/);
196
+ });
197
+ it('rejects before sending when the counter cannot be read', async () => {
198
+ snmpGet.mockRejectedValueOnce(new TransportTimeoutError('tcp', 2000));
199
+ const { printer, written } = tcpPrinter();
200
+ const done = await settle(printer.print(solidRgba(64, 64), MEDIA[271]));
201
+ expect(done.error.message).toMatch(/Cannot confirm prints on 192\.168\.1\.67: SNMP prtMarkerLifeCount unreadable \(Read timed out after 2000ms\)\. Pass confirm: false/);
202
+ expect(written).toHaveLength(0);
203
+ });
204
+ it('rejects before sending when the agent has no page counter', async () => {
205
+ snmpGet.mockResolvedValueOnce({});
206
+ const { printer, written } = tcpPrinter();
207
+ const done = await settle(printer.print(solidRgba(64, 64), MEDIA[271]));
208
+ expect(done.error.message).toMatch(/agent has no prtMarkerLifeCount/);
209
+ expect(written).toHaveLength(0);
210
+ });
211
+ it('distinguishes "sent but unconfirmed" when SNMP dies after the job', async () => {
212
+ snmpGet.mockResolvedValueOnce(counter(41)).mockRejectedValueOnce(new Error('EHOSTUNREACH'));
213
+ const { printer, written } = tcpPrinter();
214
+ const done = await settle(printer.print(solidRgba(64, 64), MEDIA[271]));
215
+ expect(done.error.message).toMatch(/Job sent to 192\.168\.1\.67 but could not be confirmed: SNMP stopped answering \(EHOSTUNREACH\)/);
216
+ expect(written.length).toBeGreaterThan(0);
217
+ });
218
+ it('confirm: false sends blind and never asks SNMP', async () => {
219
+ const { printer, written } = tcpPrinter();
220
+ const done = await settle(printer.print(solidRgba(64, 64), MEDIA[271], { confirm: false }));
221
+ expect(done.error).toBeUndefined();
222
+ expect(written.length).toBeGreaterThan(0);
223
+ expect(snmpGet).not.toHaveBeenCalled();
224
+ });
225
+ it('uses the community for the counter reads', async () => {
226
+ snmpGet.mockResolvedValueOnce(counter(1)).mockResolvedValue(counter(2));
227
+ const { printer } = tcpPrinter('office');
228
+ const done = await settle(printer.print(solidRgba(64, 64), MEDIA[271]));
229
+ expect(done.error).toBeUndefined();
230
+ for (const call of snmpGet.mock.calls)
231
+ expect(call[2]).toEqual({ community: 'office' });
232
+ });
233
+ it('USB printers never confirm, whatever the option says', async () => {
234
+ const { transport, written } = makeTransport();
235
+ const printer = new BrotherQLPrinter(DEVICES.QL_820NWBc, transport, 'usb');
236
+ const done = await settle(printer.print(solidRgba(64, 64), MEDIA[271], { confirm: true }));
237
+ expect(done.error).toBeUndefined();
238
+ expect(written.length).toBeGreaterThan(0);
239
+ expect(snmpGet).not.toHaveBeenCalled();
240
+ });
241
+ });
242
+ //# sourceMappingURL=printer-network.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printer-network.test.js","sourceRoot":"","sources":["../../src/__tests__/printer-network.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it, vi } from 'vitest';
2
- import { MediaNotSpecifiedError } from '@thermal-label/contracts';
2
+ import { MediaNotSpecifiedError, TransportTimeoutError, } from '@thermal-label/contracts';
3
3
  import { DEVICES, MEDIA } from '@thermal-label/brother-ql-core';
4
4
  import { BrotherQLPrinter } from '../printer.js';
5
5
  function makeTransport(statusBytes = new Uint8Array(32)) {
@@ -17,6 +17,39 @@ function makeTransport(statusBytes = new Uint8Array(32)) {
17
17
  };
18
18
  return { transport, written };
19
19
  }
20
+ /** Raster rows carrying ink, counted from the first `ESC i d` to the print command. */
21
+ function inkedRows(job) {
22
+ let i = 0;
23
+ while (i < job.length - 4 && !(job[i] === 0x1b && job[i + 1] === 0x69 && job[i + 2] === 0x64))
24
+ i++;
25
+ i += 5;
26
+ if (job[i] === 0x4d)
27
+ i += 2; // optional compression-mode command
28
+ let inked = 0;
29
+ while (i < job.length && (job[i] === 0x67 || job[i] === 0x77)) {
30
+ const len = job[i + 2] ?? 0;
31
+ if (job.subarray(i + 3, i + 3 + len).some(b => b !== 0))
32
+ inked++;
33
+ i += 3 + len;
34
+ }
35
+ return inked;
36
+ }
37
+ function concatAll(chunks) {
38
+ const out = new Uint8Array(chunks.reduce((n, c) => n + c.length, 0));
39
+ let off = 0;
40
+ for (const c of chunks) {
41
+ out.set(c, off);
42
+ off += c.length;
43
+ }
44
+ return out;
45
+ }
46
+ /** Opaque black RGBA, so every row of the rendered bitmap carries ink. */
47
+ function blackRgba(width, height) {
48
+ const data = new Uint8Array(width * height * 4);
49
+ for (let i = 3; i < data.length; i += 4)
50
+ data[i] = 255;
51
+ return { width, height, data };
52
+ }
20
53
  function solidRgba(width, height) {
21
54
  return {
22
55
  width,
@@ -138,19 +171,17 @@ describe('BrotherQLPrinter', () => {
138
171
  it("print() auto-rotates landscape input on 'horizontal' die-cut media", async () => {
139
172
  // MEDIA[271] = DK-11201 29×90, defaultOrientation: 'horizontal'.
140
173
  // 800×200 landscape RGBA — the heuristic should rotate the bitmap 90°
141
- // CW so the visual reads along the tape feed direction. Without
142
- // rotation the encoded job has 200 raster rows; with rotation it has
143
- // 800. Assert the explicit `rotate: 0` bypass produces a smaller job
144
- // than the default auto path.
174
+ // CW so the visual reads along the tape feed direction. Die-cut pages
175
+ // are a fixed 991 rows, so count the inked rows: 800 rotated, 200
176
+ // with the explicit `rotate: 0` bypass.
145
177
  const { transport: autoTransport, written: autoWritten } = makeTransport();
146
178
  const autoPrinter = new BrotherQLPrinter(DEVICES.QL_820NWBc, autoTransport, 'usb');
147
- await autoPrinter.print(solidRgba(800, 200), MEDIA[271]);
179
+ await autoPrinter.print(blackRgba(800, 200), MEDIA[271]);
148
180
  const { transport: bypassTransport, written: bypassWritten } = makeTransport();
149
181
  const bypassPrinter = new BrotherQLPrinter(DEVICES.QL_820NWBc, bypassTransport, 'usb');
150
- await bypassPrinter.print(solidRgba(800, 200), MEDIA[271], { rotate: 0 });
151
- const totalAuto = autoWritten.reduce((acc, b) => acc + b.length, 0);
152
- const totalBypass = bypassWritten.reduce((acc, b) => acc + b.length, 0);
153
- expect(totalAuto).toBeGreaterThan(totalBypass);
182
+ await bypassPrinter.print(blackRgba(800, 200), MEDIA[271], { rotate: 0 });
183
+ expect(inkedRows(concatAll(autoWritten))).toBe(800);
184
+ expect(inkedRows(concatAll(bypassWritten))).toBe(200);
154
185
  });
155
186
  it('createPreview() returns two planes on multi-ink media', async () => {
156
187
  const { transport } = makeTransport();
@@ -203,6 +234,45 @@ describe('BrotherQLPrinter', () => {
203
234
  // eslint-disable-next-line @typescript-eslint/unbound-method
204
235
  expect(vi.mocked(transport.close)).toHaveBeenCalled();
205
236
  });
237
+ it('getStatus() bounds each poll read and treats a timeout as "not yet"', async () => {
238
+ // A serial/TCP-like transport blocks instead of returning 0 bytes;
239
+ // the bounded read turns that into TransportTimeoutError, which the
240
+ // poll loop retries until the 32 bytes arrive.
241
+ const bytes = new Uint8Array(32);
242
+ bytes[10] = 62;
243
+ bytes[11] = 0x0a;
244
+ const read = vi
245
+ .fn()
246
+ .mockRejectedValueOnce(new TransportTimeoutError('serial', 150))
247
+ .mockRejectedValueOnce(new TransportTimeoutError('serial', 150))
248
+ .mockResolvedValueOnce(bytes);
249
+ const transport = {
250
+ get connected() {
251
+ return true;
252
+ },
253
+ write: vi.fn(() => Promise.resolve()),
254
+ read,
255
+ close: vi.fn(() => Promise.resolve()),
256
+ };
257
+ const printer = new BrotherQLPrinter(DEVICES.QL_820NWBc, transport, 'serial');
258
+ const status = await printer.getStatus();
259
+ expect(status.detectedMedia?.id).toBe(259);
260
+ expect(read).toHaveBeenCalledTimes(3);
261
+ for (const call of read.mock.calls)
262
+ expect(call[1]).toBe(150);
263
+ });
264
+ it('getStatus() propagates non-timeout read errors', async () => {
265
+ const transport = {
266
+ get connected() {
267
+ return true;
268
+ },
269
+ write: vi.fn(() => Promise.resolve()),
270
+ read: vi.fn(() => Promise.reject(new Error('LIBUSB_ERROR_PIPE'))),
271
+ close: vi.fn(() => Promise.resolve()),
272
+ };
273
+ const printer = new BrotherQLPrinter(DEVICES.QL_820NWBc, transport, 'usb');
274
+ await expect(printer.getStatus()).rejects.toThrow('LIBUSB_ERROR_PIPE');
275
+ });
206
276
  it('getStatus() throws when the printer never queues a response', async () => {
207
277
  // transport.read always returns 0 bytes — mirrors the USB path where
208
278
  // the printer hasn't responded yet.
@@ -1 +1 @@
1
- {"version":3,"file":"printer.test.js","sourceRoot":"","sources":["../../src/__tests__/printer.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"printer.test.js","sourceRoot":"","sources":["../../src/__tests__/printer.test.ts"],"names":[],"mappings":"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"}
@@ -1,36 +1,56 @@
1
- import type { DiscoveredPrinter, OpenOptions, PrinterDiscovery } from '@thermal-label/contracts';
1
+ import type { DiscoveredPrinter, MediaDescriptor, OpenOptions, PrinterDiscovery } from '@thermal-label/contracts';
2
2
  import { BrotherQLPrinter } from './printer.js';
3
3
  /**
4
4
  * Driver-specific `openPrinter` options.
5
5
  *
6
- * Extends the contracts `OpenOptions` with `path` / `baudRate` for
7
- * serial (RFCOMM over OS-paired Bluetooth on the QL-820NWB, or any
8
- * USB-to-serial adapter). Baud rate is forwarded to the OS driver;
9
- * RFCOMM ignores it, but `serialport` requires a value.
6
+ * Serial (RFCOMM over OS-paired Bluetooth on the QL-820NWB, or any
7
+ * USB-to-serial adapter) uses the contract's `serialPath` / `baudRate`;
8
+ * the pre-0.6.2 `path` spelling is still accepted for one release.
9
+ * Serial and TCP both need a registry key when the printer cannot be
10
+ * identified: see `BrotherQLDiscovery.openPrinter`.
10
11
  */
11
12
  export interface BrotherQLOpenOptions extends OpenOptions {
13
+ /** @deprecated Use `serialPath`. Removed in the next minor. */
14
+ path?: string;
15
+ }
16
+ export interface BrotherQLDiscoveryOptions {
12
17
  /**
13
- * Serial device path e.g. `/dev/rfcomm0` (Linux) or `COM3`
14
- * (Windows) after pairing the printer via the OS Bluetooth
15
- * settings. Mutually exclusive with `host` and the USB fields.
18
+ * Scan the LAN (SNMP broadcast) in `listPrinters()` and fall back to
19
+ * it in `openPrinter({ serialNumber })`. Default `true`; set `false`
20
+ * for tests, air-gapped hosts, or callers that only want USB.
16
21
  */
17
- path?: string;
18
- /** Baud rate override; defaults to 9600. */
19
- baudRate?: number;
22
+ network?: boolean;
23
+ /**
24
+ * SNMP community for every SNMP use this discovery makes: the scan,
25
+ * identification on `openPrinter({ host })`, and the printer's status
26
+ * side channel. `OpenOptions.snmpCommunity` wins per call. Default
27
+ * `'public'`.
28
+ */
29
+ community?: string;
20
30
  }
21
31
  /**
22
32
  * `PrinterDiscovery` implementation for Brother QL printers.
23
33
  *
24
- * `listPrinters()` enumerates USB and skips printers in Editor Lite
25
- * mass-storage mode (a warning is logged the user has to switch
26
- * them out of Editor Lite manually). Network printers open via
27
- * `openPrinter({ host, port })`; there is no mDNS implementation so
28
- * `listPrinters()` never surfaces them.
34
+ * `listPrinters()` is the USB enumeration plus one SNMP broadcast on the
35
+ * local subnets. Network printers open by `host`: the model comes from
36
+ * SNMP (`hrDeviceDescr`) because port 9100 carries no model or status
37
+ * signal, and `deviceKey` overrides that. A printer in Editor Lite
38
+ * (mass-storage) mode exposes a PID outside the registry, so it is
39
+ * simply absent from the USB list.
29
40
  */
30
41
  export declare class BrotherQLDiscovery implements PrinterDiscovery {
31
42
  readonly family = "brother-ql";
43
+ private readonly network;
44
+ private readonly community;
45
+ constructor(options?: BrotherQLDiscoveryOptions);
32
46
  listPrinters(): Promise<DiscoveredPrinter[]>;
47
+ listMedia(): readonly MediaDescriptor[];
33
48
  openPrinter(options?: BrotherQLOpenOptions): Promise<BrotherQLPrinter>;
49
+ private openSerial;
50
+ private openTcp;
51
+ private identifyTcp;
52
+ private openUsb;
53
+ private findNetworkBySerial;
34
54
  }
35
55
  /**
36
56
  * Named export discovered by the unified `thermal-label-cli` — the CLI
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAqDD;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,YAAW,gBAAgB;IACzD,QAAQ,CAAC,MAAM,gBAAgB;IAEzB,YAAY,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAU5C,WAAW,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA0CjF;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,oBAA2B,CAAC"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,iBAAiB,EACjB,eAAe,EACf,WAAW,EAEX,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAclC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkDD;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,YAAW,gBAAgB;IACzD,QAAQ,CAAC,MAAM,gBAAgB;IAE/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;gBAEnC,OAAO,GAAE,yBAA8B;IAK7C,YAAY,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA2BlD,SAAS,IAAI,SAAS,eAAe,EAAE;IAIjC,WAAW,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAQlE,UAAU;YAmBV,OAAO;YAeP,WAAW;YAiBX,OAAO;YAsCP,mBAAmB;CAQlC;AA4CD;;;GAGG;AACH,eAAO,MAAM,SAAS,oBAA2B,CAAC"}