@yume-chan/adb 0.0.18 → 0.0.20

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 (241) hide show
  1. package/CHANGELOG.json +54 -0
  2. package/CHANGELOG.md +25 -1
  3. package/README.md +220 -103
  4. package/esm/adb.d.ts +43 -60
  5. package/esm/adb.d.ts.map +1 -1
  6. package/esm/adb.js +68 -249
  7. package/esm/adb.js.map +1 -1
  8. package/esm/banner.d.ts +17 -0
  9. package/esm/banner.d.ts.map +1 -0
  10. package/esm/banner.js +67 -0
  11. package/esm/banner.js.map +1 -0
  12. package/esm/commands/base.d.ts +6 -6
  13. package/esm/commands/base.d.ts.map +1 -1
  14. package/esm/commands/base.js +8 -8
  15. package/esm/commands/framebuffer.d.ts +53 -53
  16. package/esm/commands/framebuffer.d.ts.map +1 -1
  17. package/esm/commands/framebuffer.js +46 -46
  18. package/esm/commands/framebuffer.js.map +1 -1
  19. package/esm/commands/index.d.ts +7 -8
  20. package/esm/commands/index.d.ts.map +1 -1
  21. package/esm/commands/index.js +7 -8
  22. package/esm/commands/index.js.map +1 -1
  23. package/esm/commands/power.d.ts +22 -22
  24. package/esm/commands/power.js +48 -48
  25. package/esm/commands/reverse.d.ts +40 -28
  26. package/esm/commands/reverse.d.ts.map +1 -1
  27. package/esm/commands/reverse.js +130 -100
  28. package/esm/commands/reverse.js.map +1 -1
  29. package/esm/commands/subprocess/command.d.ts +57 -51
  30. package/esm/commands/subprocess/command.d.ts.map +1 -1
  31. package/esm/commands/subprocess/command.js +86 -80
  32. package/esm/commands/subprocess/command.js.map +1 -1
  33. package/esm/commands/subprocess/index.d.ts +3 -3
  34. package/esm/commands/subprocess/index.js +3 -3
  35. package/esm/commands/subprocess/protocols/index.d.ts +3 -3
  36. package/esm/commands/subprocess/protocols/index.js +3 -3
  37. package/esm/commands/subprocess/protocols/none.d.ts +30 -35
  38. package/esm/commands/subprocess/protocols/none.d.ts.map +1 -1
  39. package/esm/commands/subprocess/protocols/none.js +65 -55
  40. package/esm/commands/subprocess/protocols/none.js.map +1 -1
  41. package/esm/commands/subprocess/protocols/shell.d.ts +33 -38
  42. package/esm/commands/subprocess/protocols/shell.d.ts.map +1 -1
  43. package/esm/commands/subprocess/protocols/shell.js +172 -162
  44. package/esm/commands/subprocess/protocols/shell.js.map +1 -1
  45. package/esm/commands/subprocess/protocols/types.d.ts +48 -49
  46. package/esm/commands/subprocess/protocols/types.d.ts.map +1 -1
  47. package/esm/commands/subprocess/protocols/types.js +1 -1
  48. package/esm/commands/subprocess/utils.d.ts +1 -1
  49. package/esm/commands/subprocess/utils.js +18 -18
  50. package/esm/commands/sync/index.d.ts +8 -7
  51. package/esm/commands/sync/index.d.ts.map +1 -1
  52. package/esm/commands/sync/index.js +8 -7
  53. package/esm/commands/sync/index.js.map +1 -1
  54. package/esm/commands/sync/list.d.ts +42 -40
  55. package/esm/commands/sync/list.d.ts.map +1 -1
  56. package/esm/commands/sync/list.js +67 -47
  57. package/esm/commands/sync/list.js.map +1 -1
  58. package/esm/commands/sync/pull.d.ts +13 -11
  59. package/esm/commands/sync/pull.d.ts.map +1 -1
  60. package/esm/commands/sync/pull.js +35 -37
  61. package/esm/commands/sync/pull.js.map +1 -1
  62. package/esm/commands/sync/push.d.ts +57 -7
  63. package/esm/commands/sync/push.d.ts.map +1 -1
  64. package/esm/commands/sync/push.js +89 -22
  65. package/esm/commands/sync/push.js.map +1 -1
  66. package/esm/commands/sync/request.d.ts +26 -23
  67. package/esm/commands/sync/request.d.ts.map +1 -1
  68. package/esm/commands/sync/request.js +40 -42
  69. package/esm/commands/sync/request.js.map +1 -1
  70. package/esm/commands/sync/response.d.ts +19 -19
  71. package/esm/commands/sync/response.d.ts.map +1 -1
  72. package/esm/commands/sync/response.js +54 -54
  73. package/esm/commands/sync/response.js.map +1 -1
  74. package/esm/commands/sync/socket.d.ts +22 -0
  75. package/esm/commands/sync/socket.d.ts.map +1 -0
  76. package/esm/commands/sync/socket.js +69 -0
  77. package/esm/commands/sync/socket.js.map +1 -0
  78. package/esm/commands/sync/stat.d.ts +72 -72
  79. package/esm/commands/sync/stat.d.ts.map +1 -1
  80. package/esm/commands/sync/stat.js +116 -104
  81. package/esm/commands/sync/stat.js.map +1 -1
  82. package/esm/commands/sync/sync.d.ts +65 -60
  83. package/esm/commands/sync/sync.d.ts.map +1 -1
  84. package/esm/commands/sync/sync.js +123 -149
  85. package/esm/commands/sync/sync.js.map +1 -1
  86. package/esm/commands/tcpip.d.ts +5 -5
  87. package/esm/commands/tcpip.d.ts.map +1 -1
  88. package/esm/commands/tcpip.js +20 -18
  89. package/esm/commands/tcpip.js.map +1 -1
  90. package/esm/{auth.d.ts → daemon/auth.d.ts} +50 -51
  91. package/esm/daemon/auth.d.ts.map +1 -0
  92. package/esm/{auth.js → daemon/auth.js} +95 -96
  93. package/esm/daemon/auth.js.map +1 -0
  94. package/esm/daemon/connection.d.ts +11 -0
  95. package/esm/daemon/connection.d.ts.map +1 -0
  96. package/esm/daemon/connection.js +2 -0
  97. package/esm/daemon/connection.js.map +1 -0
  98. package/esm/{crypto.d.ts → daemon/crypto.d.ts} +36 -36
  99. package/esm/daemon/crypto.d.ts.map +1 -0
  100. package/esm/{crypto.js → daemon/crypto.js} +244 -248
  101. package/esm/daemon/crypto.js.map +1 -0
  102. package/esm/daemon/device.d.ts +9 -0
  103. package/esm/daemon/device.d.ts.map +1 -0
  104. package/esm/daemon/device.js +2 -0
  105. package/esm/daemon/device.js.map +1 -0
  106. package/esm/daemon/dispatcher.d.ts +42 -0
  107. package/esm/daemon/dispatcher.d.ts.map +1 -0
  108. package/esm/{socket → daemon}/dispatcher.js +225 -234
  109. package/esm/daemon/dispatcher.js.map +1 -0
  110. package/esm/daemon/index.d.ts +8 -0
  111. package/esm/daemon/index.d.ts.map +1 -0
  112. package/esm/daemon/index.js +8 -0
  113. package/esm/daemon/index.js.map +1 -0
  114. package/esm/{packet.d.ts → daemon/packet.d.ts} +45 -46
  115. package/esm/daemon/packet.d.ts.map +1 -0
  116. package/esm/{packet.js → daemon/packet.js} +43 -48
  117. package/esm/daemon/packet.js.map +1 -0
  118. package/esm/daemon/socket.d.ts +58 -0
  119. package/esm/daemon/socket.d.ts.map +1 -0
  120. package/esm/{socket → daemon}/socket.js +121 -118
  121. package/esm/daemon/socket.js.map +1 -0
  122. package/esm/daemon/transport.d.ts +45 -0
  123. package/esm/daemon/transport.d.ts.map +1 -0
  124. package/esm/daemon/transport.js +184 -0
  125. package/esm/daemon/transport.js.map +1 -0
  126. package/esm/features.d.ts +10 -7
  127. package/esm/features.d.ts.map +1 -1
  128. package/esm/features.js +13 -10
  129. package/esm/features.js.map +1 -1
  130. package/esm/index.d.ts +7 -9
  131. package/esm/index.d.ts.map +1 -1
  132. package/esm/index.js +7 -9
  133. package/esm/index.js.map +1 -1
  134. package/esm/server/client.d.ts +78 -0
  135. package/esm/server/client.d.ts.map +1 -0
  136. package/esm/server/client.js +329 -0
  137. package/esm/server/client.js.map +1 -0
  138. package/esm/server/index.d.ts +3 -0
  139. package/esm/server/index.d.ts.map +1 -0
  140. package/esm/server/index.js +3 -0
  141. package/esm/server/index.js.map +1 -0
  142. package/esm/server/transport.d.ts +19 -0
  143. package/esm/server/transport.d.ts.map +1 -0
  144. package/esm/server/transport.js +44 -0
  145. package/esm/server/transport.js.map +1 -0
  146. package/esm/utils/auto-reset-event.d.ts +8 -9
  147. package/esm/utils/auto-reset-event.d.ts.map +1 -1
  148. package/esm/utils/auto-reset-event.js +33 -33
  149. package/esm/utils/auto-reset-event.js.map +1 -1
  150. package/esm/utils/base64.d.ts +27 -27
  151. package/esm/utils/base64.js +246 -246
  152. package/esm/utils/base64.js.map +1 -1
  153. package/esm/utils/conditional-variable.d.ts +8 -0
  154. package/esm/utils/conditional-variable.d.ts.map +1 -0
  155. package/esm/utils/conditional-variable.js +34 -0
  156. package/esm/utils/conditional-variable.js.map +1 -0
  157. package/esm/utils/hex.d.ts +3 -0
  158. package/esm/utils/hex.d.ts.map +1 -0
  159. package/esm/utils/hex.js +55 -0
  160. package/esm/utils/hex.js.map +1 -0
  161. package/esm/utils/index.d.ts +6 -3
  162. package/esm/utils/index.d.ts.map +1 -1
  163. package/esm/utils/index.js +6 -3
  164. package/esm/utils/index.js.map +1 -1
  165. package/esm/utils/no-op.d.ts +7 -0
  166. package/esm/utils/no-op.d.ts.map +1 -0
  167. package/esm/utils/no-op.js +12 -0
  168. package/esm/utils/no-op.js.map +1 -0
  169. package/package.json +14 -12
  170. package/src/adb.ts +47 -248
  171. package/src/banner.ts +82 -0
  172. package/src/commands/base.ts +1 -1
  173. package/src/commands/framebuffer.ts +4 -4
  174. package/src/commands/index.ts +7 -8
  175. package/src/commands/power.ts +2 -2
  176. package/src/commands/reverse.ts +90 -70
  177. package/src/commands/subprocess/command.ts +12 -4
  178. package/src/commands/subprocess/index.ts +3 -3
  179. package/src/commands/subprocess/protocols/index.ts +3 -3
  180. package/src/commands/subprocess/protocols/none.ts +36 -23
  181. package/src/commands/subprocess/protocols/shell.ts +94 -74
  182. package/src/commands/subprocess/protocols/types.ts +7 -7
  183. package/src/commands/subprocess/utils.ts +1 -1
  184. package/src/commands/sync/index.ts +8 -7
  185. package/src/commands/sync/list.ts +44 -25
  186. package/src/commands/sync/pull.ts +40 -45
  187. package/src/commands/sync/push.ts +158 -39
  188. package/src/commands/sync/request.ts +21 -16
  189. package/src/commands/sync/response.ts +10 -9
  190. package/src/commands/sync/socket.ts +99 -0
  191. package/src/commands/sync/stat.ts +47 -42
  192. package/src/commands/sync/sync.ts +73 -116
  193. package/src/commands/tcpip.ts +9 -7
  194. package/src/{auth.ts → daemon/auth.ts} +24 -23
  195. package/src/{crypto.ts → daemon/crypto.ts} +25 -33
  196. package/src/daemon/device.ts +14 -0
  197. package/src/{socket → daemon}/dispatcher.ts +95 -117
  198. package/src/daemon/index.ts +7 -0
  199. package/src/daemon/packet.ts +75 -0
  200. package/src/{socket → daemon}/socket.ts +71 -56
  201. package/src/daemon/transport.ts +269 -0
  202. package/src/features.ts +9 -6
  203. package/src/index.ts +3 -5
  204. package/src/server/client.ts +476 -0
  205. package/src/server/index.ts +2 -0
  206. package/src/server/transport.ts +77 -0
  207. package/src/utils/auto-reset-event.ts +14 -15
  208. package/src/utils/conditional-variable.ts +45 -0
  209. package/src/utils/hex.ts +58 -0
  210. package/src/utils/index.ts +6 -3
  211. package/src/utils/no-op.ts +12 -0
  212. package/tsconfig.build.json +12 -1
  213. package/tsconfig.build.tsbuildinfo +1 -1
  214. package/esm/auth.d.ts.map +0 -1
  215. package/esm/auth.js.map +0 -1
  216. package/esm/backend.d.ts +0 -9
  217. package/esm/backend.d.ts.map +0 -1
  218. package/esm/backend.js +0 -2
  219. package/esm/backend.js.map +0 -1
  220. package/esm/commands/install.d.ts +0 -4
  221. package/esm/commands/install.d.ts.map +0 -1
  222. package/esm/commands/install.js +0 -29
  223. package/esm/commands/install.js.map +0 -1
  224. package/esm/crypto.d.ts.map +0 -1
  225. package/esm/crypto.js.map +0 -1
  226. package/esm/packet.d.ts.map +0 -1
  227. package/esm/packet.js.map +0 -1
  228. package/esm/socket/dispatcher.d.ts +0 -60
  229. package/esm/socket/dispatcher.d.ts.map +0 -1
  230. package/esm/socket/dispatcher.js.map +0 -1
  231. package/esm/socket/index.d.ts +0 -3
  232. package/esm/socket/index.d.ts.map +0 -1
  233. package/esm/socket/index.js +0 -3
  234. package/esm/socket/index.js.map +0 -1
  235. package/esm/socket/socket.d.ts +0 -60
  236. package/esm/socket/socket.d.ts.map +0 -1
  237. package/esm/socket/socket.js.map +0 -1
  238. package/src/backend.ts +0 -14
  239. package/src/commands/install.ts +0 -40
  240. package/src/packet.ts +0 -90
  241. package/src/socket/index.ts +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/daemon/transport.ts"],"names":[],"mappings":"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"}
