@yume-chan/adb-daemon-webusb 0.0.24 → 1.1.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 CHANGED
@@ -1,13 +1,43 @@
1
1
  # Change Log - @yume-chan/adb-daemon-webusb
2
2
 
3
+ ## 1.1.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [ab98953]
8
+ - @yume-chan/adb@1.1.0
9
+
10
+ ## 1.0.1
11
+
12
+ ### Patch Changes
13
+
14
+ - 53688d3: Use PNPM workspace and Changesets to manage the monorepo.
15
+
16
+ Because Changesets doesn't support alpha versions (`0.x.x`), this version is `1.0.0`. Future versions will follow SemVer rules, for example, breaking API changes will introduce a new major version.
17
+
18
+ - c68e216: Accept exclusionFilters in getDevices and DeviceObserver
19
+ - db8466f: Accept standard `USBDeviceFilter` type and fill in default interface filters automatically
20
+ - db8466f: Throw `DeviceBusyError` when interface can't be claimed
21
+ - Updated dependencies [53688d3]
22
+ - Updated dependencies [db8466f]
23
+ - Updated dependencies [db8466f]
24
+ - Updated dependencies [ea5002b]
25
+ - Updated dependencies [db8466f]
26
+ - @yume-chan/stream-extra@1.0.1
27
+ - @yume-chan/struct@1.0.1
28
+ - @yume-chan/event@1.0.1
29
+ - @yume-chan/adb@1.0.1
30
+
3
31
  This log was last generated on Tue, 18 Jun 2024 02:49:43 GMT and should not be manually modified.
4
32
 
5
33
  ## 0.0.24
34
+
6
35
  Tue, 18 Jun 2024 02:49:43 GMT
7
36
 
8
37
  _Version update only_
9
38
 
10
39
  ## 0.0.23
40
+
11
41
  Thu, 21 Mar 2024 03:15:10 GMT
12
42
 
13
43
  ### Updates
@@ -15,6 +45,7 @@ Thu, 21 Mar 2024 03:15:10 GMT
15
45
  - Fix `AdbDaemonWebUsbDeviceManager.getDevices` doesn't match auto-generated serial number against `filters.serialNumber` (if the device doesn't have a serial number)
16
46
 
17
47
  ## 0.0.22
48
+
18
49
  Wed, 13 Dec 2023 05:57:27 GMT
19
50
 
20
51
  ### Updates
@@ -24,11 +55,13 @@ Wed, 13 Dec 2023 05:57:27 GMT
24
55
  - `AdbDaemonWebUsbDevice` will generate a fake serial number from vid and pid if the device serial number is empty
25
56
 
26
57
  ## 0.0.21
58
+
27
59
  Fri, 25 Aug 2023 14:05:18 GMT
28
60
 
29
61
  _Version update only_
30
62
 
31
63
  ## 0.0.20
64
+
32
65
  Mon, 05 Jun 2023 02:51:41 GMT
33
66
 
34
67
  ### Updates
@@ -40,6 +73,7 @@ Mon, 05 Jun 2023 02:51:41 GMT
40
73
  - Add `filters` parameter to `AdbDaemonWebUsbDeviceManager#getDevices`. The filtration is manually implemented because WebUSB's `getDevice` API doesn't support filters.
41
74
 
42
75
  ## 0.0.19
76
+
43
77
  Sun, 09 Apr 2023 05:55:33 GMT
44
78
 
45
79
  ### Updates
@@ -48,6 +82,7 @@ Sun, 09 Apr 2023 05:55:33 GMT
48
82
  - Add the `AdbWebUsbBackendManager` class to simplify the usage with custom WebUSB implementations (for example the `usb` NPM package).
49
83
 
50
84
  ## 0.0.18
85
+
51
86
  Wed, 25 Jan 2023 21:33:49 GMT
52
87
 
53
88
  ### Updates
@@ -55,6 +90,7 @@ Wed, 25 Jan 2023 21:33:49 GMT
55
90
  - Add an option to specify USB filters
56
91
 
57
92
  ## 0.0.17
93
+
58
94
  Tue, 18 Oct 2022 09:32:30 GMT
59
95
 
60
96
  ### Updates
@@ -62,6 +98,7 @@ Tue, 18 Oct 2022 09:32:30 GMT
62
98
  - Update to use new stream util package
63
99
 
64
100
  ## 0.0.16
101
+
65
102
  Sat, 28 May 2022 03:56:37 GMT
66
103
 
67
104
  ### Updates
@@ -69,6 +106,7 @@ Sat, 28 May 2022 03:56:37 GMT
69
106
  - Upgrade TypeScript to 4.7.2 to enable Node.js ESM
70
107
 
71
108
  ## 0.0.15
