@yume-chan/adb 0.0.15 → 0.0.17

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 (196) hide show
  1. package/CHANGELOG.json +33 -0
  2. package/CHANGELOG.md +18 -1
  3. package/LICENSE +21 -21
  4. package/README.md +247 -247
  5. package/esm/adb.d.ts +15 -3
  6. package/esm/adb.d.ts.map +1 -1
  7. package/esm/adb.js +18 -6
  8. package/esm/adb.js.map +1 -1
  9. package/esm/auth.d.ts.map +1 -1
  10. package/esm/auth.js.map +1 -1
  11. package/esm/backend.d.ts +2 -2
  12. package/esm/backend.d.ts.map +1 -1
  13. package/esm/commands/base.d.ts.map +1 -1
  14. package/esm/commands/base.js.map +1 -1
  15. package/esm/commands/framebuffer.d.ts +17 -1
  16. package/esm/commands/framebuffer.d.ts.map +1 -1
  17. package/esm/commands/framebuffer.js +4 -15
  18. package/esm/commands/framebuffer.js.map +1 -1
  19. package/esm/commands/install.d.ts +2 -2
  20. package/esm/commands/install.d.ts.map +1 -1
  21. package/esm/commands/install.js +3 -2
  22. package/esm/commands/install.js.map +1 -1
  23. package/esm/commands/power.d.ts +1 -1
  24. package/esm/commands/power.js +1 -1
  25. package/esm/commands/reverse.d.ts +3 -3
  26. package/esm/commands/reverse.d.ts.map +1 -1
  27. package/esm/commands/reverse.js +9 -9
  28. package/esm/commands/reverse.js.map +1 -1
  29. package/esm/commands/subprocess/command.d.ts +52 -0
  30. package/esm/commands/subprocess/command.d.ts.map +1 -0
  31. package/esm/commands/subprocess/command.js +83 -0
  32. package/esm/commands/subprocess/command.js.map +1 -0
  33. package/esm/commands/subprocess/index.d.ts +1 -53
  34. package/esm/commands/subprocess/index.d.ts.map +1 -1
  35. package/esm/commands/subprocess/index.js +1 -85
  36. package/esm/commands/subprocess/index.js.map +1 -1
  37. package/esm/commands/subprocess/protocols/none.d.ts +5 -4
  38. package/esm/commands/subprocess/protocols/none.d.ts.map +1 -1
  39. package/esm/commands/subprocess/protocols/none.js +11 -8
  40. package/esm/commands/subprocess/protocols/none.js.map +1 -1
  41. package/esm/commands/subprocess/protocols/shell.d.ts +4 -4
  42. package/esm/commands/subprocess/protocols/shell.d.ts.map +1 -1
  43. package/esm/commands/subprocess/protocols/shell.js +6 -6
  44. package/esm/commands/subprocess/protocols/shell.js.map +1 -1
  45. package/esm/commands/subprocess/protocols/types.d.ts +7 -7
  46. package/esm/commands/subprocess/protocols/types.d.ts.map +1 -1
  47. package/esm/commands/sync/index.d.ts +1 -1
  48. package/esm/commands/sync/index.d.ts.map +1 -1
  49. package/esm/commands/sync/index.js +1 -1
  50. package/esm/commands/sync/index.js.map +1 -1
  51. package/esm/commands/sync/list.d.ts +2 -2
  52. package/esm/commands/sync/list.d.ts.map +1 -1
  53. package/esm/commands/sync/list.js +15 -43
  54. package/esm/commands/sync/list.js.map +1 -1
  55. package/esm/commands/sync/pull.d.ts +3 -2
  56. package/esm/commands/sync/pull.d.ts.map +1 -1
  57. package/esm/commands/sync/pull.js +15 -17
  58. package/esm/commands/sync/pull.js.map +1 -1
  59. package/esm/commands/sync/push.d.ts +2 -2
  60. package/esm/commands/sync/push.d.ts.map +1 -1
  61. package/esm/commands/sync/push.js +2 -5
  62. package/esm/commands/sync/push.js.map +1 -1
  63. package/esm/commands/sync/request.d.ts +1 -1
  64. package/esm/commands/sync/request.d.ts.map +1 -1
  65. package/esm/commands/sync/request.js +1 -1
  66. package/esm/commands/sync/request.js.map +1 -1
  67. package/esm/commands/sync/response.d.ts +4 -9
  68. package/esm/commands/sync/response.d.ts.map +1 -1
  69. package/esm/commands/sync/response.js +32 -23
  70. package/esm/commands/sync/response.js.map +1 -1
  71. package/esm/commands/sync/stat.d.ts +3 -3
  72. package/esm/commands/sync/stat.d.ts.map +1 -1
  73. package/esm/commands/sync/stat.js +13 -30
  74. package/esm/commands/sync/stat.js.map +1 -1
  75. package/esm/commands/sync/sync.d.ts +2 -2
  76. package/esm/commands/sync/sync.d.ts.map +1 -1
  77. package/esm/commands/sync/sync.js +7 -5
  78. package/esm/commands/sync/sync.js.map +1 -1
  79. package/esm/crypto.js +1 -1
  80. package/esm/crypto.js.map +1 -1
  81. package/esm/index.d.ts +0 -1
  82. package/esm/index.d.ts.map +1 -1
  83. package/esm/index.js +0 -1
  84. package/esm/index.js.map +1 -1
  85. package/esm/packet.d.ts +1 -1
  86. package/esm/packet.d.ts.map +1 -1
  87. package/esm/packet.js +1 -1
  88. package/esm/packet.js.map +1 -1
  89. package/esm/socket/dispatcher.d.ts +11 -3
  90. package/esm/socket/dispatcher.d.ts.map +1 -1
  91. package/esm/socket/dispatcher.js +19 -11
  92. package/esm/socket/dispatcher.js.map +1 -1
  93. package/esm/socket/index.d.ts +1 -1
  94. package/esm/socket/index.d.ts.map +1 -1
  95. package/esm/socket/index.js +1 -1
  96. package/esm/socket/index.js.map +1 -1
  97. package/esm/socket/socket.d.ts +9 -4
  98. package/esm/socket/socket.d.ts.map +1 -1
  99. package/esm/socket/socket.js +20 -10
  100. package/esm/socket/socket.js.map +1 -1
  101. package/esm/utils/base64.d.ts +23 -0
  102. package/esm/utils/base64.d.ts.map +1 -1
  103. package/esm/utils/base64.js +6 -0
  104. package/esm/utils/base64.js.map +1 -1
  105. package/package.json +13 -14
  106. package/src/adb.ts +285 -273
  107. package/src/auth.ts +174 -173
  108. package/src/backend.ts +12 -11
  109. package/src/commands/base.ts +12 -11
  110. package/src/commands/framebuffer.ts +78 -73
  111. package/src/commands/index.ts +8 -8
  112. package/src/commands/install.ts +32 -30
  113. package/src/commands/power.ts +54 -54
  114. package/src/commands/reverse.ts +141 -140
  115. package/src/commands/subprocess/command.ts +131 -0
  116. package/src/commands/subprocess/index.ts +3 -139
  117. package/src/commands/subprocess/protocols/none.ts +73 -68
  118. package/src/commands/subprocess/protocols/shell.ts +191 -190
  119. package/src/commands/subprocess/protocols/types.ts +60 -59
  120. package/src/commands/subprocess/utils.ts +20 -20
  121. package/src/commands/sync/index.ts +7 -7
  122. package/src/commands/sync/list.ts +54 -86
  123. package/src/commands/sync/pull.ts +45 -46
  124. package/src/commands/sync/push.ts +38 -41
  125. package/src/commands/sync/request.ts +51 -50
  126. package/src/commands/sync/response.ts +68 -64
  127. package/src/commands/sync/stat.ts +129 -150
  128. package/src/commands/sync/sync.ts +182 -181
  129. package/src/commands/tcpip.ts +21 -21
  130. package/src/crypto.ts +296 -296
  131. package/src/features.ts +9 -9
  132. package/src/index.ts +10 -11
  133. package/src/packet.ts +80 -80
  134. package/src/socket/dispatcher.ts +310 -304
  135. package/src/socket/index.ts +2 -2
  136. package/src/socket/socket.ts +156 -144
  137. package/src/utils/auto-reset-event.ts +41 -41
  138. package/src/utils/base64.ts +329 -306
  139. package/src/utils/index.ts +3 -3
  140. package/tsconfig.build.json +3 -3
  141. package/tsconfig.build.tsbuildinfo +1 -1
  142. package/esm/commands/subprocess/legacy.d.ts +0 -35
  143. package/esm/commands/subprocess/legacy.d.ts.map +0 -1
  144. package/esm/commands/subprocess/legacy.js +0 -53
  145. package/esm/commands/subprocess/legacy.js.map +0 -1
  146. package/esm/commands/subprocess/protocol.d.ts +0 -39
  147. package/esm/commands/subprocess/protocol.d.ts.map +0 -1
  148. package/esm/commands/subprocess/protocol.js +0 -157
  149. package/esm/commands/subprocess/protocol.js.map +0 -1
  150. package/esm/commands/subprocess/types.d.ts +0 -50
  151. package/esm/commands/subprocess/types.d.ts.map +0 -1
  152. package/esm/commands/subprocess/types.js +0 -2
  153. package/esm/commands/subprocess/types.js.map +0 -1
  154. package/esm/socket/controller.d.ts +0 -37
  155. package/esm/socket/controller.d.ts.map +0 -1
  156. package/esm/socket/controller.js +0 -66
  157. package/esm/socket/controller.js.map +0 -1
  158. package/esm/stream/buffered.d.ts +0 -35
  159. package/esm/stream/buffered.d.ts.map +0 -1
  160. package/esm/stream/buffered.js +0 -123
  161. package/esm/stream/buffered.js.map +0 -1
  162. package/esm/stream/detect.bak.d.ts +0 -240
  163. package/esm/stream/detect.bak.d.ts.map +0 -1
  164. package/esm/stream/detect.bak.js +0 -60
  165. package/esm/stream/detect.bak.js.map +0 -1
  166. package/esm/stream/detect.d.ts +0 -2
  167. package/esm/stream/detect.d.ts.map +0 -1
  168. package/esm/stream/detect.js +0 -5
  169. package/esm/stream/detect.js.map +0 -1
  170. package/esm/stream/detect.native.d.ts +0 -240
  171. package/esm/stream/detect.native.d.ts.map +0 -1
  172. package/esm/stream/detect.native.js +0 -60
  173. package/esm/stream/detect.native.js.map +0 -1
  174. package/esm/stream/detect.polyfill.d.ts +0 -18
  175. package/esm/stream/detect.polyfill.d.ts.map +0 -1
  176. package/esm/stream/detect.polyfill.js +0 -9
  177. package/esm/stream/detect.polyfill.js.map +0 -1
  178. package/esm/stream/index.d.ts +0 -4
  179. package/esm/stream/index.d.ts.map +0 -1
  180. package/esm/stream/index.js +0 -4
  181. package/esm/stream/index.js.map +0 -1
  182. package/esm/stream/transform.d.ts +0 -104
  183. package/esm/stream/transform.d.ts.map +0 -1
  184. package/esm/stream/transform.js +0 -373
  185. package/esm/stream/transform.js.map +0 -1
  186. package/esm/utils/encoding.d.ts +0 -3
  187. package/esm/utils/encoding.d.ts.map +0 -1
  188. package/esm/utils/encoding.js +0 -11
  189. package/esm/utils/encoding.js.map +0 -1
  190. package/src/stream/buffered.ts +0 -147
  191. package/src/stream/detect.native.ts +0 -362
  192. package/src/stream/detect.polyfill.ts +0 -28
  193. package/src/stream/detect.ts +0 -5
  194. package/src/stream/index.ts +0 -3
  195. package/src/stream/transform.ts +0 -447
  196. package/tsconfig.test.json +0 -10
