@yume-chan/adb 0.0.22 → 0.0.24

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 (149) hide show
  1. package/CHANGELOG.json +51 -0
  2. package/CHANGELOG.md +24 -1
  3. package/LICENSE +1 -1
  4. package/esm/adb.d.ts +6 -3
  5. package/esm/adb.d.ts.map +1 -1
  6. package/esm/adb.js +11 -4
  7. package/esm/adb.js.map +1 -1
  8. package/esm/banner.d.ts.map +1 -1
  9. package/esm/banner.js +1 -0
  10. package/esm/banner.js.map +1 -1
  11. package/esm/commands/power.d.ts.map +1 -1
  12. package/esm/commands/power.js +6 -5
  13. package/esm/commands/power.js.map +1 -1
  14. package/esm/commands/reverse.d.ts.map +1 -1
  15. package/esm/commands/reverse.js +23 -11
  16. package/esm/commands/reverse.js.map +1 -1
  17. package/esm/commands/subprocess/command.js +3 -3
  18. package/esm/commands/subprocess/command.js.map +1 -1
  19. package/esm/commands/subprocess/protocols/none.d.ts +2 -2
  20. package/esm/commands/subprocess/protocols/none.d.ts.map +1 -1
  21. package/esm/commands/subprocess/protocols/shell.d.ts +3 -3
  22. package/esm/commands/subprocess/protocols/shell.d.ts.map +1 -1
  23. package/esm/commands/subprocess/protocols/shell.js +14 -69
  24. package/esm/commands/subprocess/protocols/shell.js.map +1 -1
  25. package/esm/commands/subprocess/protocols/types.d.ts +2 -2
  26. package/esm/commands/subprocess/protocols/types.d.ts.map +1 -1
  27. package/esm/commands/subprocess/utils.js +1 -1
  28. package/esm/commands/subprocess/utils.js.map +1 -1
  29. package/esm/commands/sync/list.d.ts +2 -5
  30. package/esm/commands/sync/list.d.ts.map +1 -1
  31. package/esm/commands/sync/list.js +2 -4
  32. package/esm/commands/sync/list.js.map +1 -1
  33. package/esm/commands/sync/pull.d.ts +1 -4
  34. package/esm/commands/sync/pull.d.ts.map +1 -1
  35. package/esm/commands/sync/pull.js +2 -2
  36. package/esm/commands/sync/pull.js.map +1 -1
  37. package/esm/commands/sync/push.d.ts +4 -7
  38. package/esm/commands/sync/push.d.ts.map +1 -1
  39. package/esm/commands/sync/push.js +3 -6
  40. package/esm/commands/sync/push.js.map +1 -1
  41. package/esm/commands/sync/request.d.ts +13 -18
  42. package/esm/commands/sync/request.d.ts.map +1 -1
  43. package/esm/commands/sync/request.js +23 -28
  44. package/esm/commands/sync/request.js.map +1 -1
  45. package/esm/commands/sync/response.d.ts +18 -12
  46. package/esm/commands/sync/response.d.ts.map +1 -1
  47. package/esm/commands/sync/response.js +39 -17
  48. package/esm/commands/sync/response.js.map +1 -1
  49. package/esm/commands/sync/socket.d.ts +2 -2
  50. package/esm/commands/sync/socket.d.ts.map +1 -1
  51. package/esm/commands/sync/socket.js +10 -5
  52. package/esm/commands/sync/socket.js.map +1 -1
  53. package/esm/commands/sync/stat.d.ts +0 -3
  54. package/esm/commands/sync/stat.d.ts.map +1 -1
  55. package/esm/commands/sync/stat.js +0 -2
  56. package/esm/commands/sync/stat.js.map +1 -1
  57. package/esm/commands/sync/sync.d.ts +4 -3
  58. package/esm/commands/sync/sync.d.ts.map +1 -1
  59. package/esm/commands/sync/sync.js +9 -7
  60. package/esm/commands/sync/sync.js.map +1 -1
  61. package/esm/commands/tcpip.js +1 -1
  62. package/esm/commands/tcpip.js.map +1 -1
  63. package/esm/daemon/auth.js +1 -1
  64. package/esm/daemon/auth.js.map +1 -1
  65. package/esm/daemon/crypto.d.ts +3 -2
  66. package/esm/daemon/crypto.d.ts.map +1 -1
  67. package/esm/daemon/crypto.js +56 -49
  68. package/esm/daemon/crypto.js.map +1 -1
  69. package/esm/daemon/dispatcher.d.ts +38 -6
  70. package/esm/daemon/dispatcher.d.ts.map +1 -1
  71. package/esm/daemon/dispatcher.js +86 -28
  72. package/esm/daemon/dispatcher.js.map +1 -1
  73. package/esm/daemon/packet.d.ts +2 -2
  74. package/esm/daemon/packet.d.ts.map +1 -1
  75. package/esm/daemon/packet.js +13 -12
  76. package/esm/daemon/packet.js.map +1 -1
  77. package/esm/daemon/socket.d.ts +11 -6
  78. package/esm/daemon/socket.d.ts.map +1 -1
  79. package/esm/daemon/socket.js +42 -12
  80. package/esm/daemon/socket.js.map +1 -1
  81. package/esm/daemon/transport.d.ts +75 -11
  82. package/esm/daemon/transport.d.ts.map +1 -1
  83. package/esm/daemon/transport.js +60 -33
  84. package/esm/daemon/transport.js.map +1 -1
  85. package/esm/features.d.ts +2 -1
  86. package/esm/features.d.ts.map +1 -1
  87. package/esm/features.js +2 -1
  88. package/esm/features.js.map +1 -1
  89. package/esm/server/client.d.ts +128 -48
  90. package/esm/server/client.d.ts.map +1 -1
  91. package/esm/server/client.js +378 -145
  92. package/esm/server/client.js.map +1 -1
  93. package/esm/server/transport.d.ts +3 -0
  94. package/esm/server/transport.d.ts.map +1 -1
  95. package/esm/server/transport.js +30 -4
  96. package/esm/server/transport.js.map +1 -1
  97. package/esm/utils/base64.d.ts.map +1 -1
  98. package/esm/utils/base64.js +33 -22
  99. package/esm/utils/base64.js.map +1 -1
  100. package/esm/utils/hex.d.ts +1 -1
  101. package/esm/utils/hex.d.ts.map +1 -1
  102. package/esm/utils/hex.js +12 -14
  103. package/esm/utils/hex.js.map +1 -1
  104. package/esm/utils/index.d.ts +1 -1
  105. package/esm/utils/index.d.ts.map +1 -1
  106. package/esm/utils/index.js +1 -1
  107. package/esm/utils/index.js.map +1 -1
  108. package/esm/utils/sequence-equal.d.ts +2 -0
  109. package/esm/utils/sequence-equal.d.ts.map +1 -0
  110. package/esm/utils/sequence-equal.js +12 -0
  111. package/esm/utils/sequence-equal.js.map +1 -0
  112. package/package.json +13 -15
  113. package/src/adb.ts +22 -6
  114. package/src/banner.ts +1 -0
  115. package/src/commands/power.ts +7 -5
  116. package/src/commands/reverse.ts +31 -18
  117. package/src/commands/subprocess/command.ts +3 -3
  118. package/src/commands/subprocess/protocols/none.ts +2 -2
  119. package/src/commands/subprocess/protocols/shell.ts +21 -100
  120. package/src/commands/subprocess/protocols/types.ts +2 -2
  121. package/src/commands/subprocess/utils.ts +1 -1
  122. package/src/commands/sync/list.ts +2 -4
  123. package/src/commands/sync/pull.ts +2 -2
  124. package/src/commands/sync/push.ts +7 -10
  125. package/src/commands/sync/request.ts +32 -32
  126. package/src/commands/sync/response.ts +47 -20
  127. package/src/commands/sync/socket.ts +13 -8
  128. package/src/commands/sync/stat.ts +0 -2
  129. package/src/commands/sync/sync.ts +13 -9
  130. package/src/commands/tcpip.ts +1 -1
  131. package/src/daemon/auth.ts +1 -1
  132. package/src/daemon/crypto.ts +64 -55
  133. package/src/daemon/dispatcher.ts +175 -37
  134. package/src/daemon/packet.ts +21 -14
  135. package/src/daemon/socket.ts +62 -28
  136. package/src/daemon/transport.ts +145 -40
  137. package/src/features.ts +2 -1
  138. package/src/server/client.ts +472 -224
  139. package/src/server/transport.ts +32 -4
  140. package/src/utils/base64.ts +33 -22
  141. package/src/utils/hex.ts +16 -14
  142. package/src/utils/index.ts +1 -1
  143. package/src/utils/sequence-equal.ts +13 -0
  144. package/tsconfig.build.tsbuildinfo +1 -1
  145. package/esm/utils/conditional-variable.d.ts +0 -8
  146. package/esm/utils/conditional-variable.d.ts.map +0 -1
  147. package/esm/utils/conditional-variable.js +0 -34
  148. package/esm/utils/conditional-variable.js.map +0 -1
  149. package/src/utils/conditional-variable.ts +0 -45
