@ecobridge.xyz/devicemanager 3.1.0 → 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/.gitea/workflows/default_tags.yaml +0 -21
- package/.smartconfig.json +69 -0
- package/changelog.md +38 -1
- 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 +99 -11
- package/dist_ts/discovery/discovery.classes.mdns.js +46 -11
- package/dist_ts/discovery/discovery.classes.networkscanner.d.ts +5 -1
- package/dist_ts/discovery/discovery.classes.networkscanner.js +44 -3
- package/dist_ts/discovery/discovery.classes.ssdp.d.ts +52 -21
- package/dist_ts/discovery/discovery.classes.ssdp.js +407 -117
- 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 +4 -2
- package/dist_ts/index.js +4 -2
- package/dist_ts/interfaces/feature.interfaces.d.ts +22 -2
- package/dist_ts/interfaces/index.d.ts +22 -4
- package/dist_ts/interfaces/index.js +1 -1
- package/dist_ts/plugins.d.ts +6 -15
- package/dist_ts/plugins.js +7 -19
- 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 +345 -178
- 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/license.md +21 -0
- package/package.json +15 -20
- package/pnpm-workspace.yaml +6 -0
- package/readme.md +157 -78
- 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.ts → test.node.ts} +37 -45
- package/test/test.smb.node.ts +123 -0
- package/test/test.ssdp.node.ts +978 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/device/device.classes.device.ts +2 -2
- package/ts/devicemanager.classes.devicemanager.ts +125 -12
- package/ts/discovery/discovery.classes.mdns.ts +40 -11
- package/ts/discovery/discovery.classes.networkscanner.ts +51 -2
- package/ts/discovery/discovery.classes.ssdp.ts +493 -130
- 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 +21 -0
- package/ts/interfaces/feature.interfaces.ts +23 -2
- package/ts/interfaces/index.ts +23 -4
- package/ts/plugins.ts +6 -25
- package/ts/protocols/index.ts +11 -1
- package/ts/protocols/protocol.brother.ts +648 -0
- package/ts/protocols/protocol.escl.ts +348 -191
- package/ts/protocols/protocol.ipp.ts +24 -1
- package/ts/providers/index.ts +7 -0
- package/ts/providers/provider.smb.ts +326 -0
- package/dist_ts/protocols/protocol.ipp.old.d.ts +0 -45
- package/dist_ts/protocols/protocol.ipp.old.js +0 -284
- package/npmextra.json +0 -24
|
@@ -69,27 +69,6 @@ jobs:
|
|
|
69
69
|
npmci npm install
|
|
70
70
|
npmci npm build
|
|
71
71
|
|
|
72
|
-
release:
|
|
73
|
-
needs: test
|
|
74
|
-
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
|
75
|
-
runs-on: ubuntu-latest
|
|
76
|
-
container:
|
|
77
|
-
image: ${{ env.IMAGE }}
|
|
78
|
-
|
|
79
|
-
steps:
|
|
80
|
-
- uses: actions/checkout@v3
|
|
81
|
-
|
|
82
|
-
- name: Prepare
|
|
83
|
-
run: |
|
|
84
|
-
pnpm install -g pnpm
|
|
85
|
-
pnpm install -g @ship.zone/npmci
|
|
86
|
-
npmci npm prepare
|
|
87
|
-
|
|
88
|
-
- name: Release
|
|
89
|
-
run: |
|
|
90
|
-
npmci node install stable
|
|
91
|
-
npmci npm publish
|
|
92
|
-
|
|
93
72
|
metadata:
|
|
94
73
|
needs: test
|
|
95
74
|
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@git.zone/cli": {
|
|
3
|
+
"schemaVersion": 2,
|
|
4
|
+
"projectType": "npm",
|
|
5
|
+
"module": {
|
|
6
|
+
"githost": "code.foss.global",
|
|
7
|
+
"gitscope": "ecobridge.xyz",
|
|
8
|
+
"gitrepo": "devicemanager",
|
|
9
|
+
"description": "a device manager for talking to devices on network and over usb",
|
|
10
|
+
"npmPackagename": "@ecobridge.xyz/devicemanager",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"projectDomain": "ecobridge.xyz"
|
|
13
|
+
},
|
|
14
|
+
"commit": {
|
|
15
|
+
"confirmation": "prompt",
|
|
16
|
+
"steps": [
|
|
17
|
+
"analyze",
|
|
18
|
+
"test",
|
|
19
|
+
"build",
|
|
20
|
+
"changelog",
|
|
21
|
+
"commit",
|
|
22
|
+
"push"
|
|
23
|
+
],
|
|
24
|
+
"test": {
|
|
25
|
+
"command": "pnpm test"
|
|
26
|
+
},
|
|
27
|
+
"build": {
|
|
28
|
+
"command": "pnpm build"
|
|
29
|
+
},
|
|
30
|
+
"push": {
|
|
31
|
+
"remote": "origin",
|
|
32
|
+
"followTags": false
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"release": {
|
|
36
|
+
"confirmation": "prompt",
|
|
37
|
+
"preflight": {
|
|
38
|
+
"requireCleanTree": true,
|
|
39
|
+
"test": true,
|
|
40
|
+
"build": true,
|
|
41
|
+
"testCommand": "pnpm test",
|
|
42
|
+
"buildCommand": "pnpm build"
|
|
43
|
+
},
|
|
44
|
+
"targets": {
|
|
45
|
+
"git": {
|
|
46
|
+
"enabled": true,
|
|
47
|
+
"remote": "origin",
|
|
48
|
+
"pushBranch": true,
|
|
49
|
+
"pushTags": true
|
|
50
|
+
},
|
|
51
|
+
"npm": {
|
|
52
|
+
"enabled": true,
|
|
53
|
+
"registries": [
|
|
54
|
+
"https://verdaccio.lossless.digital",
|
|
55
|
+
"https://registry.npmjs.org"
|
|
56
|
+
],
|
|
57
|
+
"accessLevel": "public",
|
|
58
|
+
"alreadyPublished": "success"
|
|
59
|
+
},
|
|
60
|
+
"docker": {
|
|
61
|
+
"enabled": false
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"@ship.zone/szci": {
|
|
67
|
+
"npmGlobalTools": []
|
|
68
|
+
}
|
|
69
|
+
}
|
package/changelog.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-09-04 - 3.2.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- provide local SMB shares through `@push.rocks/smartsamba`
|
|
8
|
+
- Add `SmbShareProvider` and manager-owned SMB lifecycle methods.
|
|
9
|
+
- Recursively detect stable file arrivals, changes, and removals without exposing partially written documents.
|
|
10
|
+
- Forward provider events through `DeviceManager` with `smb:*` names.
|
|
11
|
+
- Support signed SMB 2.0.2 and 2.1 scanner clients through `@push.rocks/smartsamba` 0.3.1.
|
|
12
|
+
- expose RxJS `events$` streams alongside the existing EventEmitter API on managers, devices, features, and providers
|
|
13
|
+
|
|
14
|
+
### Fixes
|
|
15
|
+
|
|
16
|
+
- make eSCL scanning reliable for duplex document feeders
|
|
17
|
+
- Parse namespaced capability and status XML with a proper XML parser, including duplex sources and job-state reasons.
|
|
18
|
+
- Resolve relative scan-job URLs, retrieve every `NextDocument` result instead of returning only the first page, and pace Brother ADF transfers.
|
|
19
|
+
- Preserve already transferred pages on scanner timeout, support active-job cancellation, and add bounded network waits.
|
|
20
|
+
- Generate interoperable feeder/duplex scan settings and expose returned-format or resolution mismatches when firmware ignores the requested quality options.
|
|
21
|
+
- Add deterministic Brother-style eSCL tests for capabilities, multipage retrieval, timeouts, and response metadata.
|
|
22
|
+
- add native Brother network scanning and prefer it over eSCL when available
|
|
23
|
+
- Discover TCP 54921, select flatbed or automatic feeder input, control simplex/duplex, and negotiate the requested scan area and resolution.
|
|
24
|
+
- Reject resolution downgrades, expose Brother status failures, support cancellation, and return every JPEG page from simple or wrapped wire frames.
|
|
25
|
+
- Default duplex-capable scanners to duplex ADF while preserving every side for consumer-side blank-page handling.
|
|
26
|
+
- Report AirPrint/URF support and actual IPP document formats and resolutions, and correctly decode language-tagged printer model names.
|
|
27
|
+
|
|
28
|
+
## 2026-08-09 - 3.1.1
|
|
29
|
+
|
|
30
|
+
### Fixes
|
|
31
|
+
|
|
32
|
+
- replace vulnerable discovery dependencies with native SSDP transport (discovery)
|
|
33
|
+
- Replace node-ssdp with a native UDP SSDP implementation with interface-bound sockets, response normalization, deduplication, and preserved description data.
|
|
34
|
+
- Make discovery startup and shutdown transactional with rollback, aggregate errors, and cleanup for sockets, timers, listeners, and pending requests.
|
|
35
|
+
- Remove unused discovery/client dependency chains and add deterministic SSDP tests with injectable sockets, network interfaces, fetch, and timers.
|
|
36
|
+
- Allow IPP print jobs to omit createdAt when the upstream job data has no creation timestamp.
|
|
37
|
+
- Refresh the release toolchain to pnpm 11.21 and Node.js 26 type definitions.
|
|
38
|
+
- Remove the obsolete tag-triggered npm publisher so Gitzone remains the single release owner.
|
|
39
|
+
|
|
3
40
|
## 2026-01-13 - 3.1.0 - feat(print)
|
|
4
41
|
use IPP smartPrint and normalize IPP capabilities and job mapping
|
|
5
42
|
|
|
@@ -98,4 +135,4 @@ Introduce a UniversalDevice architecture with composable Feature system; add ext
|
|
|
98
135
|
Initial project release.
|
|
99
136
|
|
|
100
137
|
- Project initialized (initial commit).
|
|
101
|
-
- Duplicate initial commits consolidated into this release.
|
|
138
|
+
- Duplicate initial commits consolidated into this release.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@ecobridge.xyz/devicemanager',
|
|
6
|
-
version: '3.0
|
|
6
|
+
version: '3.2.0',
|
|
7
7
|
description: 'a device manager for talking to devices on network and over usb'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSw4QkFBOEI7SUFDcEMsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLGlFQUFpRTtDQUMvRSxDQUFBIn0=
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Universal Device class
|
|
3
3
|
* A device is a network endpoint that can have multiple features (capabilities)
|
|
4
4
|
*/
|
|
5
|
-
import * as plugins from '../plugins.js';
|
|
6
5
|
import type { TFeatureType, IFeatureInfo, IDiscoveredFeature } from '../interfaces/feature.interfaces.js';
|
|
7
6
|
import type { TDeviceStatus, IRetryOptions } from '../interfaces/index.js';
|
|
8
7
|
import { Feature, type TDeviceReference } from '../features/feature.abstract.js';
|
|
8
|
+
import { ObservableEventEmitter } from '../events/index.js';
|
|
9
9
|
/**
|
|
10
10
|
* Serializable device information
|
|
11
11
|
*/
|
|
@@ -53,7 +53,7 @@ export interface IDeviceCreateOptions {
|
|
|
53
53
|
* }
|
|
54
54
|
* ```
|
|
55
55
|
*/
|
|
56
|
-
export declare class UniversalDevice extends
|
|
56
|
+
export declare class UniversalDevice extends ObservableEventEmitter {
|
|
57
57
|
/**
|
|
58
58
|
* Unique device identifier
|
|
59
59
|
* Format: {address}:{port} or custom ID from discovery
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Universal Device class
|
|
3
3
|
* A device is a network endpoint that can have multiple features (capabilities)
|
|
4
4
|
*/
|
|
5
|
-
import * as plugins from '../plugins.js';
|
|
6
5
|
import { Feature } from '../features/feature.abstract.js';
|
|
6
|
+
import { ObservableEventEmitter } from '../events/index.js';
|
|
7
7
|
// ============================================================================
|
|
8
8
|
// Universal Device Class
|
|
9
9
|
// ============================================================================
|
|
@@ -27,7 +27,7 @@ import { Feature } from '../features/feature.abstract.js';
|
|
|
27
27
|
* }
|
|
28
28
|
* ```
|
|
29
29
|
*/
|
|
30
|
-
export class UniversalDevice extends
|
|
30
|
+
export class UniversalDevice extends ObservableEventEmitter {
|
|
31
31
|
// ============================================================================
|
|
32
32
|
// Properties
|
|
33
33
|
// ============================================================================
|
|
@@ -341,4 +341,4 @@ export class UniversalDevice extends plugins.events.EventEmitter {
|
|
|
341
341
|
export function deviceHasFeature(device, type) {
|
|
342
342
|
return device.hasFeature(type);
|
|
343
343
|
}
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
344
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLmNsYXNzZXMuZGV2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvZGV2aWNlL2RldmljZS5jbGFzc2VzLmRldmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFRSCxPQUFPLEVBQUUsT0FBTyxFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBbUM1RCwrRUFBK0U7QUFDL0UseUJBQXlCO0FBQ3pCLCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLHNCQUFzQjtJQUN6RCwrRUFBK0U7SUFDL0UsYUFBYTtJQUNiLCtFQUErRTtJQUUvRTs7O09BR0c7SUFDYSxFQUFFLENBQVM7SUFFM0I7O09BRUc7SUFDSSxJQUFJLENBQVM7SUFFcEI7O09BRUc7SUFDYSxPQUFPLENBQVM7SUFFaEM7O09BRUc7SUFDYSxJQUFJLENBQVM7SUFFN0I7O09BRUc7SUFDSSxZQUFZLENBQVU7SUFFN0I7O09BRUc7SUFDSSxLQUFLLENBQVU7SUFFdEI7O09BRUc7SUFDSSxZQUFZLENBQVU7SUFFN0I7O09BRUc7SUFDSSxlQUFlLENBQVU7SUFFaEM7O09BRUc7SUFDTyxPQUFPLEdBQWtCLFNBQVMsQ0FBQztJQUU3Qzs7T0FFRztJQUNPLFNBQVMsR0FBK0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUU1RDs7T0FFRztJQUNPLGFBQWEsQ0FBZ0I7SUFFdkMsK0VBQStFO0lBQy9FLGNBQWM7SUFDZCwrRUFBK0U7SUFFL0UsWUFDRSxPQUFlLEVBQ2YsSUFBWSxFQUNaLE9BQThCO1FBRTlCLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEVBQUUsR0FB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
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* Device Manager
|
|
3
3
|
* Unified device discovery and management using UniversalDevice with Features
|
|
4
4
|
*/
|
|
5
|
-
import * as plugins from './plugins.js';
|
|
6
5
|
import { MdnsDiscovery, SERVICE_TYPES } from './discovery/discovery.classes.mdns.js';
|
|
7
6
|
import { NetworkScanner } from './discovery/discovery.classes.networkscanner.js';
|
|
8
7
|
import { SsdpDiscovery, SSDP_SERVICE_TYPES } from './discovery/discovery.classes.ssdp.js';
|
|
@@ -11,6 +10,8 @@ import { ScanFeature, PrintFeature, PlaybackFeature, VolumeFeature, PowerFeature
|
|
|
11
10
|
import type { Feature } from './features/index.js';
|
|
12
11
|
import { createScanner, createPrinter, createSnmpDevice, createUpsDevice, createSpeaker, createDlnaRenderer } from './factories/index.js';
|
|
13
12
|
import type { IDeviceManagerOptions, INetworkScanOptions, TFeatureType, IDeviceSelector } from './interfaces/index.js';
|
|
13
|
+
import { ObservableEventEmitter } from './events/index.js';
|
|
14
|
+
import { SmbShareProvider, type ISmbShareProviderDependencies, type ISmbShareProviderOptions } from './providers/index.js';
|
|
14
15
|
/**
|
|
15
16
|
* Main Device Manager class
|
|
16
17
|
* Discovers and manages network devices using the UniversalDevice architecture
|
|
@@ -19,10 +20,12 @@ import type { IDeviceManagerOptions, INetworkScanOptions, TFeatureType, IDeviceS
|
|
|
19
20
|
* via multiple methods (mDNS, SSDP, IP scan), features are merged into a
|
|
20
21
|
* single UniversalDevice instance.
|
|
21
22
|
*/
|
|
22
|
-
export declare class DeviceManager extends
|
|
23
|
+
export declare class DeviceManager extends ObservableEventEmitter {
|
|
23
24
|
private mdnsDiscovery;
|
|
24
25
|
private ssdpDiscovery;
|
|
25
26
|
private _networkScanner;
|
|
27
|
+
private readonly smbProviders;
|
|
28
|
+
private readonly smbProviderSubscriptions;
|
|
26
29
|
private devicesByIp;
|
|
27
30
|
private nameSourceByIp;
|
|
28
31
|
private options;
|
|
@@ -106,6 +109,15 @@ export declare class DeviceManager extends plugins.events.EventEmitter {
|
|
|
106
109
|
* Get all SNMP devices
|
|
107
110
|
*/
|
|
108
111
|
getSnmpDevices(): UniversalDevice[];
|
|
112
|
+
/**
|
|
113
|
+
* Start an SMB server and forward its events through this manager as `smb:*`.
|
|
114
|
+
*/
|
|
115
|
+
provideSmbShares(options: ISmbShareProviderOptions, dependencies?: ISmbShareProviderDependencies): Promise<SmbShareProvider>;
|
|
116
|
+
/** Stop one SMB provider created by this manager. */
|
|
117
|
+
stopSmbShareProvider(provider: SmbShareProvider): Promise<void>;
|
|
118
|
+
/** Stop every SMB provider owned by this manager. */
|
|
119
|
+
stopAllSmbShareProviders(): Promise<void>;
|
|
120
|
+
getSmbShareProviders(): SmbShareProvider[];
|
|
109
121
|
/**
|
|
110
122
|
* Add a device
|
|
111
123
|
*/
|
|
@@ -113,7 +125,7 @@ export declare class DeviceManager extends plugins.events.EventEmitter {
|
|
|
113
125
|
/**
|
|
114
126
|
* Add a scanner manually
|
|
115
127
|
*/
|
|
116
|
-
addScanner(address: string, port: number, protocol?: 'escl' | 'sane', name?: string): Promise<UniversalDevice>;
|
|
128
|
+
addScanner(address: string, port: number, protocol?: 'brother' | 'escl' | 'sane', name?: string): Promise<UniversalDevice>;
|
|
117
129
|
/**
|
|
118
130
|
* Add a printer manually
|
|
119
131
|
*/
|
|
@@ -158,7 +170,8 @@ export declare class DeviceManager extends plugins.events.EventEmitter {
|
|
|
158
170
|
scanNetwork(options: INetworkScanOptions): Promise<UniversalDevice[]>;
|
|
159
171
|
/**
|
|
160
172
|
* Discover scanners in a subnet and add them to the manager.
|
|
161
|
-
* Convenience method that focuses discovery on scanner protocols only
|
|
173
|
+
* Convenience method that focuses discovery on scanner protocols only
|
|
174
|
+
* (Brother native, eSCL/AirScan, and SANE).
|
|
162
175
|
*
|
|
163
176
|
* @param subnet CIDR notation subnet (e.g., '192.168.1.0/24')
|
|
164
177
|
* @param options Optional discovery settings
|