@yume-chan/adb 0.0.9 → 0.0.10

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 (205) hide show
  1. package/CHANGELOG.json +23 -0
  2. package/CHANGELOG.md +16 -0
  3. package/LICENSE +21 -21
  4. package/README.md +227 -257
  5. package/dts/adb.d.ts.map +1 -1
  6. package/dts/auth.d.ts +11 -1
  7. package/dts/auth.d.ts.map +1 -1
  8. package/dts/backend.d.ts +3 -5
  9. package/dts/backend.d.ts.map +1 -1
  10. package/dts/commands/demo-mode.d.ts +3 -3
  11. package/dts/commands/demo-mode.d.ts.map +1 -1
  12. package/dts/commands/reverse.d.ts +2 -2
  13. package/dts/commands/reverse.d.ts.map +1 -1
  14. package/dts/commands/shell/index.d.ts +31 -5
  15. package/dts/commands/shell/index.d.ts.map +1 -1
  16. package/dts/commands/shell/legacy.d.ts +13 -2
  17. package/dts/commands/shell/legacy.d.ts.map +1 -1
  18. package/dts/commands/shell/protocol.d.ts +11 -3
  19. package/dts/commands/shell/protocol.d.ts.map +1 -1
  20. package/dts/commands/shell/types.d.ts +35 -3
  21. package/dts/commands/shell/types.d.ts.map +1 -1
  22. package/dts/commands/sync/request.d.ts +1 -1
  23. package/dts/commands/sync/request.d.ts.map +1 -1
  24. package/dts/commands/sync/response.d.ts +2 -2
  25. package/dts/commands/sync/response.d.ts.map +1 -1
  26. package/dts/commands/sync/sync.d.ts.map +1 -1
  27. package/dts/crypto.d.ts +7 -0
  28. package/dts/crypto.d.ts.map +1 -1
  29. package/dts/packet.d.ts.map +1 -1
  30. package/dts/socket/close-event-emitter.d.ts.map +1 -1
  31. package/dts/socket/controller.d.ts.map +1 -1
  32. package/dts/socket/data-event-emitter.d.ts.map +1 -1
  33. package/dts/socket/dispatcher.d.ts.map +1 -1
  34. package/dts/stream/buffered-stream.d.ts +2 -4
  35. package/dts/stream/buffered-stream.d.ts.map +1 -1
  36. package/dts/utils/encoding.d.ts +3 -0
  37. package/dts/utils/encoding.d.ts.map +1 -0
  38. package/dts/utils/index.d.ts +1 -0
  39. package/dts/utils/index.d.ts.map +1 -1
  40. package/esm/adb.js +3 -2
  41. package/esm/adb.js.map +1 -1
  42. package/esm/auth.js +2 -2
  43. package/esm/auth.js.map +1 -1
  44. package/esm/commands/demo-mode.js +9 -9
  45. package/esm/commands/demo-mode.js.map +1 -1
  46. package/esm/commands/reverse.js +3 -2
  47. package/esm/commands/reverse.js.map +1 -1
  48. package/esm/commands/shell/index.js +28 -18
  49. package/esm/commands/shell/index.js.map +1 -1
  50. package/esm/commands/shell/legacy.js +16 -0
  51. package/esm/commands/shell/legacy.js.map +1 -1
  52. package/esm/commands/shell/protocol.js +36 -9
  53. package/esm/commands/shell/protocol.js.map +1 -1
  54. package/esm/commands/sync/request.js +5 -4
  55. package/esm/commands/sync/request.js.map +1 -1
  56. package/esm/commands/sync/response.js +4 -3
  57. package/esm/commands/sync/response.js.map +1 -1
  58. package/esm/commands/sync/sync.js.map +1 -1
  59. package/esm/crypto.js +7 -2
  60. package/esm/crypto.js.map +1 -1
  61. package/esm/packet.js +12 -14
  62. package/esm/packet.js.map +1 -1
  63. package/esm/socket/close-event-emitter.js.map +1 -1
  64. package/esm/socket/controller.js.map +1 -1
  65. package/esm/socket/data-event-emitter.js.map +1 -1
  66. package/esm/socket/dispatcher.js +7 -7
  67. package/esm/socket/dispatcher.js.map +1 -1
  68. package/esm/stream/buffered-stream.js +0 -6
  69. package/esm/stream/buffered-stream.js.map +1 -1
  70. package/esm/utils/encoding.js +11 -0
  71. package/esm/utils/encoding.js.map +1 -0
  72. package/esm/utils/index.js +1 -0
  73. package/esm/utils/index.js.map +1 -1
  74. package/package.json +44 -51
  75. package/src/adb.ts +243 -242
  76. package/src/auth.ts +166 -156
  77. package/src/backend.ts +20 -24
  78. package/src/commands/base.ts +11 -11
  79. package/src/commands/demo-mode.ts +160 -160
  80. package/src/commands/framebuffer.ts +73 -73
  81. package/src/commands/index.ts +8 -8
  82. package/src/commands/install.ts +21 -21
  83. package/src/commands/reverse.ts +134 -133
  84. package/src/commands/shell/index.ts +87 -68
  85. package/src/commands/shell/legacy.ts +59 -42
  86. package/src/commands/shell/protocol.ts +121 -94
  87. package/src/commands/shell/types.ts +55 -21
  88. package/src/commands/shell/utils.ts +20 -20
  89. package/src/commands/sync/index.ts +7 -7
  90. package/src/commands/sync/list.ts +39 -39
  91. package/src/commands/sync/pull.ts +34 -34
  92. package/src/commands/sync/push.ts +46 -46
  93. package/src/commands/sync/request.ts +49 -48
  94. package/src/commands/sync/response.ts +58 -57
  95. package/src/commands/sync/stat.ts +121 -121
  96. package/src/commands/sync/sync.ts +113 -113
  97. package/src/commands/tcpip.ts +21 -21
  98. package/src/crypto.ts +285 -280
  99. package/src/features.ts +5 -5
  100. package/src/index.ts +10 -10
  101. package/src/packet.ts +84 -89
  102. package/src/socket/close-event-emitter.ts +28 -28
  103. package/src/socket/controller.ts +105 -105
  104. package/src/socket/data-event-emitter.ts +27 -27
  105. package/src/socket/dispatcher.ts +269 -269
  106. package/src/socket/index.ts +6 -6
  107. package/src/socket/logger.ts +12 -12
  108. package/src/socket/socket.ts +28 -28
  109. package/src/stream/buffered-stream.ts +92 -100
  110. package/src/stream/index.ts +2 -2
  111. package/src/stream/stream.ts +50 -50
  112. package/src/utils/auto-reset-event.ts +41 -41
  113. package/src/utils/base64.ts +274 -274
  114. package/src/utils/chunk.ts +70 -70
  115. package/src/utils/encoding.ts +13 -0
  116. package/src/utils/event-queue.ts +145 -145
  117. package/src/utils/index.ts +5 -4
  118. package/cjs/adb.js +0 -205
  119. package/cjs/adb.js.map +0 -1
  120. package/cjs/auth.js +0 -141
  121. package/cjs/auth.js.map +0 -1
  122. package/cjs/backend.js +0 -3
  123. package/cjs/backend.js.map +0 -1
  124. package/cjs/commands/base.js +0 -12
  125. package/cjs/commands/base.js.map +0 -1
  126. package/cjs/commands/demo-mode.js +0 -174
  127. package/cjs/commands/demo-mode.js.map +0 -1
  128. package/cjs/commands/framebuffer.js +0 -66
  129. package/cjs/commands/framebuffer.js.map +0 -1
  130. package/cjs/commands/index.js +0 -12
  131. package/cjs/commands/index.js.map +0 -1
  132. package/cjs/commands/install.js +0 -20
  133. package/cjs/commands/install.js.map +0 -1
  134. package/cjs/commands/reverse.js +0 -105
  135. package/cjs/commands/reverse.js.map +0 -1
  136. package/cjs/commands/shell/index.js +0 -56
  137. package/cjs/commands/shell/index.js.map +0 -1
  138. package/cjs/commands/shell/legacy.js +0 -37
  139. package/cjs/commands/shell/legacy.js.map +0 -1
  140. package/cjs/commands/shell/protocol.js +0 -83
  141. package/cjs/commands/shell/protocol.js.map +0 -1
  142. package/cjs/commands/shell/types.js +0 -3
  143. package/cjs/commands/shell/types.js.map +0 -1
  144. package/cjs/commands/shell/utils.js +0 -23
  145. package/cjs/commands/shell/utils.js.map +0 -1
  146. package/cjs/commands/sync/index.js +0 -11
  147. package/cjs/commands/sync/index.js.map +0 -1
  148. package/cjs/commands/sync/list.js +0 -36
  149. package/cjs/commands/sync/list.js.map +0 -1
  150. package/cjs/commands/sync/pull.js +0 -34
  151. package/cjs/commands/sync/pull.js.map +0 -1
  152. package/cjs/commands/sync/push.js +0 -49
  153. package/cjs/commands/sync/push.js.map +0 -1
  154. package/cjs/commands/sync/request.js +0 -48
  155. package/cjs/commands/sync/request.js.map +0 -1
  156. package/cjs/commands/sync/response.js +0 -53
  157. package/cjs/commands/sync/response.js.map +0 -1
  158. package/cjs/commands/sync/stat.js +0 -109
  159. package/cjs/commands/sync/stat.js.map +0 -1
  160. package/cjs/commands/sync/sync.js +0 -118
  161. package/cjs/commands/sync/sync.js.map +0 -1
  162. package/cjs/commands/tcpip.js +0 -28
  163. package/cjs/commands/tcpip.js.map +0 -1
  164. package/cjs/crypto.js +0 -231
  165. package/cjs/crypto.js.map +0 -1
  166. package/cjs/features.js +0 -10
  167. package/cjs/features.js.map +0 -1
  168. package/cjs/index.js +0 -14
  169. package/cjs/index.js.map +0 -1
  170. package/cjs/packet.js +0 -77
  171. package/cjs/packet.js.map +0 -1
  172. package/cjs/socket/close-event-emitter.js +0 -32
  173. package/cjs/socket/close-event-emitter.js.map +0 -1
  174. package/cjs/socket/controller.js +0 -84
  175. package/cjs/socket/controller.js.map +0 -1
  176. package/cjs/socket/data-event-emitter.js +0 -29
  177. package/cjs/socket/data-event-emitter.js.map +0 -1
  178. package/cjs/socket/dispatcher.js +0 -219
  179. package/cjs/socket/dispatcher.js.map +0 -1
  180. package/cjs/socket/index.js +0 -10
  181. package/cjs/socket/index.js.map +0 -1
  182. package/cjs/socket/logger.js +0 -3
  183. package/cjs/socket/logger.js.map +0 -1
  184. package/cjs/socket/socket.js +0 -24
  185. package/cjs/socket/socket.js.map +0 -1
  186. package/cjs/stream/buffered-stream.js +0 -78
  187. package/cjs/stream/buffered-stream.js.map +0 -1
  188. package/cjs/stream/index.js +0 -6
  189. package/cjs/stream/index.js.map +0 -1
  190. package/cjs/stream/stream.js +0 -45
  191. package/cjs/stream/stream.js.map +0 -1
  192. package/cjs/utils/auto-reset-event.js +0 -37
  193. package/cjs/utils/auto-reset-event.js.map +0 -1
  194. package/cjs/utils/base64.js +0 -210
  195. package/cjs/utils/base64.js.map +0 -1
  196. package/cjs/utils/chunk.js +0 -75
  197. package/cjs/utils/chunk.js.map +0 -1
  198. package/cjs/utils/event-queue.js +0 -108
  199. package/cjs/utils/event-queue.js.map +0 -1
  200. package/cjs/utils/index.js +0 -8
  201. package/cjs/utils/index.js.map +0 -1
  202. package/tsconfig.cjs.json +0 -11
  203. package/tsconfig.esm.json +0 -28
  204. package/tsconfig.esm.tsbuildinfo +0 -1305
  205. package/tsconfig.json +0 -18
