@yume-chan/adb 2.6.2 → 3.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/esm/adb.d.ts +18 -15
  4. package/esm/adb.d.ts.map +1 -1
  5. package/esm/adb.js +18 -11
  6. package/esm/adb.js.map +1 -1
  7. package/esm/banner.d.ts +1 -1
  8. package/esm/banner.d.ts.map +1 -1
  9. package/esm/banner.js.map +1 -1
  10. package/esm/daemon/auth/authenticator.d.ts +28 -0
  11. package/esm/daemon/auth/authenticator.d.ts.map +1 -0
  12. package/esm/daemon/auth/authenticator.js +108 -0
  13. package/esm/daemon/auth/authenticator.js.map +1 -0
  14. package/esm/daemon/auth/index.d.ts +5 -0
  15. package/esm/daemon/auth/index.d.ts.map +1 -0
  16. package/esm/daemon/auth/index.js +5 -0
  17. package/esm/daemon/auth/index.js.map +1 -0
  18. package/esm/daemon/auth/packet-processor.d.ts +42 -0
  19. package/esm/daemon/auth/packet-processor.d.ts.map +1 -0
  20. package/esm/daemon/auth/packet-processor.js +129 -0
  21. package/esm/daemon/auth/packet-processor.js.map +1 -0
  22. package/esm/daemon/auth/public-key.d.ts +8 -0
  23. package/esm/daemon/auth/public-key.d.ts.map +1 -0
  24. package/esm/daemon/auth/public-key.js +74 -0
  25. package/esm/daemon/auth/public-key.js.map +1 -0
  26. package/esm/daemon/auth/type.d.ts +5 -0
  27. package/esm/daemon/auth/type.d.ts.map +1 -0
  28. package/esm/daemon/auth/type.js +2 -0
  29. package/esm/daemon/auth/type.js.map +1 -0
  30. package/esm/daemon/crypto.d.ts +6 -5
  31. package/esm/daemon/crypto.d.ts.map +1 -1
  32. package/esm/daemon/crypto.js +23 -72
  33. package/esm/daemon/crypto.js.map +1 -1
  34. package/esm/daemon/dispatcher.d.ts +3 -3
  35. package/esm/daemon/dispatcher.d.ts.map +1 -1
  36. package/esm/daemon/dispatcher.js +11 -4
  37. package/esm/daemon/dispatcher.js.map +1 -1
  38. package/esm/daemon/index.d.ts +1 -1
  39. package/esm/daemon/index.d.ts.map +1 -1
  40. package/esm/daemon/index.js +1 -1
  41. package/esm/daemon/index.js.map +1 -1
  42. package/esm/daemon/socket.d.ts +3 -3
  43. package/esm/daemon/socket.d.ts.map +1 -1
  44. package/esm/daemon/transport.d.ts +13 -65
  45. package/esm/daemon/transport.d.ts.map +1 -1
  46. package/esm/daemon/transport.js +18 -140
  47. package/esm/daemon/transport.js.map +1 -1
  48. package/esm/device-observer.d.ts +2 -3
  49. package/esm/device-observer.d.ts.map +1 -1
  50. package/esm/features-value.d.ts +40 -0
  51. package/esm/features-value.d.ts.map +1 -0
  52. package/esm/features-value.js +46 -0
  53. package/esm/features-value.js.map +1 -0
  54. package/esm/features.d.ts +4 -12
  55. package/esm/features.d.ts.map +1 -1
  56. package/esm/features.js +27 -13
  57. package/esm/features.js.map +1 -1
  58. package/esm/index.d.ts +1 -1
  59. package/esm/index.d.ts.map +1 -1
  60. package/esm/index.js +1 -1
  61. package/esm/index.js.map +1 -1
  62. package/esm/server/client.d.ts +7 -7
  63. package/esm/server/client.d.ts.map +1 -1
  64. package/esm/server/client.js +69 -86
  65. package/esm/server/client.js.map +1 -1
  66. package/esm/server/commands/wireless.js +1 -1
  67. package/esm/server/commands/wireless.js.map +1 -1
  68. package/esm/server/{stream.d.ts → data-connection.d.ts} +5 -5
  69. package/esm/server/data-connection.d.ts.map +1 -0
  70. package/esm/server/{stream.js → data-connection.js} +4 -4
  71. package/esm/server/data-connection.js.map +1 -0
  72. package/esm/server/index.d.ts +1 -1
  73. package/esm/server/index.d.ts.map +1 -1
  74. package/esm/server/index.js +1 -1
  75. package/esm/server/index.js.map +1 -1
  76. package/esm/server/observer.d.ts.map +1 -1
  77. package/esm/server/observer.js +14 -13
  78. package/esm/server/observer.js.map +1 -1
  79. package/esm/server/transport.d.ts +4 -6
  80. package/esm/server/transport.d.ts.map +1 -1
  81. package/esm/server/transport.js +9 -24
  82. package/esm/server/transport.js.map +1 -1
  83. package/esm/service/framebuffer.d.ts.map +1 -0
  84. package/esm/service/framebuffer.js.map +1 -0
  85. package/esm/{commands → service}/index.d.ts +1 -2
  86. package/esm/service/index.d.ts.map +1 -0
  87. package/esm/{commands → service}/index.js +1 -2
  88. package/esm/service/index.js.map +1 -0
  89. package/esm/{commands → service}/power.d.ts +4 -2
  90. package/esm/service/power.d.ts.map +1 -0
  91. package/esm/{commands → service}/power.js +11 -5
  92. package/esm/service/power.js.map +1 -0
  93. package/esm/service/reverse/error.d.ts +14 -0
  94. package/esm/service/reverse/error.d.ts.map +1 -0
  95. package/esm/service/reverse/error.js +21 -0
  96. package/esm/service/reverse/error.js.map +1 -0
  97. package/esm/service/reverse/index.d.ts +3 -0
  98. package/esm/service/reverse/index.d.ts.map +1 -0
  99. package/esm/service/reverse/index.js +4 -0
  100. package/esm/service/reverse/index.js.map +1 -0
  101. package/esm/service/reverse/response.d.ts +2 -0
  102. package/esm/service/reverse/response.d.ts.map +1 -0
  103. package/esm/service/reverse/response.js +30 -0
  104. package/esm/service/reverse/response.js.map +1 -0
  105. package/esm/service/reverse/service.d.ts +59 -0
  106. package/esm/service/reverse/service.d.ts.map +1 -0
  107. package/esm/{commands/reverse.js → service/reverse/service.js} +16 -45
  108. package/esm/service/reverse/service.js.map +1 -0
  109. package/esm/{commands → service}/subprocess/index.d.ts +1 -0
  110. package/esm/service/subprocess/index.d.ts.map +1 -0
  111. package/esm/{commands → service}/subprocess/index.js +1 -0
  112. package/esm/service/subprocess/index.js.map +1 -0
  113. package/esm/service/subprocess/none/index.d.ts.map +1 -0
  114. package/esm/service/subprocess/none/index.js.map +1 -0
  115. package/esm/{commands → service}/subprocess/none/process.d.ts +2 -2
  116. package/esm/service/subprocess/none/process.d.ts.map +1 -0
  117. package/esm/service/subprocess/none/process.js.map +1 -0
  118. package/esm/{commands → service}/subprocess/none/pty.d.ts +4 -4
  119. package/esm/service/subprocess/none/pty.d.ts.map +1 -0
  120. package/esm/{commands → service}/subprocess/none/pty.js +1 -1
  121. package/esm/service/subprocess/none/pty.js.map +1 -0
  122. package/esm/service/subprocess/none/service.d.ts +10 -0
  123. package/esm/service/subprocess/none/service.d.ts.map +1 -0
  124. package/esm/service/subprocess/none/service.js +44 -0
  125. package/esm/service/subprocess/none/service.js.map +1 -0
  126. package/esm/service/subprocess/none/spawner.d.ts +15 -0
  127. package/esm/service/subprocess/none/spawner.d.ts.map +1 -0
  128. package/esm/service/subprocess/none/spawner.js +31 -0
  129. package/esm/service/subprocess/none/spawner.js.map +1 -0
  130. package/esm/{commands → service}/subprocess/pty.d.ts +1 -1
  131. package/esm/service/subprocess/pty.d.ts.map +1 -0
  132. package/esm/{commands → service}/subprocess/pty.js.map +1 -1
  133. package/esm/service/subprocess/service.d.ts.map +1 -0
  134. package/esm/{commands → service}/subprocess/service.js +1 -1
  135. package/esm/service/subprocess/service.js.map +1 -0
  136. package/esm/service/subprocess/shell/index.d.ts +5 -0
  137. package/esm/{commands/subprocess/none → service/subprocess/shell}/index.d.ts.map +1 -1
  138. package/esm/service/subprocess/shell/index.js +6 -0
  139. package/esm/{commands/subprocess/none → service/subprocess/shell}/index.js.map +1 -1
  140. package/esm/{commands → service}/subprocess/shell/process.d.ts +2 -2
  141. package/esm/service/subprocess/shell/process.d.ts.map +1 -0
  142. package/esm/{commands → service}/subprocess/shell/process.js +4 -6
  143. package/esm/service/subprocess/shell/process.js.map +1 -0
  144. package/esm/{commands → service}/subprocess/shell/pty.d.ts +4 -4
  145. package/esm/service/subprocess/shell/pty.d.ts.map +1 -0
  146. package/esm/{commands → service}/subprocess/shell/pty.js +11 -9
  147. package/esm/service/subprocess/shell/pty.js.map +1 -0
  148. package/esm/service/subprocess/shell/service.d.ts +34 -0
  149. package/esm/service/subprocess/shell/service.d.ts.map +1 -0
  150. package/esm/service/subprocess/shell/service.js +52 -0
  151. package/esm/service/subprocess/shell/service.js.map +1 -0
  152. package/esm/service/subprocess/shell/shared.d.ts +2 -0
  153. package/esm/service/subprocess/shell/shared.d.ts.map +1 -0
  154. package/esm/{commands → service}/subprocess/shell/shared.js +2 -0
  155. package/esm/service/subprocess/shell/shared.js.map +1 -0
  156. package/esm/{commands → service}/subprocess/shell/spawner.d.ts +3 -7
  157. package/esm/service/subprocess/shell/spawner.d.ts.map +1 -0
  158. package/esm/service/subprocess/shell/spawner.js +45 -0
  159. package/esm/service/subprocess/shell/spawner.js.map +1 -0
  160. package/esm/service/subprocess/types.d.ts +14 -0
  161. package/esm/service/subprocess/types.d.ts.map +1 -0
  162. package/esm/service/subprocess/types.js +2 -0
  163. package/esm/service/subprocess/types.js.map +1 -0
  164. package/esm/service/subprocess/utils.d.ts +39 -0
  165. package/esm/service/subprocess/utils.d.ts.map +1 -0
  166. package/esm/service/subprocess/utils.js +142 -0
  167. package/esm/service/subprocess/utils.js.map +1 -0
  168. package/esm/service/sync/android.d.ts +34 -0
  169. package/esm/service/sync/android.d.ts.map +1 -0
  170. package/esm/service/sync/android.js +34 -0
  171. package/esm/service/sync/android.js.map +1 -0
  172. package/esm/service/sync/compression/compression.d.ts +17 -0
  173. package/esm/service/sync/compression/compression.d.ts.map +1 -0
  174. package/esm/service/sync/compression/compression.js +92 -0
  175. package/esm/service/sync/compression/compression.js.map +1 -0
  176. package/esm/service/sync/compression/format-ns.d.ts +5 -0
  177. package/esm/service/sync/compression/format-ns.d.ts.map +1 -0
  178. package/esm/service/sync/compression/format-ns.js +5 -0
  179. package/esm/service/sync/compression/format-ns.js.map +1 -0
  180. package/esm/service/sync/compression/format.d.ts +4 -0
  181. package/esm/service/sync/compression/format.d.ts.map +1 -0
  182. package/esm/service/sync/compression/format.js +3 -0
  183. package/esm/service/sync/compression/format.js.map +1 -0
  184. package/esm/service/sync/compression/index.d.ts +2 -0
  185. package/esm/service/sync/compression/index.d.ts.map +1 -0
  186. package/esm/service/sync/compression/index.js +2 -0
  187. package/esm/service/sync/compression/index.js.map +1 -0
  188. package/esm/service/sync/id/common.d.ts +17 -0
  189. package/esm/service/sync/id/common.d.ts.map +1 -0
  190. package/esm/service/sync/id/common.js +29 -0
  191. package/esm/service/sync/id/common.js.map +1 -0
  192. package/esm/service/sync/id/index.d.ts +4 -0
  193. package/esm/service/sync/id/index.d.ts.map +1 -0
  194. package/esm/service/sync/id/index.js +6 -0
  195. package/esm/service/sync/id/index.js.map +1 -0
  196. package/esm/service/sync/id/request.d.ts +7 -0
  197. package/esm/service/sync/id/request.d.ts.map +1 -0
  198. package/esm/service/sync/id/request.js +9 -0
  199. package/esm/service/sync/id/request.js.map +1 -0
  200. package/esm/service/sync/id/response.d.ts +6 -0
  201. package/esm/service/sync/id/response.d.ts.map +1 -0
  202. package/esm/service/sync/id/response.js +8 -0
  203. package/esm/service/sync/id/response.js.map +1 -0
  204. package/esm/service/sync/index-ns.d.ts +7 -0
  205. package/esm/service/sync/index-ns.d.ts.map +1 -0
  206. package/esm/service/sync/index-ns.js +7 -0
  207. package/esm/service/sync/index-ns.js.map +1 -0
  208. package/esm/service/sync/index.d.ts +3 -0
  209. package/esm/service/sync/index.d.ts.map +1 -0
  210. package/esm/service/sync/index.js +3 -0
  211. package/esm/service/sync/index.js.map +1 -0
  212. package/esm/service/sync/request/index.d.ts +5 -0
  213. package/esm/service/sync/request/index.d.ts.map +1 -0
  214. package/esm/service/sync/request/index.js +5 -0
  215. package/esm/service/sync/request/index.js.map +1 -0
  216. package/esm/{commands/sync → service/sync/request}/list.d.ts +21 -19
  217. package/esm/service/sync/request/list.d.ts.map +1 -0
  218. package/esm/service/sync/request/list.js +77 -0
  219. package/esm/service/sync/request/list.js.map +1 -0
  220. package/esm/service/sync/request/pull.d.ts +12 -0
  221. package/esm/service/sync/request/pull.d.ts.map +1 -0
  222. package/esm/service/sync/request/pull.js +28 -0
  223. package/esm/service/sync/request/pull.js.map +1 -0
  224. package/esm/service/sync/request/push.d.ts +54 -0
  225. package/esm/service/sync/request/push.d.ts.map +1 -0
  226. package/esm/service/sync/request/push.js +95 -0
  227. package/esm/service/sync/request/push.js.map +1 -0
  228. package/esm/{commands/sync → service/sync/request}/stat.d.ts +40 -50
  229. package/esm/service/sync/request/stat.d.ts.map +1 -0
  230. package/esm/service/sync/request/stat.js +89 -0
  231. package/esm/service/sync/request/stat.js.map +1 -0
  232. package/esm/service/sync/service.d.ts +123 -0
  233. package/esm/service/sync/service.d.ts.map +1 -0
  234. package/esm/service/sync/service.js +170 -0
  235. package/esm/service/sync/service.js.map +1 -0
  236. package/esm/service/sync/socket-pool.d.ts +11 -0
  237. package/esm/service/sync/socket-pool.d.ts.map +1 -0
  238. package/esm/service/sync/socket-pool.js +80 -0
  239. package/esm/service/sync/socket-pool.js.map +1 -0
  240. package/esm/service/sync/socket.d.ts +40 -0
  241. package/esm/service/sync/socket.d.ts.map +1 -0
  242. package/esm/service/sync/socket.js +153 -0
  243. package/esm/service/sync/socket.js.map +1 -0
  244. package/esm/{commands → service}/tcpip.d.ts +4 -2
  245. package/esm/service/tcpip.d.ts.map +1 -0
  246. package/esm/{commands → service}/tcpip.js +10 -7
  247. package/esm/service/tcpip.js.map +1 -0
  248. package/esm/utils/array-buffer.d.ts.map +1 -1
  249. package/esm/utils/array-buffer.js +2 -3
  250. package/esm/utils/array-buffer.js.map +1 -1
  251. package/esm/utils/base64.d.ts.map +1 -1
  252. package/esm/utils/base64.js +22 -10
  253. package/esm/utils/base64.js.map +1 -1
  254. package/esm/utils/index.d.ts +1 -0
  255. package/esm/utils/index.d.ts.map +1 -1
  256. package/esm/utils/index.js +1 -0
  257. package/esm/utils/index.js.map +1 -1
  258. package/esm/utils/md5.d.ts +8 -0
  259. package/esm/utils/md5.d.ts.map +1 -0
  260. package/esm/utils/md5.js +149 -0
  261. package/esm/utils/md5.js.map +1 -0
  262. package/package.json +9 -9
  263. package/src/adb.ts +44 -35
  264. package/src/banner.ts +2 -1
  265. package/src/daemon/auth/authenticator.ts +186 -0
  266. package/src/daemon/auth/index.ts +4 -0
  267. package/src/daemon/auth/packet-processor.ts +212 -0
  268. package/src/daemon/auth/public-key.ts +112 -0
  269. package/src/daemon/auth/type.ts +5 -0
  270. package/src/daemon/crypto.ts +36 -101
  271. package/src/daemon/dispatcher.ts +15 -8
  272. package/src/daemon/index.ts +1 -1
  273. package/src/daemon/socket.ts +3 -3
  274. package/src/daemon/transport.ts +35 -253
  275. package/src/device-observer.ts +3 -3
  276. package/src/features-value.ts +47 -0
  277. package/src/features.ts +31 -14
  278. package/src/index.ts +1 -1
  279. package/src/server/client.ts +94 -93
  280. package/src/server/commands/wireless.ts +1 -1
  281. package/src/server/{stream.ts → data-connection.ts} +4 -4
  282. package/src/server/index.ts +1 -1
  283. package/src/server/observer.ts +21 -19
  284. package/src/server/transport.ts +13 -34
  285. package/src/{commands → service}/index.ts +1 -2
  286. package/src/{commands → service}/power.ts +14 -5
  287. package/src/service/reverse/error.ts +35 -0
  288. package/src/service/reverse/index.ts +3 -0
  289. package/src/service/reverse/response.ts +38 -0
  290. package/src/{commands/reverse.ts → service/reverse/service.ts} +32 -72
  291. package/src/{commands → service}/subprocess/index.ts +1 -0
  292. package/src/{commands → service}/subprocess/none/process.ts +3 -3
  293. package/src/{commands → service}/subprocess/none/pty.ts +5 -5
  294. package/src/service/subprocess/none/service.ts +57 -0
  295. package/src/service/subprocess/none/spawner.ts +81 -0
  296. package/src/{commands → service}/subprocess/pty.ts +1 -1
  297. package/src/{commands → service}/subprocess/service.ts +1 -1
  298. package/src/{commands → service}/subprocess/shell/index.ts +1 -1
  299. package/src/{commands → service}/subprocess/shell/process.ts +6 -7
  300. package/src/{commands → service}/subprocess/shell/pty.ts +15 -13
  301. package/src/service/subprocess/shell/service.ts +75 -0
  302. package/src/{commands → service}/subprocess/shell/shared.ts +5 -0
  303. package/src/service/subprocess/shell/spawner.ts +109 -0
  304. package/src/service/subprocess/types.ts +19 -0
  305. package/src/service/subprocess/utils.ts +166 -0
  306. package/src/service/sync/android.ts +43 -0
  307. package/src/service/sync/compression/compression.ts +126 -0
  308. package/src/service/sync/compression/format-ns.ts +4 -0
  309. package/src/service/sync/compression/format.ts +5 -0
  310. package/src/service/sync/compression/index.ts +1 -0
  311. package/src/service/sync/id/common.ts +33 -0
  312. package/src/service/sync/id/index.ts +7 -0
  313. package/src/service/sync/id/request.ts +12 -0
  314. package/src/service/sync/id/response.ts +11 -0
  315. package/src/service/sync/index-ns.ts +6 -0
  316. package/src/service/sync/index.ts +2 -0
  317. package/src/service/sync/request/index.ts +4 -0
  318. package/src/service/sync/request/list.ts +110 -0
  319. package/src/service/sync/request/pull.ts +49 -0
  320. package/src/service/sync/request/push.ts +184 -0
  321. package/src/service/sync/request/stat.ts +127 -0
  322. package/src/service/sync/service.ts +255 -0
  323. package/src/service/sync/socket-pool.ts +97 -0
  324. package/src/service/sync/socket.ts +201 -0
  325. package/src/{commands → service}/tcpip.ts +13 -7
  326. package/src/utils/array-buffer.ts +2 -3
  327. package/src/utils/base64.ts +24 -10
  328. package/src/utils/index.ts +1 -0
  329. package/src/utils/md5.ts +185 -0
  330. package/yume-chan-adb-3.0.0-beta.0.tgz +0 -0
  331. package/CHANGELOG.md +0 -257
  332. package/esm/commands/base.d.ts +0 -8
  333. package/esm/commands/base.d.ts.map +0 -1
  334. package/esm/commands/base.js +0 -12
  335. package/esm/commands/base.js.map +0 -1
  336. package/esm/commands/framebuffer.d.ts.map +0 -1
  337. package/esm/commands/framebuffer.js.map +0 -1
  338. package/esm/commands/index.d.ts.map +0 -1
  339. package/esm/commands/index.js.map +0 -1
  340. package/esm/commands/power.d.ts.map +0 -1
  341. package/esm/commands/power.js.map +0 -1
  342. package/esm/commands/reverse.d.ts +0 -48
  343. package/esm/commands/reverse.d.ts.map +0 -1
  344. package/esm/commands/reverse.js.map +0 -1
  345. package/esm/commands/subprocess/index.d.ts.map +0 -1
  346. package/esm/commands/subprocess/index.js.map +0 -1
  347. package/esm/commands/subprocess/none/process.d.ts.map +0 -1
  348. package/esm/commands/subprocess/none/process.js.map +0 -1
  349. package/esm/commands/subprocess/none/pty.d.ts.map +0 -1
  350. package/esm/commands/subprocess/none/pty.js.map +0 -1
  351. package/esm/commands/subprocess/none/service.d.ts +0 -10
  352. package/esm/commands/subprocess/none/service.d.ts.map +0 -1
  353. package/esm/commands/subprocess/none/service.js +0 -34
  354. package/esm/commands/subprocess/none/service.js.map +0 -1
  355. package/esm/commands/subprocess/none/spawner.d.ts +0 -19
  356. package/esm/commands/subprocess/none/spawner.d.ts.map +0 -1
  357. package/esm/commands/subprocess/none/spawner.js +0 -26
  358. package/esm/commands/subprocess/none/spawner.js.map +0 -1
  359. package/esm/commands/subprocess/pty.d.ts.map +0 -1
  360. package/esm/commands/subprocess/service.d.ts.map +0 -1
  361. package/esm/commands/subprocess/service.js.map +0 -1
  362. package/esm/commands/subprocess/shell/index.d.ts +0 -6
  363. package/esm/commands/subprocess/shell/index.d.ts.map +0 -1
  364. package/esm/commands/subprocess/shell/index.js +0 -6
  365. package/esm/commands/subprocess/shell/index.js.map +0 -1
  366. package/esm/commands/subprocess/shell/process.d.ts.map +0 -1
  367. package/esm/commands/subprocess/shell/process.js.map +0 -1
  368. package/esm/commands/subprocess/shell/pty.d.ts.map +0 -1
  369. package/esm/commands/subprocess/shell/pty.js.map +0 -1
  370. package/esm/commands/subprocess/shell/service.d.ts +0 -14
  371. package/esm/commands/subprocess/shell/service.d.ts.map +0 -1
  372. package/esm/commands/subprocess/shell/service.js +0 -41
  373. package/esm/commands/subprocess/shell/service.js.map +0 -1
  374. package/esm/commands/subprocess/shell/shared.d.ts +0 -19
  375. package/esm/commands/subprocess/shell/shared.d.ts.map +0 -1
  376. package/esm/commands/subprocess/shell/shared.js.map +0 -1
  377. package/esm/commands/subprocess/shell/spawner.d.ts.map +0 -1
  378. package/esm/commands/subprocess/shell/spawner.js +0 -38
  379. package/esm/commands/subprocess/shell/spawner.js.map +0 -1
  380. package/esm/commands/subprocess/utils.d.ts +0 -3
  381. package/esm/commands/subprocess/utils.d.ts.map +0 -1
  382. package/esm/commands/subprocess/utils.js +0 -56
  383. package/esm/commands/subprocess/utils.js.map +0 -1
  384. package/esm/commands/sync/index.d.ts +0 -9
  385. package/esm/commands/sync/index.d.ts.map +0 -1
  386. package/esm/commands/sync/index.js +0 -9
  387. package/esm/commands/sync/index.js.map +0 -1
  388. package/esm/commands/sync/list.d.ts.map +0 -1
  389. package/esm/commands/sync/list.js +0 -64
  390. package/esm/commands/sync/list.js.map +0 -1
  391. package/esm/commands/sync/pull.d.ts +0 -12
  392. package/esm/commands/sync/pull.d.ts.map +0 -1
  393. package/esm/commands/sync/pull.js +0 -33
  394. package/esm/commands/sync/pull.js.map +0 -1
  395. package/esm/commands/sync/push.d.ts +0 -61
  396. package/esm/commands/sync/push.d.ts.map +0 -1
  397. package/esm/commands/sync/push.js +0 -83
  398. package/esm/commands/sync/push.js.map +0 -1
  399. package/esm/commands/sync/request.d.ts +0 -24
  400. package/esm/commands/sync/request.d.ts.map +0 -1
  401. package/esm/commands/sync/request.js +0 -32
  402. package/esm/commands/sync/request.js.map +0 -1
  403. package/esm/commands/sync/response.d.ts +0 -28
  404. package/esm/commands/sync/response.d.ts.map +0 -1
  405. package/esm/commands/sync/response.js +0 -81
  406. package/esm/commands/sync/response.js.map +0 -1
  407. package/esm/commands/sync/socket.d.ts +0 -22
  408. package/esm/commands/sync/socket.d.ts.map +0 -1
  409. package/esm/commands/sync/socket.js +0 -78
  410. package/esm/commands/sync/socket.js.map +0 -1
  411. package/esm/commands/sync/stat.d.ts.map +0 -1
  412. package/esm/commands/sync/stat.js +0 -121
  413. package/esm/commands/sync/stat.js.map +0 -1
  414. package/esm/commands/sync/sync.d.ts +0 -82
  415. package/esm/commands/sync/sync.d.ts.map +0 -1
  416. package/esm/commands/sync/sync.js +0 -138
  417. package/esm/commands/sync/sync.js.map +0 -1
  418. package/esm/commands/tcpip.d.ts.map +0 -1
  419. package/esm/commands/tcpip.js.map +0 -1
  420. package/esm/daemon/auth.d.ts +0 -54
  421. package/esm/daemon/auth.d.ts.map +0 -1
  422. package/esm/daemon/auth.js +0 -104
  423. package/esm/daemon/auth.js.map +0 -1
  424. package/esm/server/stream.d.ts.map +0 -1
  425. package/esm/server/stream.js.map +0 -1
  426. package/src/commands/base.ts +0 -15
  427. package/src/commands/subprocess/none/service.ts +0 -45
  428. package/src/commands/subprocess/none/spawner.ts +0 -68
  429. package/src/commands/subprocess/shell/service.ts +0 -58
  430. package/src/commands/subprocess/shell/spawner.ts +0 -90
  431. package/src/commands/subprocess/utils.ts +0 -61
  432. package/src/commands/sync/index.ts +0 -8
  433. package/src/commands/sync/list.ts +0 -99
  434. package/src/commands/sync/pull.ts +0 -55
  435. package/src/commands/sync/push.ts +0 -172
  436. package/src/commands/sync/request.ts +0 -53
  437. package/src/commands/sync/response.ts +0 -105
  438. package/src/commands/sync/socket.ts +0 -109
  439. package/src/commands/sync/stat.ts +0 -177
  440. package/src/commands/sync/sync.ts +0 -175
  441. package/src/daemon/auth.ts +0 -203
  442. package/tsconfig.build.tsbuildinfo +0 -1
  443. /package/esm/{commands → service}/framebuffer.d.ts +0 -0
  444. /package/esm/{commands → service}/framebuffer.js +0 -0
  445. /package/esm/{commands → service}/subprocess/none/index.d.ts +0 -0
  446. /package/esm/{commands → service}/subprocess/none/index.js +0 -0
  447. /package/esm/{commands → service}/subprocess/none/process.js +0 -0
  448. /package/esm/{commands → service}/subprocess/pty.js +0 -0
  449. /package/esm/{commands → service}/subprocess/service.d.ts +0 -0
  450. /package/src/{commands → service}/framebuffer.ts +0 -0
  451. /package/src/{commands → service}/subprocess/none/index.ts +0 -0