package/esm/features.d.ts CHANGED
@@ -1,8 +1,11 @@
1
- export declare enum AdbFeatures {
2
- ShellV2 = "shell_v2",
3
- Cmd = "cmd",
4
- StatV2 = "stat_v2",
5
- ListV2 = "ls_v2",
6
- FixedPushMkdir = "fixed_push_mkdir"
7
- }
1
+ export declare enum AdbFeature {
2
+ ShellV2 = "shell_v2",
3
+ Cmd = "cmd",
4
+ StatV2 = "stat_v2",
5
+ ListV2 = "ls_v2",
6
+ FixedPushMkdir = "fixed_push_mkdir",
7
+ Abb = "abb",
8
+ AbbExec = "abb_exec",
9
+ SendReceiveV2 = "sendrecv_v2"
10
+ }
8
11
  //# sourceMappingURL=features.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"AAEA,oBAAY,WAAW;IACnB,OAAO,aAAa;IACpB,GAAG,QAAQ;IACX,MAAM,YAAY;IAClB,MAAM,UAAU;IAChB,cAAc,qBAAqB;CACtC"}
1
+ {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"AAEA,oBAAY,UAAU;IAClB,OAAO,aAAa;IACpB,GAAG,QAAQ;IACX,MAAM,YAAY;IAClB,MAAM,UAAU;IAChB,cAAc,qBAAqB;IACnC,GAAG,QAAQ;IACX,OAAO,aAAa;IACpB,aAAa,gBAAgB;CAChC"}
package/esm/features.js CHANGED
@@ -1,11 +1,14 @@
1
- // The order follows
2
- // https://android.googlesource.com/platform/packages/modules/adb/+/79010dc6d5ca7490c493df800d4421730f5466ca/transport.cpp#1252
3
- export var AdbFeatures;
4
- (function (AdbFeatures) {
5
- AdbFeatures["ShellV2"] = "shell_v2";
6
- AdbFeatures["Cmd"] = "cmd";
7
- AdbFeatures["StatV2"] = "stat_v2";
8
- AdbFeatures["ListV2"] = "ls_v2";
9
- AdbFeatures["FixedPushMkdir"] = "fixed_push_mkdir";
10
- })(AdbFeatures = AdbFeatures || (AdbFeatures = {}));
1
+ // The order follows
2
+ // https://android.googlesource.com/platform/packages/modules/adb/+/79010dc6d5ca7490c493df800d4421730f5466ca/transport.cpp#1252
3
+ export var AdbFeature;
4
+ (function (AdbFeature) {
5
+ AdbFeature["ShellV2"] = "shell_v2";
6
+ AdbFeature["Cmd"] = "cmd";
7
+ AdbFeature["StatV2"] = "stat_v2";
8
+ AdbFeature["ListV2"] = "ls_v2";
9
+ AdbFeature["FixedPushMkdir"] = "fixed_push_mkdir";
10
+ AdbFeature["Abb"] = "abb";
11
+ AdbFeature["AbbExec"] = "abb_exec";
12
+ AdbFeature["SendReceiveV2"] = "sendrecv_v2";
13
+ })(AdbFeature = AdbFeature || (AdbFeature = {}));
11
14
  //# sourceMappingURL=features.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+HAA+H;AAC/H,MAAM,CAAN,IAAY,WAMX;AAND,WAAY,WAAW;IACnB,mCAAoB,CAAA;IACpB,0BAAW,CAAA;IACX,iCAAkB,CAAA;IAClB,+BAAgB,CAAA;IAChB,kDAAmC,CAAA;AACvC,CAAC,EANW,WAAW,GAAX,WAAW,KAAX,WAAW,QAMtB"}