@@ -1,181 +1,182 @@
1
- import { AutoDisposable } from '@yume-chan/event';
2
- import type { Adb } from '../../adb.js';
3
- import { AdbFeatures } from '../../features.js';
4
- import type { AdbSocket } from '../../socket/index.js';
5
- import { AdbBufferedStream, ReadableStream, WrapReadableStream, WrapWritableStream, WritableStream, WritableStreamDefaultWriter } from '../../stream/index.js';
6
- import { AutoResetEvent } from '../../utils/index.js';
7
- import { escapeArg } from "../index.js";
8
- import { adbSyncOpenDir, type AdbSyncEntry } from './list.js';
9
- import { adbSyncPull } from './pull.js';
10
- import { adbSyncPush } from './push.js';
11
- import { adbSyncLstat, adbSyncStat } from './stat.js';
12
-
13
- /**
14
- * A simplified `dirname` function that only handles absolute unix paths.
15
- * @param path an absolute unix path
16
- * @returns the directory name of the input path
17
- */
18
- export function dirname(path: string): string {
19
- const end = path.lastIndexOf('/');
20
- if (end === -1) {
21
- throw new Error(`Invalid path`);
22
- }
23
- if (end === 0) {
24
- return '/';
25
- }
26
- return path.substring(0, end);
27
- }
28
-
29
- export class AdbSync extends AutoDisposable {
30
- protected adb: Adb;
31
-
32
- protected stream: AdbBufferedStream;
33
-
34
- protected writer: WritableStreamDefaultWriter<Uint8Array>;
35
-
36
- protected sendLock = this.addDisposable(new AutoResetEvent());
37
-
38
- public get supportsStat(): boolean {
39
- return this.adb.features!.includes(AdbFeatures.StatV2);
40
- }
41
-
42
- public get supportsList2(): boolean {
43
- return this.adb.features!.includes(AdbFeatures.ListV2);
44
- }
45
-
46
- public get fixedPushMkdir(): boolean {
47
- return this.adb.features!.includes(AdbFeatures.FixedPushMkdir);
48
- }
49
-
50
- public get needPushMkdirWorkaround(): boolean {
51
- // https://android.googlesource.com/platform/packages/modules/adb/+/91768a57b7138166e0a3d11f79cd55909dda7014/client/file_sync_client.cpp#1361
52
- return this.adb.features!.includes(AdbFeatures.ShellV2) && !this.fixedPushMkdir;
53
- }
54
-
55
- public constructor(adb: Adb, socket: AdbSocket) {
56
- super();
57
-
58
- this.adb = adb;
59
- this.stream = new AdbBufferedStream(socket);
60
- this.writer = socket.writable.getWriter();
61
- }
62
-
63
- public async lstat(path: string) {
64
- await this.sendLock.wait();
65
-
66
- try {
67
- return adbSyncLstat(this.stream, this.writer, path, this.supportsStat);
68
- } finally {
69
- this.sendLock.notify();
70
- }
71
- }
72
-
73
- public async stat(path: string) {
74
- if (!this.supportsStat) {
75
- throw new Error('Not supported');
76
- }
77
-
78
- await this.sendLock.wait();
79
-
80
- try {
81
- return adbSyncStat(this.stream, this.writer, path);
82
- } finally {
83
- this.sendLock.notify();
84
- }
85
- }
86
-
87
- public async isDirectory(path: string): Promise<boolean> {
88
- try {
89
- await this.lstat(path + '/');
90
- return true;
91
- } catch (e) {
92
- return false;
93
- }
94
- }
95
-
96
- public async *opendir(
97
- path: string
98
- ): AsyncGenerator<AdbSyncEntry, void, void> {
99
- await this.sendLock.wait();
100
-
101
- try {
102
- yield* adbSyncOpenDir(this.stream, this.writer, path, this.supportsList2);
103
- } finally {
104
- this.sendLock.notify();
105
- }
106
- }
107
-
108
- public async readdir(path: string) {
109
- const results: AdbSyncEntry[] = [];
110
- for await (const entry of this.opendir(path)) {
111
- results.push(entry);
112
- }
113
- return results;
114
- }
115
-
116
- /**
117
- * Read the content of a file on device.
118
- *
119
- * @param filename The full path of the file on device to read.
120
- * @returns A `ReadableStream` that reads from the file.
121
- */
122
- public read(filename: string): ReadableStream<Uint8Array> {
123
- return new WrapReadableStream({
124
- start: async () => {
125
- await this.sendLock.wait();
126
- return adbSyncPull(this.stream, this.writer, filename);
127
- },
128
- close: async () => {
129
- this.sendLock.notify();
130
- },
131
- });
132
- }
133
-
134
- /**
135
- * Write (or overwrite) a file on device.
136
- *
137
- * @param filename The full path of the file on device to write.
138
- * @param mode The unix permissions of the file.
139
- * @param mtime The modified time of the file.
140
- * @returns A `WritableStream` that writes to the file.
141
- */
142
- public write(
143
- filename: string,
144
- mode?: number,
145
- mtime?: number,
146
- ): WritableStream<Uint8Array> {
147
- return new WrapWritableStream({
148
- start: async () => {
149
- await this.sendLock.wait();
150
-
151
- if (this.needPushMkdirWorkaround) {
152
- // It may fail if the path is already existed.
153
- // Ignore the result.
154
- // TODO: sync: test this
155
- await this.adb.subprocess.spawnAndWait([
156
- 'mkdir',
157
- '-p',
158
- escapeArg(dirname(filename)),
159
- ]);
160
- }
161
-
162
- return adbSyncPush(
163
- this.stream,
164
- this.writer,
165
- filename,
166
- mode,
167
- mtime,
168
- );
169
- },
170
- close: async () => {
171
- this.sendLock.notify();
172
- }
173
- });
174
- }
175
-
176
- public override async dispose() {
177
- super.dispose();
178
- await this.stream.close();
179
- await this.writer.close();
180
- }
181
- }
1
+ import { AutoDisposable } from '@yume-chan/event';
2
+ import { BufferedReadableStream, ReadableStream, WrapReadableStream, WrapWritableStream, WritableStream, WritableStreamDefaultWriter } from '@yume-chan/stream-extra';
3
+
4
+ import type { Adb } from '../../adb.js';
5
+ import { AdbFeatures } from '../../features.js';
6
+ import type { AdbSocket } from '../../socket/index.js';
7
+ import { AutoResetEvent } from '../../utils/index.js';
8
+ import { escapeArg } from '../subprocess/index.js';
9
+ import { adbSyncOpenDir, type AdbSyncEntry } from './list.js';
10
+ import { adbSyncPull } from './pull.js';
11
+ import { adbSyncPush } from './push.js';
12
+ import { adbSyncLstat, adbSyncStat } from './stat.js';
13
+
14
+ /**
15
+ * A simplified `dirname` function that only handles absolute unix paths.
16
+ * @param path an absolute unix path
17
+ * @returns the directory name of the input path
18
+ */
19
+ export function dirname(path: string): string {
20
+ const end = path.lastIndexOf('/');
21
+ if (end === -1) {
22
+ throw new Error(`Invalid path`);
23
+ }
24
+ if (end === 0) {
25
+ return '/';
26
+ }
27
+ return path.substring(0, end);
28
+ }
29
+
30
+ export class AdbSync extends AutoDisposable {
31
+ protected adb: Adb;
32
+
33
+ protected stream: BufferedReadableStream;
34
+ // Getting another writer on a locked WritableStream will throw.
35
+ // We don't want this behavior on higher-level APIs.
36
+ // So we acquire the writer early and use a blocking lock to guard it.
37
+ protected writer: WritableStreamDefaultWriter<Uint8Array>;
38
+ protected sendLock = this.addDisposable(new AutoResetEvent());
39
+
40
+ public get supportsStat(): boolean {
41
+ return this.adb.features.includes(AdbFeatures.StatV2);
42
+ }
43
+
44
+ public get supportsList2(): boolean {
45
+ return this.adb.features.includes(AdbFeatures.ListV2);
46
+ }
47
+
48
+ public get fixedPushMkdir(): boolean {
49
+ return this.adb.features.includes(AdbFeatures.FixedPushMkdir);
50
+ }
51
+
52
+ public get needPushMkdirWorkaround(): boolean {
53
+ // https://android.googlesource.com/platform/packages/modules/adb/+/91768a57b7138166e0a3d11f79cd55909dda7014/client/file_sync_client.cpp#1361
54
+ return this.adb.features.includes(AdbFeatures.ShellV2) && !this.fixedPushMkdir;
55
+ }
56
+
57
+ public constructor(adb: Adb, socket: AdbSocket) {
58
+ super();
59
+
60
+ this.adb = adb;
61
+ this.stream = new BufferedReadableStream(socket.readable);
62
+ this.writer = socket.writable.getWriter();
63
+ }
64
+
65
+ public async lstat(path: string) {
66
+ await this.sendLock.wait();
67
+
68
+ try {
69
+ return adbSyncLstat(this.stream, this.writer, path, this.supportsStat);
70
+ } finally {
71
+ this.sendLock.notify();
72
+ }
73
+ }
74
+
75
+ public async stat(path: string) {
76
+ if (!this.supportsStat) {
77
+ throw new Error('Not supported');
78
+ }
79
+
80
+ await this.sendLock.wait();
81
+
82
+ try {
83
+ return adbSyncStat(this.stream, this.writer, path);
84
+ } finally {
85
+ this.sendLock.notify();
86
+ }
87
+ }
88
+
89
+ public async isDirectory(path: string): Promise<boolean> {
90
+ try {
91
+ await this.lstat(path + '/');
92
+ return true;
93
+ } catch (e) {
94
+ return false;
95
+ }
96
+ }
97
+
98
+ public async *opendir(
99
+ path: string
100
+ ): AsyncGenerator<AdbSyncEntry, void, void> {
101
+ await this.sendLock.wait();
102
+
103
+ try {
104
+ yield* adbSyncOpenDir(this.stream, this.writer, path, this.supportsList2);
105
+ } finally {
106
+ this.sendLock.notify();
107
+ }
108
+ }
109
+
110
+ public async readdir(path: string) {
111
+ const results: AdbSyncEntry[] = [];
112
+ for await (const entry of this.opendir(path)) {
113
+ results.push(entry);
114
+ }
115
+ return results;
116
+ }
117
+
118
+ /**
119
+ * Read the content of a file on device.
120
+ *
121
+ * @param filename The full path of the file on device to read.
122
+ * @returns A `ReadableStream` that reads from the file.
123
+ */
124
+ public read(filename: string): ReadableStream<Uint8Array> {
125
+ return new WrapReadableStream({
126
+ start: async () => {
127
+ await this.sendLock.wait();
128
+ return adbSyncPull(this.stream, this.writer, filename);
129
+ },
130
+ close: async () => {
131
+ this.sendLock.notify();
132
+ },
133
+ });
134
+ }
135
+
136
+ /**
137
+ * Write (or overwrite) a file on device.
138
+ *
139
+ * @param filename The full path of the file on device to write.
140
+ * @param mode The unix permissions of the file.
141
+ * @param mtime The modified time of the file.
142
+ * @returns A `WritableStream` that writes to the file.
143
+ */
144
+ public write(
145
+ filename: string,
146
+ mode?: number,
147
+ mtime?: number,
148
+ ): WritableStream<Uint8Array> {
149
+ return new WrapWritableStream({
150
+ start: async () => {
151
+ await this.sendLock.wait();
152
+
153
+ if (this.needPushMkdirWorkaround) {
154
+ // It may fail if the path is already existed.
155
+ // Ignore the result.
156
+ // TODO: sync: test push mkdir workaround (need an Android 8 device)
157
+ await this.adb.subprocess.spawnAndWait([
158
+ 'mkdir',
159
+ '-p',
160
+ escapeArg(dirname(filename)),
161
+ ]);
162
+ }
163
+
164
+ return adbSyncPush(
165
+ this.stream,
166
+ this.writer,
167
+ filename,
168
+ mode,
169
+ mtime,
170
+ );
171
+ },
172
+ close: async () => {
173
+ this.sendLock.notify();
174
+ }
175
+ });
176
+ }
177
+
178
+ public override async dispose() {
179
+ super.dispose();
180
+ await this.writer.close();
181
+ }
182
+ }
@@ -1,21 +1,21 @@
1
- import { AdbCommandBase } from './base.js';
2
-
3
- export class AdbTcpIpCommand extends AdbCommandBase {
4
- public async setPort(port: number): Promise<void> {
5
- if (port <= 0) {
6
- throw new Error(`Invalid port ${port}`);
7
- }
8
-
9
- const output = await this.adb.createSocketAndWait(`tcpip:${port}`);
10
- if (output !== `restarting in TCP mode port: ${port}\n`) {
11
- throw new Error('Invalid response');
12
- }
13
- }
14
-
15
- public async disable(): Promise<void> {
16
- const output = await this.adb.createSocketAndWait('usb:');
17
- if (output !== 'restarting in USB mode\n') {
18
- throw new Error('Invalid response');
19
- }
20
- }
21
- }
1
+ import { AdbCommandBase } from './base.js';
2
+
3
+ export class AdbTcpIpCommand extends AdbCommandBase {
4
+ public async setPort(port: number): Promise<void> {
5
+ if (port <= 0) {
6
+ throw new Error(`Invalid port ${port}`);
7
+ }
8
+
9
+ const output = await this.adb.createSocketAndWait(`tcpip:${port}`);
10
+ if (output !== `restarting in TCP mode port: ${port}\n`) {
11
+ throw new Error('Invalid response');
12
+ }
13
+ }
14
+
15
+ public async disable(): Promise<void> {
16
+ const output = await this.adb.createSocketAndWait('usb:');
17
+ if (output !== 'restarting in USB mode\n') {
18
+ throw new Error('Invalid response');
19
+ }
20
+ }
21
+ }