@@ -1,73 +1,15 @@
1
1
  // cspell: ignore killforward
2
2
 
3
3
  import { BufferedReadableStream } from "@yume-chan/stream-extra";
4
- import {
5
- encodeUtf8,
6
- ExactReadableEndedError,
7
- extend,
8
- string,
9
- struct,
10
- } from "@yume-chan/struct";
11
-
12
- import type { AdbIncomingSocketHandler } from "../adb.js";
13
- import { hexToNumber, sequenceEqual } from "../utils/index.js";
14
-
15
- import { AdbServiceBase } from "./base.js";
16
-
17
- export interface AdbForwardListener {
18
- deviceSerial: string;
19
-
20
- localName: string;
21
-
22
- remoteName: string;
23
- }
4
+ import { encodeUtf8, ExactReadableEndedError } from "@yume-chan/struct";
24
5
 
25
- const AdbReverseStringResponse = struct(
26
- {
27
- length: string(4),
28
- content: string({
29
- field: "length",
30
- convert(value: string) {
31
- return Number.parseInt(value, 16);
32
- },
33
- back(value) {
34
- return value.toString(16).padStart(4, "0");
35
- },
36
- }),
37
- },
38
- { littleEndian: true },
39
- );
40
-
41
- export class AdbReverseError extends Error {
42
- constructor(message: string) {
43
- super(message);
44
- }
45
- }
6
+ import type { Adb } from "../../adb.js";
7
+ import { hexToNumber, sequenceEqual } from "../../utils/index.js";
46
8
 