109
+
72
110
  Mon, 02 May 2022 04:18:01 GMT
73
111
 
74
112
  ### Updates
@@ -76,11 +114,13 @@ Mon, 02 May 2022 04:18:01 GMT
76
114
  - Improve connection lifecycle handling
77
115
 
78
116
  ## 0.0.14
117
+
79
118
  Sat, 30 Apr 2022 14:05:48 GMT
80
119
 
81
120
  _Version update only_
82
121
 
83
122
  ## 0.0.13
123
+
84
124
  Thu, 28 Apr 2022 01:23:53 GMT
85
125
 
86
126
  ### Updates
@@ -88,11 +128,13 @@ Thu, 28 Apr 2022 01:23:53 GMT
88
128
  - Workaround an issue in Chrome where `transferIn` never returns `babble` on Windows
89
129
 
90
130
  ## 0.0.12
131
+
91
132
  Sun, 03 Apr 2022 11:18:47 GMT
92
133
 
93
134
  _Version update only_
94
135
 
95
136
  ## 0.0.11
137
+
96
138
  Sun, 03 Apr 2022 10:54:15 GMT
97
139
 
98
140
  ### Updates
@@ -102,6 +144,7 @@ Sun, 03 Apr 2022 10:54:15 GMT
102
144
  - Update license year
103
145
 
104
146
  ## 0.0.10
147
+
105
148
  Sun, 09 Jan 2022 15:52:20 GMT
106
149
 
107
150
  ### Updates
@@ -109,7 +152,7 @@ Sun, 09 Jan 2022 15:52:20 GMT
109
152
  - Remove `encodeUtf8()` and `decodeUtf8()` from `AdbBackend`
110
153
 
111
154
  ## 0.0.9
155
+
112
156
  Sun, 09 Jan 2022 15:50:20 GMT
113
157
 
114
158
  _Initial release_
115
-
package/README.md CHANGED
@@ -15,8 +15,11 @@
15
15
  <a href="https://github.com/yume-chan/ya-webadb/releases">
16
16
  <img alt="GitHub release" src="https://img.shields.io/github/v/release/yume-chan/ya-webadb?logo=github">
17
17
  </a>
18
- <a href="https://www.npmjs.com/package/@yume-chan/adb">
19
- <img alt="npm" src="https://img.shields.io/npm/dm/%40yume-chan/adb?logo=npm">
18
+ <a href="https://bundlephobia.com/package/@yume-chan/adb-daemon-webusb">
19
+ <img alt="Package Size" src="https://img.shields.io/bundlephobia/minzip/%40yume-chan%2Fadb-daemon-webusb">
20
+ </a>
21
+ <a href="https://www.npmjs.com/package/@yume-chan/adb-daemon-webusb">
22
+ <img alt="npm" src="https://img.shields.io/npm/dm/%40yume-chan/adb-daemon-webusb?logo=npm">
20
23
  </a>
21
24
  <a href="https://discord.gg/26k3ttC2PN">
22
25
  <img alt="Discord" src="https://img.shields.io/discord/1120215514732564502?logo=discord&logoColor=%23ffffff&label=Discord">