1
+ {"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+HAA+H;AAC/H,MAAM,CAAN,IAAY,UASX;AATD,WAAY,UAAU;IAClB,kCAAoB,CAAA;IACpB,yBAAW,CAAA;IACX,gCAAkB,CAAA;IAClB,8BAAgB,CAAA;IAChB,iDAAmC,CAAA;IACnC,yBAAW,CAAA;IACX,kCAAoB,CAAA;IACpB,2CAA6B,CAAA;AACjC,CAAC,EATW,UAAU,GAAV,UAAU,KAAV,UAAU,QASrB"}
package/esm/index.d.ts CHANGED
@@ -1,10 +1,8 @@
1
- export * from "./adb.js";
2
- export * from "./auth.js";
3
- export * from "./backend.js";
4
- export * from "./commands/index.js";
5
- export * from "./crypto.js";
6
- export * from "./features.js";
7
- export * from "./packet.js";
8
- export * from "./socket/index.js";
9
- export * from "./utils/index.js";
1
+ export * from "./adb.js";
2
+ export * from "./banner.js";
3
+ export * from "./commands/index.js";
4
+ export * from "./daemon/index.js";
5
+ export * from "./features.js";
6
+ export * from "./server/index.js";
7
+ export * from "./utils/index.js";
10
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
package/esm/index.js CHANGED
@@ -1,10 +1,8 @@
1
- export * from "./adb.js";
2
- export * from "./auth.js";
3
- export * from "./backend.js";
4
- export * from "./commands/index.js";
5
- export * from "./crypto.js";
6
- export * from "./features.js";
7
- export * from "./packet.js";
8
- export * from "./socket/index.js";
9
- export * from "./utils/index.js";
1
+ export * from "./adb.js";
2
+ export * from "./banner.js";
3
+ export * from "./commands/index.js";
4
+ export * from "./daemon/index.js";
5
+ export * from "./features.js";
6
+ export * from "./server/index.js";
7
+ export * from "./utils/index.js";
10
8
  //# 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,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,78 @@