package/src/auth.ts CHANGED
@@ -1,156 +1,166 @@
1
- import { PromiseResolver } from '@yume-chan/async';
2
- import { Disposable } from '@yume-chan/event';
3
- import { ValueOrPromise } from '@yume-chan/struct';
4
- import { calculatePublicKey, calculatePublicKeyLength, sign } from './crypto';
5
- import { AdbCommand, AdbPacket, AdbPacketInit } from './packet';
6
- import { calculateBase64EncodedLength, encodeBase64 } from './utils';
7
-
8
- export type AdbKeyIterable = Iterable<ArrayBuffer> | AsyncIterable<ArrayBuffer>;
9
-
10
- export interface AdbCredentialStore {
11
- iterateKeys(): AdbKeyIterable;
12
-
13
- generateKey(): ValueOrPromise<ArrayBuffer>;
14
- }
15
-
16
- export enum AdbAuthType {
17
- Token = 1,
18
- Signature = 2,
19
- PublicKey = 3,
20
- }
21
-
22
- export interface AdbAuthenticator {
23
- /**
24
- * @param getNextRequest
25
- *
26
- * Call this function to get the next authentication request packet from device.
27
- *
28
- * After calling `getNextRequest`, authenticator can `yield` a packet as response, or `return` to indicate its incapability of handling the request.
29
- *
30
- * After `return`, the `AdbAuthenticatorHandler` will move on to next authenticator and never go back.
31
- *
32
- * Calling `getNextRequest` multiple times without `yield` or `return` will always return the same request.
33
- */
34
- (
35
- credentialStore: AdbCredentialStore,
36
- getNextRequest: () => Promise<AdbPacket>
37
- ): AsyncIterable<AdbPacketInit>;
38
- }
39
-
40
- export const AdbSignatureAuthenticator: AdbAuthenticator = async function* (
41
- credentialStore: AdbCredentialStore,
42
- getNextRequest: () => Promise<AdbPacket>,
43
- ): AsyncIterable<AdbPacketInit> {
44
- for await (const key of credentialStore.iterateKeys()) {
45
- const packet = await getNextRequest();
46
-
47
- if (packet.arg0 !== AdbAuthType.Token) {
48
- return;
49
- }
50
-
51
- const signature = sign(key, packet.payload!);
52
- yield {
53
- command: AdbCommand.Auth,
54
- arg0: AdbAuthType.Signature,
55
- arg1: 0,
56
- payload: signature,
57
- };
58
- }
59
- };
60
-
61
- export const AdbPublicKeyAuthenticator: AdbAuthenticator = async function* (
62
- credentialStore: AdbCredentialStore,
63
- getNextRequest: () => Promise<AdbPacket>,
64
- ): AsyncIterable<AdbPacketInit> {
65
- const packet = await getNextRequest();
66
-
67
- if (packet.arg0 !== AdbAuthType.Token) {
68
- return;
69
- }
70
-
71
- let privateKey: ArrayBuffer | undefined;
72
- for await (const key of credentialStore.iterateKeys()) {
73
- privateKey = key;
74
- break;
75
- }
76
-
77
- if (!privateKey) {
78
- privateKey = await credentialStore.generateKey();
79
- }
80
-
81
- const publicKeyLength = calculatePublicKeyLength();
82
- const [publicKeyBase64Length] = calculateBase64EncodedLength(publicKeyLength);
83
-
84
- // The public key is null terminated,
85
- // So we allocate the buffer with one extra byte.
86
- const publicKeyBuffer = new ArrayBuffer(publicKeyBase64Length + 1);
87
-
88
- calculatePublicKey(privateKey, publicKeyBuffer);
89
- encodeBase64(publicKeyBuffer, 0, publicKeyLength, publicKeyBuffer);
90
-
91
- yield {
92
- command: AdbCommand.Auth,
93
- arg0: AdbAuthType.PublicKey,
94
- arg1: 0,
95
- payload: publicKeyBuffer
96
- };
97
- };
98
-
99
- export const AdbDefaultAuthenticators: AdbAuthenticator[] = [
100
- AdbSignatureAuthenticator,
101
- AdbPublicKeyAuthenticator
102
- ];
103
-
104
- export class AdbAuthenticationHandler implements Disposable {
105
- public readonly authenticators: readonly AdbAuthenticator[];
106
-
107
- private readonly credentialStore: AdbCredentialStore;
108
-
109
- private pendingRequest = new PromiseResolver<AdbPacket>();
110
-
111
- private iterator: AsyncIterator<AdbPacketInit> | undefined;
112
-
113
- public constructor(
114
- authenticators: readonly AdbAuthenticator[],
115
- credentialStore: AdbCredentialStore
116
- ) {
117
- this.authenticators = authenticators;
118
- this.credentialStore = credentialStore;
119
- }
120
-
121
- private getNextRequest = (): Promise<AdbPacket> => {
122
- return this.pendingRequest.promise;
123
- };
124
-
125
- private async* runAuthenticator(): AsyncGenerator<AdbPacketInit> {
126
- for (const authenticator of this.authenticators) {
127
- for await (const packet of authenticator(this.credentialStore, this.getNextRequest)) {
128
- // If the authenticator yielded a response
129
- // Prepare `nextRequest` for next authentication request
130
- this.pendingRequest = new PromiseResolver<AdbPacket>();
131
-
132
- // Yield the response to outer layer
133
- yield packet;
134
- }
135
-
136
- // If the authenticator returned,
137
- // Next authenticator will be given the same `pendingRequest`
138
- }
139
-
140
- throw new Error('Cannot authenticate with device');
141
- }
142
-
143
- public async handle(packet: AdbPacket): Promise<AdbPacketInit> {
144
- if (!this.iterator) {
145
- this.iterator = this.runAuthenticator();
146
- }
147
-
148
- this.pendingRequest.resolve(packet);
149
- const result = await this.iterator.next();
150
- return result.value;
151
- }
152
-
153
- public dispose() {
154
- this.iterator?.return?.();
155
- }
156
- }
1
+ import { PromiseResolver } from '@yume-chan/async';
2
+ import { Disposable } from '@yume-chan/event';
3
+ import { ValueOrPromise } from '@yume-chan/struct';
4
+ import { calculatePublicKey, calculatePublicKeyLength, sign } from './crypto';
5
+ import { AdbCommand, AdbPacket, AdbPacketInit } from './packet';
6
+ import { calculateBase64EncodedLength, encodeBase64 } from './utils';
7
+
8
+ export type AdbKeyIterable = Iterable<ArrayBuffer> | AsyncIterable<ArrayBuffer>;
9
+
10
+ export interface AdbCredentialStore {
11
+ /**
12
+ * Generate and store a RSA private key with modulus length `2048` and public exponent `65537`.
13
+ *
14
+ * The returned `ArrayBuffer` is the private key in PKCS #8 format.
15
+ */
16
+ generateKey(): ValueOrPromise<ArrayBuffer>;
17
+
18
+ /**
19
+ * Synchronously or asynchronously iterate through all stored RSA private keys.
20
+ *
21
+ * Each call to `iterateKeys` must return a different iterator that iterate through all stored keys.
22
+ */
23
+ iterateKeys(): AdbKeyIterable;
24
+ }
25
+
26
+ export enum AdbAuthType {
27
+ Token = 1,
28
+ Signature = 2,
29
+ PublicKey = 3,
30
+ }
31
+
32
+ export interface AdbAuthenticator {
33
+ /**
34
+ * @param getNextRequest
35
+ *
36
+ * Call this function to get the next authentication request packet from device.
37
+ *
38
+ * After calling `getNextRequest`, authenticator can `yield` a packet as response, or `return` to indicate its incapability of handling the request.
39
+ *
40
+ * After `return`, the `AdbAuthenticatorHandler` will move on to next authenticator and never go back.
41
+ *
42
+ * Calling `getNextRequest` multiple times without `yield` or `return` will always return the same request.
43
+ */
44
+ (
45
+ credentialStore: AdbCredentialStore,
46
+ getNextRequest: () => Promise<AdbPacket>
47
+ ): AsyncIterable<AdbPacketInit>;
48
+ }
49
+
50
+ export const AdbSignatureAuthenticator: AdbAuthenticator = async function* (
51
+ credentialStore: AdbCredentialStore,
52
+ getNextRequest: () => Promise<AdbPacket>,
53
+ ): AsyncIterable<AdbPacketInit> {
54
+ for await (const key of credentialStore.iterateKeys()) {
55
+ const packet = await getNextRequest();
56
+
57
+ if (packet.arg0 !== AdbAuthType.Token) {
58
+ return;
59
+ }
60
+
61
+ const signature = sign(key, packet.payload!);
62
+ yield {
63
+ command: AdbCommand.Auth,
64
+ arg0: AdbAuthType.Signature,
65
+ arg1: 0,
66
+ payload: signature,
67
+ };
68
+ }
69
+ };
70
+
71
+ export const AdbPublicKeyAuthenticator: AdbAuthenticator = async function* (
72
+ credentialStore: AdbCredentialStore,
73
+ getNextRequest: () => Promise<AdbPacket>,
74
+ ): AsyncIterable<AdbPacketInit> {
75
+ const packet = await getNextRequest();
76
+
77
+ if (packet.arg0 !== AdbAuthType.Token) {
78
+ return;
79
+ }
80
+
81
+ let privateKey: ArrayBuffer | undefined;
82
+ for await (const key of credentialStore.iterateKeys()) {
83
+ privateKey = key;
84
+ break;
85
+ }
86
+
87
+ if (!privateKey) {
88
+ privateKey = await credentialStore.generateKey();
89
+ }
90
+
91
+ const publicKeyLength = calculatePublicKeyLength();
92
+ const [publicKeyBase64Length] = calculateBase64EncodedLength(publicKeyLength);
93
+
94
+ // The public key is null terminated,
95
+ // So we allocate the buffer with one extra byte.
96
+ const publicKeyBuffer = new ArrayBuffer(publicKeyBase64Length + 1);
97
+
98
+ calculatePublicKey(privateKey, publicKeyBuffer);
99
+ encodeBase64(publicKeyBuffer, 0, publicKeyLength, publicKeyBuffer);
100
+
101
+ yield {
102
+ command: AdbCommand.Auth,
103
+ arg0: AdbAuthType.PublicKey,
104
+ arg1: 0,
105
+ payload: publicKeyBuffer,
106
+ };
107
+ };
108
+
109
+ export const AdbDefaultAuthenticators: AdbAuthenticator[] = [
110
+ AdbSignatureAuthenticator,
111
+ AdbPublicKeyAuthenticator,
112
+ ];
113
+
114
+ export class AdbAuthenticationHandler implements Disposable {
115
+ public readonly authenticators: readonly AdbAuthenticator[];
116
+
117
+ private readonly credentialStore: AdbCredentialStore;
118
+
119
+ private pendingRequest = new PromiseResolver<AdbPacket>();
120
+
121
+ private iterator: AsyncIterator<AdbPacketInit> | undefined;
122
+
123
+ public constructor(
124
+ authenticators: readonly AdbAuthenticator[],
125
+ credentialStore: AdbCredentialStore
126
+ ) {
127
+ this.authenticators = authenticators;
128
+ this.credentialStore = credentialStore;
129
+ }
130
+
131
+ private getNextRequest = (): Promise<AdbPacket> => {
132
+ return this.pendingRequest.promise;
133
+ };
134
+
135
+ private async* runAuthenticator(): AsyncGenerator<AdbPacketInit> {
136
+ for (const authenticator of this.authenticators) {
137
+ for await (const packet of authenticator(this.credentialStore, this.getNextRequest)) {
138
+ // If the authenticator yielded a response
139
+ // Prepare `nextRequest` for next authentication request
140
+ this.pendingRequest = new PromiseResolver<AdbPacket>();
141
+
142
+ // Yield the response to outer layer
143
+ yield packet;
144
+ }
145
+
146
+ // If the authenticator returned,
147
+ // Next authenticator will be given the same `pendingRequest`
148
+ }
149
+
150
+ throw new Error('Cannot authenticate with device');
151
+ }
152
+
153
+ public async handle(packet: AdbPacket): Promise<AdbPacketInit> {
154
+ if (!this.iterator) {
155
+ this.iterator = this.runAuthenticator();
156
+ }
157
+
158
+ this.pendingRequest.resolve(packet);
159
+ const result = await this.iterator.next();
160
+ return result.value;
161
+ }
162
+
163
+ public dispose() {
164
+ this.iterator?.return?.();
165
+ }
166
+ }
package/src/backend.ts CHANGED
@@ -1,24 +1,20 @@
1
- import { Event } from '@yume-chan/event';
2
- import { ValueOrPromise } from '@yume-chan/struct';
3
-
4
- export interface AdbBackend {
5
- readonly serial: string;
6
-
7
- readonly name: string | undefined;
8
-
9
- readonly connected: boolean;
10
-
11
- readonly onDisconnected: Event<void>;
12
-
13
- connect?(): ValueOrPromise<void>;
14
-
15
- encodeUtf8(input: string): ArrayBuffer;
16
-
17
- decodeUtf8(buffer: ArrayBuffer): string;
18
-
19
- write(buffer: ArrayBuffer): ValueOrPromise<void>;
20
-
21
- read(length: number): ValueOrPromise<ArrayBuffer>;
22
-
23
- dispose(): ValueOrPromise<void>;
24
- }
1
+ import type { Event } from '@yume-chan/event';
2
+ import type { ValueOrPromise } from '@yume-chan/struct';
3
+
4
+ export interface AdbBackend {
5
+ readonly serial: string;
6
+
7
+ readonly name: string | undefined;
8
+
9
+ readonly connected: boolean;
10
+
11
+ readonly onDisconnected: Event<void>;
12
+
13
+ connect?(): ValueOrPromise<void>;
14
+
15
+ read(length: number): ValueOrPromise<ArrayBuffer>;
16
+
17
+ write(buffer: ArrayBuffer): ValueOrPromise<void>;
18
+
19
+ dispose(): ValueOrPromise<void>;
20
+ }
@@ -1,11 +1,11 @@
1
- import { AutoDisposable } from '@yume-chan/event';
2
- import { Adb } from '../adb';
3
-
4
- export class AdbCommandBase extends AutoDisposable {
5
- protected adb: Adb;
6
-
7
- public constructor(adb: Adb) {
8
- super();
9
- this.adb = adb;
10
- }
11
- }
1
+ import { AutoDisposable } from '@yume-chan/event';
2
+ import { Adb } from '../adb';
3
+
4
+ export class AdbCommandBase extends AutoDisposable {
5
+ protected adb: Adb;
6
+
7
+ public constructor(adb: Adb) {
8
+ super();
9
+ this.adb = adb;
10
+ }
11
+ }