@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.
Files changed (66) hide show
  1. package/changelog.md +25 -0
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/device/device.classes.device.d.ts +2 -2
  4. package/dist_ts/device/device.classes.device.js +3 -3
  5. package/dist_ts/devicemanager.classes.devicemanager.d.ts +17 -4
  6. package/dist_ts/devicemanager.classes.devicemanager.js +67 -5
  7. package/dist_ts/discovery/discovery.classes.networkscanner.d.ts +4 -0
  8. package/dist_ts/discovery/discovery.classes.networkscanner.js +43 -2
  9. package/dist_ts/events/events.observable.d.ts +15 -0
  10. package/dist_ts/events/events.observable.js +22 -0
  11. package/dist_ts/events/index.d.ts +1 -0
  12. package/dist_ts/events/index.js +2 -0
  13. package/dist_ts/factories/index.js +7 -5
  14. package/dist_ts/features/feature.abstract.d.ts +2 -2
  15. package/dist_ts/features/feature.abstract.js +3 -3
  16. package/dist_ts/features/feature.print.d.ts +3 -0
  17. package/dist_ts/features/feature.print.js +17 -2
  18. package/dist_ts/features/feature.scan.d.ts +5 -2
  19. package/dist_ts/features/feature.scan.js +98 -27
  20. package/dist_ts/index.d.ts +3 -1
  21. package/dist_ts/index.js +4 -2
  22. package/dist_ts/interfaces/feature.interfaces.d.ts +21 -1
  23. package/dist_ts/interfaces/index.d.ts +21 -3
  24. package/dist_ts/interfaces/index.js +1 -1
  25. package/dist_ts/plugins.d.ts +2 -1
  26. package/dist_ts/plugins.js +3 -2
  27. package/dist_ts/protocols/index.d.ts +2 -1
  28. package/dist_ts/protocols/index.js +4 -2
  29. package/dist_ts/protocols/protocol.brother.d.ts +67 -0
  30. package/dist_ts/protocols/protocol.brother.js +560 -0
  31. package/dist_ts/protocols/protocol.escl.d.ts +13 -4
  32. package/dist_ts/protocols/protocol.escl.js +344 -177
  33. package/dist_ts/protocols/protocol.ipp.d.ts +2 -0
  34. package/dist_ts/protocols/protocol.ipp.js +22 -2
  35. package/dist_ts/providers/index.d.ts +1 -0
  36. package/dist_ts/providers/index.js +2 -0
  37. package/dist_ts/providers/provider.smb.d.ts +60 -0
  38. package/dist_ts/providers/provider.smb.js +224 -0
  39. package/package.json +11 -7
  40. package/pnpm-workspace.yaml +2 -0
  41. package/readme.md +98 -4
  42. package/test/test.brother.node.ts +306 -0
  43. package/test/test.escl.node.ts +233 -0
  44. package/test/test.ipp.node.ts +75 -0
  45. package/test/test.node.ts +17 -0
  46. package/test/test.smb.node.ts +123 -0
  47. package/ts/00_commitinfo_data.ts +1 -1
  48. package/ts/device/device.classes.device.ts +2 -2
  49. package/ts/devicemanager.classes.devicemanager.ts +81 -6
  50. package/ts/discovery/discovery.classes.networkscanner.ts +50 -1
  51. package/ts/events/events.observable.ts +31 -0
  52. package/ts/events/index.ts +4 -0
  53. package/ts/factories/index.ts +7 -5
  54. package/ts/features/feature.abstract.ts +2 -2
  55. package/ts/features/feature.print.ts +16 -1
  56. package/ts/features/feature.scan.ts +93 -27
  57. package/ts/index.ts +20 -0
  58. package/ts/interfaces/feature.interfaces.ts +22 -1
  59. package/ts/interfaces/index.ts +22 -3
  60. package/ts/plugins.ts +2 -1
  61. package/ts/protocols/index.ts +11 -1
  62. package/ts/protocols/protocol.brother.ts +648 -0
  63. package/ts/protocols/protocol.escl.ts +347 -190
  64. package/ts/protocols/protocol.ipp.ts +24 -1
  65. package/ts/providers/index.ts +7 -0
  66. 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 to provide a unified scanning interface.
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 === 'escl') {
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 === 'escl' && this.esclClient) {
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 === 'sane' && this.saneClient) {
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
- if (caps.platen) {
196
- this.supportedResolutions = caps.platen.supportedResolutions || this.supportedResolutions;
197
- this.maxWidth = caps.platen.maxWidth || this.maxWidth;
198
- this.maxHeight = caps.platen.maxHeight || this.maxHeight;
199
- this.minWidth = caps.platen.minWidth || this.minWidth;
200
- this.minHeight = caps.platen.minHeight || this.minHeight;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5zY2FuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZmVhdHVyZXMvZmVhdHVyZS5zY2FuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQTRCbkU7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLE9BQU8sV0FBWSxTQUFRLE9BQU87SUFDdEIsSUFBSSxHQUFHLE1BQWUsQ0FBQztJQUN2QixRQUFRLENBQWdCO0lBRXhDLG1CQUFtQjtJQUNYLFVBQVUsR0FBd0IsSUFBSSxDQUFDO0lBQ3ZDLFVBQVUsR0FBd0IsSUFBSSxDQUFDO0lBRS9DLGdCQUFnQjtJQUNDLFFBQVEsQ0FBVTtJQUNsQixVQUFVLENBQVM7SUFFcEMsZUFBZTtJQUNSLGdCQUFnQixHQUFrQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsb0JBQW9CLEdBQWEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRCxtQkFBbUIsR0FBaUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3pFLGdCQUFnQixHQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFDeEIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixRQUFRLEdBQVcsS0FBSyxDQUFDLENBQUUsaUJBQWlCO0lBQzVDLFNBQVMsR0FBVyxHQUFHLENBQUMsQ0FBRyxrQkFBa0I7SUFDN0MsUUFBUSxHQUFXLEVBQUUsQ0FBQztJQUN0QixTQUFTLEdBQVcsRUFBRSxDQUFDO0lBRTlCLFlBQ0UsTUFBd0IsRUFDeEIsSUFBWSxFQUNaLE9BQTRCO1FBRTVC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
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5zY2FuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZmVhdHVyZXMvZmVhdHVyZS5zY2FuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQTZCeEY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLE9BQU8sV0FBWSxTQUFRLE9BQU87SUFDdEIsSUFBSSxHQUFHLE1BQWUsQ0FBQztJQUN2QixRQUFRLENBQWdCO0lBRXhDLG1CQUFtQjtJQUNYLGFBQWEsR0FBK0IsSUFBSSxDQUFDO0lBQ2pELFVBQVUsR0FBd0IsSUFBSSxDQUFDO0lBQ3ZDLFVBQVUsR0FBd0IsSUFBSSxDQUFDO0lBRS9DLGdCQUFnQjtJQUNDLFFBQVEsQ0FBVTtJQUNsQixVQUFVLENBQVM7SUFFcEMsZUFBZTtJQUNSLGdCQUFnQixHQUFrQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsb0JBQW9CLEdBQWEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRCxtQkFBbUIsR0FBaUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3pFLGdCQUFnQixHQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFDeEIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixRQUFRLEdBQVcsS0FBSyxDQUFDLENBQUUsaUJBQWlCO0lBQzVDLFNBQVMsR0FBVyxHQUFHLENBQUMsQ0FBRyxrQkFBa0I7SUFDN0MsUUFBUSxHQUFXLEVBQUUsQ0FBQztJQUN0QixTQUFTLEdBQVcsRUFBRSxDQUFDO0lBRTlC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
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsK0VBQStFO0FBQy9FLHNCQUFzQjtBQUN0QiwrRUFBK0U7QUFFL0UsT0FBTyxFQUNMLGFBQWEsRUFDYixhQUFhLEVBQ2IsY0FBYyxFQUNkLGFBQWEsRUFDYixhQUFhLEVBQ2Isa0JBQWtCLEdBQ25CLE1BQU0sMENBQTBDLENBQUM7QUFFbEQsK0VBQStFO0FBQy9FLDhCQUE4QjtBQUM5QiwrRUFBK0U7QUFFL0UsT0FBTyxFQUFFLGVBQWUsRUFBd0QsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxSCxPQUFPLEVBQ0wsT0FBTyxFQUNQLFdBQVcsRUFDWCxZQUFZLEVBQ1osZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osV0FBVztBQUNYLHNCQUFzQjtBQUN0QixhQUFhLEVBQ2IsYUFBYSxFQUNiLFlBQVksRUFDWixZQUFZLEVBQ1osV0FBVyxFQUNYLFVBQVUsRUFDVixjQUFjLEVBQ2QsYUFBYSxHQWlCZCxNQUFNLHFCQUFxQixDQUFDO0FBRTdCLCtFQUErRTtBQUMvRSxtQkFBbUI7QUFDbkIsK0VBQStFO0FBRS9FLE9BQU8sRUFDTCxhQUFhLEVBQ2IsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsYUFBYSxFQUNiLGtCQUFrQjtBQUNsQix1QkFBdUI7QUFDdkIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGlCQUFpQixHQWVsQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLCtFQUErRTtBQUMvRSwyQkFBMkI7QUFDM0IsK0VBQStFO0FBRS9FLE9BQU8sRUFDTCxZQUFZLEVBQ1osWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osYUFBYSxFQUNiLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxhQUFhO0FBQ2IsMEJBQTBCO0FBQzFCLHFCQUFxQixHQWtCdEIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QiwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRXpHLCtFQUErRTtBQUMvRSxVQUFVO0FBQ1YsK0VBQStFO0FBRS9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0YsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1QsY0FBYyxFQUNkLGNBQWMsR0FDZixNQUFNLDhCQUE4QixDQUFDO0FBRXRDLCtFQUErRTtBQUMvRSwyQkFBMkI7QUFDM0IsK0VBQStFO0FBRS9FLGNBQWMsdUJBQXVCLENBQUMifQ==
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 (default: [80, 443, 631, 6566, 9100, 7000, 1400, 8009]) */
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBa1pILCtFQUErRTtBQUMvRSxnREFBZ0Q7QUFDaEQsK0VBQStFO0FBRS9FLGNBQWMseUJBQXlCLENBQUM7QUFFeEMsK0VBQStFO0FBQy9FLGdEQUFnRDtBQUNoRCwrRUFBK0U7QUFFL0UsY0FBYywyQkFBMkIsQ0FBQztBQUUxQywrRUFBK0U7QUFDL0UsZ0NBQWdDO0FBQ2hDLCtFQUErRTtBQUUvRSxjQUFjLCtCQUErQixDQUFDIn0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBcWFILCtFQUErRTtBQUMvRSxnREFBZ0Q7QUFDaEQsK0VBQStFO0FBRS9FLGNBQWMseUJBQXlCLENBQUM7QUFFeEMsK0VBQStFO0FBQy9FLGdEQUFnRDtBQUNoRCwrRUFBK0U7QUFFL0UsY0FBYywyQkFBMkIsQ0FBQztBQUUxQywrRUFBK0U7QUFDL0UsZ0NBQWdDO0FBQ2hDLCtFQUErRTtBQUUvRSxjQUFjLCtCQUErQixDQUFDIn0=
@@ -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
- export { bonjourService, netSnmp, WebSocket };
13
+ import * as rxjs from 'rxjs';
14
+ export { bonjourService, netSnmp, WebSocket, rxjs };
@@ -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
- export { bonjourService, netSnmp, WebSocket };
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZTtBQUNmLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQzNCLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFFeEMsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBRWpDLGNBQWM7QUFDZCxPQUFPLEtBQUssY0FBYyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxPQUFPLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sU0FBUyxNQUFNLElBQUksQ0FBQztBQUUzQixPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyJ9
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9wcm90b2NvbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELHVCQUF1QjtBQUN2QixPQUFPLEVBQ0wsV0FBVyxHQUlaLE1BQU0sbUJBQW1CLENBQUM7QUFFM0Isc0JBQXNCO0FBQ3RCLE9BQU8sRUFDTCxZQUFZLEVBQ1osU0FBUyxHQUlWLE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsNkJBQTZCO0FBQzdCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsYUFBYSxFQUNiLFlBQVksR0FJYixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLDBCQUEwQjtBQUMxQixPQUFPLEVBQ0wsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixpQkFBaUIsR0FRbEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1Qiw4QkFBOEI7QUFDOUIsT0FBTyxFQUNMLGNBQWMsRUFDZCxhQUFhLEdBS2QsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixvQ0FBb0M7QUFDcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUMifQ==
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
+ }