47
- export class AdbReverseNotSupportedError extends AdbReverseError {
48
- constructor() {
49
- super(
50
- "ADB reverse tunnel is not supported on this device when connected wirelessly.",
51
- );
52
- }
53
- }
54
-
55
- export const AdbReverseErrorResponse = extend(
9
+ import {
10
+ AdbReverseErrorResponse,
56
11
  AdbReverseStringResponse,
57
- {},
58
- {
59
- postDeserialize(value) {
60
- // https://issuetracker.google.com/issues/37066218
61
- // ADB on Android <9 can't create reverse tunnels when connected wirelessly (ADB over Wi-Fi),
62
- // and returns this confusing "more than one device/emulator" error.
63
- if (value.content === "more than one device/emulator") {
64
- throw new AdbReverseNotSupportedError();
65
- } else {
66
- throw new AdbReverseError(value.content);
67
- }
68
- },
69
- },
70
- );
12
+ } from "./response.js";
71
13
 
72
14
  // Like `hexToNumber`, it's much faster than first converting `buffer` to a string
73
15
  function decimalToNumber(buffer: Uint8Array) {
@@ -84,11 +26,21 @@ function decimalToNumber(buffer: Uint8Array) {
84
26
 
85
27
  const OKAY = encodeUtf8("OKAY");
86
28
 
87
- export class AdbReverseService extends AdbServiceBase {
29
+ export class AdbReverseService {
30
+ static readonly StringResponse = AdbReverseStringResponse;
31
+
32
+ static readonly ErrorResponse = AdbReverseErrorResponse;
33
+
34
+ readonly #adb: Adb;
35
+
36
+ constructor(adb: Adb) {
37
+ this.#adb = adb;
38
+ }
39
+
88
40
  readonly #deviceAddressToLocalAddress = new Map<string, string>();
89
41
 
90
42
  protected async createBufferedStream(service: string) {
91
- const socket = await this.adb.createSocket(service);
43
+ const socket = await this.#adb.createSocket(service);
92
44
  return new BufferedReadableStream(socket.readable);
93
45
  }
94
46
 
@@ -106,7 +58,7 @@ export class AdbReverseService extends AdbServiceBase {
106
58
  /**
107
59
  * Get a list of all reverse port forwarding on the device.
108
60
  */
109
- async list(): Promise<AdbForwardListener[]> {
61
+ async list(): Promise<AdbReverseService.Listener[]> {
110
62
  const stream = await this.createBufferedStream("reverse:list-forward");
111
63
 
112
64
  const response = await AdbReverseStringResponse.deserialize(stream);
@@ -161,10 +113,10 @@ export class AdbReverseService extends AdbServiceBase {
161
113
  */
162
114
  async add(
163
115
  deviceAddress: string,
164
- handler: AdbIncomingSocketHandler,
116
+ handler: Adb.IncomingSocketHandler,
165
117
  localAddress?: string,
166
118
  ): Promise<string> {
167
- localAddress = await this.adb.transport.addReverseTunnel(
119
+ localAddress = await this.#adb.transport.addReverseTunnel(
168
120
  handler,
169
121
  localAddress,
170
122
  );
@@ -174,7 +126,7 @@ export class AdbReverseService extends AdbServiceBase {
174
126
  this.#deviceAddressToLocalAddress.set(deviceAddress, localAddress);
175
127
  return deviceAddress;
176
128
  } catch (e) {
177
- await this.adb.transport.removeReverseTunnel(localAddress);
129
+ await this.#adb.transport.removeReverseTunnel(localAddress);
178
130
  throw e;
179
131
  }
180
132
  }
@@ -186,7 +138,7 @@ export class AdbReverseService extends AdbServiceBase {
186
138
  const localAddress =
187
139
  this.#deviceAddressToLocalAddress.get(deviceAddress);
188
140
  if (localAddress) {
189
- await this.adb.transport.removeReverseTunnel(localAddress);
141
+ await this.#adb.transport.removeReverseTunnel(localAddress);
190
142
  }
191
143
 
192
144
  await this.sendRequest(`reverse:killforward:${deviceAddress}`);
@@ -198,7 +150,7 @@ export class AdbReverseService extends AdbServiceBase {
198
150
  * Remove all reverse port forwarding, including the ones added by other programs.
199
151
  */
200
152
  async removeAll(): Promise<void> {
201
- await this.adb.transport.clearReverseTunnels();
153
+ await this.#adb.transport.clearReverseTunnels();
202
154
  this.#deviceAddressToLocalAddress.clear();
203
155
 
204
156
  await this.sendRequest(`reverse:killforward-all`);
@@ -206,3 +158,11 @@ export class AdbReverseService extends AdbServiceBase {
206
158
  // No need to close the stream, device will close it
207
159
  }
208
160
  }
161
+
162
+ export namespace AdbReverseService {
163
+ export interface Listener {
164
+ deviceSerial: string;
165
+ localName: string;
166
+ remoteName: string;
167
+ }
168
+ }
@@ -1,4 +1,5 @@
1
1
  export * from "./none/index.js";
2
2
  export * from "./service.js";
3
3
  export * from "./shell/index.js";
4
+ export * from "./types.js";
4
5
  export * from "./utils.js";
@@ -7,12 +7,12 @@ import type {
7
7
  WritableStream,
8
8
  } from "@yume-chan/stream-extra";
9
9
 
10
- import type { AdbSocket } from "../../../adb.js";
10
+ import type { Adb } from "../../../adb.js";
11
11
 
12
12
  import type { AdbNoneProtocolProcess } from "./spawner.js";
13
13
 
14
14
  export class AdbNoneProtocolProcessImpl implements AdbNoneProtocolProcess {
15
- readonly #socket: AdbSocket;
15
+ readonly #socket: Adb.Socket;
16
16
 
17
17
  get stdin(): WritableStream<MaybeConsumable<Uint8Array>> {
18
18
  return this.#socket.writable;
@@ -27,7 +27,7 @@ export class AdbNoneProtocolProcessImpl implements AdbNoneProtocolProcess {
27
27
  return this.#exited;
28
28
  }
29
29
 
30
- constructor(socket: AdbSocket, signal?: AbortSignal) {
30
+ constructor(socket: Adb.Socket, signal?: AbortSignal) {
31
31
  this.#socket = socket;
32
32
 
33
33
  if (signal) {
@@ -6,11 +6,11 @@ import type {
6
6
  } from "@yume-chan/stream-extra";
7
7
  import { MaybeConsumable } from "@yume-chan/stream-extra";
8
8
 
9
- import type { AdbSocket } from "../../../adb.js";
10
- import type { AdbPtyProcess } from "../pty.js";
9
+ import type { Adb } from "../../../adb.js";
10
+ import type { AdbPty } from "../pty.js";
11
11
 
12
- export class AdbNoneProtocolPtyProcess implements AdbPtyProcess<undefined> {
13
- readonly #socket: AdbSocket;
12
+ export class AdbNoneProtocolPty implements AdbPty<undefined> {
13
+ readonly #socket: Adb.Socket;
14
14
  readonly #writer: WritableStreamDefaultWriter<MaybeConsumable<Uint8Array>>;
15
15
 
16
16
  readonly #input: MaybeConsumable.WritableStream<Uint8Array>;
@@ -26,7 +26,7 @@ export class AdbNoneProtocolPtyProcess implements AdbPtyProcess<undefined> {
26
26
  return this.#socket.closed;
27
27
  }
28
28
 
29
- constructor(socket: AdbSocket) {
29
+ constructor(socket: Adb.Socket) {
30
30
  this.#socket = socket;
31
31
 
32
32
  this.#writer = this.#socket.writable.getWriter();
@@ -0,0 +1,57 @@
1
+ import type { Adb } from "../../../adb.js";
2
+
3
+ import { AdbNoneProtocolProcessImpl } from "./process.js";
4
+ import { AdbNoneProtocolPty } from "./pty.js";
5
+ import { adbNoneProtocolSpawner } from "./spawner.js";
6
+
7
+ export class AdbNoneProtocolSubprocessService {
8
+ readonly #adb: Adb;
9
+ get adb(): Adb {
10
+ return this.#adb;
11
+ }
12
+
13
+ constructor(adb: Adb) {
14
+ this.#adb = adb;
15
+ }
16
+
17
+ spawn = adbNoneProtocolSpawner(async (command, signal) => {
18
+ if (!command.length) {
19
+ throw new Error("Command cannot be empty");
20
+ }
21
+
22
+ // Android 7 added `shell,raw:${command}` service which also triggers raw mode,
23
+ // but we want to keep backward compatibility.
24
+ let service = "exec:";
25
+
26
+ // Similar to SSH, we don't escape the `command`,
27
+ // because the command will be invoked by `sh -c`,
28
+ // it can contain environment variables (`KEY=value command`),
29
+ // and shell expansions (`echo "$KEY"` vs `echo '$KEY'`),
30
+ // which we can't know how to properly escape.
31
+ service += command.join(" ");
32
+
33
+ const socket = await this.#adb.createSocket(service);
34
+
35
+ if (signal?.aborted) {
36
+ await socket.close();
37
+ throw signal.reason;
38
+ }
39
+
40
+ return new AdbNoneProtocolProcessImpl(socket, signal);
41
+ });
42
+
43
+ async pty(
44
+ command?: string | readonly string[],
45
+ ): Promise<AdbNoneProtocolPty> {
46
+ let service = "shell:";
47
+
48
+ if (typeof command === "string") {
49
+ service += command;
50
+ } else if (Array.isArray(command)) {
51
+ // Don't escape `command`. See `spawn` above for details
52
+ service += command.join(" ");
53
+ }
54
+
55
+ return new AdbNoneProtocolPty(await this.#adb.createSocket(service));
56
+ }
57
+ }
@@ -0,0 +1,81 @@
1
+ import type { MaybePromiseLike } from "@yume-chan/async";
2
+ import type {
3
+ AbortSignal,
4
+ MaybeConsumable,
5
+ ReadableStream,
6
+ WritableStream,
7
+ } from "@yume-chan/stream-extra";
8
+ import { concatUint8Arrays } from "@yume-chan/stream-extra";
9
+
10
+ import type { AdbSubprocessSpawner } from "../types.js";
11
+ import {
12
+ createLazyPromise,
13
+ decodeUtf8Chunked,
14
+ splitCommand,
15
+ ToArrayStream,
16
+ } from "../utils.js";
17
+
18
+ export interface AdbNoneProtocolProcess {
19
+ get stdin(): WritableStream<MaybeConsumable<Uint8Array>>;
20
+
21
+ /**
22
+ * Mix of stdout and stderr
23
+ */
24
+ get output(): ReadableStream<Uint8Array>;
25
+
26
+ get exited(): Promise<void>;
27
+
28
+ kill(): MaybePromiseLike<void>;
29
+ }
30
+
31
+ export type AdbNoneProtocolSpawner = (
32
+ command: string | readonly string[],
33
+ signal?: AbortSignal,
34
+ ) => Promise<AdbNoneProtocolProcess> &
35
+ AdbSubprocessSpawner.Wait<Uint8Array, string>;
36
+
37
+ export function adbNoneProtocolSpawner(
38
+ spawn: (
39
+ command: readonly string[],
40
+ signal: AbortSignal | undefined,
41
+ ) => Promise<AdbNoneProtocolProcess>,
42
+ ): AdbNoneProtocolSpawner {
43
+ return (command, signal) => {
44
+ signal?.throwIfAborted();
45
+
46
+ if (typeof command === "string") {
47
+ command = splitCommand(command);
48
+ }
49
+
50
+ const processPromise = spawn(
51
+ command,
52
+ signal,
53
+ ) as Promise<AdbNoneProtocolProcess> &
54
+ AdbSubprocessSpawner.Wait<Uint8Array, string>;
55
+
56
+ processPromise.wait = (options) => {
57
+ const waitPromise = processPromise.then(async (process) => {
58
+ const [, output] = await Promise.all([
59
+ options?.stdin?.pipeTo(process.stdin),
60
+ process.output.pipeThrough(new ToArrayStream()),
61
+ ]);
62
+ return output;
63
+ });
64
+
65
+ return createLazyPromise(
66
+ async () => {
67
+ const chunks = await waitPromise;
68
+ return concatUint8Arrays(chunks);
69
+ },
70
+ {
71
+ async toString() {
72
+ const chunks = await waitPromise;
73
+ return decodeUtf8Chunked(chunks);
74
+ },
75
+ },
76
+ );
77
+ };
78
+
79
+ return processPromise;
80
+ };
81
+ }
@@ -5,7 +5,7 @@ import type {
5
5
  WritableStream,
6
6
  } from "@yume-chan/stream-extra";
7
7
 
8
- export interface AdbPtyProcess<TExitCode> {
8
+ export interface AdbPty<TExitCode> {
9
9
  get input(): WritableStream<MaybeConsumable<Uint8Array>>;
10
10
  get output(): ReadableStream<Uint8Array>;
11
11
  get exited(): Promise<TExitCode>;
@@ -25,7 +25,7 @@ export class AdbSubprocessService {
25
25
 
26
26
  this.#noneProtocol = new AdbNoneProtocolSubprocessService(adb);
27
27
 
28
- if (adb.canUseFeature(AdbFeature.ShellV2)) {
28
+ if (adb.canUseFeature(AdbFeature.Shell2)) {
29
29
  this.#shellProtocol = new AdbShellProtocolSubprocessService(adb);
30
30
  }
31
31
  }
@@ -1,5 +1,5 @@
1
1
  export * from "./process.js";
2
2
  export * from "./pty.js";
3
3
  export * from "./service.js";
4
- export * from "./shared.js";
5
4
  export * from "./spawner.js";
5
+ // `shared.ts` is internal
@@ -14,13 +14,13 @@ import {
14
14
  } from "@yume-chan/stream-extra";
15
15
  import { EmptyUint8Array } from "@yume-chan/struct";
16
16
 
17
- import type { AdbSocket } from "../../../adb.js";
17
+ import type { Adb } from "../../../adb.js";
18
18
 
19
19
  import { AdbShellProtocolId, AdbShellProtocolPacket } from "./shared.js";
20
20
  import type { AdbShellProtocolProcess } from "./spawner.js";
21
21
 
22
22
  export class AdbShellProtocolProcessImpl implements AdbShellProtocolProcess {
23
- readonly #socket: AdbSocket;
23
+ readonly #socket: Adb.Socket;
24
24
  readonly #writer: WritableStreamDefaultWriter<MaybeConsumable<Uint8Array>>;
25
25
 
26
26
  readonly #stdin: WritableStream<MaybeConsumable<Uint8Array>>;
@@ -43,7 +43,7 @@ export class AdbShellProtocolProcessImpl implements AdbShellProtocolProcess {
43
43
  return this.#exited;
44
44
  }
45
45
 
46
- constructor(socket: AdbSocket, signal?: AbortSignal) {
46
+ constructor(socket: Adb.Socket, signal?: AbortSignal) {
47
47
  this.#socket = socket;
48
48
 
49
49
  let stdoutController!: PushReadableStreamController<Uint8Array>;
@@ -111,14 +111,13 @@ export class AdbShellProtocolProcessImpl implements AdbShellProtocolProcess {
111
111
 
112
112
  this.#writer = this.#socket.writable.getWriter();
113
113
  this.#stdin = new MaybeConsumable.WritableStream<Uint8Array>({
114
- write: async (chunk) => {
115
- await this.#writer.write(
114
+ write: (chunk) =>
115
+ this.#writer.write(
116
116
  AdbShellProtocolPacket.serialize({
117
117
  id: AdbShellProtocolId.Stdin,
118
118
  data: chunk,
119
119
  }),
120
- );
121
- },
120
+ ),
122
121
  close: () =>
123
122
  // Only shell protocol + raw mode supports closing stdin
124
123
  this.#writer.write(
@@ -12,13 +12,13 @@ import {
12
12
  } from "@yume-chan/stream-extra";
13
13
  import { encodeUtf8 } from "@yume-chan/struct";
14
14
 
15
- import type { AdbSocket } from "../../../adb.js";
16
- import type { AdbPtyProcess } from "../pty.js";
15
+ import type { Adb } from "../../../adb.js";
16
+ import type { AdbPty } from "../pty.js";
17
17
 
18
18
  import { AdbShellProtocolId, AdbShellProtocolPacket } from "./shared.js";
19
19
 
20
- export class AdbShellProtocolPtyProcess implements AdbPtyProcess<number> {
21
- readonly #socket: AdbSocket;
20
+ export class AdbShellProtocolPty implements AdbPty<number> {
21
+ readonly #socket: Adb.Socket;
22
22
  readonly #writer: WritableStreamDefaultWriter<MaybeConsumable<Uint8Array>>;
23
23
 
24
24
  readonly #input: WritableStream<MaybeConsumable<Uint8Array>>;
@@ -26,9 +26,9 @@ export class AdbShellProtocolPtyProcess implements AdbPtyProcess<number> {
26
26
  return this.#input;
27
27
  }
28
28
 
29
- readonly #stdout: ReadableStream<Uint8Array>;
29
+ readonly #output: ReadableStream<Uint8Array>;
30
30
  get output() {
31
- return this.#stdout;
31
+ return this.#output;
32
32
  }
33
33
 
34
34
  readonly #exited = new PromiseResolver<number>();
@@ -36,12 +36,12 @@ export class AdbShellProtocolPtyProcess implements AdbPtyProcess<number> {
36
36
  return this.#exited.promise;
37
37
  }
38
38
 
39
- constructor(socket: AdbSocket) {
39
+ constructor(socket: Adb.Socket) {
40
40
  this.#socket = socket;
41
41
 
42
- let stdoutController!: PushReadableStreamController<Uint8Array>;
43
- this.#stdout = new PushReadableStream<Uint8Array>((controller) => {
44
- stdoutController = controller;
42
+ let outputController!: PushReadableStreamController<Uint8Array>;
43
+ this.#output = new PushReadableStream<Uint8Array>((controller) => {
44
+ outputController = controller;
45
45
  });
46
46
 
47
47
  socket.readable
@@ -54,22 +54,23 @@ export class AdbShellProtocolPtyProcess implements AdbPtyProcess<number> {
54
54
  this.#exited.resolve(chunk.data[0]!);
55
55
  break;
56
56
  case AdbShellProtocolId.Stdout:
57
- await stdoutController.enqueue(chunk.data);
57
+ await outputController.enqueue(chunk.data);
58
58
  break;
59
+ // PTY mode doesn't have stderr
59
60
  }
60
61
  },
61
62
  }),
62
63
  )
63
64
  .then(
64
65
  () => {
65
- stdoutController.close();
66
+ outputController.close();
66
67
  // If `#exit` has already resolved, this will be a no-op
67
68
  this.#exited.reject(
68
69
  new Error("Socket ended without exit message"),
69
70
  );
70
71
  },
71
72
  (e) => {
72
- stdoutController.error(e);
73
+ outputController.error(e);
73
74
  // If `#exit` has already resolved, this will be a no-op
74
75
  this.#exited.reject(e);
75
76
  },
@@ -103,6 +104,7 @@ export class AdbShellProtocolPtyProcess implements AdbPtyProcess<number> {
103
104
  }
104
105
 
105
106
  sigint() {
107
+ // Write `^C`
106
108
  return this.#writeStdin(new Uint8Array([0x03]));
107
109
  }
108
110
 
@@ -0,0 +1,75 @@
1
+ import type { Adb } from "../../../adb.js";
2
+ import { AdbFeature } from "../../../features.js";
3
+
4
+ import { AdbShellProtocolProcessImpl } from "./process.js";
5
+ import { AdbShellProtocolPty } from "./pty.js";
6
+ import { AdbShellProtocolId, AdbShellProtocolPacket } from "./shared.js";
7
+ import { adbShellProtocolSpawner } from "./spawner.js";
8
+
9
+ export class AdbShellProtocolSubprocessService {
10
+ static readonly PacketId = AdbShellProtocolId;
11
+
12
+ static readonly Packet = AdbShellProtocolPacket;
13
+
14
+ readonly #adb: Adb;
15
+ get adb() {
16
+ return this.#adb;
17
+ }
18
+
19
+ get isSupported() {
20
+ return this.#adb.canUseFeature(AdbFeature.Shell2);
21
+ }
22
+
23
+ constructor(adb: Adb) {
24
+ this.#adb = adb;
25
+ }
26
+
27
+ spawn = adbShellProtocolSpawner(async (command, signal) => {
28
+ if (!command.length) {
29
+ throw new Error("Command cannot be empty");
30
+ }
31
+
32
+ // Don't escape `command`. See `AdbNoneProtocolSubprocessService.prototype.spawn` for details.
33
+ const service = "shell,v2,raw:" + command.join(" ");
34
+ const socket = await this.#adb.createSocket(service);
35
+
36
+ if (signal?.aborted) {
37
+ await socket.close();
38
+ throw signal.reason;
39
+ }
40
+
41
+ return new AdbShellProtocolProcessImpl(socket, signal);
42
+ });
43
+
44
+ async pty(options?: {
45
+ command?: string | readonly string[] | undefined;
46
+ terminalType?: string;
47
+ }): Promise<AdbShellProtocolPty> {
48
+ const { command, terminalType } = options ?? {};
49
+
50
+ let service = "shell,v2,pty";
51
+
52
+ if (terminalType) {
53
+ if (terminalType.includes(",") || terminalType.includes(":")) {
54
+ throw new Error("terminalType must not contain ',' or ':'");
55
+ }
56
+ service += `,TERM=` + terminalType;
57
+ }
58
+ service += ":";
59
+
60
+ if (typeof command === "string") {
61
+ service += command;
62
+ } else if (Array.isArray(command)) {
63
+ // Don't escape `command`. See `AdbNoneProtocolSubprocessService.prototype.spawn` for details.
64
+ service += command.join(" ");
65
+ }
66
+
67
+ return new AdbShellProtocolPty(await this.#adb.createSocket(service));
68
+ }
69
+ }
70
+
71
+ export namespace AdbShellProtocolSubprocessService {
72
+ export type PacketId = AdbShellProtocolId;
73
+
74
+ export type Packet = AdbShellProtocolPacket;
75
+ }
@@ -1,6 +1,7 @@
1
1
  import type { StructValue } from "@yume-chan/struct";
2
2
  import { buffer, struct, u32, u8 } from "@yume-chan/struct";
3
3
 
4
+ /** @internal */
4
5
  export const AdbShellProtocolId = {
5
6
  Stdin: 0,
6
7
  Stdout: 1,
@@ -10,10 +11,12 @@ export const AdbShellProtocolId = {
10
11
  WindowSizeChange: 5,
11
12
  } as const;
12
13
 
14
+ /** @internal */
13
15
  export type AdbShellProtocolId =
14
16
  (typeof AdbShellProtocolId)[keyof typeof AdbShellProtocolId];
15
17
 
16
18
  // This packet format is used in both directions.
19
+ /** @internal */
17
20
  export const AdbShellProtocolPacket = struct(
18
21
  {
19
22
  id: u8<AdbShellProtocolId>(),
@@ -22,4 +25,6 @@ export const AdbShellProtocolPacket = struct(
22
25
  { littleEndian: true },
23
26
  );
24
27
 
28
+ // `StructValue` and `StructInit` is same for `AdbShellProtocolPacket`.
29
+ /** @internal */
25
30
  export type AdbShellProtocolPacket = StructValue<typeof AdbShellProtocolPacket>;