@ecobridge.xyz/devicemanager 3.1.1 → 3.2.0
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.
- package/changelog.md +25 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/device/device.classes.device.d.ts +2 -2
- package/dist_ts/device/device.classes.device.js +3 -3
- package/dist_ts/devicemanager.classes.devicemanager.d.ts +17 -4
- package/dist_ts/devicemanager.classes.devicemanager.js +67 -5
- package/dist_ts/discovery/discovery.classes.networkscanner.d.ts +4 -0
- package/dist_ts/discovery/discovery.classes.networkscanner.js +43 -2
- package/dist_ts/events/events.observable.d.ts +15 -0
- package/dist_ts/events/events.observable.js +22 -0
- package/dist_ts/events/index.d.ts +1 -0
- package/dist_ts/events/index.js +2 -0
- package/dist_ts/factories/index.js +7 -5
- package/dist_ts/features/feature.abstract.d.ts +2 -2
- package/dist_ts/features/feature.abstract.js +3 -3
- package/dist_ts/features/feature.print.d.ts +3 -0
- package/dist_ts/features/feature.print.js +17 -2
- package/dist_ts/features/feature.scan.d.ts +5 -2
- package/dist_ts/features/feature.scan.js +98 -27
- package/dist_ts/index.d.ts +3 -1
- package/dist_ts/index.js +4 -2
- package/dist_ts/interfaces/feature.interfaces.d.ts +21 -1
- package/dist_ts/interfaces/index.d.ts +21 -3
- package/dist_ts/interfaces/index.js +1 -1
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/dist_ts/protocols/index.d.ts +2 -1
- package/dist_ts/protocols/index.js +4 -2
- package/dist_ts/protocols/protocol.brother.d.ts +67 -0
- package/dist_ts/protocols/protocol.brother.js +560 -0
- package/dist_ts/protocols/protocol.escl.d.ts +13 -4
- package/dist_ts/protocols/protocol.escl.js +344 -177
- package/dist_ts/protocols/protocol.ipp.d.ts +2 -0
- package/dist_ts/protocols/protocol.ipp.js +22 -2
- package/dist_ts/providers/index.d.ts +1 -0
- package/dist_ts/providers/index.js +2 -0
- package/dist_ts/providers/provider.smb.d.ts +60 -0
- package/dist_ts/providers/provider.smb.js +224 -0
- package/package.json +11 -7
- package/pnpm-workspace.yaml +2 -0
- package/readme.md +98 -4
- package/test/test.brother.node.ts +306 -0
- package/test/test.escl.node.ts +233 -0
- package/test/test.ipp.node.ts +75 -0
- package/test/test.node.ts +17 -0
- package/test/test.smb.node.ts +123 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/device/device.classes.device.ts +2 -2
- package/ts/devicemanager.classes.devicemanager.ts +81 -6
- package/ts/discovery/discovery.classes.networkscanner.ts +50 -1
- package/ts/events/events.observable.ts +31 -0
- package/ts/events/index.ts +4 -0
- package/ts/factories/index.ts +7 -5
- package/ts/features/feature.abstract.ts +2 -2
- package/ts/features/feature.print.ts +16 -1
- package/ts/features/feature.scan.ts +93 -27
- package/ts/index.ts +20 -0
- package/ts/interfaces/feature.interfaces.ts +22 -1
- package/ts/interfaces/index.ts +22 -3
- package/ts/plugins.ts +2 -1
- package/ts/protocols/index.ts +11 -1
- package/ts/protocols/protocol.brother.ts +648 -0
- package/ts/protocols/protocol.escl.ts +347 -190
- package/ts/protocols/protocol.ipp.ts +24 -1
- package/ts/providers/index.ts +7 -0
- package/ts/providers/provider.smb.ts +326 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Scan Feature
|
|
3
|
-
* Provides document scanning capability using eSCL or SANE protocols
|
|
3
|
+
* Provides document scanning capability using Brother native, eSCL, or SANE protocols
|
|
4
4
|
*/
|
|
5
5
|
import { Feature } from './feature.abstract.js';
|
|
6
|
-
import { EsclProtocol, SaneProtocol } from '../protocols/index.js';
|
|
6
|
+
import { BrotherScanProtocol, EsclProtocol, SaneProtocol } from '../protocols/index.js';
|
|
7
7
|
/**
|
|
8
8
|
* Scan Feature - provides document scanning capability
|
|
9
9
|
*
|
|
10
|
-
* Wraps eSCL (AirScan) or SANE protocols
|
|
10
|
+
* Wraps Brother native, eSCL (AirScan), or SANE protocols behind one interface.
|
|
11
11
|
*
|
|
12
12
|
* @example
|
|
13
13
|
* ```typescript
|
|
@@ -23,6 +23,7 @@ export class ScanFeature extends Feature {
|
|
|
23
23
|
type = 'scan';
|
|
24
24
|
protocol;
|
|
25
25
|
// Protocol clients
|
|
26
|
+
brotherClient = null;
|
|
26
27
|
esclClient = null;
|
|
27
28
|
saneClient = null;
|
|
28
29
|
// Configuration
|
|
@@ -62,7 +63,12 @@ export class ScanFeature extends Feature {
|
|
|
62
63
|
// Connection
|
|
63
64
|
// ============================================================================
|
|
64
65
|
async doConnect() {
|
|
65
|
-
if (this.protocol === '
|
|
66
|
+
if (this.protocol === 'brother') {
|
|
67
|
+
this.brotherClient = new BrotherScanProtocol(this.address, this._port);
|
|
68
|
+
await this.brotherClient.connect();
|
|
69
|
+
this.updateCapabilitiesFromBrother(this.brotherClient.getCapabilities());
|
|
70
|
+
}
|
|
71
|
+
else if (this.protocol === 'escl') {
|
|
66
72
|
this.esclClient = new EsclProtocol(this.address, this._port, this.isSecure);
|
|
67
73
|
// Fetch capabilities to verify connection
|
|
68
74
|
const caps = await this.esclClient.getCapabilities();
|
|
@@ -78,6 +84,10 @@ export class ScanFeature extends Feature {
|
|
|
78
84
|
}
|
|
79
85
|
}
|
|
80
86
|
async doDisconnect() {
|
|
87
|
+
if (this.brotherClient) {
|
|
88
|
+
await this.brotherClient.disconnect();
|
|
89
|
+
this.brotherClient = null;
|
|
90
|
+
}
|
|
81
91
|
if (this.saneClient) {
|
|
82
92
|
try {
|
|
83
93
|
await this.saneClient.close();
|
|
@@ -116,7 +126,10 @@ export class ScanFeature extends Feature {
|
|
|
116
126
|
throw new Error('Scan feature not connected');
|
|
117
127
|
}
|
|
118
128
|
const opts = this.resolveOptions(options);
|
|
119
|
-
if (this.protocol === '
|
|
129
|
+
if (this.protocol === 'brother' && this.brotherClient) {
|
|
130
|
+
return this.scanWithBrother(opts);
|
|
131
|
+
}
|
|
132
|
+
else if (this.protocol === 'escl' && this.esclClient) {
|
|
120
133
|
return this.scanWithEscl(opts);
|
|
121
134
|
}
|
|
122
135
|
else if (this.protocol === 'sane' && this.saneClient) {
|
|
@@ -128,15 +141,29 @@ export class ScanFeature extends Feature {
|
|
|
128
141
|
* Cancel an ongoing scan
|
|
129
142
|
*/
|
|
130
143
|
async cancelScan() {
|
|
131
|
-
if (this.protocol === '
|
|
144
|
+
if (this.protocol === 'brother' && this.brotherClient) {
|
|
145
|
+
await this.brotherClient.cancel();
|
|
146
|
+
}
|
|
147
|
+
else if (this.protocol === 'escl' && this.esclClient) {
|
|
148
|
+
await this.esclClient.cancelCurrentScan();
|
|
149
|
+
}
|
|
150
|
+
else if (this.protocol === 'sane' && this.saneClient) {
|
|
132
151
|
await this.saneClient.cancel();
|
|
133
152
|
}
|
|
134
|
-
// eSCL cancellation is handled by deleting the job
|
|
135
153
|
this.emit('scan:cancelled');
|
|
136
154
|
}
|
|
137
155
|
// ============================================================================
|
|
138
156
|
// Protocol-Specific Scanning
|
|
139
157
|
// ============================================================================
|
|
158
|
+
async scanWithBrother(options) {
|
|
159
|
+
if (!this.brotherClient) {
|
|
160
|
+
throw new Error('Brother scan client not initialized');
|
|
161
|
+
}
|
|
162
|
+
this.emit('scan:started', options);
|
|
163
|
+
const result = await this.brotherClient.scan(options);
|
|
164
|
+
this.emit('scan:completed', result);
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
140
167
|
async scanWithEscl(options) {
|
|
141
168
|
if (!this.esclClient) {
|
|
142
169
|
throw new Error('eSCL client not initialized');
|
|
@@ -180,7 +207,7 @@ export class ScanFeature extends Feature {
|
|
|
180
207
|
resolution: options?.resolution ?? 300,
|
|
181
208
|
format: options?.format ?? 'jpeg',
|
|
182
209
|
colorMode: options?.colorMode ?? 'color',
|
|
183
|
-
source: options?.source ?? 'flatbed',
|
|
210
|
+
source: options?.source ?? (this.hasDuplex ? 'adf-duplex' : this.hasAdf ? 'adf' : 'flatbed'),
|
|
184
211
|
area: options?.area ?? {
|
|
185
212
|
x: 0,
|
|
186
213
|
y: 0,
|
|
@@ -191,26 +218,44 @@ export class ScanFeature extends Feature {
|
|
|
191
218
|
quality: options?.quality ?? 85,
|
|
192
219
|
};
|
|
193
220
|
}
|
|
221
|
+
updateCapabilitiesFromBrother(caps) {
|
|
222
|
+
this.supportedResolutions = caps.resolutions;
|
|
223
|
+
this.supportedFormats = caps.formats;
|
|
224
|
+
this.supportedColorModes = caps.colorModes;
|
|
225
|
+
this.supportedSources = caps.sources;
|
|
226
|
+
this.hasAdf = caps.sources.includes('adf') || caps.sources.includes('adf-duplex');
|
|
227
|
+
this.hasDuplex = caps.sources.includes('adf-duplex');
|
|
228
|
+
this.maxWidth = caps.maxWidth;
|
|
229
|
+
this.maxHeight = caps.maxHeight;
|
|
230
|
+
this.minWidth = caps.minWidth;
|
|
231
|
+
this.minHeight = caps.minHeight;
|
|
232
|
+
}
|
|
194
233
|
updateCapabilitiesFromEscl(caps) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
this.
|
|
198
|
-
this.
|
|
199
|
-
this.
|
|
200
|
-
this.
|
|
201
|
-
|
|
202
|
-
if (caps.adf) {
|
|
203
|
-
this.hasAdf = true;
|
|
204
|
-
if (!this.supportedSources.includes('adf')) {
|
|
205
|
-
this.supportedSources.push('adf');
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
if (caps.adfDuplex) {
|
|
209
|
-
this.hasDuplex = true;
|
|
210
|
-
if (!this.supportedSources.includes('adf-duplex')) {
|
|
211
|
-
this.supportedSources.push('adf-duplex');
|
|
212
|
-
}
|
|
234
|
+
const sources = [caps.platen, caps.adf, caps.adfDuplex].filter((source) => source !== undefined);
|
|
235
|
+
if (sources.length > 0) {
|
|
236
|
+
this.supportedResolutions = [...new Set(sources.flatMap((source) => source.supportedResolutions))].sort((left, right) => left - right);
|
|
237
|
+
this.maxWidth = Math.max(...sources.map((source) => source.maxWidth));
|
|
238
|
+
this.maxHeight = Math.max(...sources.map((source) => source.maxHeight));
|
|
239
|
+
this.minWidth = Math.min(...sources.map((source) => source.minWidth));
|
|
240
|
+
this.minHeight = Math.min(...sources.map((source) => source.minHeight));
|
|
213
241
|
}
|
|
242
|
+
const supportedSources = [];
|
|
243
|
+
if (caps.platen)
|
|
244
|
+
supportedSources.push('flatbed');
|
|
245
|
+
if (caps.adf)
|
|
246
|
+
supportedSources.push('adf');
|
|
247
|
+
if (caps.adfDuplex)
|
|
248
|
+
supportedSources.push('adf-duplex');
|
|
249
|
+
if (supportedSources.length > 0)
|
|
250
|
+
this.supportedSources = supportedSources;
|
|
251
|
+
this.hasAdf = Boolean(caps.adf || caps.adfDuplex);
|
|
252
|
+
this.hasDuplex = Boolean(caps.adfDuplex);
|
|
253
|
+
const formats = mapDocumentFormats(sources.flatMap((source) => source.documentFormats));
|
|
254
|
+
const colorModes = mapColorModes(sources.flatMap((source) => source.colorModes));
|
|
255
|
+
if (formats.length > 0)
|
|
256
|
+
this.supportedFormats = formats;
|
|
257
|
+
if (colorModes.length > 0)
|
|
258
|
+
this.supportedColorModes = colorModes;
|
|
214
259
|
}
|
|
215
260
|
colorModeToSane(mode) {
|
|
216
261
|
switch (mode) {
|
|
@@ -266,6 +311,32 @@ export class ScanFeature extends Feature {
|
|
|
266
311
|
});
|
|
267
312
|
}
|
|
268
313
|
}
|
|
314
|
+
function mapDocumentFormats(formats) {
|
|
315
|
+
const mapped = formats.flatMap((format) => {
|
|
316
|
+
if (format === 'application/pdf')
|
|
317
|
+
return ['pdf'];
|
|
318
|
+
if (format === 'image/jpeg')
|
|
319
|
+
return ['jpeg'];
|
|
320
|
+
if (format === 'image/png')
|
|
321
|
+
return ['png'];
|
|
322
|
+
if (format === 'image/tiff')
|
|
323
|
+
return ['tiff'];
|
|
324
|
+
return [];
|
|
325
|
+
});
|
|
326
|
+
return [...new Set(mapped)];
|
|
327
|
+
}
|
|
328
|
+
function mapColorModes(modes) {
|
|
329
|
+
const mapped = modes.flatMap((mode) => {
|
|
330
|
+
if (mode.startsWith('RGB'))
|
|
331
|
+
return ['color'];
|
|
332
|
+
if (mode.startsWith('Grayscale'))
|
|
333
|
+
return ['grayscale'];
|
|
334
|
+
if (mode.startsWith('BlackAndWhite'))
|
|
335
|
+
return ['blackwhite'];
|
|
336
|
+
return [];
|
|
337
|
+
});
|
|
338
|
+
return [...new Set(mapped)];
|
|
339
|
+
}
|
|
269
340
|
// ============================================================================
|
|
270
341
|
// Parsing Helpers
|
|
271
342
|
// ============================================================================
|
|
@@ -312,4 +383,4 @@ function parseSources(txt) {
|
|
|
312
383
|
sources.push('adf');
|
|
313
384
|
return sources.length > 0 ? sources : ['flatbed'];
|
|
314
385
|
}
|
|
315
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5zY2FuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZmVhdHVyZXMvZmVhdHVyZS5zY2FuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQTRCbkU7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLE9BQU8sV0FBWSxTQUFRLE9BQU87SUFDdEIsSUFBSSxHQUFHLE1BQWUsQ0FBQztJQUN2QixRQUFRLENBQWdCO0lBRXhDLG1CQUFtQjtJQUNYLFVBQVUsR0FBd0IsSUFBSSxDQUFDO0lBQ3ZDLFVBQVUsR0FBd0IsSUFBSSxDQUFDO0lBRS9DLGdCQUFnQjtJQUNDLFFBQVEsQ0FBVTtJQUNsQixVQUFVLENBQVM7SUFFcEMsZUFBZTtJQUNSLGdCQUFnQixHQUFrQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsb0JBQW9CLEdBQWEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRCxtQkFBbUIsR0FBaUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3pFLGdCQUFnQixHQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFDeEIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixRQUFRLEdBQVcsS0FBSyxDQUFDLENBQUUsaUJBQWlCO0lBQzVDLFNBQVMsR0FBVyxHQUFHLENBQUMsQ0FBRyxrQkFBa0I7SUFDN0MsUUFBUSxHQUFXLEVBQUUsQ0FBQztJQUN0QixTQUFTLEdBQVcsRUFBRSxDQUFDO0lBRTlCLFlBQ0UsTUFBd0IsRUFDeEIsSUFBWSxFQUNaLE9BQTRCO1FBRTVCLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFFM0MsNENBQTRDO1FBQzVDLElBQUksT0FBTyxDQUFDLGdCQUFnQjtZQUFFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDL0UsSUFBSSxPQUFPLENBQUMsb0JBQW9CO1lBQUUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztRQUMzRixJQUFJLE9BQU8sQ0FBQyxtQkFBbUI7WUFBRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBQ3hGLElBQUksT0FBTyxDQUFDLGdCQUFnQjtZQUFFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDL0UsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDL0QsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDMUUsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxhQUFhO0lBQ2IsK0VBQStFO0lBRXJFLEtBQUssQ0FBQyxTQUFTO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUUsMENBQTBDO1lBQzFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQyxvQ0FBb0M7WUFDcEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVTLEtBQUssQ0FBQyxZQUFZO1FBQzFCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLDJCQUEyQjtZQUM3QixDQUFDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRCwrRUFBK0U7SUFDL0Usc0JBQXNCO0lBQ3RCLCtFQUErRTtJQUUvRTs7T0FFRztJQUNJLEtBQUssQ0FBQyxlQUFlO1FBQzFCLE9BQU87WUFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtZQUN0QyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUM5QixVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUNwQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUM5QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBc0I7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsVUFBVTtRQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoRCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUNELG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELCtFQUErRTtJQUMvRSw2QkFBNkI7SUFDN0IsK0VBQStFO0lBRXZFLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBK0I7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRW5DLCtEQUErRDtRQUMvRCwyREFBMkQ7UUFDM0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUN4QyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtTQUN2QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQStCO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVuQyxxRUFBcUU7UUFDckUsMERBQTBEO1FBQzFELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDeEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtZQUM5QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDNUIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtTQUNuQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsaUJBQWlCO0lBQ2pCLCtFQUErRTtJQUV2RSxjQUFjLENBQUMsT0FBc0I7UUFDM0MsT0FBTztZQUNMLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxJQUFJLEdBQUc7WUFDdEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksTUFBTTtZQUNqQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsSUFBSSxPQUFPO1lBQ3hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLFNBQVM7WUFDcEMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUk7Z0JBQ3JCLENBQUMsRUFBRSxDQUFDO2dCQUNKLENBQUMsRUFBRSxDQUFDO2dCQUNKLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQ3ZCO1lBQ0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksVUFBVTtZQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSSxFQUFFO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRU8sMEJBQTBCLENBQUMsSUFBUztRQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDMUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN6RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzNELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUNsRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzNDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxJQUFnQjtRQUN0QyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxPQUFPLENBQUMsQ0FBQyxPQUFPLE9BQU8sQ0FBQztZQUM3QixLQUFLLFdBQVcsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDO1lBQ2hDLEtBQUssWUFBWSxDQUFDLENBQUMsT0FBTyxTQUFTLENBQUM7WUFDcEMsT0FBTyxDQUFDLENBQUMsT0FBTyxPQUFPLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsTUFBbUI7UUFDckMsUUFBUSxNQUFNLEVBQUUsQ0FBQztZQUNmLEtBQUssTUFBTSxDQUFDLENBQUMsT0FBTyxZQUFZLENBQUM7WUFDakMsS0FBSyxLQUFLLENBQUMsQ0FBQyxPQUFPLFdBQVcsQ0FBQztZQUMvQixLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8saUJBQWlCLENBQUM7WUFDckMsS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPLFlBQVksQ0FBQztZQUNqQyxPQUFPLENBQUMsQ0FBQyxPQUFPLDBCQUEwQixDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLGdCQUFnQjtJQUNoQiwrRUFBK0U7SUFFeEUsY0FBYztRQUNuQixPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDNUIsSUFBSSxFQUFFLE1BQU07WUFDWixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN2QyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQy9DLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7WUFDN0MsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN2QyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQsK0VBQStFO0lBQy9FLGlCQUFpQjtJQUNqQiwrRUFBK0U7SUFFL0U7O09BRUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUN6QixNQUF3QixFQUN4QixJQUFZLEVBQ1osUUFBdUIsRUFDdkIsUUFBaUM7UUFFakMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQW9DLElBQUksRUFBRSxDQUFDO1FBRXZFLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRTtZQUNuQyxRQUFRO1lBQ1IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFpQixJQUFJLElBQUksS0FBSyxHQUFHO1lBQ2xELFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBb0I7WUFDekMsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQztZQUMxQyxvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7WUFDbEQsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLFVBQVUsQ0FBQztZQUNoRCxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDO1lBQzFDLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNoQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7U0FDdkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsK0VBQStFO0FBQy9FLGtCQUFrQjtBQUNsQiwrRUFBK0U7QUFFL0UsU0FBUyxZQUFZLENBQUMsR0FBMkI7SUFDL0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QixNQUFNLE9BQU8sR0FBa0IsRUFBRSxDQUFDO0lBQ2xDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztRQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekQsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckQsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsR0FBMkI7SUFDbkQsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixJQUFJLENBQUMsRUFBRTtRQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsR0FBMkI7SUFDbEQsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixNQUFNLEtBQUssR0FBaUIsRUFBRSxDQUFDO0lBQy9CLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3RSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlFLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxHQUEyQjtJQUMvQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLE1BQU0sT0FBTyxHQUFrQixFQUFFLENBQUM7SUFDbEMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRixJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3ZFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNwRCxDQUFDIn0=
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5zY2FuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZmVhdHVyZXMvZmVhdHVyZS5zY2FuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQTZCeEY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLE9BQU8sV0FBWSxTQUFRLE9BQU87SUFDdEIsSUFBSSxHQUFHLE1BQWUsQ0FBQztJQUN2QixRQUFRLENBQWdCO0lBRXhDLG1CQUFtQjtJQUNYLGFBQWEsR0FBK0IsSUFBSSxDQUFDO0lBQ2pELFVBQVUsR0FBd0IsSUFBSSxDQUFDO0lBQ3ZDLFVBQVUsR0FBd0IsSUFBSSxDQUFDO0lBRS9DLGdCQUFnQjtJQUNDLFFBQVEsQ0FBVTtJQUNsQixVQUFVLENBQVM7SUFFcEMsZUFBZTtJQUNSLGdCQUFnQixHQUFrQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsb0JBQW9CLEdBQWEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRCxtQkFBbUIsR0FBaUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3pFLGdCQUFnQixHQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFDeEIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixRQUFRLEdBQVcsS0FBSyxDQUFDLENBQUUsaUJBQWlCO0lBQzVDLFNBQVMsR0FBVyxHQUFHLENBQUMsQ0FBRyxrQkFBa0I7SUFDN0MsUUFBUSxHQUFXLEVBQUUsQ0FBQztJQUN0QixTQUFTLEdBQVcsRUFBRSxDQUFDO0lBRTlC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
|
package/dist_ts/index.d.ts
CHANGED
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
* Supports: Scanners, Printers, SNMP devices, UPS, DLNA, Sonos, AirPlay, Chromecast
|
|
5
5
|
*/
|
|
6
6
|
export { DeviceManager, MdnsDiscovery, NetworkScanner, SsdpDiscovery, SERVICE_TYPES, SSDP_SERVICE_TYPES, } from './devicemanager.classes.devicemanager.js';
|
|
7
|
+
export { ObservableEventEmitter, type IObservableEvent, } from './events/index.js';
|
|
8
|
+
export { SmbShareProvider, type ISmbDocumentEvent, type ISmbServerAdapter, type ISmbShareProviderDependencies, type ISmbShareProviderOptions, } from './providers/index.js';
|
|
7
9
|
export { UniversalDevice, type IUniversalDeviceInfo, type IDeviceCreateOptions } from './device/device.classes.device.js';
|
|
8
10
|
export { Feature, ScanFeature, PrintFeature, PlaybackFeature, VolumeFeature, PowerFeature, SnmpFeature, SwitchFeature, SensorFeature, LightFeature, CoverFeature, LockFeature, FanFeature, ClimateFeature, CameraFeature, type TDeviceReference, type IScanFeatureOptions, type IPrintFeatureOptions, type IPlaybackFeatureOptions, type IVolumeFeatureOptions, type IVolumeController, type IPowerFeatureOptions, type ISnmpFeatureOptions, type ISwitchFeatureOptions, type ISensorFeatureOptions, type ILightFeatureOptions, type ICoverFeatureOptions, type ILockFeatureOptions, type IFanFeatureOptions, type IClimateFeatureOptions, type ICameraFeatureOptions, } from './features/index.js';
|
|
9
11
|
export { createScanner, createPrinter, createSnmpDevice, createUpsDevice, createSpeaker, createDlnaRenderer, createSmartSwitch, createSmartSensor, createSmartLight, createSmartCover, createSmartLock, createSmartFan, createSmartClimate, createSmartCamera, type IScannerDiscoveryInfo, type IPrinterDiscoveryInfo, type ISnmpDiscoveryInfo, type IUpsDiscoveryInfo, type ISpeakerDiscoveryInfo, type IDlnaRendererDiscoveryInfo, type ISmartSwitchDiscoveryInfo, type ISmartSensorDiscoveryInfo, type ISmartLightDiscoveryInfo, type ISmartCoverDiscoveryInfo, type ISmartLockDiscoveryInfo, type ISmartFanDiscoveryInfo, type ISmartClimateDiscoveryInfo, type ISmartCameraDiscoveryInfo, } from './factories/index.js';
|
|
10
|
-
export { EsclProtocol, SaneProtocol, IppProtocol, SnmpProtocol, SNMP_OIDS, NutProtocol, NUT_COMMANDS, NUT_VARIABLES, UpnpSoapClient, UPNP_SERVICE_TYPES, UPNP_DEVICE_TYPES, UpsSnmpHandler, UPS_SNMP_OIDS, HomeAssistantProtocol, type ISnmpOptions, type ISnmpVarbind, type TSnmpValueType, type TNutStatusFlag, type INutUpsInfo, type INutVariable, type TDlnaTransportState, type TDlnaTransportStatus, type IDlnaPositionInfo, type IDlnaTransportInfo, type IDlnaMediaInfo, type IDlnaContentItem, type IDlnaBrowseResult, type TUpsBatteryStatus, type TUpsOutputSource, type TUpsTestResult, type IUpsSnmpStatus, } from './protocols/index.js';
|
|
12
|
+
export { EsclProtocol, EsclScanError, BrotherScanProtocol, BrotherScanError, SaneProtocol, IppProtocol, SnmpProtocol, SNMP_OIDS, NutProtocol, NUT_COMMANDS, NUT_VARIABLES, UpnpSoapClient, UPNP_SERVICE_TYPES, UPNP_DEVICE_TYPES, UpsSnmpHandler, UPS_SNMP_OIDS, HomeAssistantProtocol, type ISnmpOptions, type IBrotherScanLease, type IBrotherScanOptions, type IBrotherScanProtocolOptions, type TBrotherScanErrorCode, type ISnmpVarbind, type TSnmpValueType, type TNutStatusFlag, type INutUpsInfo, type INutVariable, type TDlnaTransportState, type TDlnaTransportStatus, type IDlnaPositionInfo, type IDlnaTransportInfo, type IDlnaMediaInfo, type IDlnaContentItem, type IDlnaBrowseResult, type TUpsBatteryStatus, type TUpsOutputSource, type TUpsTestResult, type IUpsSnmpStatus, } from './protocols/index.js';
|
|
11
13
|
export { HomeAssistantDiscovery, HA_SERVICE_TYPE } from './discovery/discovery.classes.homeassistant.js';
|
|
12
14
|
export { withRetry, createRetryable, defaultRetryOptions } from './helpers/helpers.retry.js';
|
|
13
15
|
export { isValidIp, ipToNumber, numberToIp, ipRangeToIps, cidrToIps, getLocalSubnet, countIpsInCidr, } from './helpers/helpers.iprange.js';
|
package/dist_ts/index.js
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
// Core Device Manager
|
|
8
8
|
// ============================================================================
|
|
9
9
|
export { DeviceManager, MdnsDiscovery, NetworkScanner, SsdpDiscovery, SERVICE_TYPES, SSDP_SERVICE_TYPES, } from './devicemanager.classes.devicemanager.js';
|
|
10
|
+
export { ObservableEventEmitter, } from './events/index.js';
|
|
11
|
+
export { SmbShareProvider, } from './providers/index.js';
|
|
10
12
|
// ============================================================================
|
|
11
13
|
// Universal Device & Features
|
|
12
14
|
// ============================================================================
|
|
@@ -23,7 +25,7 @@ createSmartSwitch, createSmartSensor, createSmartLight, createSmartCover, create
|
|
|
23
25
|
// ============================================================================
|
|
24
26
|
// Protocol Implementations
|
|
25
27
|
// ============================================================================
|
|
26
|
-
export { EsclProtocol, SaneProtocol, IppProtocol, SnmpProtocol, SNMP_OIDS, NutProtocol, NUT_COMMANDS, NUT_VARIABLES, UpnpSoapClient, UPNP_SERVICE_TYPES, UPNP_DEVICE_TYPES, UpsSnmpHandler, UPS_SNMP_OIDS,
|
|
28
|
+
export { EsclProtocol, EsclScanError, BrotherScanProtocol, BrotherScanError, SaneProtocol, IppProtocol, SnmpProtocol, SNMP_OIDS, NutProtocol, NUT_COMMANDS, NUT_VARIABLES, UpnpSoapClient, UPNP_SERVICE_TYPES, UPNP_DEVICE_TYPES, UpsSnmpHandler, UPS_SNMP_OIDS,
|
|
27
29
|
// Home Assistant protocol
|
|
28
30
|
HomeAssistantProtocol, } from './protocols/index.js';
|
|
29
31
|
// Home Assistant Discovery
|
|
@@ -37,4 +39,4 @@ export { isValidIp, ipToNumber, numberToIp, ipRangeToIps, cidrToIps, getLocalSub
|
|
|
37
39
|
// All Interfaces and Types
|
|
38
40
|
// ============================================================================
|
|
39
41
|
export * from './interfaces/index.js';
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsK0VBQStFO0FBQy9FLHNCQUFzQjtBQUN0QiwrRUFBK0U7QUFFL0UsT0FBTyxFQUNMLGFBQWEsRUFDYixhQUFhLEVBQ2IsY0FBYyxFQUNkLGFBQWEsRUFDYixhQUFhLEVBQ2Isa0JBQWtCLEdBQ25CLE1BQU0sMENBQTBDLENBQUM7QUFFbEQsT0FBTyxFQUNMLHNCQUFzQixHQUV2QixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE9BQU8sRUFDTCxnQkFBZ0IsR0FLakIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QiwrRUFBK0U7QUFDL0UsOEJBQThCO0FBQzlCLCtFQUErRTtBQUUvRSxPQUFPLEVBQUUsZUFBZSxFQUF3RCxNQUFNLG1DQUFtQyxDQUFDO0FBQzFILE9BQU8sRUFDTCxPQUFPLEVBQ1AsV0FBVyxFQUNYLFlBQVksRUFDWixlQUFlLEVBQ2YsYUFBYSxFQUNiLFlBQVksRUFDWixXQUFXO0FBQ1gsc0JBQXNCO0FBQ3RCLGFBQWEsRUFDYixhQUFhLEVBQ2IsWUFBWSxFQUNaLFlBQVksRUFDWixXQUFXLEVBQ1gsVUFBVSxFQUNWLGNBQWMsRUFDZCxhQUFhLEdBaUJkLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsK0VBQStFO0FBQy9FLG1CQUFtQjtBQUNuQiwrRUFBK0U7QUFFL0UsT0FBTyxFQUNMLGFBQWEsRUFDYixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixhQUFhLEVBQ2Isa0JBQWtCO0FBQ2xCLHVCQUF1QjtBQUN2QixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsaUJBQWlCLEdBZWxCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsK0VBQStFO0FBQy9FLDJCQUEyQjtBQUMzQiwrRUFBK0U7QUFFL0UsT0FBTyxFQUNMLFlBQVksRUFDWixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixhQUFhLEVBQ2IsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGFBQWE7QUFDYiwwQkFBMEI7QUFDMUIscUJBQXFCLEdBc0J0QixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLDJCQUEyQjtBQUMzQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFekcsK0VBQStFO0FBQy9FLFVBQVU7QUFDViwrRUFBK0U7QUFFL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RixPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFNBQVMsRUFDVCxjQUFjLEVBQ2QsY0FBYyxHQUNmLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsK0VBQStFO0FBQy9FLDJCQUEyQjtBQUMzQiwrRUFBK0U7QUFFL0UsY0FBYyx1QkFBdUIsQ0FBQyJ9
|
|
@@ -37,7 +37,7 @@ export interface IFeatureInfo {
|
|
|
37
37
|
port: number;
|
|
38
38
|
state: TFeatureState;
|
|
39
39
|
}
|
|
40
|
-
export type TScanProtocol = 'escl' | 'sane' | 'wia';
|
|
40
|
+
export type TScanProtocol = 'brother' | 'escl' | 'sane' | 'wia';
|
|
41
41
|
export type TScanFormat = 'png' | 'jpeg' | 'pdf' | 'tiff';
|
|
42
42
|
export type TColorMode = 'color' | 'grayscale' | 'blackwhite';
|
|
43
43
|
export type TScanSource = 'flatbed' | 'adf' | 'adf-duplex';
|
|
@@ -74,6 +74,22 @@ export interface IScanResult {
|
|
|
74
74
|
resolution: number;
|
|
75
75
|
colorMode: TColorMode;
|
|
76
76
|
mimeType: string;
|
|
77
|
+
/** Number of documents returned by a multipage-capable scanner transport */
|
|
78
|
+
pageCount?: number;
|
|
79
|
+
/** All returned documents, including the first document exposed as data */
|
|
80
|
+
pages?: IScanPage[];
|
|
81
|
+
/** Whether the scanner reported a cleanly completed job */
|
|
82
|
+
isComplete?: boolean;
|
|
83
|
+
/** Scanner reason when a partial result is returned with an error */
|
|
84
|
+
jobStateReason?: string;
|
|
85
|
+
/** Differences detected between requested and returned scan settings */
|
|
86
|
+
settingsWarnings?: string[];
|
|
87
|
+
}
|
|
88
|
+
export interface IScanPage {
|
|
89
|
+
data: Buffer;
|
|
90
|
+
width: number;
|
|
91
|
+
height: number;
|
|
92
|
+
mimeType: string;
|
|
77
93
|
}
|
|
78
94
|
export interface IScanFeatureInfo extends IFeatureInfo {
|
|
79
95
|
type: 'scan';
|
|
@@ -90,8 +106,10 @@ export type TPrintSides = 'one-sided' | 'two-sided-long-edge' | 'two-sided-short
|
|
|
90
106
|
export type TPrintQuality = 'draft' | 'normal' | 'high';
|
|
91
107
|
export type TPrintColorMode = 'color' | 'monochrome';
|
|
92
108
|
export interface IPrintCapabilities {
|
|
109
|
+
airPrintSupported: boolean;
|
|
93
110
|
colorSupported: boolean;
|
|
94
111
|
duplexSupported: boolean;
|
|
112
|
+
documentFormats: string[];
|
|
95
113
|
mediaSizes: string[];
|
|
96
114
|
mediaTypes: string[];
|
|
97
115
|
resolutions: number[];
|
|
@@ -121,8 +139,10 @@ export interface IPrintJob {
|
|
|
121
139
|
export interface IPrintFeatureInfo extends IFeatureInfo {
|
|
122
140
|
type: 'print';
|
|
123
141
|
protocol: TPrintProtocol;
|
|
142
|
+
airPrintSupported: boolean;
|
|
124
143
|
supportsColor: boolean;
|
|
125
144
|
supportsDuplex: boolean;
|
|
145
|
+
supportedDocumentFormats: string[];
|
|
126
146
|
supportedMediaSizes: string[];
|
|
127
147
|
}
|
|
128
148
|
export type TPlaybackProtocol = 'sonos' | 'airplay' | 'chromecast' | 'dlna';
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
export type TDeviceType = 'scanner' | 'printer' | 'snmp' | 'ups' | 'speaker' | 'dlna-renderer' | 'dlna-server';
|
|
5
5
|
export type TDeviceStatus = 'online' | 'offline' | 'busy' | 'error' | 'unknown';
|
|
6
6
|
export type TConnectionState = 'disconnected' | 'connecting' | 'connected' | 'error';
|
|
7
|
-
export type TScannerProtocol = 'sane' | 'escl';
|
|
7
|
+
export type TScannerProtocol = 'brother' | 'sane' | 'escl';
|
|
8
8
|
export type TScanFormat = 'png' | 'jpeg' | 'pdf' | 'tiff';
|
|
9
9
|
export type TColorMode = 'color' | 'grayscale' | 'blackwhite';
|
|
10
10
|
export type TScanSource = 'flatbed' | 'adf' | 'adf-duplex';
|
|
@@ -81,6 +81,22 @@ export interface IScanResult {
|
|
|
81
81
|
colorMode: TColorMode;
|
|
82
82
|
/** MIME type */
|
|
83
83
|
mimeType: string;
|
|
84
|
+
/** Number of documents returned by a multipage-capable scanner transport */
|
|
85
|
+
pageCount?: number;
|
|
86
|
+
/** All returned documents, including the first document exposed as data */
|
|
87
|
+
pages?: IScanPage[];
|
|
88
|
+
/** Whether the scanner reported a cleanly completed job */
|
|
89
|
+
isComplete?: boolean;
|
|
90
|
+
/** Scanner reason when a partial result is returned with an error */
|
|
91
|
+
jobStateReason?: string;
|
|
92
|
+
/** Differences detected between requested and returned scan settings */
|
|
93
|
+
settingsWarnings?: string[];
|
|
94
|
+
}
|
|
95
|
+
export interface IScanPage {
|
|
96
|
+
data: Buffer;
|
|
97
|
+
width: number;
|
|
98
|
+
height: number;
|
|
99
|
+
mimeType: string;
|
|
84
100
|
}
|
|
85
101
|
export interface IScannerCapabilities {
|
|
86
102
|
resolutions: number[];
|
|
@@ -255,8 +271,10 @@ export interface INetworkScanOptions {
|
|
|
255
271
|
concurrency?: number;
|
|
256
272
|
/** Timeout per probe in milliseconds (default: 2000) */
|
|
257
273
|
timeout?: number;
|
|
258
|
-
/** Ports to probe (
|
|
274
|
+
/** Ports to probe (includes Brother native scan on 54921 by default) */
|
|
259
275
|
ports?: number[];
|
|
276
|
+
/** Check for Brother native network scanners (default: true) */
|
|
277
|
+
probeBrother?: boolean;
|
|
260
278
|
/** Check for eSCL scanners (default: true) */
|
|
261
279
|
probeEscl?: boolean;
|
|
262
280
|
/** Check for IPP printers (default: true) */
|
|
@@ -272,7 +290,7 @@ export interface INetworkScanOptions {
|
|
|
272
290
|
}
|
|
273
291
|
export interface INetworkScanDevice {
|
|
274
292
|
type: 'scanner' | 'printer' | 'speaker';
|
|
275
|
-
protocol: 'escl' | 'sane' | 'ipp' | 'jetdirect' | 'airplay' | 'sonos' | 'chromecast';
|
|
293
|
+
protocol: 'brother' | 'escl' | 'sane' | 'ipp' | 'jetdirect' | 'airplay' | 'sonos' | 'chromecast';
|
|
276
294
|
port: number;
|
|
277
295
|
name?: string;
|
|
278
296
|
model?: string;
|
|
@@ -13,4 +13,4 @@ export * from './smarthome.interfaces.js';
|
|
|
13
13
|
// Home Assistant Specific Types
|
|
14
14
|
// ============================================================================
|
|
15
15
|
export * from './homeassistant.interfaces.js';
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBcWFILCtFQUErRTtBQUMvRSxnREFBZ0Q7QUFDaEQsK0VBQStFO0FBRS9FLGNBQWMseUJBQXlCLENBQUM7QUFFeEMsK0VBQStFO0FBQy9FLGdEQUFnRDtBQUNoRCwrRUFBK0U7QUFFL0UsY0FBYywyQkFBMkIsQ0FBQztBQUUxQywrRUFBK0U7QUFDL0UsZ0NBQWdDO0FBQ2hDLCtFQUErRTtBQUUvRSxjQUFjLCtCQUErQixDQUFDIn0=
|
package/dist_ts/plugins.d.ts
CHANGED
|
@@ -10,4 +10,5 @@ export { smartpath, smartdelay };
|
|
|
10
10
|
import * as bonjourService from 'bonjour-service';
|
|
11
11
|
import * as netSnmp from 'net-snmp';
|
|
12
12
|
import WebSocket from 'ws';
|
|
13
|
-
|
|
13
|
+
import * as rxjs from 'rxjs';
|
|
14
|
+
export { bonjourService, netSnmp, WebSocket, rxjs };
|
package/dist_ts/plugins.js
CHANGED
|
@@ -13,5 +13,6 @@ export { smartpath, smartdelay };
|
|
|
13
13
|
import * as bonjourService from 'bonjour-service';
|
|
14
14
|
import * as netSnmp from 'net-snmp';
|
|
15
15
|
import WebSocket from 'ws';
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
import * as rxjs from 'rxjs';
|
|
17
|
+
export { bonjourService, netSnmp, WebSocket, rxjs };
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZTtBQUNmLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQzNCLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFFeEMsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBRWpDLGNBQWM7QUFDZCxPQUFPLEtBQUssY0FBYyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxPQUFPLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sU0FBUyxNQUFNLElBQUksQ0FBQztBQUMzQixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMifQ==
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Protocol implementations
|
|
3
3
|
* All network communication protocols for device interaction
|
|
4
4
|
*/
|
|
5
|
-
export { EsclProtocol } from './protocol.escl.js';
|
|
5
|
+
export { EsclProtocol, EsclScanError } from './protocol.escl.js';
|
|
6
|
+
export { BrotherScanProtocol, BrotherScanError, type IBrotherScanLease, type IBrotherScanOptions, type IBrotherScanProtocolOptions, type TBrotherScanErrorCode, } from './protocol.brother.js';
|
|
6
7
|
export { SaneProtocol } from './protocol.sane.js';
|
|
7
8
|
export { IppProtocol, type IIppPrinterCapabilities, type IIppJob, type IIppPrintOptions, } from './protocol.ipp.js';
|
|
8
9
|
export { SnmpProtocol, SNMP_OIDS, type TSnmpValueType, type ISnmpVarbind, type ISnmpOptions, } from './protocol.snmp.js';
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* All network communication protocols for device interaction
|
|
4
4
|
*/
|
|
5
5
|
// eSCL/AirScan scanner protocol
|
|
6
|
-
export { EsclProtocol } from './protocol.escl.js';
|
|
6
|
+
export { EsclProtocol, EsclScanError } from './protocol.escl.js';
|
|
7
|
+
// Brother native network scanner protocol
|
|
8
|
+
export { BrotherScanProtocol, BrotherScanError, } from './protocol.brother.js';
|
|
7
9
|
// SANE network scanner protocol
|
|
8
10
|
export { SaneProtocol } from './protocol.sane.js';
|
|
9
11
|
// IPP printer protocol
|
|
@@ -18,4 +20,4 @@ export { UpnpSoapClient, UPNP_SERVICE_TYPES, UPNP_DEVICE_TYPES, } from './protoc
|
|
|
18
20
|
export { UpsSnmpHandler, UPS_SNMP_OIDS, } from './protocol.upssnmp.js';
|
|
19
21
|
// Home Assistant WebSocket protocol
|
|
20
22
|
export { HomeAssistantProtocol } from './protocol.homeassistant.js';
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9wcm90b2NvbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFakUsMENBQTBDO0FBQzFDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEdBS2pCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCx1QkFBdUI7QUFDdkIsT0FBTyxFQUNMLFdBQVcsR0FJWixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLHNCQUFzQjtBQUN0QixPQUFPLEVBQ0wsWUFBWSxFQUNaLFNBQVMsR0FJVixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLDZCQUE2QjtBQUM3QixPQUFPLEVBQ0wsV0FBVyxFQUNYLGFBQWEsRUFDYixZQUFZLEdBSWIsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQiwwQkFBMEI7QUFDMUIsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsaUJBQWlCLEdBUWxCLE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsOEJBQThCO0FBQzlCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsYUFBYSxHQUtkLE1BQU0sdUJBQXVCLENBQUM7QUFFL0Isb0NBQW9DO0FBQ3BDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDIn0=
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { IScanArea, IScanCapabilities, IScanResult, TColorMode, TScanFormat, TScanSource } from '../interfaces/index.js';
|
|
2
|
+
export type TBrotherScanErrorCode = 'busy' | 'cancelled' | 'cover-open' | 'device-stuck' | 'document-jam' | 'invalid-response' | 'no-document' | 'service-error' | 'settings-rejected' | 'timeout' | 'unsupported';
|
|
3
|
+
export declare class BrotherScanError extends Error {
|
|
4
|
+
readonly code: TBrotherScanErrorCode;
|
|
5
|
+
readonly statusCode?: number | undefined;
|
|
6
|
+
constructor(message: string, code: TBrotherScanErrorCode, statusCode?: number | undefined);
|
|
7
|
+
}
|
|
8
|
+
export interface IBrotherScanProtocolOptions {
|
|
9
|
+
timeout?: number;
|
|
10
|
+
scanTimeout?: number;
|
|
11
|
+
busyRetryInterval?: number;
|
|
12
|
+
busyTimeout?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface IBrotherScanLease {
|
|
15
|
+
resolutionX: number;
|
|
16
|
+
resolutionY: number;
|
|
17
|
+
adfStatus: number;
|
|
18
|
+
planeWidth: number;
|
|
19
|
+
width: number;
|
|
20
|
+
planeHeight: number;
|
|
21
|
+
height: number;
|
|
22
|
+
}
|
|
23
|
+
export interface IBrotherScanOptions {
|
|
24
|
+
resolution: number;
|
|
25
|
+
format: TScanFormat;
|
|
26
|
+
colorMode: TColorMode;
|
|
27
|
+
source: TScanSource;
|
|
28
|
+
area: IScanArea;
|
|
29
|
+
quality?: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Brother's native network scan protocol on TCP 54921.
|
|
33
|
+
*
|
|
34
|
+
* Brother devices expose richer scan control here than they do through some
|
|
35
|
+
* eSCL implementations. The protocol returns one JPEG stream per sheet/side.
|
|
36
|
+
*/
|
|
37
|
+
export declare class BrotherScanProtocol {
|
|
38
|
+
private readonly address;
|
|
39
|
+
private readonly port;
|
|
40
|
+
private socket;
|
|
41
|
+
private reader;
|
|
42
|
+
private scanning;
|
|
43
|
+
private cancelled;
|
|
44
|
+
private readonly timeout;
|
|
45
|
+
private readonly scanTimeout;
|
|
46
|
+
private readonly busyRetryInterval;
|
|
47
|
+
private readonly busyTimeout;
|
|
48
|
+
constructor(address: string, port?: number, options?: IBrotherScanProtocolOptions);
|
|
49
|
+
connect(): Promise<void>;
|
|
50
|
+
private connectOnce;
|
|
51
|
+
disconnect(): Promise<void>;
|
|
52
|
+
getCapabilities(): IScanCapabilities;
|
|
53
|
+
scan(options: IBrotherScanOptions): Promise<IScanResult>;
|
|
54
|
+
cancel(): Promise<void>;
|
|
55
|
+
private validateOptions;
|
|
56
|
+
private selectSource;
|
|
57
|
+
private requestLease;
|
|
58
|
+
private assertLease;
|
|
59
|
+
private resolveScanArea;
|
|
60
|
+
private readPages;
|
|
61
|
+
private finishPage;
|
|
62
|
+
private makePage;
|
|
63
|
+
private statusError;
|
|
64
|
+
private writeCommand;
|
|
65
|
+
private write;
|
|
66
|
+
private requireReader;
|
|
67
|
+
}
|