@@ -1,7 +1,7 @@
1
1
  import { AsyncOperationManager, PromiseResolver, delay, } from "@yume-chan/async";
2
- import { AbortController, ConsumableWritableStream, WritableStream, } from "@yume-chan/stream-extra";
3
- import { EMPTY_UINT8_ARRAY } from "@yume-chan/struct";
4
- import { decodeUtf8, encodeUtf8 } from "../utils/index.js";
2
+ import { getUint32LittleEndian, setUint32LittleEndian, } from "@yume-chan/no-data-view";
3
+ import { AbortController, Consumable, WritableStream, } from "@yume-chan/stream-extra";
4
+ import { EMPTY_UINT8_ARRAY, decodeUtf8, encodeUtf8 } from "@yume-chan/struct";
5
5
  import { AdbCommand, calculateChecksum } from "./packet.js";
6
6
  import { AdbDaemonSocketController } from "./socket.js";
7
7
  /**
@@ -33,6 +33,10 @@ export class AdbPacketDispatcher {
33
33
  #readAbortController = new AbortController();
34
34
  constructor(connection, options) {
35
35
  this.options = options;
36
+ // Don't allow negative values in dispatcher
37
+ if (this.options.initialDelayedAckBytes < 0) {
38
+ this.options.initialDelayedAckBytes = 0;
39
+ }
36
40
  connection.readable
37
41
  .pipeTo(new WritableStream({
38
42
  write: async (packet) => {
@@ -101,33 +105,80 @@ export class AdbPacketDispatcher {
101
105
  // the device may also respond with two `CLSE` packets.
102
106
  }
103
107
  #handleOkay(packet) {
104
- if (this.#initializers.resolve(packet.arg1, packet.arg0)) {
108
+ let ackBytes;
109
+ if (this.options.initialDelayedAckBytes !== 0) {
110
+ if (packet.payload.length !== 4) {
111
+ throw new Error("Invalid OKAY packet. Payload size should be 4");
112
+ }
113
+ ackBytes = getUint32LittleEndian(packet.payload, 0);
114
+ }
115
+ else {
116
+ if (packet.payload.length !== 0) {
117
+ throw new Error("Invalid OKAY packet. Payload size should be 0");
118
+ }
119
+ ackBytes = Infinity;
120
+ }
121
+ if (this.#initializers.resolve(packet.arg1, {
122
+ remoteId: packet.arg0,
123
+ availableWriteBytes: ackBytes,
124
+ })) {
105
125
  // Device successfully created the socket
106
126
  return;
107
127
  }
108
128
  const socket = this.#sockets.get(packet.arg1);
109
129
  if (socket) {
110
- // Device has received last `WRTE` to the socket
111
- socket.ack();
130
+ // When delayed ack is enabled, `ackBytes` is a positive number represents
131
+ // how many bytes the device has received from this socket.
132
+ // When delayed ack is disabled, `ackBytes` is always `Infinity` represents
133
+ // the device has received last `WRTE` packet from the socket.
134
+ socket.ack(ackBytes);
112
135
  return;
113
136
  }
114
137
  // Maybe the device is responding to a packet of last connection
115
138
  // Tell the device to close the socket
116
- void this.sendPacket(AdbCommand.Close, packet.arg1, packet.arg0);
139
+ void this.sendPacket(AdbCommand.Close, packet.arg1, packet.arg0, EMPTY_UINT8_ARRAY);
140
+ }
141
+ #sendOkay(localId, remoteId, ackBytes) {
142
+ let payload;
143
+ if (this.options.initialDelayedAckBytes !== 0) {
144
+ // TODO: try reusing this buffer to reduce memory allocation
145
+ // However, that requires blocking reentrance of `sendOkay`, which might be more expensive
146
+ payload = new Uint8Array(4);
147
+ setUint32LittleEndian(payload, 0, ackBytes);
148
+ }
149
+ else {
150
+ payload = EMPTY_UINT8_ARRAY;
151
+ }
152
+ return this.sendPacket(AdbCommand.Okay, localId, remoteId, payload);
117
153
  }
118
154
  async #handleOpen(packet) {
119
- // `AsyncOperationManager` doesn't support skipping IDs
120
- // Use `add` + `resolve` to simulate this behavior
155
+ // Allocate a local ID for the socket from `#initializers`.
156
+ // `AsyncOperationManager` doesn't directly support returning the next ID,
157
+ // so use `add` + `resolve` to simulate this
121
158
  const [localId] = this.#initializers.add();
122
159
  this.#initializers.resolve(localId, undefined);
123
160
  const remoteId = packet.arg0;
161
+ let availableWriteBytes = packet.arg1;
124
162
  let service = decodeUtf8(packet.payload);
163
+ // ADB Daemon still adds a null character to the service string
125
164
  if (service.endsWith("\0")) {
126
165
  service = service.substring(0, service.length - 1);
127
166
  }
167
+ // Check remote delayed ack enablement is consistent with local
168
+ if (this.options.initialDelayedAckBytes === 0) {
169
+ if (availableWriteBytes !== 0) {
170
+ throw new Error("Invalid OPEN packet. arg1 should be 0");
171
+ }
172
+ availableWriteBytes = Infinity;
173
+ }
174
+ else {
175
+ if (availableWriteBytes === 0) {
176
+ throw new Error("Invalid OPEN packet. arg1 should be greater than 0");
177
+ }
178
+ }
128
179
  const handler = this.#incomingSocketHandlers.get(service);
129
180
  if (!handler) {
130
- await this.sendPacket(AdbCommand.Close, 0, remoteId);
181
+ await this.sendPacket(AdbCommand.Close, 0, remoteId, EMPTY_UINT8_ARRAY);
131
182
  return;
132
183
  }
133
184
  const controller = new AdbDaemonSocketController({
@@ -136,14 +187,15 @@ export class AdbPacketDispatcher {
136
187
  remoteId,
137
188
  localCreated: false,
138
189
  service,
190
+ availableWriteBytes,
139
191
  });
140
192
  try {
141
193
  await handler(controller.socket);
142
194
  this.#sockets.set(localId, controller);
143
- await this.sendPacket(AdbCommand.Okay, localId, remoteId);
195
+ await this.#sendOkay(localId, remoteId, this.options.initialDelayedAckBytes);
144
196
  }
145
197
  catch (e) {
146
- await this.sendPacket(AdbCommand.Close, 0, remoteId);
198
+ await this.sendPacket(AdbCommand.Close, 0, remoteId, EMPTY_UINT8_ARRAY);
147
199
  }
148
200
  }
149
201
  async #handleWrite(packet) {
@@ -152,34 +204,38 @@ export class AdbPacketDispatcher {
152
204
  throw new Error(`Unknown local socket id: ${packet.arg1}`);
153
205
  }
154
206
  let handled = false;
155
- await Promise.race([
156
- delay(5000).then(() => {
157
- if (this.options.debugSlowRead && !handled) {
158
- throw new Error(`packet for \`${socket.service}\` not handled in 5 seconds`);
159
- }
160
- }),
207
+ const promises = [
161
208
  (async () => {
162
209
  await socket.enqueue(packet.payload);
163
- await this.sendPacket(AdbCommand.Okay, packet.arg1, packet.arg0);
210
+ await this.#sendOkay(packet.arg1, packet.arg0, packet.payload.length);
164
211
  handled = true;
165
212
  })(),
166
- ]);
167
- return;
213
+ ];
214
+ if (this.options.readTimeLimit) {
215
+ promises.push((async () => {
216
+ await delay(this.options.readTimeLimit);
217
+ if (!handled) {
218
+ throw new Error(`readable of \`${socket.service}\` has stalled for ${this.options.readTimeLimit} milliseconds`);
219
+ }
220
+ })());
221
+ }
222
+ await Promise.race(promises);
168
223
  }
169
224
  async createSocket(service) {
170
225
  if (this.options.appendNullToServiceString) {
171
226
  service += "\0";
172
227
  }
173
228
  const [localId, initializer] = this.#initializers.add();
174
- await this.sendPacket(AdbCommand.Open, localId, 0, service);
175
- // Fulfilled by `handleOk`
176
- const remoteId = await initializer;
229
+ await this.sendPacket(AdbCommand.Open, localId, this.options.initialDelayedAckBytes, service);
230
+ // Fulfilled by `handleOkay`
231
+ const { remoteId, availableWriteBytes } = await initializer;
177
232
  const controller = new AdbDaemonSocketController({
178
233
  dispatcher: this,
179
234
  localId,
180
235
  remoteId,
181
236
  localCreated: true,
182
237
  service,
238
+ availableWriteBytes,
183
239
  });
184
240
  this.#sockets.set(localId, controller);
185
241
  return controller.socket;
@@ -193,14 +249,16 @@ export class AdbPacketDispatcher {
193
249
  clearReverseTunnels() {
194
250
  this.#incomingSocketHandlers.clear();
195
251
  }
196
- async sendPacket(command, arg0, arg1, payload = EMPTY_UINT8_ARRAY) {
252
+ async sendPacket(command, arg0, arg1,
253
+ // PERF: It's slightly faster to not use default parameter values
254
+ payload) {
197
255
  if (typeof payload === "string") {
198
256
  payload = encodeUtf8(payload);
199
257
  }
200
- if (payload.byteLength > this.options.maxPayloadSize) {
201
- throw new Error("payload too large");
258
+ if (payload.length > this.options.maxPayloadSize) {
259
+ throw new TypeError("payload too large");
202
260
  }
203
- await ConsumableWritableStream.write(this.#writer, {
261
+ await Consumable.WritableStream.write(this.#writer, {
204
262
  command,
205
263
  arg0,
206
264
  arg1,
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/daemon/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,qBAAqB,EACrB,eAAe,EACf,KAAK,GACR,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EACH,eAAe,EACf,wBAAwB,EACxB,cAAc,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAmBxD;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAmB;IAC5B,8BAA8B;IAC9B,wBAAwB;IACf,aAAa,GAAG,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACtD;;OAEG;IACM,QAAQ,GAAG,IAAI,GAAG,EAAqC,CAAC;IAEjE,OAAO,CAAyD;IAEvD,OAAO,CAA6B;IAE7C,OAAO,GAAG,KAAK,CAAC;IAChB,aAAa,GAAG,IAAI,eAAe,EAAQ,CAAC;IAC5C,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IACtC,CAAC;IAED,uBAAuB,GAAG,IAAI,GAAG,EAAoC,CAAC;IACtE,oBAAoB,GAAG,IAAI,eAAe,EAAE,CAAC;IAE7C,YACI,UAGC,EACD,OAAmC;QAEnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,UAAU,CAAC,QAAQ;aACd,MAAM,CACH,IAAI,cAAc,CAAC;YACf,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACpB,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;oBACrB,KAAK,UAAU,CAAC,KAAK;wBACjB,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;wBAChC,MAAM;oBACV,KAAK,UAAU,CAAC,IAAI;wBAChB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;wBACzB,MAAM;oBACV,KAAK,UAAU,CAAC,IAAI;wBAChB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;wBAC/B,MAAM;oBACV,KAAK,UAAU,CAAC,KAAK;wBACjB,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;wBAChC,MAAM;oBACV;wBACI,yDAAyD;wBACzD,wDAAwD;wBACxD,2CAA2C;wBAC3C,qEAAqE;wBACrE,MAAM,IAAI,KAAK,CACX,oBAAoB,MAAM,CAAC,OAAO,CAAC,QAAQ,CACvC,EAAE,CACL,EAAE,CACN,CAAC;gBACV,CAAC;YACL,CAAC;SACJ,CAAC,EACF;YACI,aAAa,EAAE,OAAO,CAAC,kBAAkB,IAAI,KAAK;YAClD,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM;SAC3C,CACJ;aACA,IAAI,CACD,GAAG,EAAE;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC,EACD,CAAC,CAAC,EAAE,EAAE;YACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAChB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC,CACJ,CAAC;QAEN,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAqB;QACpC,iCAAiC;QACjC,IACI,MAAM,CAAC,IAAI,KAAK,CAAC;YACjB,IAAI,CAAC,aAAa,CAAC,MAAM,CACrB,MAAM,CAAC,IAAI,EACX,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAClC,EACH,CAAC;YACC,qCAAqC;YACrC,4DAA4D;YAC5D,mCAAmC;YACnC,8CAA8C;YAC9C,6BAA6B;YAC7B,OAAO;QACX,CAAC;QAED,6HAA6H;QAC7H;;;;WAIG;QAEH,0CAA0C;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO;QACX,CAAC;QAED,+DAA+D;QAC/D,yDAAyD;QACzD,uDAAuD;IAC3D,CAAC;IAED,WAAW,CAAC,MAAqB;QAC7B,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,yCAAyC;YACzC,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACT,gDAAgD;YAChD,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,OAAO;QACX,CAAC;QAED,gEAAgE;QAChE,sCAAsC;QACtC,KAAK,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAqB;QACnC,uDAAuD;QACvD,kDAAkD;QAClD,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAU,CAAC;QACnD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE/C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;QAC7B,IAAI,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;YACrD,OAAO;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,yBAAyB,CAAC;YAC7C,UAAU,EAAE,IAAI;YAChB,OAAO;YACP,QAAQ;YACR,YAAY,EAAE,KAAK;YACnB,OAAO;SACV,CAAC,CAAC;QAEH,IAAI,CAAC;YACD,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACvC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAqB;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,OAAO,CAAC,IAAI,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBAClB,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,EAAE,CAAC;oBACzC,MAAM,IAAI,KAAK,CACX,gBAAgB,MAAM,CAAC,OAAO,6BAA6B,CAC9D,CAAC;gBACN,CAAC;YACL,CAAC,CAAC;YACF,CAAC,KAAK,IAAI,EAAE;gBACR,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrC,MAAM,IAAI,CAAC,UAAU,CACjB,UAAU,CAAC,IAAI,EACf,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,CACd,CAAC;gBACF,OAAO,GAAG,IAAI,CAAC;YACnB,CAAC,CAAC,EAAE;SACP,CAAC,CAAC;QAEH,OAAO;IACX,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe;QAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC;YACzC,OAAO,IAAI,IAAI,CAAC;QACpB,CAAC;QAED,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAU,CAAC;QAChE,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAE5D,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,yBAAyB,CAAC;YAC7C,UAAU,EAAE,IAAI;YAChB,OAAO;YACP,QAAQ;YACR,YAAY,EAAE,IAAI;YAClB,OAAO;SACV,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAEvC,OAAO,UAAU,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,gBAAgB,CAAC,OAAe,EAAE,OAAiC;QAC/D,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,mBAAmB,CAAC,OAAe;QAC/B,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,mBAAmB;QACf,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CACZ,OAAmB,EACnB,IAAY,EACZ,IAAY,EACZ,UAA+B,iBAAiB;QAEhD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;YAC/C,OAAO;YACP,IAAI;YACJ,IAAI;YACJ,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB;gBACpC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACP,KAAK,EAAE,OAAO,GAAG,UAAU;SAC9B,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,KAAK;QACP,sCAAsC;QACtC,MAAM,OAAO,CAAC,GAAG,CACb,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CACjE,CAAC;QAEF,iBAAiB;QACjB,qEAAqE;QACrE,iEAAiE;QACjE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;QAED,sCAAsC;IAC1C,CAAC;IAED,QAAQ;QACJ,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;CACJ"}
1
+ {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/daemon/dispatcher.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ConsumableTransformStream } from "@yume-chan/stream-extra";
1
+ import { Consumable, TransformStream } from "@yume-chan/stream-extra";
2
2
  import Struct from "@yume-chan/struct";
3
3
  export declare enum AdbCommand {
4
4
  Auth = 1213486401,// 'AUTH'
@@ -40,7 +40,7 @@ export type AdbPacket = (typeof AdbPacket)["TDeserializeResult"];
40
40
  export type AdbPacketData = Omit<(typeof AdbPacket)["TInit"], "checksum" | "magic">;
41
41
  export type AdbPacketInit = (typeof AdbPacket)["TInit"];
42
42
  export declare function calculateChecksum(payload: Uint8Array): number;
43
- export declare class AdbPacketSerializeStream extends ConsumableTransformStream<AdbPacketInit, Uint8Array> {
43
+ export declare class AdbPacketSerializeStream extends TransformStream<Consumable<AdbPacketInit>, Consumable<Uint8Array>> {
44
44
  constructor();
45
45
  }
46
46
  //# sourceMappingURL=packet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"packet.d.ts","sourceRoot":"","sources":["../../src/daemon/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,oBAAY,UAAU;IAClB,IAAI,aAAa,CAAE,SAAS;IAC5B,KAAK,aAAa,CAAE,SAAS;IAC7B,OAAO,aAAa,CAAE,SAAS;IAC/B,IAAI,aAAa,CAAE,SAAS;IAC5B,IAAI,aAAa,CAAE,SAAS;IAC5B,KAAK,aAAa;CACrB;AAED,eAAO,MAAM,eAAe;;;;;;;0CAMT,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAI7E,eAAO,MAAM,SAAS;;;;;;;;oDAEsC,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAC5B,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAC,EAC3B,UAAU,GAAG,OAAO,CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;AAExD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAE7D;AAED,qBAAa,wBAAyB,SAAQ,yBAAyB,CACnE,aAAa,EACb,UAAU,CACb;;CAoBA"}
1
+ {"version":3,"file":"packet.d.ts","sourceRoot":"","sources":["../../src/daemon/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,oBAAY,UAAU;IAClB,IAAI,aAAa,CAAE,SAAS;IAC5B,KAAK,aAAa,CAAE,SAAS;IAC7B,OAAO,aAAa,CAAE,SAAS;IAC/B,IAAI,aAAa,CAAE,SAAS;IAC5B,IAAI,aAAa,CAAE,SAAS;IAC5B,KAAK,aAAa;CACrB;AAED,eAAO,MAAM,eAAe;;;;;;;0CAMT,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAI7E,eAAO,MAAM,SAAS;;;;;;;;oDAEsC,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAC5B,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAC,EAC3B,UAAU,GAAG,OAAO,CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;AAExD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAE7D;AAED,qBAAa,wBAAyB,SAAQ,eAAe,CACzD,UAAU,CAAC,aAAa,CAAC,EACzB,UAAU,CAAC,UAAU,CAAC,CACzB;;CA2BA"}
@@ -1,4 +1,4 @@
1
- import { ConsumableTransformStream } from "@yume-chan/stream-extra";
1
+ import { Consumable, TransformStream } from "@yume-chan/stream-extra";
2
2
  import Struct from "@yume-chan/struct";
3
3
  export var AdbCommand;
4
4
  (function (AdbCommand) {
@@ -22,21 +22,22 @@ export const AdbPacket = new Struct({ littleEndian: true })
22
22
  export function calculateChecksum(payload) {
23
23
  return payload.reduce((result, item) => result + item, 0);
24
24
  }
25
- export class AdbPacketSerializeStream extends ConsumableTransformStream {
25
+ export class AdbPacketSerializeStream extends TransformStream {
26
26
  constructor() {
27
27
  const headerBuffer = new Uint8Array(AdbPacketHeader.size);
28
28
  super({
29
29
  transform: async (chunk, controller) => {
30
- const init = chunk;
31
- init.payloadLength = init.payload.byteLength;
32
- AdbPacketHeader.serialize(init, headerBuffer);
33
- await controller.enqueue(headerBuffer);
34
- if (init.payload.byteLength) {
35
- // USB protocol preserves packet boundaries,
36
- // so we must write payload separately as native ADB does,
37
- // otherwise the read operation on device will fail.
38
- await controller.enqueue(init.payload);
39
- }
30
+ await chunk.tryConsume(async (chunk) => {
31
+ const init = chunk;
32
+ init.payloadLength = init.payload.length;
33
+ await Consumable.ReadableStream.enqueue(controller, AdbPacketHeader.serialize(init, headerBuffer));
34
+ if (init.payloadLength) {
35
+ // USB protocol preserves packet boundaries,
36
+ // so we must write payload separately as native ADB does,
37
+ // otherwise the read operation on device will fail.
38
+ await Consumable.ReadableStream.enqueue(controller, init.payload);
39
+ }
40
+ });
40
41
  },
41
42
  });
42
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"packet.js","sourceRoot":"","sources":["../../src/daemon/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAN,IAAY,UAOX;AAPD,WAAY,UAAU;IAClB,oDAAiB,CAAA;IACjB,sDAAkB,CAAA;IAClB,0DAAoB,CAAA;IACpB,oDAAiB,CAAA;IACjB,oDAAiB,CAAA;IACjB,sDAAkB,CAAA;AACtB,CAAC,EAPW,UAAU,KAAV,UAAU,QAOrB;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC5D,MAAM,CAAC,SAAS,CAAC;KACjB,MAAM,CAAC,MAAM,CAAC;KACd,MAAM,CAAC,MAAM,CAAC;KACd,MAAM,CAAC,eAAe,CAAC;KACvB,MAAM,CAAC,UAAU,CAAC;KAClB,KAAK,CAAC,OAAO,CAAC,CAAC;AAMpB,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KACtD,MAAM,CAAC,eAAe,CAAC;KACvB,UAAU,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;AAqB7D,MAAM,UAAU,iBAAiB,CAAC,OAAmB;IACjD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,OAAO,wBAAyB,SAAQ,yBAG7C;IACG;QACI,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1D,KAAK,CAAC;YACF,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACnC,MAAM,IAAI,GAAG,KAA4C,CAAC;gBAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBAE7C,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAC9C,MAAM,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAEvC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;oBAC1B,4CAA4C;oBAC5C,0DAA0D;oBAC1D,oDAAoD;oBACpD,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3C,CAAC;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
1
+ {"version":3,"file":"packet.js","sourceRoot":"","sources":["../../src/daemon/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAN,IAAY,UAOX;AAPD,WAAY,UAAU;IAClB,oDAAiB,CAAA;IACjB,sDAAkB,CAAA;IAClB,0DAAoB,CAAA;IACpB,oDAAiB,CAAA;IACjB,oDAAiB,CAAA;IACjB,sDAAkB,CAAA;AACtB,CAAC,EAPW,UAAU,KAAV,UAAU,QAOrB;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC5D,MAAM,CAAC,SAAS,CAAC;KACjB,MAAM,CAAC,MAAM,CAAC;KACd,MAAM,CAAC,MAAM,CAAC;KACd,MAAM,CAAC,eAAe,CAAC;KACvB,MAAM,CAAC,UAAU,CAAC;KAClB,KAAK,CAAC,OAAO,CAAC,CAAC;AAMpB,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KACtD,MAAM,CAAC,eAAe,CAAC;KACvB,UAAU,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;AAqB7D,MAAM,UAAU,iBAAiB,CAAC,OAAmB;IACjD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,OAAO,wBAAyB,SAAQ,eAG7C;IACG;QACI,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1D,KAAK,CAAC;YACF,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACnC,MAAM,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;oBACnC,MAAM,IAAI,GAAG,KAA4C,CAAC;oBAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAEzC,MAAM,UAAU,CAAC,cAAc,CAAC,OAAO,CACnC,UAAU,EACV,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAChD,CAAC;oBAEF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,4CAA4C;wBAC5C,0DAA0D;wBAC1D,oDAAoD;wBACpD,MAAM,UAAU,CAAC,cAAc,CAAC,OAAO,CACnC,UAAU,EACV,IAAI,CAAC,OAAO,CACf,CAAC;oBACN,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -1,5 +1,6 @@
1
1
  import type { Disposable } from "@yume-chan/event";
2
- import type { Consumable, ReadableStream, WritableStream } from "@yume-chan/stream-extra";
2
+ import type { ReadableStream, WritableStream } from "@yume-chan/stream-extra";
3
+ import { MaybeConsumable } from "@yume-chan/stream-extra";
3
4
  import type { AdbSocket } from "../adb.js";
4
5
  import type { AdbPacketDispatcher } from "./dispatcher.js";
5
6
  export interface AdbDaemonSocketInfo {
@@ -8,9 +9,13 @@ export interface AdbDaemonSocketInfo {
8
9
  localCreated: boolean;
9
10
  service: string;
10
11
  }
11
- export interface AdbDaemonSocketConstructionOptions extends AdbDaemonSocketInfo {
12
+ export interface AdbDaemonSocketInit extends AdbDaemonSocketInfo {
12
13
  dispatcher: AdbPacketDispatcher;
13
14
  highWaterMark?: number | undefined;
15
+ /**
16
+ * The initial delayed ack byte count, or `Infinity` if delayed ack is disabled.
17
+ */
18
+ availableWriteBytes: number;
14
19
  }