@@ -27,7 +30,7 @@ This package is part of [Tango ADB](https://github.com/yume-chan/ya-webadb). Gen
27
30
 
28
31
  ## Documentation
29
32
 
30
- Check the latest documentation at https://tango-adb.github.io/docs/
33
+ Check the latest documentation at https://docs.tangoapp.dev/tango/daemon/usb/
31
34
 
32
35
  ## Sponsors
33
36
 
package/esm/device.d.ts CHANGED
@@ -1,30 +1,23 @@
1
- /// <reference types="w3c-web-usb" />
2
1
  import type { AdbDaemonDevice, AdbPacketData, AdbPacketInit } from "@yume-chan/adb";
3
2
  import type { Consumable, ReadableWritablePair, WritableStream } from "@yume-chan/stream-extra";
4
3
  import { ReadableStream } from "@yume-chan/stream-extra";
5
- import type { AdbDeviceFilter } from "./utils.js";
4
+ import type { UsbInterfaceFilter, UsbInterfaceIdentifier } from "./utils.js";
6
5
  /**
7
6
  * The default filter for ADB devices, as defined by Google.
8
7
  */
9
- export declare const ADB_DEFAULT_DEVICE_FILTER: {
8
+ export declare const AdbDefaultInterfaceFilter: {
10
9
  readonly classCode: 255;
11
10
  readonly subclassCode: 66;
12
11
  readonly protocolCode: 1;
13
12
  };
13
+ export declare function mergeDefaultAdbInterfaceFilter(filters: USBDeviceFilter[] | undefined): (USBDeviceFilter & UsbInterfaceFilter)[];
14
14
  export declare class AdbDaemonWebUsbConnection implements ReadableWritablePair<AdbPacketData, Consumable<AdbPacketInit>> {
15
15
  #private;
16
16
  get device(): AdbDaemonWebUsbDevice;
17
17
  get inEndpoint(): USBEndpoint;
18
18
  get outEndpoint(): USBEndpoint;
19
19
  get readable(): ReadableStream<AdbPacketData>;
20
- get writable(): WritableStream<Consumable<{
21
- command: number;
22
- arg0: number;
23
- arg1: number;
24
- checksum: number;
25
- magic: number;
26
- payload: Uint8Array;
27
- }>>;
20
+ get writable(): WritableStream<Consumable<AdbPacketInit>>;
28
21
  constructor(device: AdbDaemonWebUsbDevice, inEndpoint: USBEndpoint, outEndpoint: USBEndpoint, usbManager: USB);
29
22
  }
30
23
  export declare class AdbDaemonWebUsbDevice implements AdbDaemonDevice {
@@ -38,11 +31,15 @@ export declare class AdbDaemonWebUsbDevice implements AdbDaemonDevice {
38
31
  * @param device The `USBDevice` instance obtained elsewhere.
39
32
  * @param filters The filters to use when searching for ADB interface. Defaults to {@link ADB_DEFAULT_DEVICE_FILTER}.
40
33
  */
41
- constructor(device: USBDevice, filters: AdbDeviceFilter[] | undefined, usbManager: USB);
34
+ constructor(device: USBDevice, interface_: UsbInterfaceIdentifier, usbManager: USB);
42
35
  /**
43
- * Claim the device and create a pair of `AdbPacket` streams to the ADB interface.
44
- * @returns The pair of `AdbPacket` streams.
36
+ * Open the device and create a new connection to the ADB Daemon.
45
37
  */
46
38
  connect(): Promise<AdbDaemonWebUsbConnection>;
47
39
  }
40
+ export declare namespace AdbDaemonWebUsbDevice {
41
+ class DeviceBusyError extends Error {
42
+ constructor(cause?: Error);
43
+ }
44
+ }
48
45
  //# sourceMappingURL=device.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EACR,eAAe,EACf,aAAa,EACb,aAAa,EAChB,MAAM,gBAAgB,CAAC;AAMxB,OAAO,KAAK,EACR,UAAU,EACV,oBAAoB,EACpB,cAAc,EACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGH,cAAc,EAEjB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAOlD;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;CAIF,CAAC;AAgErC,qBAAa,yBACT,YAAW,oBAAoB,CAAC,aAAa,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;;IAGzE,IAAI,MAAM,0BAET;IAGD,IAAI,UAAU,gBAEb;IAGD,IAAI,WAAW,gBAEd;IAGD,IAAI,QAAQ,kCAEX;IAGD,IAAI,QAAQ;;;;;;;QAEX;gBAGG,MAAM,EAAE,qBAAqB,EAC7B,UAAU,EAAE,WAAW,EACvB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,GAAG;CAmJtB;AAED,qBAAa,qBAAsB,YAAW,eAAe;;IAKzD,IAAI,GAAG,cAEN;IAGD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;OAKG;gBAEC,MAAM,EAAE,SAAS,EACjB,OAAO,+BAAiD,EACxD,UAAU,EAAE,GAAG;IA8CnB;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,yBAAyB,CAAC;CAStD"}
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,eAAe,EACf,aAAa,EACb,aAAa,EAChB,MAAM,gBAAgB,CAAC;AAMxB,OAAO,KAAK,EACR,UAAU,EACV,oBAAoB,EACpB,cAAc,EACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGH,cAAc,EAEjB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAG7E;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;CAIC,CAAC;AAExC,wBAAgB,8BAA8B,CAC1C,OAAO,EAAE,eAAe,EAAE,GAAG,SAAS,GACvC,CAAC,eAAe,GAAG,kBAAkB,CAAC,EAAE,CAa1C;AAyBD,qBAAa,yBACT,YAAW,oBAAoB,CAAC,aAAa,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;;IAGzE,IAAI,MAAM,0BAET;IAGD,IAAI,UAAU,gBAEb;IAGD,IAAI,WAAW,gBAEd;IAGD,IAAI,QAAQ,kCAEX;IAGD,IAAI,QAAQ,8CAEX;gBAGG,MAAM,EAAE,qBAAqB,EAC7B,UAAU,EAAE,WAAW,EACvB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,GAAG;CAiJtB;AAED,qBAAa,qBAAsB,YAAW,eAAe;;IAKzD,IAAI,GAAG,cAEN;IAGD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;OAKG;gBAEC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,sBAAsB,EAClC,UAAU,EAAE,GAAG;IAqDnB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,yBAAyB,CAAC;CAStD;AAED,yBAAiB,qBAAqB,CAAC;IACnC,MAAa,eAAgB,SAAQ,KAAK;oBAC1B,KAAK,CAAC,EAAE,KAAK;KAK5B;CACJ"}
package/esm/device.js CHANGED
@@ -1,49 +1,27 @@
1
1
  import { AdbPacketHeader, AdbPacketSerializeStream, unreachable, } from "@yume-chan/adb";
2
2
  import { DuplexStreamFactory, MaybeConsumable, ReadableStream, pipeFrom, } from "@yume-chan/stream-extra";
3
- import { EMPTY_UINT8_ARRAY } from "@yume-chan/struct";
4
- import { findUsbAlternateInterface, getSerialNumber, isErrorName, } from "./utils.js";
3
+ import { EmptyUint8Array } from "@yume-chan/struct";
4
+ import { findUsbEndpoints, getSerialNumber, isErrorName } from "./utils.js";
5
5
  /**
6
6
  * The default filter for ADB devices, as defined by Google.
7
7
  */
8
- export const ADB_DEFAULT_DEVICE_FILTER = {
8
+ export const AdbDefaultInterfaceFilter = {
9
9
  classCode: 0xff,
10
10
  subclassCode: 0x42,
11
11
  protocolCode: 1,
12
12
  };
13
- /**
14
- * Find the first pair of input and output endpoints from an alternate interface.
15
- *
16
- * ADB interface only has two endpoints, one for input and one for output.
17
- */
18
- function findUsbEndpoints(endpoints) {
19
- if (endpoints.length === 0) {
20
- throw new TypeError("No endpoints given");
21
- }
22
- let inEndpoint;
23
- let outEndpoint;
24
- for (const endpoint of endpoints) {
25
- switch (endpoint.direction) {
26
- case "in":
27
- inEndpoint = endpoint;
28
- if (outEndpoint) {
29
- return { inEndpoint, outEndpoint };
30
- }
31
- break;
32
- case "out":
33
- outEndpoint = endpoint;
34
- if (inEndpoint) {
35
- return { inEndpoint, outEndpoint };
36
- }
37
- break;
38
- }
39
- }
40
- if (!inEndpoint) {
41
- throw new TypeError("No input endpoint found.");
13
+ export function mergeDefaultAdbInterfaceFilter(filters) {
14
+ if (!filters || filters.length === 0) {
15
+ return [AdbDefaultInterfaceFilter];
16
+ }
17
+ else {
18
+ return filters.map((filter) => ({
19
+ ...filter,
20
+ classCode: filter.classCode ?? AdbDefaultInterfaceFilter.classCode,
21
+ subclassCode: filter.subclassCode ?? AdbDefaultInterfaceFilter.subclassCode,
22
+ protocolCode: filter.protocolCode ?? AdbDefaultInterfaceFilter.protocolCode,
23
+ }));
42
24
  }
43
- if (!outEndpoint) {
44
- throw new TypeError("No output endpoint found.");
45
- }
46
- throw new Error("unreachable");
47
25
  }
48
26
  class Uint8ArrayExactReadable {
49
27
  #data;
@@ -129,7 +107,7 @@ export class AdbDaemonWebUsbConnection {
129
107
  // we need to send an empty packet to indicate the end,
130
108
  // so the OS will send it to the device immediately.
131
109
  if (zeroMask && (chunk.length & zeroMask) === 0) {
132
- await device.raw.transferOut(outEndpoint.endpointNumber, EMPTY_UINT8_ARRAY);
110
+ await device.raw.transferOut(outEndpoint.endpointNumber, EmptyUint8Array);
133
111
  }
134
112
  }
135
113
  catch (e) {
@@ -162,7 +140,7 @@ export class AdbDaemonWebUsbConnection {
162
140
  packet.payload = new Uint8Array(result.data.buffer);
163
141
  }
164
142
  else {
165
- packet.payload = EMPTY_UINT8_ARRAY;
143
+ packet.payload = EmptyUint8Array;
166
144
  }
167
145
  return packet;
168
146
  }
@@ -170,7 +148,7 @@ export class AdbDaemonWebUsbConnection {
170
148
  catch (e) {
171
149
  // On Windows, disconnecting the device will cause `NetworkError` to be thrown,
172
150
  // even before the `disconnect` event is fired.
173
- // We need to wait a little bit and check if the device is still connected.
151
+ // Wait a little while and check if the device is still connected.
174
152
  // https://github.com/WICG/webusb/issues/219
175
153
  if (isErrorName(e, "NetworkError")) {
176
154
  await new Promise((resolve) => {
@@ -181,16 +159,13 @@ export class AdbDaemonWebUsbConnection {
181
159
  if (closed) {
182
160
  return undefined;
183
161
  }
184
- else {
185
- throw e;
186
- }
187
162
  }
188
163
  throw e;
189
164
  }
190
165
  }
191
166
  }
192
167
  export class AdbDaemonWebUsbDevice {
193
- #filters;
168
+ #interface;
194
169
  #usbManager;
195
170
  #raw;
196
171
  get raw() {
@@ -209,17 +184,17 @@ export class AdbDaemonWebUsbDevice {
209
184
  * @param device The `USBDevice` instance obtained elsewhere.
210
185
  * @param filters The filters to use when searching for ADB interface. Defaults to {@link ADB_DEFAULT_DEVICE_FILTER}.
211
186
  */
212
- constructor(device, filters = [ADB_DEFAULT_DEVICE_FILTER], usbManager) {
187
+ constructor(device, interface_, usbManager) {
213
188
  this.#raw = device;
214
189
  this.#serial = getSerialNumber(device);
215
- this.#filters = filters;
190
+ this.#interface = interface_;
216
191
  this.#usbManager = usbManager;
217
192
  }
218
193
  async #claimInterface() {
219
194
  if (!this.#raw.opened) {
220
195
  await this.#raw.open();
221
196
  }
222
- const { configuration, interface_, alternate } = findUsbAlternateInterface(this.#raw, this.#filters);
197
+ const { configuration, interface_, alternate } = this.#interface;
223
198
  if (this.#raw.configuration?.configurationValue !==
224
199
  configuration.configurationValue) {
225
200
  // Note: Switching configuration is not supported on Windows,
@@ -227,21 +202,37 @@ export class AdbDaemonWebUsbDevice {
227
202
  await this.#raw.selectConfiguration(configuration.configurationValue);
228
203
  }
229
204
  if (!interface_.claimed) {
230
- await this.#raw.claimInterface(interface_.interfaceNumber);
205
+ try {
206
+ await this.#raw.claimInterface(interface_.interfaceNumber);
207
+ }
208
+ catch (e) {
209
+ if (isErrorName(e, "NetworkError")) {
210
+ throw new AdbDaemonWebUsbDevice.DeviceBusyError(e);
211
+ }
212
+ throw e;
213
+ }
231
214
  }
232
215
  if (interface_.alternate.alternateSetting !== alternate.alternateSetting) {
233
216
  await this.#raw.selectAlternateInterface(interface_.interfaceNumber, alternate.alternateSetting);
234
217
  }
235
- const { inEndpoint, outEndpoint } = findUsbEndpoints(alternate.endpoints);
236
- return [inEndpoint, outEndpoint];
218
+ return findUsbEndpoints(alternate.endpoints);
237
219
  }
238
220
  /**
239
- * Claim the device and create a pair of `AdbPacket` streams to the ADB interface.
240
- * @returns The pair of `AdbPacket` streams.
221
+ * Open the device and create a new connection to the ADB Daemon.
241
222
  */
242
223
  async connect() {
243
- const [inEndpoint, outEndpoint] = await this.#claimInterface();
224
+ const { inEndpoint, outEndpoint } = await this.#claimInterface();
244
225
  return new AdbDaemonWebUsbConnection(this, inEndpoint, outEndpoint, this.#usbManager);
245
226
  }
246
227
  }
228
+ (function (AdbDaemonWebUsbDevice) {
229
+ class DeviceBusyError extends Error {
230
+ constructor(cause) {
231
+ super("The device is already in used by another program", {
232
+ cause,
233
+ });
234
+ }
235
+ }
236
+ AdbDaemonWebUsbDevice.DeviceBusyError = DeviceBusyError;
237
+ })(AdbDaemonWebUsbDevice || (AdbDaemonWebUsbDevice = {}));
247
238
  //# sourceMappingURL=device.js.map
package/esm/device.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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"}
package/esm/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from "./device.js";
2
2
  export * from "./manager.js";
3
3
  export * from "./utils.js";
4
- export * from "./watcher.js";
4
+ export * from "./observer.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from "./device.js";
2
2
  export * from "./manager.js";
3
3
  export * from "./utils.js";
4
- export * from "./watcher.js";
4
+ export * from "./observer.js";
5
5
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
package/esm/manager.d.ts CHANGED
@@ -1,9 +1,8 @@
1
- /// <reference types="w3c-web-usb" />
2
1
  import { AdbDaemonWebUsbDevice } from "./device.js";
3
- import type { AdbDeviceFilter } from "./utils.js";
2
+ import { AdbDaemonWebUsbDeviceObserver } from "./observer.js";
4
3
  export declare namespace AdbDaemonWebUsbDeviceManager {
5
4
  interface RequestDeviceOptions {
6
- filters?: AdbDeviceFilter[] | undefined;
5
+ filters?: USBDeviceFilter[] | undefined;
7
6
  exclusionFilters?: USBDeviceFilter[] | undefined;
8
7
  }
9
8
  }
@@ -21,31 +20,13 @@ export declare class AdbDaemonWebUsbDeviceManager {
21
20
  */
22
21
  constructor(usbManager: USB);
23
22
  /**
24
- * Request access to a connected device.
25
- * This is a convince method for `usb.requestDevice()`.
26
- * @param filters
27
- * The filters to apply to the device list.
28
- *
29
- * It must have `classCode`, `subclassCode` and `protocolCode` fields for selecting the ADB interface,
30
- * but might also have `vendorId`, `productId` or `serialNumber` fields to limit the displayed device list.
31
- *
32
- * Defaults to {@link ADB_DEFAULT_DEVICE_FILTER}.
33
- * @returns An {@link AdbDaemonWebUsbDevice} instance if the user selected a device,
34
- * or `undefined` if the user cancelled the device picker.
23
+ * Call `USB#requestDevice()` to prompt the user to select a device.
35
24
  */
36
25
  requestDevice(options?: AdbDaemonWebUsbDeviceManager.RequestDeviceOptions): Promise<AdbDaemonWebUsbDevice | undefined>;
37
26
  /**
38
- * Get all connected and authenticated devices.
39
- * This is a convince method for `usb.getDevices()`.
40
- * @param filters
41
- * The filters to apply to the device list.
42
- *
43
- * It must have `classCode`, `subclassCode` and `protocolCode` fields for selecting the ADB interface,
44
- * but might also have `vendorId`, `productId` or `serialNumber` fields to limit the device list.
45
- *
46
- * Defaults to {@link ADB_DEFAULT_DEVICE_FILTER}.
47
- * @returns An array of {@link AdbDaemonWebUsbDevice} instances for all connected and authenticated devices.
27
+ * Get all connected and requested devices that match the specified filters.
48
28
  */
49
- getDevices(filters?: AdbDeviceFilter[]): Promise<AdbDaemonWebUsbDevice[]>;
29
+ getDevices(options?: AdbDaemonWebUsbDeviceManager.RequestDeviceOptions): Promise<AdbDaemonWebUsbDevice[]>;
30
+ trackDevices(options?: AdbDaemonWebUsbDeviceManager.RequestDeviceOptions): AdbDaemonWebUsbDeviceObserver;
50
31
  }
51
32
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAA6B,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAOlD,yBAAiB,4BAA4B,CAAC;IAC1C,UAAiB,oBAAoB;QACjC,OAAO,CAAC,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC;QACxC,gBAAgB,CAAC,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC;KACpD;CACJ;AAED,qBAAa,4BAA4B;;IACrC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,2CAIH;IAIpB;;;OAGG;gBACS,UAAU,EAAE,GAAG;IAI3B;;;;;;;;;;;;OAYG;IACG,aAAa,CACf,OAAO,GAAE,4BAA4B,CAAC,oBAAyB,GAChE,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IA0B7C;;;;;;;;;;;OAWG;IACG,UAAU,CACZ,OAAO,GAAE,eAAe,EAAgC,GACzD,OAAO,CAAC,qBAAqB,EAAE,CAAC;CA8CtC"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EAExB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAG9D,yBAAiB,4BAA4B,CAAC;IAC1C,UAAiB,oBAAoB;QACjC,OAAO,CAAC,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC;QACxC,gBAAgB,CAAC,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC;KACpD;CACJ;AAED,qBAAa,4BAA4B;;IACrC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,2CAIH;IAIpB;;;OAGG;gBACS,UAAU,EAAE,GAAG;IAI3B;;OAEG;IACG,aAAa,CACf,OAAO,GAAE,4BAA4B,CAAC,oBAAyB,GAChE,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAmC7C;;OAEG;IACG,UAAU,CACZ,OAAO,GAAE,4BAA4B,CAAC,oBAAyB,GAChE,OAAO,CAAC,qBAAqB,EAAE,CAAC;IA0BnC,YAAY,CACR,OAAO,GAAE,4BAA4B,CAAC,oBAAyB,GAChE,6BAA6B;CAGnC"}
package/esm/manager.js CHANGED
@@ -1,5 +1,6 @@
1
- import { ADB_DEFAULT_DEVICE_FILTER, AdbDaemonWebUsbDevice } from "./device.js";
2
- import { findUsbAlternateInterface, getSerialNumber, isErrorName, } from "./utils.js";
1
+ import { AdbDaemonWebUsbDevice, mergeDefaultAdbInterfaceFilter, } from "./device.js";
2
+ import { AdbDaemonWebUsbDeviceObserver } from "./observer.js";
3
+ import { isErrorName, matchFilters } from "./utils.js";
3
4
  export class AdbDaemonWebUsbDeviceManager {
4
5
  /**
5
6
  * Gets the instance of {@link AdbDaemonWebUsbDeviceManager} using browser WebUSB implementation.
@@ -19,28 +20,22 @@ export class AdbDaemonWebUsbDeviceManager {
19
20
  this.#usbManager = usbManager;
20
21
  }
21
22
  /**
22
- * Request access to a connected device.
23
- * This is a convince method for `usb.requestDevice()`.
24
- * @param filters
25
- * The filters to apply to the device list.
26
- *
27
- * It must have `classCode`, `subclassCode` and `protocolCode` fields for selecting the ADB interface,
28
- * but might also have `vendorId`, `productId` or `serialNumber` fields to limit the displayed device list.
29
- *
30
- * Defaults to {@link ADB_DEFAULT_DEVICE_FILTER}.
31
- * @returns An {@link AdbDaemonWebUsbDevice} instance if the user selected a device,
32
- * or `undefined` if the user cancelled the device picker.
23
+ * Call `USB#requestDevice()` to prompt the user to select a device.
33
24
  */
34
25
  async requestDevice(options = {}) {
35
- if (!options.filters) {
36
- options.filters = [ADB_DEFAULT_DEVICE_FILTER];
37
- }
38
- else if (options.filters.length === 0) {
39
- throw new TypeError("filters must not be empty");
40
- }
26
+ const filters = mergeDefaultAdbInterfaceFilter(options.filters);
41
27
  try {
42
- const device = await this.#usbManager.requestDevice(options);
43
- return new AdbDaemonWebUsbDevice(device, options.filters, this.#usbManager);
28
+ const device = await this.#usbManager.requestDevice({
29
+ filters,
30
+ exclusionFilters: options.exclusionFilters,
31
+ });
32
+ const interface_ = matchFilters(device, filters, options.exclusionFilters);
33
+ if (!interface_) {
34
+ // `#usbManager` doesn't support `exclusionFilters`,
35
+ // selected device is invalid
36
+ return undefined;
37
+ }
38
+ return new AdbDaemonWebUsbDevice(device, interface_, this.#usbManager);
44
39
  }
45
40
  catch (e) {
46
41
  // No device selected
@@ -51,48 +46,23 @@ export class AdbDaemonWebUsbDeviceManager {
51
46
  }
52
47
  }
53
48
  /**
54
- * Get all connected and authenticated devices.
55
- * This is a convince method for `usb.getDevices()`.
56
- * @param filters
57
- * The filters to apply to the device list.
58
- *
59
- * It must have `classCode`, `subclassCode` and `protocolCode` fields for selecting the ADB interface,
60
- * but might also have `vendorId`, `productId` or `serialNumber` fields to limit the device list.
61
- *
62
- * Defaults to {@link ADB_DEFAULT_DEVICE_FILTER}.
63
- * @returns An array of {@link AdbDaemonWebUsbDevice} instances for all connected and authenticated devices.
49
+ * Get all connected and requested devices that match the specified filters.
64
50
  */
65
- async getDevices(filters = [ADB_DEFAULT_DEVICE_FILTER]) {
66
- if (filters.length === 0) {
67
- throw new TypeError("filters must not be empty");
68
- }
51
+ async getDevices(options = {}) {
52
+ const filters = mergeDefaultAdbInterfaceFilter(options.filters);
69
53
  const devices = await this.#usbManager.getDevices();
70
- return devices
71
- .filter((device) => {
72
- for (const filter of filters) {
73
- if ("vendorId" in filter &&
74
- device.vendorId !== filter.vendorId) {
75
- continue;
76
- }
77
- if ("productId" in filter &&
78
- device.productId !== filter.productId) {
79
- continue;
80
- }
81
- if ("serialNumber" in filter &&
82
- getSerialNumber(device) !== filter.serialNumber) {
83
- continue;
84
- }
85
- try {
86
- findUsbAlternateInterface(device, filters);
87
- return true;
88
- }
89
- catch {
90
- continue;
91
- }
54
+ // filter map
55
+ const result = [];
56
+ for (const device of devices) {
57
+ const interface_ = matchFilters(device, filters, options.exclusionFilters);
58
+ if (interface_) {
59
+ result.push(new AdbDaemonWebUsbDevice(device, interface_, this.#usbManager));
92
60
  }
93
- return false;
94
- })
95
- .map((device) => new AdbDaemonWebUsbDevice(device, filters, this.#usbManager));
61
+ }
62
+ return result;
63
+ }
64
+ trackDevices(options = {}) {
65
+ return new AdbDaemonWebUsbDeviceObserver(this.#usbManager, options);
96
66
  }
97
67
  }
98
68
  //# sourceMappingURL=manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,EACH,yBAAyB,EACzB,eAAe,EACf,WAAW,GACd,MAAM,YAAY,CAAC;AASpB,MAAM,OAAO,4BAA4B;IACrC;;;;OAIG;IACH,MAAM,CAAU,OAAO,GACnB,OAAO,UAAU,CAAC,SAAS,KAAK,WAAW;QAC3C,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG;QACtB,CAAC,CAAC,IAAI,4BAA4B,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC;QAC5D,CAAC,CAAC,SAAS,CAAC;IAEpB,WAAW,CAAM;IAEjB;;;OAGG;IACH,YAAY,UAAe;QACvB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,aAAa,CACf,UAA6D,EAAE;QAE/D,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,OAAO,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAC/C,OAAkC,CACrC,CAAC;YACF,OAAO,IAAI,qBAAqB,CAC5B,MAAM,EACN,OAAO,CAAC,OAAO,EACf,IAAI,CAAC,WAAW,CACnB,CAAC;QACN,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,qBAAqB;YACrB,IAAI,WAAW,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,CAAC;gBAClC,OAAO,SAAS,CAAC;YACrB,CAAC;YAED,MAAM,CAAC,CAAC;QACZ,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,UAAU,CACZ,UAA6B,CAAC,yBAAyB,CAAC;QAExD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QACpD,OAAO,OAAO;aACT,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,IACI,UAAU,IAAI,MAAM;oBACpB,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EACrC,CAAC;oBACC,SAAS;gBACb,CAAC;gBACD,IACI,WAAW,IAAI,MAAM;oBACrB,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,EACvC,CAAC;oBACC,SAAS;gBACb,CAAC;gBACD,IACI,cAAc,IAAI,MAAM;oBACxB,eAAe,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,YAAY,EACjD,CAAC;oBACC,SAAS;gBACb,CAAC;gBAED,IAAI,CAAC;oBACD,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBAC3C,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAAC,MAAM,CAAC;oBACL,SAAS;gBACb,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;aACD,GAAG,CACA,CAAC,MAAM,EAAE,EAAE,CACP,IAAI,qBAAqB,CACrB,MAAM,EACN,OAAO,EACP,IAAI,CAAC,WAAW,CACnB,CACR,CAAC;IACV,CAAC"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EACrB,8BAA8B,GACjC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AASvD,MAAM,OAAO,4BAA4B;IACrC;;;;OAIG;IACH,MAAM,CAAU,OAAO,GACnB,OAAO,UAAU,CAAC,SAAS,KAAK,WAAW;QAC3C,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG;QACtB,CAAC,CAAC,IAAI,4BAA4B,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC;QAC5D,CAAC,CAAC,SAAS,CAAC;IAEpB,WAAW,CAAM;IAEjB;;;OAGG;IACH,YAAY,UAAe;QACvB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACf,UAA6D,EAAE;QAE/D,MAAM,OAAO,GAAG,8BAA8B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEhE,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;gBAChD,OAAO;gBACP,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;aAC7C,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,YAAY,CAC3B,MAAM,EACN,OAAO,EACP,OAAO,CAAC,gBAAgB,CAC3B,CAAC;YACF,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,oDAAoD;gBACpD,6BAA6B;gBAC7B,OAAO,SAAS,CAAC;YACrB,CAAC;YAED,OAAO,IAAI,qBAAqB,CAC5B,MAAM,EACN,UAAU,EACV,IAAI,CAAC,WAAW,CACnB,CAAC;QACN,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,qBAAqB;YACrB,IAAI,WAAW,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,CAAC;gBAClC,OAAO,SAAS,CAAC;YACrB,CAAC;YAED,MAAM,CAAC,CAAC;QACZ,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACZ,UAA6D,EAAE;QAE/D,MAAM,OAAO,GAAG,8BAA8B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEhE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QACpD,aAAa;QACb,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,YAAY,CAC3B,MAAM,EACN,OAAO,EACP,OAAO,CAAC,gBAAgB,CAC3B,CAAC;YACF,IAAI,UAAU,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CACP,IAAI,qBAAqB,CACrB,MAAM,EACN,UAAU,EACV,IAAI,CAAC,WAAW,CACnB,CACJ,CAAC;YACN,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,YAAY,CACR,UAA6D,EAAE;QAE/D,OAAO,IAAI,6BAA6B,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC"}