1
+ import type { AbortSignal, ReadableWritablePair, WritableStreamDefaultWriter } from "@yume-chan/stream-extra";
2
+ import type { AsyncExactReadable, ExactReadable, ValueOrPromise } from "@yume-chan/struct";
3
+ import type { AdbIncomingSocketHandler, AdbSocket } from "../adb.js";
4
+ import type { AdbFeature } from "../features.js";
5
+ import { AdbServerTransport } from "./transport.js";
6
+ export interface AdbServerConnectionOptions {
7
+ unref?: boolean | undefined;
8
+ signal?: AbortSignal | undefined;
9
+ }
10
+ export interface AdbServerConnection {
11
+ connect(options?: AdbServerConnectionOptions): ValueOrPromise<ReadableWritablePair<Uint8Array, Uint8Array>>;
12
+ addReverseTunnel(handler: AdbIncomingSocketHandler, address?: string): ValueOrPromise<string>;
13
+ removeReverseTunnel(address: string): ValueOrPromise<void>;
14
+ clearReverseTunnels(): ValueOrPromise<void>;
15
+ }
16
+ export interface AdbServerSocket extends AdbSocket {
17
+ transportId: bigint;
18
+ }
19
+ export type AdbServerDeviceSelector = {
20
+ serial: string;
21
+ } | {
22
+ transportId: bigint;
23
+ } | {
24
+ usb: true;
25
+ } | {
26
+ tcp: true;
27
+ } | undefined;
28
+ export interface AdbServerDevice {
29
+ serial: string;
30
+ product?: string | undefined;
31
+ model?: string | undefined;
32
+ device?: string | undefined;
33
+ transportId: bigint;
34
+ }
35
+ export declare class AdbServerClient {
36
+ static readonly VERSION = 41;
37
+ readonly connection: AdbServerConnection;
38
+ constructor(connection: AdbServerConnection);
39
+ static readString(stream: ExactReadable): string;
40
+ static readString(stream: AsyncExactReadable): PromiseLike<string>;
41
+ static writeString(writer: WritableStreamDefaultWriter<Uint8Array>, value: string): Promise<void>;
42
+ static readOkay(stream: ExactReadable | AsyncExactReadable): Promise<void>;
43
+ connect(request: string, options?: AdbServerConnectionOptions): Promise<ReadableWritablePair<Uint8Array, Uint8Array>>;
44
+ getVersion(): Promise<number>;
45
+ validateVersion(): Promise<void>;
46
+ killServer(): Promise<void>;
47
+ getServerFeatures(): Promise<AdbFeature[]>;
48
+ getDevices(): Promise<AdbServerDevice[]>;
49
+ formatDeviceService(device: AdbServerDeviceSelector, command: string): string;
50
+ /**
51
+ * Gets the features supported by the device.
52
+ * The transport ID of the selected device is also returned,
53
+ * so the caller can execute other commands against the same device.
54
+ * @param device The device selector
55
+ * @returns The transport ID of the selected device, and the features supported by the device.
56
+ */
57
+ getDeviceFeatures(device: AdbServerDeviceSelector): Promise<{
58
+ transportId: bigint;
59
+ features: AdbFeature[];
60
+ }>;
61
+ /**
62
+ * Creates a connection that will forward the service to device.
63
+ * @param device The device selector
64
+ * @param service The service to forward
65
+ * @returns An `AdbServerSocket` that can be used to communicate with the service
66
+ */
67
+ connectDevice(device: AdbServerDeviceSelector, service: string): Promise<AdbServerSocket>;
68
+ /**
69
+ * Wait for a device to be connected or disconnected.
70
+ * @param device The device selector
71
+ * @param state The state to wait for
72
+ * @param options The options
73
+ * @returns A promise that resolves when the condition is met.
74
+ */
75
+ waitFor(device: AdbServerDeviceSelector, state: "device" | "disconnect", options?: AdbServerConnectionOptions): Promise<void>;
76
+ createTransport(device: AdbServerDeviceSelector): Promise<AdbServerTransport>;
77
+ }
78
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/server/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,329 @@
1
+ // cspell:ignore tport
2
+ import { PromiseResolver } from "@yume-chan/async";
3
+ import { BufferedReadableStream, DuplexStreamFactory, UnwrapConsumableStream, WrapWritableStream, } from "@yume-chan/stream-extra";
4
+ import { BigIntFieldType, SyncPromise, decodeUtf8, encodeUtf8, } from "@yume-chan/struct";
5
+ import { AdbBanner } from "../banner.js";
6
+ import { NOOP, hexToNumber, numberToHex } from "../utils/index.js";
7
+ import { AdbServerTransport } from "./transport.js";
8
+ class AdbServerClient {
9
+ static VERSION = 41;
10
+ connection;
11
+ constructor(connection) {
12
+ this.connection = connection;
13
+ }
14
+ static readString(stream) {
15
+ return SyncPromise.try(() => stream.readExactly(4))
16
+ .then((buffer) => {
17
+ const length = hexToNumber(buffer);
18
+ return stream.readExactly(length);
19
+ })
20
+ .then((valueBuffer) => {
21
+ return decodeUtf8(valueBuffer);
22
+ })
23
+ .valueOrPromise();
24
+ }
25
+ static async writeString(writer, value) {
26
+ const valueBuffer = encodeUtf8(value);
27
+ const buffer = new Uint8Array(4 + valueBuffer.length);
28
+ buffer.set(numberToHex(valueBuffer.length));
29
+ buffer.set(valueBuffer, 4);
30
+ await writer.write(buffer);
31
+ }
32
+ static async readOkay(stream) {
33
+ const response = decodeUtf8(await stream.readExactly(4));
34
+ if (response === "OKAY") {
35
+ return;
36
+ }
37
+ if (response === "FAIL") {
38
+ const reason = await AdbServerClient.readString(stream);
39
+ throw new Error(reason);
40
+ }
41
+ throw new Error(`Unexpected response: ${response}`);
42
+ }
43
+ async connect(request, options) {
44
+ const connection = await this.connection.connect(options);
45
+ const writer = connection.writable.getWriter();
46
+ await AdbServerClient.writeString(writer, request);
47
+ const readable = new BufferedReadableStream(connection.readable);
48
+ try {
49
+ // `raceSignal` throws if the signal is aborted,
50
+ // so the `catch` block can close the connection.
51
+ await raceSignal(() => AdbServerClient.readOkay(readable), options?.signal);
52
+ writer.releaseLock();
53
+ return {
54
+ readable: readable.release(),
55
+ writable: connection.writable,
56
+ };
57
+ }
58
+ catch (e) {
59
+ writer.close().catch(NOOP);
60
+ readable.cancel().catch(NOOP);
61
+ throw e;
62
+ }
63
+ }
64
+ async getVersion() {
65
+ const connection = await this.connect("host:version");
66
+ const readable = new BufferedReadableStream(connection.readable);
67
+ try {
68
+ const length = hexToNumber(await readable.readExactly(4));
69
+ const version = hexToNumber(await readable.readExactly(length));
70
+ return version;
71
+ }
72
+ finally {
73
+ connection.writable.close().catch(NOOP);
74
+ readable.cancel().catch(NOOP);
75
+ }
76
+ }
77
+ async validateVersion() {
78
+ const version = await this.getVersion();
79
+ if (version !== AdbServerClient.VERSION) {
80
+ throw new Error(`adb server version (${version}) doesn't match this client (${AdbServerClient.VERSION})`);
81
+ }
82
+ }
83
+ async killServer() {
84
+ const connection = await this.connect("host:kill");
85
+ connection.writable.close().catch(NOOP);
86
+ connection.readable.cancel().catch(NOOP);
87
+ }
88
+ async getServerFeatures() {
89
+ const connection = await this.connect("host:host-features");
90
+ const readable = new BufferedReadableStream(connection.readable);
91
+ try {
92
+ const response = await AdbServerClient.readString(readable);
93
+ return response.split(",");
94
+ }
95
+ finally {
96
+ connection.writable.close().catch(NOOP);
97
+ readable.cancel().catch(NOOP);
98
+ }
99
+ }
100
+ async getDevices() {
101
+ const connection = await this.connect("host:devices-l");
102
+ const readable = new BufferedReadableStream(connection.readable);
103
+ try {
104
+ const devices = [];
105
+ const response = await AdbServerClient.readString(readable);
106
+ for (const line of response.split("\n")) {
107
+ if (!line) {
108
+ continue;
109
+ }
110
+ const parts = line.split(" ").filter(Boolean);
111
+ const serial = parts[0];
112
+ const status = parts[1];
113
+ if (status !== "device") {
114
+ continue;
115
+ }
116
+ let product;
117
+ let model;
118
+ let device;
119
+ let transportId;
120
+ for (let i = 2; i < parts.length; i += 1) {
121
+ const [key, value] = parts[i].split(":");
122
+ switch (key) {
123
+ case "product":
124
+ product = value;
125
+ break;
126
+ case "model":
127
+ model = value;
128
+ break;
129
+ case "device":
130
+ device = value;
131
+ break;
132
+ case "transport_id":
133
+ transportId = BigInt(value);
134
+ break;
135
+ }
136
+ }
137
+ if (!transportId) {
138
+ throw new Error(`No transport id for device ${serial}`);
139
+ }
140
+ devices.push({
141
+ serial,
142
+ product,
143
+ model,
144
+ device,
145
+ transportId,
146
+ });
147
+ }
148
+ return devices;
149
+ }
150
+ finally {
151
+ connection.writable.close().catch(NOOP);
152
+ readable.cancel().catch(NOOP);
153
+ }
154
+ }
155
+ formatDeviceService(device, command) {
156
+ if (!device) {
157
+ return `host:${command}`;
158
+ }
159
+ if ("transportId" in device) {
160
+ return `host-transport-id:${device.transportId}:${command}`;
161
+ }
162
+ if ("serial" in device) {
163
+ return `host-serial:${device.serial}:${command}`;
164
+ }
165
+ if ("usb" in device) {
166
+ return `host-usb:${command}`;
167
+ }
168
+ if ("tcp" in device) {
169
+ return `host-local:${command}`;
170
+ }
171
+ throw new Error("Invalid device selector");
172
+ }
173
+ /**
174
+ * Gets the features supported by the device.
175
+ * The transport ID of the selected device is also returned,
176
+ * so the caller can execute other commands against the same device.
177
+ * @param device The device selector
178
+ * @returns The transport ID of the selected device, and the features supported by the device.
179
+ */
180
+ async getDeviceFeatures(device) {
181
+ // Usually the client sends a device command using `connectDevice`,
182
+ // so the command got forwarded and handled by ADB daemon.
183
+ // However, in fact, `connectDevice` only forwards unknown services to device,
184
+ // if the service is a host command, it will still be handled by ADB server.
185
+ // Also, if the command is about a device, but didn't specify a selector,
186
+ // it will be executed against the device selected previously by `connectDevice`.
187
+ // Using this method, we can get the transport ID and device features in one connection.
188
+ const socket = await this.connectDevice(device, "host:features");
189
+ try {
190
+ const readable = new BufferedReadableStream(socket.readable);
191
+ const featuresString = await AdbServerClient.readString(readable);
192
+ const features = featuresString.split(",");
193
+ return { transportId: socket.transportId, features };
194
+ }
195
+ finally {
196
+ await socket.close();
197
+ }
198
+ }
199
+ /**
200
+ * Creates a connection that will forward the service to device.
201
+ * @param device The device selector
202
+ * @param service The service to forward
203
+ * @returns An `AdbServerSocket` that can be used to communicate with the service
204
+ */
205
+ async connectDevice(device, service) {
206
+ await this.validateVersion();
207
+ let switchService;
208
+ let transportId;
209
+ if (!device) {
210
+ switchService = `host:tport:any`;
211
+ }
212
+ else if ("transportId" in device) {
213
+ switchService = `host:transport-id:${device.transportId}`;
214
+ transportId = device.transportId;
215
+ }
216
+ else if ("serial" in device) {
217
+ switchService = `host:tport:serial:${device.serial}`;
218
+ }
219
+ else if ("usb" in device) {
220
+ switchService = `host:tport:usb`;
221
+ }
222
+ else if ("tcp" in device) {
223
+ switchService = `host:tport:local`;
224
+ }
225
+ else {
226
+ throw new Error("Invalid device selector");
227
+ }
228
+ const connection = await this.connect(switchService);
229
+ const readable = new BufferedReadableStream(connection.readable);
230
+ const writer = connection.writable.getWriter();
231
+ try {
232
+ if (transportId === undefined) {
233
+ const array = await readable.readExactly(8);
234
+ // TODO: switch to a more performant algorithm.
235
+ const dataView = new DataView(array.buffer, array.byteOffset, array.byteLength);
236
+ transportId = BigIntFieldType.Uint64.getter(dataView, 0, true);
237
+ }
238
+ await AdbServerClient.writeString(writer, service);
239
+ await AdbServerClient.readOkay(readable);
240
+ writer.releaseLock();
241
+ const duplex = new DuplexStreamFactory();
242
+ const wrapReadable = duplex.wrapReadable(readable.release());
243
+ const wrapWritable = duplex.createWritable(new WrapWritableStream(connection.writable).bePipedThroughFrom(new UnwrapConsumableStream()));
244
+ return {
245
+ transportId,
246
+ service,
247
+ readable: wrapReadable,
248
+ writable: wrapWritable,
249
+ close() {
250
+ return duplex.close();
251
+ },
252
+ };
253
+ }
254
+ catch (e) {
255
+ writer.close().catch(NOOP);
256
+ readable.cancel().catch(NOOP);
257
+ throw e;
258
+ }
259
+ }
260
+ /**
261
+ * Wait for a device to be connected or disconnected.
262
+ * @param device The device selector
263
+ * @param state The state to wait for
264
+ * @param options The options
265
+ * @returns A promise that resolves when the condition is met.
266
+ */
267
+ async waitFor(device, state, options) {
268
+ let type;
269
+ if (!device) {
270
+ type = "any";
271
+ }
272
+ else if ("transportId" in device) {
273
+ type = "any";
274
+ }
275
+ else if ("serial" in device) {
276
+ type = "any";
277
+ }
278
+ else if ("usb" in device) {
279
+ type = "usb";
280
+ }
281
+ else if ("tcp" in device) {
282
+ type = "local";
283
+ }
284
+ else {
285
+ throw new Error("Invalid device selector");
286
+ }
287
+ // `waitFor` can't use `connectDevice`, because the device
288
+ // might not be available yet.
289
+ const service = this.formatDeviceService(device, `wait-for-${type}-${state}`);
290
+ // `connect` resolves when server writes `OKAY`,
291
+ // but for this command the server writes `OKAY` after the condition is met.
292
+ await this.connect(service, options);
293
+ }
294
+ async createTransport(device) {
295
+ const { transportId, features } = await this.getDeviceFeatures(device);
296
+ const devices = await this.getDevices();
297
+ const info = devices.find((device) => device.transportId === transportId);
298
+ const banner = new AdbBanner(info?.product, info?.model, info?.device, features);
299
+ return new AdbServerTransport(this, info?.serial ?? "", banner, transportId);
300
+ }
301
+ }
302
+ export { AdbServerClient };
303
+ async function raceSignal(callback, ...signals) {
304
+ const abortPromise = new PromiseResolver();
305
+ function abort() {
306
+ abortPromise.reject(this.reason);
307
+ }
308
+ try {
309
+ for (const signal of signals) {
310
+ if (!signal) {
311
+ continue;
312
+ }
313
+ if (signal.aborted) {
314
+ throw signal.reason;
315
+ }
316
+ signal.addEventListener("abort", abort);
317
+ }
318
+ return await Promise.race([callback(), abortPromise.promise]);
319
+ }
320
+ finally {
321
+ for (const signal of signals) {
322
+ if (!signal) {
323
+ continue;
324
+ }
325
+ signal.removeEventListener("abort", abort);
326
+ }
327
+ }
328
+ }
329
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/server/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./client.js";
2
+ export * from "./transport.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./client.js";
2
+ export * from "./transport.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ValueOrPromise } from "@yume-chan/struct";
2
+ import type { AdbIncomingSocketHandler, AdbSocket, AdbTransport } from "../adb.js";
3
+ import type { AdbBanner } from "../banner.js";
4
+ import type { AdbServerClient } from "./client.js";
5
+ export declare class AdbServerTransport implements AdbTransport {
6
+ #private;
7
+ readonly serial: string;
8
+ readonly transportId: bigint;
9
+ readonly maxPayloadSize: number;
10
+ readonly banner: AdbBanner;
11
+ readonly disconnected: Promise<void>;
12
+ constructor(client: AdbServerClient, serial: string, banner: AdbBanner, transportId: bigint);
13
+ connect(service: string): Promise<AdbSocket>;
14
+ addReverseTunnel(handler: AdbIncomingSocketHandler, address?: string): Promise<string>;
15
+ removeReverseTunnel(address: string): Promise<void>;
16
+ clearReverseTunnels(): Promise<void>;
17
+ close(): ValueOrPromise<void>;
18
+ }
19
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/server/transport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EACR,wBAAwB,EACxB,SAAS,EACT,YAAY,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,qBAAa,kBAAmB,YAAW,YAAY;;IAGnD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,SAAgB,WAAW,EAAE,MAAM,CAAC;IAEpC,SAAgB,cAAc,EAAE,MAAM,CAAmB;IAEzD,SAAgB,MAAM,EAAE,SAAS,CAAC;IAIlC,SAAgB,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAGxC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM;IAgBV,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAS5C,gBAAgB,CACzB,OAAO,EAAE,wBAAwB,EACjC,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;IAIL,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjD,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC;CAIhC"}
@@ -0,0 +1,44 @@
1
+ import { PromiseResolver } from "@yume-chan/async";
2
+ import { AbortController } from "@yume-chan/stream-extra";
3
+ export class AdbServerTransport {
4
+ #client;
5
+ serial;
6
+ transportId;
7
+ maxPayloadSize = 1 * 1024 * 1024;
8
+ banner;
9
+ #closed = new PromiseResolver();
10
+ #waitAbortController = new AbortController();
11
+ disconnected;
12
+ constructor(client, serial, banner, transportId) {
13
+ this.#client = client;
14
+ this.serial = serial;
15
+ this.banner = banner;
16
+ this.transportId = transportId;
17
+ this.disconnected = Promise.race([
18
+ this.#closed.promise,
19
+ client.waitFor({ transportId }, "disconnect", {
20
+ signal: this.#waitAbortController.signal,
21
+ unref: true,
22
+ }),
23
+ ]);
24
+ }
25
+ async connect(service) {
26
+ return await this.#client.connectDevice({
27
+ transportId: this.transportId,
28
+ }, service);
29
+ }
30
+ async addReverseTunnel(handler, address) {
31
+ return await this.#client.connection.addReverseTunnel(handler, address);
32
+ }
33
+ async removeReverseTunnel(address) {
34
+ await this.#client.connection.removeReverseTunnel(address);
35
+ }
36
+ async clearReverseTunnels() {
37
+ await this.#client.connection.clearReverseTunnels();
38
+ }
39
+ close() {
40
+ this.#closed.resolve();
41
+ this.#waitAbortController.abort();
42
+ }
43
+ }
44
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/server/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAY1D,MAAM,OAAO,kBAAkB;IAC3B,OAAO,CAAkB;IAET,MAAM,CAAS;IAEf,WAAW,CAAS;IAEpB,cAAc,GAAW,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IAEzC,MAAM,CAAY;IAElC,OAAO,GAAG,IAAI,eAAe,EAAQ,CAAC;IACtC,oBAAoB,GAAG,IAAI,eAAe,EAAE,CAAC;IAC7B,YAAY,CAAgB;IAE5C,YACI,MAAuB,EACvB,MAAc,EACd,MAAiB,EACjB,WAAmB;QAEnB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,OAAO;YACpB,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE;gBAC1C,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM;gBACxC,KAAK,EAAE,IAAI;aACd,CAAC;SACL,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,OAAe;QAChC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CACnC;YACI,WAAW,EAAE,IAAI,CAAC,WAAW;SAChC,EACD,OAAO,CACV,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,gBAAgB,CACzB,OAAiC,EACjC,OAAgB;QAEhB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,OAAe;QAC5C,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;IAEM,KAAK,CAAC,mBAAmB;QAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;IACxD,CAAC;IAED,KAAK;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IACtC,CAAC;CACJ"}