15
20
  export declare class AdbDaemonSocketController implements AdbDaemonSocketInfo, AdbSocket, Disposable {
16
21
  #private;
@@ -19,12 +24,12 @@ export declare class AdbDaemonSocketController implements AdbDaemonSocketInfo, A
19
24
  readonly localCreated: boolean;
20
25
  readonly service: string;
21
26
  get readable(): ReadableStream<Uint8Array>;
22
- readonly writable: WritableStream<Consumable<Uint8Array>>;
27
+ readonly writable: WritableStream<MaybeConsumable<Uint8Array>>;
23
28
  get closed(): Promise<void>;
24
29
  get socket(): AdbDaemonSocket;
25
- constructor(options: AdbDaemonSocketConstructionOptions);
30
+ constructor(options: AdbDaemonSocketInit);
26
31
  enqueue(data: Uint8Array): Promise<void>;
27
- ack(): void;
32
+ ack(bytes: number): void;
28
33
  close(): Promise<void>;
29
34
  dispose(): void;
30
35
  }
@@ -43,7 +48,7 @@ export declare class AdbDaemonSocket implements AdbDaemonSocketInfo, AdbSocket {
43
48
  get localCreated(): boolean;
44
49
  get service(): string;
45
50
  get readable(): ReadableStream<Uint8Array>;
46
- get writable(): WritableStream<Consumable<Uint8Array>>;
51
+ get writable(): WritableStream<MaybeConsumable<Uint8Array>>;
47
52
  get closed(): Promise<void>;
48
53
  constructor(controller: AdbDaemonSocketController);
49
54
  close(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/daemon/socket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACR,UAAU,EAEV,cAAc,EACd,cAAc,EAEjB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kCACb,SAAQ,mBAAmB;IAC3B,UAAU,EAAE,mBAAmB,CAAC;IAEhC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,qBAAa,yBACT,YAAW,mBAAmB,EAAE,SAAS,EAAE,UAAU;;IAIrD,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAC;IAI1B,IAAI,QAAQ,+BAEX;IAID,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAK1D,IAAI,MAAM,kBAET;IAGD,IAAI,MAAM,oBAET;gBAEW,OAAO,EAAE,kCAAkC;IA0CjD,OAAO,CAAC,IAAI,EAAE,UAAU;IAiB9B,GAAG;IAIG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B,OAAO;CASV;AAED;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,mBAAmB,EAAE,SAAS;;IAGlE,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,QAAQ,IAAI,MAAM,CAErB;IACD,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,QAAQ,IAAI,cAAc,CAAC,UAAU,CAAC,CAEzC;IACD,IAAI,QAAQ,IAAI,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAErD;IAED,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;gBAEW,UAAU,EAAE,yBAAyB;IAIjD,KAAK;CAGR"}
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/daemon/socket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAER,cAAc,EACd,cAAc,EAEjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAG9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC5D,UAAU,EAAE,mBAAmB,CAAC;IAEhC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnC;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,yBACT,YAAW,mBAAmB,EAAE,SAAS,EAAE,UAAU;;IAIrD,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAC;IAI1B,IAAI,QAAQ,+BAEX;IAGD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IAK/D,IAAI,MAAM,kBAET;IAGD,IAAI,MAAM,oBAET;gBAaW,OAAO,EAAE,mBAAmB;IA8DlC,OAAO,CAAC,IAAI,EAAE,UAAU;IAiBvB,GAAG,CAAC,KAAK,EAAE,MAAM;IAKlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B,OAAO;CASV;AAED;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,mBAAmB,EAAE,SAAS;;IAGlE,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,QAAQ,IAAI,MAAM,CAErB;IACD,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,QAAQ,IAAI,cAAc,CAAC,UAAU,CAAC,CAEzC;IACD,IAAI,QAAQ,IAAI,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAE1D;IAED,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;gBAEW,UAAU,EAAE,yBAAyB;IAIjD,KAAK;CAGR"}
@@ -1,6 +1,6 @@
1
1
  import { PromiseResolver } from "@yume-chan/async";
2
- import { ConsumableWritableStream, PushReadableStream, } from "@yume-chan/stream-extra";
3
- import { raceSignal } from "../server/index.js";
2
+ import { MaybeConsumable, PushReadableStream } from "@yume-chan/stream-extra";
3
+ import { EMPTY_UINT8_ARRAY } from "@yume-chan/struct";
4
4
  import { AdbCommand } from "./packet.js";
5
5
  export class AdbDaemonSocketController {
6
6
  #dispatcher;
@@ -13,7 +13,6 @@ export class AdbDaemonSocketController {
13
13
  get readable() {
14
14
  return this.#readable;
15
15
  }
16
- #writePromise;
17
16
  #writableController;
18
17
  writable;
19
18
  #closed = false;
@@ -25,6 +24,16 @@ export class AdbDaemonSocketController {
25
24
  get socket() {
26
25
  return this.#socket;
27
26
  }
27
+ #availableWriteBytesChanged;
28
+ /**
29
+ * When delayed ack is disabled, returns `Infinity` if the socket is ready to write
30
+ * (exactly one packet can be written no matter how large it is), or `-1` if the socket
31
+ * is waiting for ack message.
32
+ *
33
+ * When delayed ack is enabled, returns a non-negative finite number indicates the number of
34
+ * bytes that can be written to the socket before waiting for ack message.
35
+ */
36
+ #availableWriteBytes = 0;
28
37
  constructor(options) {
29
38
  this.#dispatcher = options.dispatcher;
30
39
  this.localId = options.localId;
@@ -34,22 +43,41 @@ export class AdbDaemonSocketController {
34
43
  this.#readable = new PushReadableStream((controller) => {
35
44
  this.#readableController = controller;
36
45
  });
37
- this.writable = new ConsumableWritableStream({
46
+ this.writable = new MaybeConsumable.WritableStream({
38
47
  start: (controller) => {
39
48
  this.#writableController = controller;
49
+ controller.signal.addEventListener("abort", () => {
50
+ this.#availableWriteBytesChanged?.reject(controller.signal.reason);
51
+ });
40
52
  },
41
- write: async (data, controller) => {
53
+ write: async (data) => {
42
54
  const size = data.length;
43
55
  const chunkSize = this.#dispatcher.options.maxPayloadSize;
44
56
  for (let start = 0, end = chunkSize; start < size; start = end, end += chunkSize) {
45
- this.#writePromise = new PromiseResolver();
46
- await this.#dispatcher.sendPacket(AdbCommand.Write, this.localId, this.remoteId, data.subarray(start, end));
47
- // Wait for ack packet
48
- await raceSignal(() => this.#writePromise.promise, controller.signal);
57
+ const chunk = data.subarray(start, end);
58
+ await this.#writeChunk(chunk);
49
59
  }
50
60
  },
51
61
  });
52
62
  this.#socket = new AdbDaemonSocket(this);
63
+ this.#availableWriteBytes = options.availableWriteBytes;
64
+ }
65
+ async #writeChunk(data) {
66
+ const length = data.length;
67
+ while (this.#availableWriteBytes < length) {
68
+ // Only one lock is required because Web Streams API guarantees
69
+ // that `write` is not reentrant.
70
+ const resolver = new PromiseResolver();
71
+ this.#availableWriteBytesChanged = resolver;
72
+ await resolver.promise;
73
+ }
74
+ if (this.#availableWriteBytes === Infinity) {
75
+ this.#availableWriteBytes = -1;
76
+ }
77
+ else {
78
+ this.#availableWriteBytes -= length;
79
+ }
80
+ await this.#dispatcher.sendPacket(AdbCommand.Write, this.localId, this.remoteId, data);
53
81
  }
54
82
  async enqueue(data) {
55
83
  // Consumers can `cancel` the `readable` if they are not interested in future data.
@@ -67,21 +95,23 @@ export class AdbDaemonSocketController {
67
95
  throw e;
68
96
  }
69
97
  }
70
- ack() {
71
- this.#writePromise?.resolve();
98
+ ack(bytes) {
99
+ this.#availableWriteBytes += bytes;
100
+ this.#availableWriteBytesChanged?.resolve();
72
101
  }
73
102
  async close() {
74
103
  if (this.#closed) {
75
104
  return;
76
105
  }
77
106
  this.#closed = true;
107
+ this.#availableWriteBytesChanged?.reject(new Error("Socket closed"));
78
108
  try {
79
109
  this.#writableController.error(new Error("Socket closed"));
80
110
  }
81
111
  catch {
82
112
  // ignore
83
113
  }
84
- await this.#dispatcher.sendPacket(AdbCommand.Close, this.localId, this.remoteId);
114
+ await this.#dispatcher.sendPacket(AdbCommand.Close, this.localId, this.remoteId, EMPTY_UINT8_ARRAY);
85
115
  }
86
116
  dispose() {
87
117
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/daemon/socket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/daemon/socket.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,58 @@
1
- import type { Consumable, ReadableWritablePair } from "@yume-chan/stream-extra";
1
+ import type { ReadableWritablePair } from "@yume-chan/stream-extra";
2
+ import { Consumable } from "@yume-chan/stream-extra";
2
3
  import type { ValueOrPromise } from "@yume-chan/struct";
3
4
  import type { AdbIncomingSocketHandler, AdbSocket, AdbTransport } from "../adb.js";
4
5
  import { AdbBanner } from "../banner.js";
6
+ import { AdbFeature } from "../features.js";
5
7
  import type { AdbAuthenticator, AdbCredentialStore } from "./auth.js";
6
8
  import type { AdbPacketData, AdbPacketInit } from "./packet.js";
7
9
  export declare const ADB_DAEMON_VERSION_OMIT_CHECKSUM = 16777217;
10
+ export declare const ADB_DAEMON_DEFAULT_FEATURES: AdbFeature[];
11
+ export declare const ADB_DAEMON_DEFAULT_INITIAL_PAYLOAD_SIZE: number;
8
12
  export type AdbDaemonConnection = ReadableWritablePair<AdbPacketData, Consumable<AdbPacketInit>>;
9
- interface AdbDaemonAuthenticationOptions {
13
+ export interface AdbDaemonAuthenticationOptions {
10
14
  serial: string;
11
15
  connection: AdbDaemonConnection;
12
16
  credentialStore: AdbCredentialStore;
13
17
  authenticators?: AdbAuthenticator[];
18
+ features?: readonly AdbFeature[];
14
19
  /**
15
- * Whether to preserve the connection open after the `AdbDaemonTransport` is closed.
20
+ * The number of bytes the device can send before receiving an ack packet.
21
+ * Using delayed ack can improve the throughput,
22
+ * especially when the device is connected over Wi-Fi (so the latency is higher).
23
+ *
24
+ * Set to 0 or any negative value to disable delayed ack in handshake.
25
+ * Otherwise the value must be in the range of unsigned 32-bit integer.
26
+ *
27
+ * Delayed ack was added in Android 14,
28
+ * this option will be ignored when the device doesn't support it.
29
+ *
30
+ * @default ADB_DAEMON_DEFAULT_INITIAL_PAYLOAD_SIZE
31
+ */
32
+ initialDelayedAckBytes?: number;
33
+ /**
34
+ * Whether to keep the `connection` open (don't call `writable.close` and `readable.cancel`)
35
+ * when `AdbDaemonTransport.close` is called.
36
+ *
37
+ * Note that when `authenticate` fails,
38
+ * no matter which value this option has,
39
+ * the `connection` is always kept open, so it can be used in another `authenticate` call.
40
+ *
41
+ * @default false
16
42
  */
17
43
  preserveConnection?: boolean | undefined;
18
- debugSlowRead?: boolean | undefined;
44
+ /**
45
+ * When set, the transport will throw an error when
46
+ * one of the socket readable stalls for this amount of milliseconds.
47
+ *
48
+ * Because ADB is a multiplexed protocol, blocking one socket will also block all other sockets.
49
+ * It's important to always read from all sockets to prevent stalling.
50
+ *
51
+ * This option is helpful to detect bugs in the client code.
52
+ *
53
+ * @default undefined
54
+ */
55
+ readTimeLimit?: number | undefined;
19
56
  }
20
57
  interface AdbDaemonSocketConnectorConstructionOptions {
21
58
  serial: string;
@@ -23,11 +60,37 @@ interface AdbDaemonSocketConnectorConstructionOptions {
23
60
  version: number;
24
61
  maxPayloadSize: number;
25
62
  banner: string;
63
+ features?: readonly AdbFeature[];
26
64
  /**
27
- * Whether to preserve the connection open after the `AdbDaemonTransport` is closed.
65
+ * The number of bytes the device can send before receiving an ack packet.
66
+ * Using delayed ack can improve the throughput,
67
+ * especially when the device is connected over Wi-Fi (so the latency is higher).
68
+ *
69
+ * When `features` doesn't include `AdbFeature.DelayedAck`, it must be set to 0. Otherwise,
70
+ * the value must be in the range of unsigned 32-bit integer. If the device enabled
71
+ * delayed ack but the client didn't, the device will throw an error when the client sends
72
+ * the first data packet. And vice versa.
73
+ */
74
+ initialDelayedAckBytes: number;
75
+ /**
76
+ * Whether to keep the `connection` open (don't call `writable.close` and `readable.cancel`)
77
+ * when `AdbDaemonTransport.close` is called.
78
+ *
79
+ * @default false
28
80
  */
29
81
  preserveConnection?: boolean | undefined;
30
- debugSlowRead?: boolean | undefined;
82
+ /**
83
+ * When set, the transport will throw an error when
84
+ * one of the socket readable stalls for this amount of milliseconds.
85
+ *
86
+ * Because ADB is a multiplexed protocol, blocking one socket will also block all other sockets.
87
+ * It's important to always read from all sockets to prevent stalling.
88
+ *
89
+ * This option is helpful to detect bugs in the client code.
90
+ *
91
+ * @default undefined
92
+ */
93
+ readTimeLimit?: number | undefined;
31
94
  }
32
95
  export declare class AdbDaemonTransport implements AdbTransport {
33
96
  #private;
@@ -35,18 +98,19 @@ export declare class AdbDaemonTransport implements AdbTransport {
35
98
  * Authenticates the connection and creates an `AdbDaemonTransport` instance
36
99
  * that can be used by `Adb` class.
37
100
  *
38
- * If an authentication process failed, it's possible to call `authenticate` again
39
- * on the same connection. Because every time the device receives a `CNXN` packet,
40
- * it resets all internal state, and starts a new authentication process.
101
+ * If an authentication process failed,
102
+ * no matter which value the `preserveConnection` option has,
103
+ * the `connection` is always kept open, so it can be used in another `authenticate` call.
41
104
  */
42
- static authenticate({ serial, connection, credentialStore, authenticators, ...options }: AdbDaemonAuthenticationOptions): Promise<AdbDaemonTransport>;
105
+ static authenticate({ serial, connection, credentialStore, authenticators, features, initialDelayedAckBytes, ...options }: AdbDaemonAuthenticationOptions): Promise<AdbDaemonTransport>;
43
106
  get connection(): AdbDaemonConnection;
44
107
  get serial(): string;
45
108
  get protocolVersion(): number;
46
109
  get maxPayloadSize(): number;
47
110
  get banner(): AdbBanner;
48
111
  get disconnected(): Promise<void>;
49
- constructor({ serial, connection, version, banner, ...options }: AdbDaemonSocketConnectorConstructionOptions);
112
+ get clientFeatures(): readonly AdbFeature[];
113
+ constructor({ serial, connection, version, banner, features, initialDelayedAckBytes, ...options }: AdbDaemonSocketConnectorConstructionOptions);
50
114
  connect(service: string): ValueOrPromise<AdbSocket>;
51
115
  addReverseTunnel(handler: AdbIncomingSocketHandler, address?: string): string;
52
116
  removeReverseTunnel(address: string): void;