@yume-chan/adb 0.0.10 → 0.0.11
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.
- package/CHANGELOG.json +26 -0
- package/CHANGELOG.md +15 -1
- package/LICENSE +1 -1
- package/README.md +56 -43
- package/esm/adb.d.ts +48 -0
- package/esm/adb.d.ts.map +1 -0
- package/esm/adb.js +141 -146
- package/esm/adb.js.map +1 -1
- package/{dts → esm}/auth.d.ts +8 -8
- package/esm/auth.d.ts.map +1 -0
- package/esm/auth.js +68 -108
- package/esm/auth.js.map +1 -1
- package/esm/backend.d.ts +9 -0
- package/esm/backend.d.ts.map +1 -0
- package/{dts → esm}/commands/base.d.ts +1 -1
- package/esm/commands/base.d.ts.map +1 -0
- package/esm/commands/base.js +1 -0
- package/esm/commands/base.js.map +1 -1
- package/{dts → esm}/commands/framebuffer.d.ts +3 -3
- package/esm/commands/framebuffer.d.ts.map +1 -0
- package/esm/commands/framebuffer.js +15 -18
- package/esm/commands/framebuffer.js.map +1 -1
- package/esm/commands/index.d.ts +9 -0
- package/esm/commands/index.d.ts.map +1 -0
- package/esm/commands/index.js +8 -8
- package/esm/commands/index.js.map +1 -1
- package/esm/commands/install.d.ts +4 -0
- package/esm/commands/install.d.ts.map +1 -0
- package/esm/commands/install.js +21 -13
- package/esm/commands/install.js.map +1 -1
- package/esm/commands/power.d.ts +23 -0
- package/esm/commands/power.d.ts.map +1 -0
- package/esm/commands/power.js +45 -0
- package/esm/commands/power.js.map +1 -0
- package/{dts → esm}/commands/reverse.d.ts +3 -3
- package/esm/commands/reverse.d.ts.map +1 -0
- package/esm/commands/reverse.js +49 -60
- package/esm/commands/reverse.js.map +1 -1
- package/esm/commands/subprocess/index.d.ts +57 -0
- package/esm/commands/subprocess/index.d.ts.map +1 -0
- package/esm/commands/subprocess/index.js +83 -0
- package/esm/commands/subprocess/index.js.map +1 -0
- package/esm/commands/subprocess/legacy.d.ts +28 -0
- package/esm/commands/subprocess/legacy.d.ts.map +1 -0
- package/esm/commands/subprocess/legacy.js +44 -0
- package/esm/commands/subprocess/legacy.js.map +1 -0
- package/esm/commands/subprocess/protocol.d.ts +38 -0
- package/esm/commands/subprocess/protocol.d.ts.map +1 -0
- package/esm/commands/subprocess/protocol.js +155 -0
- package/esm/commands/subprocess/protocol.js.map +1 -0
- package/esm/commands/subprocess/types.d.ts +47 -0
- package/esm/commands/subprocess/types.d.ts.map +1 -0
- package/esm/commands/{shell → subprocess}/types.js +0 -0
- package/esm/commands/{shell → subprocess}/types.js.map +1 -1
- package/{dts/commands/shell → esm/commands/subprocess}/utils.d.ts +0 -0
- package/esm/commands/subprocess/utils.d.ts.map +1 -0
- package/esm/commands/{shell → subprocess}/utils.js +0 -0
- package/esm/commands/subprocess/utils.js.map +1 -0
- package/esm/commands/sync/index.d.ts +8 -0
- package/esm/commands/sync/index.d.ts.map +1 -0
- package/esm/commands/sync/index.js +7 -7
- package/esm/commands/sync/index.js.map +1 -1
- package/{dts → esm}/commands/sync/list.d.ts +4 -4
- package/esm/commands/sync/list.d.ts.map +1 -0
- package/esm/commands/sync/list.js +16 -19
- package/esm/commands/sync/list.js.map +1 -1
- package/esm/commands/sync/pull.d.ts +11 -0
- package/esm/commands/sync/pull.d.ts.map +1 -0
- package/esm/commands/sync/pull.js +17 -11
- package/esm/commands/sync/pull.js.map +1 -1
- package/esm/commands/sync/push.d.ts +8 -0
- package/esm/commands/sync/push.d.ts.map +1 -0
- package/esm/commands/sync/push.js +19 -37
- package/esm/commands/sync/push.js.map +1 -1
- package/{dts → esm}/commands/sync/request.d.ts +3 -3
- package/esm/commands/sync/request.d.ts.map +1 -0
- package/esm/commands/sync/request.js +24 -27
- package/esm/commands/sync/request.js.map +1 -1
- package/{dts → esm}/commands/sync/response.d.ts +2 -2
- package/esm/commands/sync/response.d.ts.map +1 -0
- package/esm/commands/sync/response.js +16 -20
- package/esm/commands/sync/response.js.map +1 -1
- package/{dts → esm}/commands/sync/stat.d.ts +4 -4
- package/esm/commands/sync/stat.d.ts.map +1 -0
- package/esm/commands/sync/stat.js +22 -27
- package/esm/commands/sync/stat.js.map +1 -1
- package/esm/commands/sync/sync.d.ts +83 -0
- package/esm/commands/sync/sync.d.ts.map +1 -0
- package/esm/commands/sync/sync.js +92 -89
- package/esm/commands/sync/sync.js.map +1 -1
- package/{dts → esm}/commands/tcpip.d.ts +1 -1
- package/{dts → esm}/commands/tcpip.d.ts.map +1 -1
- package/esm/commands/tcpip.js +14 -19
- package/esm/commands/tcpip.js.map +1 -1
- package/{dts → esm}/crypto.d.ts +7 -7
- package/esm/crypto.d.ts.map +1 -0
- package/esm/crypto.js +26 -29
- package/esm/crypto.js.map +1 -1
- package/{dts → esm}/features.d.ts +0 -0
- package/{dts → esm}/features.d.ts.map +0 -0
- package/esm/features.js +1 -1
- package/esm/features.js.map +1 -1
- package/esm/index.d.ts +11 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +10 -10
- package/esm/index.js.map +1 -1
- package/esm/packet.d.ts +28 -0
- package/esm/packet.d.ts.map +1 -0
- package/esm/packet.js +26 -51
- package/esm/packet.js.map +1 -1
- package/esm/socket/controller.d.ts +37 -0
- package/esm/socket/controller.d.ts.map +1 -0
- package/esm/socket/controller.js +52 -66
- package/esm/socket/controller.js.map +1 -1
- package/{dts → esm}/socket/dispatcher.d.ts +10 -23
- package/esm/socket/dispatcher.d.ts.map +1 -0
- package/esm/socket/dispatcher.js +148 -164
- package/esm/socket/dispatcher.js.map +1 -1
- package/esm/socket/index.d.ts +3 -0
- package/esm/socket/index.d.ts.map +1 -0
- package/esm/socket/index.js +2 -6
- package/esm/socket/index.js.map +1 -1
- package/esm/socket/socket.d.ts +34 -0
- package/esm/socket/socket.d.ts.map +1 -0
- package/esm/socket/socket.js +69 -14
- package/esm/socket/socket.js.map +1 -1
- package/esm/stream/buffered.d.ts +35 -0
- package/esm/stream/buffered.d.ts.map +1 -0
- package/esm/stream/buffered.js +123 -0
- package/esm/stream/buffered.js.map +1 -0
- package/esm/stream/detect.bak.d.ts +240 -0
- package/esm/stream/detect.bak.d.ts.map +1 -0
- package/esm/stream/detect.bak.js +60 -0
- package/esm/stream/detect.bak.js.map +1 -0
- package/esm/stream/detect.d.ts +18 -0
- package/esm/stream/detect.d.ts.map +1 -0
- package/esm/stream/detect.js +6 -0
- package/esm/stream/detect.js.map +1 -0
- package/esm/stream/detect.native.d.ts +240 -0
- package/esm/stream/detect.native.d.ts.map +1 -0
- package/esm/stream/detect.native.js +60 -0
- package/esm/stream/detect.native.js.map +1 -0
- package/esm/stream/detect.polyfill.d.ts +18 -0
- package/esm/stream/detect.polyfill.d.ts.map +1 -0
- package/esm/stream/detect.polyfill.js +6 -0
- package/esm/stream/detect.polyfill.js.map +1 -0
- package/esm/stream/index.d.ts +4 -0
- package/esm/stream/index.d.ts.map +1 -0
- package/esm/stream/index.js +3 -2
- package/esm/stream/index.js.map +1 -1
- package/esm/stream/transform.d.ts +98 -0
- package/esm/stream/transform.d.ts.map +1 -0
- package/esm/stream/transform.js +352 -0
- package/esm/stream/transform.js.map +1 -0
- package/{dts → esm}/utils/auto-reset-event.d.ts +1 -1
- package/esm/utils/auto-reset-event.d.ts.map +1 -0
- package/esm/utils/auto-reset-event.js +2 -1
- package/esm/utils/auto-reset-event.js.map +1 -1
- package/esm/utils/base64.d.ts +5 -0
- package/esm/utils/base64.d.ts.map +1 -0
- package/esm/utils/base64.js +116 -80
- package/esm/utils/base64.js.map +1 -1
- package/esm/utils/encoding.d.ts +3 -0
- package/{dts → esm}/utils/encoding.d.ts.map +1 -1
- package/esm/utils/encoding.js +1 -1
- package/esm/utils/encoding.js.map +1 -1
- package/esm/utils/index.d.ts +4 -0
- package/esm/utils/index.d.ts.map +1 -0
- package/esm/utils/index.js +3 -5
- package/esm/utils/index.js.map +1 -1
- package/package.json +50 -44
- package/src/adb.ts +147 -143
- package/src/auth.ts +23 -19
- package/src/backend.ts +3 -12
- package/src/commands/base.ts +1 -1
- package/src/commands/framebuffer.ts +4 -4
- package/src/commands/index.ts +8 -8
- package/src/commands/install.ts +26 -15
- package/src/commands/power.ts +54 -0
- package/src/commands/reverse.ts +10 -8
- package/src/commands/subprocess/index.ts +124 -0
- package/src/commands/subprocess/legacy.ts +58 -0
- package/src/commands/subprocess/protocol.ts +185 -0
- package/src/commands/subprocess/types.ts +55 -0
- package/src/commands/{shell → subprocess}/utils.ts +0 -0
- package/src/commands/sync/index.ts +7 -7
- package/src/commands/sync/list.ts +7 -6
- package/src/commands/sync/pull.ts +27 -18
- package/src/commands/sync/push.ts +25 -30
- package/src/commands/sync/request.ts +7 -7
- package/src/commands/sync/response.ts +4 -4
- package/src/commands/sync/stat.ts +8 -6
- package/src/commands/sync/sync.ts +64 -32
- package/src/commands/tcpip.ts +3 -3
- package/src/crypto.ts +38 -43
- package/src/index.ts +11 -10
- package/src/packet.ts +37 -52
- package/src/socket/dispatcher.ts +90 -103
- package/src/socket/index.ts +2 -6
- package/src/socket/socket.ts +117 -16
- package/src/stream/buffered.ts +147 -0
- package/src/stream/detect.native.ts +362 -0
- package/src/stream/detect.polyfill.ts +25 -0
- package/src/stream/detect.ts +25 -0
- package/src/stream/index.ts +3 -2
- package/src/stream/transform.ts +427 -0
- package/src/utils/auto-reset-event.ts +1 -1
- package/src/utils/base64.ts +161 -129
- package/src/utils/encoding.ts +3 -3
- package/src/utils/index.ts +3 -5
- package/tsconfig.build.json +3 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.test.json +10 -0
- package/dts/adb.d.ts +0 -46
- package/dts/adb.d.ts.map +0 -1
- package/dts/auth.d.ts.map +0 -1
- package/dts/backend.d.ts +0 -13
- package/dts/backend.d.ts.map +0 -1
- package/dts/commands/base.d.ts.map +0 -1
- package/dts/commands/demo-mode.d.ts +0 -41
- package/dts/commands/demo-mode.d.ts.map +0 -1
- package/dts/commands/framebuffer.d.ts.map +0 -1
- package/dts/commands/index.d.ts +0 -9
- package/dts/commands/index.d.ts.map +0 -1
- package/dts/commands/install.d.ts +0 -3
- package/dts/commands/install.d.ts.map +0 -1
- package/dts/commands/reverse.d.ts.map +0 -1
- package/dts/commands/shell/index.d.ts +0 -46
- package/dts/commands/shell/index.d.ts.map +0 -1
- package/dts/commands/shell/legacy.d.ts +0 -38
- package/dts/commands/shell/legacy.d.ts.map +0 -1
- package/dts/commands/shell/protocol.d.ts +0 -45
- package/dts/commands/shell/protocol.d.ts.map +0 -1
- package/dts/commands/shell/types.d.ts +0 -47
- package/dts/commands/shell/types.d.ts.map +0 -1
- package/dts/commands/shell/utils.d.ts.map +0 -1
- package/dts/commands/sync/index.d.ts +0 -8
- package/dts/commands/sync/index.d.ts.map +0 -1
- package/dts/commands/sync/list.d.ts.map +0 -1
- package/dts/commands/sync/pull.d.ts +0 -11
- package/dts/commands/sync/pull.d.ts.map +0 -1
- package/dts/commands/sync/push.d.ts +0 -8
- package/dts/commands/sync/push.d.ts.map +0 -1
- package/dts/commands/sync/request.d.ts.map +0 -1
- package/dts/commands/sync/response.d.ts.map +0 -1
- package/dts/commands/sync/stat.d.ts.map +0 -1
- package/dts/commands/sync/sync.d.ts +0 -68
- package/dts/commands/sync/sync.d.ts.map +0 -1
- package/dts/crypto.d.ts.map +0 -1
- package/dts/index.d.ts +0 -11
- package/dts/index.d.ts.map +0 -1
- package/dts/packet.d.ts +0 -27
- package/dts/packet.d.ts.map +0 -1
- package/dts/socket/close-event-emitter.d.ts +0 -8
- package/dts/socket/close-event-emitter.d.ts.map +0 -1
- package/dts/socket/controller.d.ts +0 -43
- package/dts/socket/controller.d.ts.map +0 -1
- package/dts/socket/data-event-emitter.d.ts +0 -10
- package/dts/socket/data-event-emitter.d.ts.map +0 -1
- package/dts/socket/dispatcher.d.ts.map +0 -1
- package/dts/socket/index.d.ts +0 -7
- package/dts/socket/index.d.ts.map +0 -1
- package/dts/socket/logger.d.ts +0 -9
- package/dts/socket/logger.d.ts.map +0 -1
- package/dts/socket/socket.d.ts +0 -22
- package/dts/socket/socket.d.ts.map +0 -1
- package/dts/stream/buffered-stream.d.ts +0 -28
- package/dts/stream/buffered-stream.d.ts.map +0 -1
- package/dts/stream/index.d.ts +0 -3
- package/dts/stream/index.d.ts.map +0 -1
- package/dts/stream/stream.d.ts +0 -15
- package/dts/stream/stream.d.ts.map +0 -1
- package/dts/utils/auto-reset-event.d.ts.map +0 -1
- package/dts/utils/base64.d.ts +0 -7
- package/dts/utils/base64.d.ts.map +0 -1
- package/dts/utils/chunk.d.ts +0 -3
- package/dts/utils/chunk.d.ts.map +0 -1
- package/dts/utils/encoding.d.ts +0 -3
- package/dts/utils/event-queue.d.ts +0 -35
- package/dts/utils/event-queue.d.ts.map +0 -1
- package/dts/utils/index.d.ts +0 -6
- package/dts/utils/index.d.ts.map +0 -1
- package/esm/commands/demo-mode.js +0 -170
- package/esm/commands/demo-mode.js.map +0 -1
- package/esm/commands/shell/index.js +0 -62
- package/esm/commands/shell/index.js.map +0 -1
- package/esm/commands/shell/legacy.js +0 -49
- package/esm/commands/shell/legacy.js.map +0 -1
- package/esm/commands/shell/protocol.js +0 -106
- package/esm/commands/shell/protocol.js.map +0 -1
- package/esm/commands/shell/utils.js.map +0 -1
- package/esm/socket/close-event-emitter.js +0 -28
- package/esm/socket/close-event-emitter.js.map +0 -1
- package/esm/socket/data-event-emitter.js +0 -25
- package/esm/socket/data-event-emitter.js.map +0 -1
- package/esm/socket/logger.js +0 -2
- package/esm/socket/logger.js.map +0 -1
- package/esm/stream/buffered-stream.js +0 -67
- package/esm/stream/buffered-stream.js.map +0 -1
- package/esm/stream/stream.js +0 -41
- package/esm/stream/stream.js.map +0 -1
- package/esm/utils/chunk.js +0 -70
- package/esm/utils/chunk.js.map +0 -1
- package/esm/utils/event-queue.js +0 -104
- package/esm/utils/event-queue.js.map +0 -1
- package/src/commands/demo-mode.ts +0 -160
- package/src/commands/shell/index.ts +0 -87
- package/src/commands/shell/legacy.ts +0 -59
- package/src/commands/shell/protocol.ts +0 -121
- package/src/commands/shell/types.ts +0 -55
- package/src/socket/close-event-emitter.ts +0 -28
- package/src/socket/controller.ts +0 -105
- package/src/socket/data-event-emitter.ts +0 -27
- package/src/socket/logger.ts +0 -12
- package/src/stream/buffered-stream.ts +0 -92
- package/src/stream/stream.ts +0 -50
- package/src/utils/chunk.ts +0 -70
- package/src/utils/event-queue.ts +0 -145
package/esm/crypto.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
import { getBigUint64, setBigUint64 } from '@yume-chan/dataview-bigint-polyfill/esm/fallback.js';
|
|
1
2
|
const BigInt0 = BigInt(0);
|
|
2
3
|
const BigInt1 = BigInt(1);
|
|
3
4
|
const BigInt2 = BigInt(2);
|
|
4
|
-
const
|
|
5
|
-
export function getBig(
|
|
6
|
-
const view = new DataView(buffer);
|
|
5
|
+
const BigInt64 = BigInt(64);
|
|
6
|
+
export function getBig(array, offset = 0, length = array.byteLength - offset) {
|
|
7
|
+
const view = new DataView(array.buffer, array.byteOffset, array.byteLength);
|
|
7
8
|
let result = BigInt0;
|
|
8
|
-
//
|
|
9
|
+
// Currently `length` must be a multiplication of 8
|
|
9
10
|
// Support for arbitrary length can be easily added
|
|
10
11
|
for (let i = offset; i < offset + length; i += 8) {
|
|
11
|
-
result
|
|
12
|
-
const value =
|
|
12
|
+
result <<= BigInt64;
|
|
13
|
+
const value = getBigUint64(view, i, false);
|
|
13
14
|
result += value;
|
|
14
15
|
}
|
|
15
16
|
return result;
|
|
@@ -18,20 +19,20 @@ export function setBig(buffer, value, offset = 0) {
|
|
|
18
19
|
const uint64Array = [];
|
|
19
20
|
while (value > BigInt0) {
|
|
20
21
|
uint64Array.push(BigInt.asUintN(64, value));
|
|
21
|
-
value
|
|
22
|
+
value >>= BigInt64;
|
|
22
23
|
}
|
|
23
24
|
const view = new DataView(buffer);
|
|
24
25
|
for (let i = uint64Array.length - 1; i >= 0; i -= 1) {
|
|
25
|
-
|
|
26
|
+
setBigUint64(view, offset, uint64Array[i], false);
|
|
26
27
|
offset += 8;
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
|
-
export function setBigLE(
|
|
30
|
-
const view = new DataView(buffer);
|
|
30
|
+
export function setBigLE(array, value, offset = 0) {
|
|
31
|
+
const view = new DataView(array.buffer, array.byteOffset, array.byteLength);
|
|
31
32
|
while (value > BigInt0) {
|
|
32
|
-
|
|
33
|
+
setBigUint64(view, offset, value, true);
|
|
33
34
|
offset += 8;
|
|
34
|
-
value
|
|
35
|
+
value >>= BigInt64;
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
// These values are correct only if
|
|
@@ -65,11 +66,6 @@ export function parsePrivateKey(key) {
|
|
|
65
66
|
// I can't understand, but it does work
|
|
66
67
|
// Only used with numbers less than 2^32 so doesn't need BigInt
|
|
67
68
|
export function modInverse(a, m) {
|
|
68
|
-
// validate inputs
|
|
69
|
-
[a, m] = [Number(a), Number(m)];
|
|
70
|
-
if (Number.isNaN(a) || Number.isNaN(m)) {
|
|
71
|
-
return NaN; // invalid input
|
|
72
|
-
}
|
|
73
69
|
a = (a % m + m) % m;
|
|
74
70
|
if (!a || m < 2) {
|
|
75
71
|
return NaN; // invalid input
|
|
@@ -95,7 +91,7 @@ export function modInverse(a, m) {
|
|
|
95
91
|
export function calculatePublicKeyLength() {
|
|
96
92
|
return 4 + 4 + 2048 / 8 + 2048 / 8 + 4;
|
|
97
93
|
}
|
|
98
|
-
export function calculatePublicKey(privateKey, output
|
|
94
|
+
export function calculatePublicKey(privateKey, output) {
|
|
99
95
|
// Android has its own public key generation algorithm
|
|
100
96
|
// See https://android.googlesource.com/platform/system/core.git/+/91784040db2b9273687f88d8b95f729d4a61ecc2/libcrypto_utils/android_pubkey.cpp#111
|
|
101
97
|
// The public key is an array of
|
|
@@ -116,16 +112,17 @@ export function calculatePublicKey(privateKey, output, outputOffset = 0) {
|
|
|
116
112
|
let outputType;
|
|
117
113
|
const outputLength = calculatePublicKeyLength();
|
|
118
114
|
if (!output) {
|
|
119
|
-
output = new
|
|
120
|
-
outputType = '
|
|
115
|
+
output = new Uint8Array(outputLength);
|
|
116
|
+
outputType = 'Uint8Array';
|
|
121
117
|
}
|
|
122
118
|
else {
|
|
123
|
-
if (output.byteLength
|
|
119
|
+
if (output.byteLength < outputLength) {
|
|
124
120
|
throw new Error('output buffer is too small');
|
|
125
121
|
}
|
|
126
122
|
outputType = 'number';
|
|
127
123
|
}
|
|
128
|
-
const outputView = new DataView(output);
|
|
124
|
+
const outputView = new DataView(output.buffer, output.byteOffset, output.byteLength);
|
|
125
|
+
let outputOffset = 0;
|
|
129
126
|
// modulusLengthInWords
|
|
130
127
|
outputView.setUint32(outputOffset, 2048 / 8 / 4, true);
|
|
131
128
|
outputOffset += 4;
|
|
@@ -145,7 +142,7 @@ export function calculatePublicKey(privateKey, output, outputOffset = 0) {
|
|
|
145
142
|
// exponent
|
|
146
143
|
outputView.setUint32(outputOffset, 65537, true);
|
|
147
144
|
outputOffset += 4;
|
|
148
|
-
if (outputType === '
|
|
145
|
+
if (outputType === 'Uint8Array') {
|
|
149
146
|
return output;
|
|
150
147
|
}
|
|
151
148
|
else {
|
|
@@ -180,14 +177,14 @@ export const Asn1OctetString = 0x04;
|
|
|
180
177
|
export const Asn1Null = 0x05;
|
|
181
178
|
export const Asn1Oid = 0x06;
|
|
182
179
|
// PKCS#1 SHA-1 hash digest info
|
|
183
|
-
export const Sha1DigestInfo = [
|
|
180
|
+
export const Sha1DigestInfo = new Uint8Array([
|
|
184
181
|
Asn1Sequence, 0x0d + Sha1DigestLength,
|
|
185
182
|
Asn1Sequence, 0x09,
|
|
186
183
|
// SHA-1 (1 3 14 3 2 26)
|
|
187
184
|
Asn1Oid, 0x05, 1 * 40 + 3, 14, 3, 2, 26,
|
|
188
185
|
Asn1Null, 0x00,
|
|
189
186
|
Asn1OctetString, Sha1DigestLength
|
|
190
|
-
];
|
|
187
|
+
]);
|
|
191
188
|
// SubtleCrypto.sign() will hash the given data and sign the hash
|
|
192
189
|
// But we don't need the hashing step
|
|
193
190
|
// (In another word, ADB just requires the client to
|
|
@@ -203,19 +200,19 @@ export function sign(privateKey, data) {
|
|
|
203
200
|
index += 1;
|
|
204
201
|
padded[index] = 1;
|
|
205
202
|
index += 1;
|
|
206
|
-
const fillLength = padded.length - Sha1DigestInfo.length - data.
|
|
203
|
+
const fillLength = padded.length - Sha1DigestInfo.length - data.length - 1;
|
|
207
204
|
while (index < fillLength) {
|
|
208
205
|
padded[index] = 0xff;
|
|
209
206
|
index += 1;
|
|
210
207
|
}
|
|
211
208
|
padded[index] = 0;
|
|
212
209
|
index += 1;
|
|
213
|
-
padded.set(
|
|
210
|
+
padded.set(Sha1DigestInfo, index);
|
|
214
211
|
index += Sha1DigestInfo.length;
|
|
215
|
-
padded.set(
|
|
212
|
+
padded.set(data, index);
|
|
216
213
|
// Encryption
|
|
217
214
|
// signature = padded ** d % n
|
|
218
|
-
let signature = powMod(getBig(padded
|
|
215
|
+
let signature = powMod(getBig(padded), d, n);
|
|
219
216
|
// Put into an ArrayBuffer
|
|
220
217
|
const result = new ArrayBuffer(256);
|
|
221
218
|
setBig(result, signature);
|
package/esm/crypto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
package/esm/features.js
CHANGED
package/esm/features.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACnB,iCAAkB,CAAA;IAClB,0BAAW,CAAA;IACX,mCAAoB,CAAA;AACxB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB"}
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACnB,iCAAkB,CAAA;IAClB,0BAAW,CAAA;IACX,mCAAoB,CAAA;AACxB,CAAC,EAJW,WAAW,GAAX,WAAW,KAAX,WAAW,QAItB"}
|
package/esm/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
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 './stream/index.js';
|
|
10
|
+
export * from './utils/index.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,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,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
|
package/esm/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export * from './adb';
|
|
2
|
-
export * from './auth';
|
|
3
|
-
export * from './backend';
|
|
4
|
-
export * from './commands';
|
|
5
|
-
export * from './crypto';
|
|
6
|
-
export * from './features';
|
|
7
|
-
export * from './packet';
|
|
8
|
-
export * from './socket';
|
|
9
|
-
export * from './stream';
|
|
10
|
-
export * from './utils';
|
|
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 './stream/index.js';
|
|
10
|
+
export * from './utils/index.js';
|
|
11
11
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,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,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
|
package/esm/packet.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import Struct from '@yume-chan/struct';
|
|
2
|
+
import { TransformStream } from "./stream/index.js";
|
|
3
|
+
export declare enum AdbCommand {
|
|
4
|
+
Auth = 1213486401,
|
|
5
|
+
Close = 1163086915,
|
|
6
|
+
Connect = 1314410051,
|
|
7
|
+
OK = 1497451343,
|
|
8
|
+
Open = 1313165391,
|
|
9
|
+
Write = 1163154007
|
|
10
|
+
}
|
|
11
|
+
export declare const AdbPacket: Struct<{
|
|
12
|
+
command: number;
|
|
13
|
+
arg0: number;
|
|
14
|
+
arg1: number;
|
|
15
|
+
payloadLength: number;
|
|
16
|
+
checksum: number;
|
|
17
|
+
magic: number;
|
|
18
|
+
payload: Uint8Array;
|
|
19
|
+
}, "payloadLength", {}, undefined>;
|
|
20
|
+
export declare type AdbPacket = typeof AdbPacket['TDeserializeResult'];
|
|
21
|
+
export declare type AdbPacketCore = Omit<typeof AdbPacket['TInit'], 'checksum' | 'magic'>;
|
|
22
|
+
export declare type AdbPacketInit = Omit<typeof AdbPacket['TInit'], 'magic'>;
|
|
23
|
+
export declare function calculateChecksum(payload: Uint8Array): number;
|
|
24
|
+
export declare function calculateChecksum(init: AdbPacketCore): AdbPacketInit;
|
|
25
|
+
export declare class AdbPacketSerializeStream extends TransformStream<AdbPacketInit, Uint8Array> {
|
|
26
|
+
constructor();
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=packet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packet.d.ts","sourceRoot":"","sources":["../src/packet.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,oBAAY,UAAU;IAClB,IAAI,aAAa;IACjB,KAAK,aAAa;IAClB,OAAO,aAAa;IACpB,EAAE,aAAa;IACf,IAAI,aAAa;IACjB,KAAK,aAAa;CACrB;AAaD,eAAO,MAAM,SAAS;;;;;;;;kCAG0C,CAAC;AAEjE,oBAAY,SAAS,GAAG,OAAO,SAAS,CAAC,oBAAoB,CAAC,CAAC;AAG/D,oBAAY,aAAa,GAAG,IAAI,CAAC,OAAO,SAAS,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;AAGlF,oBAAY,aAAa,GAAG,IAAI,CAAC,OAAO,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AAErE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC;AAC/D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,CAAC;AAUtE,qBAAa,wBAAyB,SAAQ,eAAe,CAAC,aAAa,EAAE,UAAU,CAAC;;CAqBvF"}
|
package/esm/packet.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import Struct from '@yume-chan/struct';
|
|
3
|
-
import {
|
|
2
|
+
import { TransformStream } from "./stream/index.js";
|
|
4
3
|
export var AdbCommand;
|
|
5
4
|
(function (AdbCommand) {
|
|
6
5
|
AdbCommand[AdbCommand["Auth"] = 1213486401] = "Auth";
|
|
@@ -9,7 +8,7 @@ export var AdbCommand;
|
|
|
9
8
|
AdbCommand[AdbCommand["OK"] = 1497451343] = "OK";
|
|
10
9
|
AdbCommand[AdbCommand["Open"] = 1313165391] = "Open";
|
|
11
10
|
AdbCommand[AdbCommand["Write"] = 1163154007] = "Write";
|
|
12
|
-
})(AdbCommand || (AdbCommand = {}));
|
|
11
|
+
})(AdbCommand = AdbCommand || (AdbCommand = {}));
|
|
13
12
|
const AdbPacketHeader = new Struct({ littleEndian: true })
|
|
14
13
|
.uint32('command')
|
|
15
14
|
.uint32('arg0')
|
|
@@ -17,56 +16,32 @@ const AdbPacketHeader = new Struct({ littleEndian: true })
|
|
|
17
16
|
.uint32('payloadLength')
|
|
18
17
|
.uint32('checksum')
|
|
19
18
|
.int32('magic');
|
|
20
|
-
const
|
|
19
|
+
export const AdbPacket = new Struct({ littleEndian: true })
|
|
21
20
|
.fields(AdbPacketHeader)
|
|
22
|
-
.
|
|
23
|
-
export
|
|
24
|
-
(
|
|
25
|
-
|
|
26
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
-
// Detect boundary
|
|
28
|
-
// Note that it relies on the backend to only return data from one write operation
|
|
29
|
-
let buffer;
|
|
30
|
-
do {
|
|
31
|
-
// Maybe it's a payload from last connection.
|
|
32
|
-
// Ignore and try again
|
|
33
|
-
buffer = yield backend.read(24);
|
|
34
|
-
} while (buffer.byteLength !== 24);
|
|
35
|
-
let bufferUsed = false;
|
|
36
|
-
const stream = new BufferedStream({
|
|
37
|
-
read(length) {
|
|
38
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
-
if (!bufferUsed) {
|
|
40
|
-
bufferUsed = true;
|
|
41
|
-
return buffer;
|
|
42
|
-
}
|
|
43
|
-
return backend.read(length);
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
return AdbPacketStruct.deserialize(stream);
|
|
48
|
-
});
|
|
21
|
+
.uint8Array('payload', { lengthField: 'payloadLength' });
|
|
22
|
+
export function calculateChecksum(payload) {
|
|
23
|
+
if (payload instanceof Uint8Array) {
|
|
24
|
+
return payload.reduce((result, item) => result + item, 0);
|
|
49
25
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
26
|
+
else {
|
|
27
|
+
payload.checksum = calculateChecksum(payload.payload);
|
|
28
|
+
return payload;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class AdbPacketSerializeStream extends TransformStream {
|
|
32
|
+
constructor() {
|
|
33
|
+
super({
|
|
34
|
+
transform: async (init, controller) => {
|
|
35
|
+
// This syntax is ugly, but I don't want to create an new object.
|
|
36
|
+
init.magic = init.command ^ 0xFFFFFFFF;
|
|
37
|
+
init.payloadLength = init.payload.byteLength;
|
|
38
|
+
controller.enqueue(AdbPacketHeader.serialize(init));
|
|
39
|
+
if (init.payload.byteLength) {
|
|
40
|
+
// Enqueue payload separately to avoid copying
|
|
41
|
+
controller.enqueue(init.payload);
|
|
42
|
+
}
|
|
43
|
+
},
|
|
68
44
|
});
|
|
69
45
|
}
|
|
70
|
-
|
|
71
|
-
})(AdbPacket || (AdbPacket = {}));
|
|
46
|
+
}
|
|
72
47
|
//# sourceMappingURL=packet.js.map
|
package/esm/packet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packet.js","sourceRoot":"","sources":["../src/packet.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"packet.js","sourceRoot":"","sources":["../src/packet.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAN,IAAY,UAOX;AAPD,WAAY,UAAU;IAClB,oDAAiB,CAAA;IACjB,sDAAkB,CAAA;IAClB,0DAAoB,CAAA;IACpB,gDAAe,CAAA;IACf,oDAAiB,CAAA;IACjB,sDAAkB,CAAA;AACtB,CAAC,EAPW,UAAU,GAAV,UAAU,KAAV,UAAU,QAOrB;AAED,MAAM,eAAe,GACjB,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,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;AAIxB,MAAM,CAAC,MAAM,SAAS,GAClB,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC7B,MAAM,CAAC,eAAe,CAAC;KACvB,UAAU,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;AAYjE,MAAM,UAAU,iBAAiB,CAAC,OAAmC;IACjE,IAAI,OAAO,YAAY,UAAU,EAAE;QAC/B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;KAC7D;SAAM;QACF,OAAyB,CAAC,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzE,OAAO,OAAwB,CAAC;KACnC;AACL,CAAC;AAED,MAAM,OAAO,wBAAyB,SAAQ,eAA0C;IACpF;QACI,KAAK,CAAC;YACF,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;gBAClC,iEAAiE;gBAChE,IAAuC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;gBAC1E,IAAuC,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBAEjF,UAAU,CAAC,OAAO,CACd,eAAe,CAAC,SAAS,CACrB,IAAsC,CACzC,CACJ,CAAC;gBAEF,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;oBACzB,8CAA8C;oBAC9C,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACpC;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ReadableStream, WritableStream } from '../stream';
|
|
2
|
+
import { AdbPacketDispatcher } from './dispatcher';
|
|
3
|
+
export interface AdbSocketInfo {
|
|
4
|
+
localId: number;
|
|
5
|
+
remoteId: number;
|
|
6
|
+
localCreated: boolean;
|
|
7
|
+
serviceString: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AdbSocketConstructionOptions {
|
|
10
|
+
dispatcher: AdbPacketDispatcher;
|
|
11
|
+
localId: number;
|
|
12
|
+
remoteId: number;
|
|
13
|
+
localCreated: boolean;
|
|
14
|
+
serviceString: string;
|
|
15
|
+
highWaterMark?: number | undefined;
|
|
16
|
+
}
|
|
17
|
+
export declare class AdbSocketController implements AdbSocketInfo {
|
|
18
|
+
private readonly dispatcher;
|
|
19
|
+
readonly localId: number;
|
|
20
|
+
readonly remoteId: number;
|
|
21
|
+
readonly localCreated: boolean;
|
|
22
|
+
readonly serviceString: string;
|
|
23
|
+
private _factory;
|
|
24
|
+
private _readable;
|
|
25
|
+
private _readableController;
|
|
26
|
+
get readable(): ReadableStream<Uint8Array>;
|
|
27
|
+
private _writePromise;
|
|
28
|
+
readonly writable: WritableStream<Uint8Array>;
|
|
29
|
+
private _closed;
|
|
30
|
+
get closed(): boolean;
|
|
31
|
+
constructor(options: AdbSocketConstructionOptions);
|
|
32
|
+
enqueue(packet: Uint8Array): Promise<void>;
|
|
33
|
+
ack(): void;
|
|
34
|
+
close(): Promise<void>;
|
|
35
|
+
dispose(): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/socket/controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4E,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACrI,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,OAAO,CAAC;IAEtB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,4BAA4B;IACzC,UAAU,EAAE,mBAAmB,CAAC;IAEhC,OAAO,EAAE,MAAM,CAAC;IAEhB,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,OAAO,CAAC;IAEtB,aAAa,EAAE,MAAM,CAAC;IAEtB,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,qBAAa,mBAAoB,YAAW,aAAa;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAElD,SAAgB,OAAO,EAAG,MAAM,CAAC;IACjC,SAAgB,QAAQ,EAAG,MAAM,CAAC;IAClC,SAAgB,YAAY,EAAG,OAAO,CAAC;IACvC,SAAgB,aAAa,EAAG,MAAM,CAAC;IAEvC,OAAO,CAAC,QAAQ,CAA8C;IAE9D,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,mBAAmB,CAA4C;IACvE,IAAW,QAAQ,+BAA6B;IAEhD,OAAO,CAAC,aAAa,CAAoC;IACzD,SAAgB,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAErD,OAAO,CAAC,OAAO,CAAS;IACxB,IAAW,MAAM,YAA2B;gBAEzB,OAAO,EAAE,4BAA4B;IAsC3C,OAAO,CAAC,MAAM,EAAE,UAAU;IAIhC,GAAG;IAIG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB5B,OAAO;CAQjB"}
|
package/esm/socket/controller.js
CHANGED
|
@@ -1,80 +1,66 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AutoDisposable } from '@yume-chan/event';
|
|
1
|
+
import { PromiseResolver } from "@yume-chan/async";
|
|
3
2
|
import { AdbCommand } from '../packet';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
import { ChunkStream, DuplexStreamFactory, pipeFrom } from '../stream';
|
|
4
|
+
export class AdbSocketController {
|
|
5
|
+
dispatcher;
|
|
6
|
+
localId;
|
|
7
|
+
remoteId;
|
|
8
|
+
localCreated;
|
|
9
|
+
serviceString;
|
|
10
|
+
_factory;
|
|
11
|
+
_readable;
|
|
12
|
+
_readableController;
|
|
13
|
+
get readable() { return this._readable; }
|
|
14
|
+
_writePromise;
|
|
15
|
+
writable;
|
|
16
|
+
_closed = false;
|
|
17
|
+
get closed() { return this._closed; }
|
|
8
18
|
constructor(options) {
|
|
9
|
-
super();
|
|
10
|
-
this.writeChunkLock = this.addDisposable(new AutoResetEvent());
|
|
11
|
-
this.writeLock = this.addDisposable(new AutoResetEvent());
|
|
12
|
-
this.dataEvent = this.addDisposable(new DataEventEmitter());
|
|
13
|
-
this._closed = false;
|
|
14
|
-
this.closeEvent = this.addDisposable(new CloseEventEmitter());
|
|
15
19
|
Object.assign(this, options);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// Wait for an ack packet
|
|
24
|
-
yield this.writeChunkLock.wait();
|
|
25
|
-
}
|
|
26
|
-
catch (_a) {
|
|
27
|
-
// Lock has been disposed, which means the socket has been closed
|
|
28
|
-
throw new Error('Can not write after closed');
|
|
29
|
-
}
|
|
30
|
-
yield this.dispatcher.sendPacket(AdbCommand.Write, this.localId, this.remoteId, data);
|
|
20
|
+
// Check this image to help you understand the stream graph
|
|
21
|
+
// cspell: disable-next-line
|
|
22
|
+
// https://www.plantuml.com/plantuml/png/TL0zoeGm4ErpYc3l5JxyS0yWM6mX5j4C6p4cxcJ25ejttuGX88ZftizxUKmJI275pGhXl0PP_UkfK_CAz5Z2hcWsW9Ny2fdU4C1f5aSchFVxA8vJjlTPRhqZzDQMRB7AklwJ0xXtX0ZSKH1h24ghoKAdGY23FhxC4nS2pDvxzIvxb-8THU0XlEQJ-ZB7SnXTAvc_LhOckhMdLBnbtndpb-SB7a8q2SRD_W00
|
|
23
|
+
this._factory = new DuplexStreamFactory({
|
|
24
|
+
close: async () => {
|
|
25
|
+
await this.close();
|
|
26
|
+
},
|
|
31
27
|
});
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
// Keep write operations in order
|
|
38
|
-
yield this.writeLock.wait();
|
|
39
|
-
}
|
|
40
|
-
catch (_b) {
|
|
41
|
-
// Lock has been disposed, which means the socket has been closed
|
|
42
|
-
throw new Error('Can not write after closed');
|
|
43
|
-
}
|
|
44
|
-
try {
|
|
45
|
-
for (var _c = __asyncValues(chunkArrayLike(data, this.dispatcher.maxPayloadSize)), _d; _d = yield _c.next(), !_d.done;) {
|
|
46
|
-
const chunk = _d.value;
|
|
47
|
-
yield this.writeChunk(chunk);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
51
|
-
finally {
|
|
52
|
-
try {
|
|
53
|
-
if (_d && !_d.done && (_a = _c.return)) yield _a.call(_c);
|
|
54
|
-
}
|
|
55
|
-
finally { if (e_1) throw e_1.error; }
|
|
56
|
-
}
|
|
57
|
-
this.writeLock.notify();
|
|
28
|
+
this._readable = this._factory.createPushReadable(controller => {
|
|
29
|
+
this._readableController = controller;
|
|
30
|
+
}, {
|
|
31
|
+
highWaterMark: options.highWaterMark ?? 16 * 1024,
|
|
32
|
+
size(chunk) { return chunk.byteLength; }
|
|
58
33
|
});
|
|
34
|
+
this.writable = pipeFrom(this._factory.createWritable({
|
|
35
|
+
write: async (chunk) => {
|
|
36
|
+
// Wait for an ack packet
|
|
37
|
+
this._writePromise = new PromiseResolver();
|
|
38
|
+
await this.dispatcher.sendPacket(AdbCommand.Write, this.localId, this.remoteId, chunk);
|
|
39
|
+
await this._writePromise.promise;
|
|
40
|
+
},
|
|
41
|
+
}), new ChunkStream(this.dispatcher.maxPayloadSize));
|
|
42
|
+
}
|
|
43
|
+
async enqueue(packet) {
|
|
44
|
+
await this._readableController.enqueue(packet);
|
|
59
45
|
}
|
|
60
46
|
ack() {
|
|
61
|
-
this.
|
|
47
|
+
this._writePromise?.resolve();
|
|
62
48
|
}
|
|
63
|
-
close() {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
});
|
|
49
|
+
async close() {
|
|
50
|
+
// Error out the pending writes
|
|
51
|
+
this._writePromise?.reject(new Error('Socket closed'));
|
|
52
|
+
if (!this._closed) {
|
|
53
|
+
this._closed = true;
|
|
54
|
+
// Only send close packet when `close` is called before `dispose`
|
|
55
|
+
// (the client initiated the close)
|
|
56
|
+
await this.dispatcher.sendPacket(AdbCommand.Close, this.localId, this.remoteId);
|
|
57
|
+
}
|
|
73
58
|
}
|
|
74
59
|
dispose() {
|
|
75
60
|
this._closed = true;
|
|
76
|
-
this.
|
|
77
|
-
|
|
61
|
+
this._factory.close();
|
|
62
|
+
// Close `writable` side
|
|
63
|
+
this.close();
|
|
78
64
|
}
|
|
79
65
|
}
|
|
80
66
|
//# sourceMappingURL=controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/socket/controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/socket/controller.ts"],"names":[],"mappings":"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"}
|