@yume-chan/adb 0.0.19 → 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.
- package/CHANGELOG.json +33 -0
- package/CHANGELOG.md +15 -1
- package/README.md +220 -103
- package/esm/adb.d.ts +24 -44
- package/esm/adb.d.ts.map +1 -1
- package/esm/adb.js +14 -203
- package/esm/adb.js.map +1 -1
- package/esm/banner.d.ts +17 -0
- package/esm/banner.d.ts.map +1 -0
- package/esm/banner.js +67 -0
- package/esm/banner.js.map +1 -0
- package/esm/commands/power.d.ts +1 -1
- package/esm/commands/power.js +2 -2
- package/esm/commands/reverse.d.ts +17 -18
- package/esm/commands/reverse.d.ts.map +1 -1
- package/esm/commands/reverse.js +53 -48
- package/esm/commands/reverse.js.map +1 -1
- package/esm/commands/subprocess/protocols/none.d.ts +3 -8
- package/esm/commands/subprocess/protocols/none.d.ts.map +1 -1
- package/esm/commands/subprocess/protocols/none.js +16 -16
- package/esm/commands/subprocess/protocols/none.js.map +1 -1
- package/esm/commands/subprocess/protocols/shell.d.ts +3 -9
- package/esm/commands/subprocess/protocols/shell.d.ts.map +1 -1
- package/esm/commands/subprocess/protocols/shell.js +48 -42
- package/esm/commands/subprocess/protocols/shell.js.map +1 -1
- package/esm/commands/subprocess/protocols/types.d.ts +1 -2
- package/esm/commands/subprocess/protocols/types.d.ts.map +1 -1
- package/esm/commands/sync/list.js +2 -2
- package/esm/commands/sync/push.d.ts +14 -3
- package/esm/commands/sync/push.d.ts.map +1 -1
- package/esm/commands/sync/push.js +8 -8
- package/esm/commands/sync/push.js.map +1 -1
- package/esm/commands/sync/request.js +1 -1
- package/esm/commands/sync/response.d.ts +3 -3
- package/esm/commands/sync/response.d.ts.map +1 -1
- package/esm/commands/sync/response.js +3 -3
- package/esm/commands/sync/response.js.map +1 -1
- package/esm/commands/sync/socket.d.ts +8 -13
- package/esm/commands/sync/socket.d.ts.map +1 -1
- package/esm/commands/sync/socket.js +32 -29
- package/esm/commands/sync/socket.js.map +1 -1
- package/esm/commands/sync/stat.js +2 -2
- package/esm/commands/sync/stat.js.map +1 -1
- package/esm/commands/sync/sync.d.ts +11 -18
- package/esm/commands/sync/sync.d.ts.map +1 -1
- package/esm/commands/sync/sync.js +19 -23
- package/esm/commands/sync/sync.js.map +1 -1
- package/esm/commands/tcpip.d.ts +2 -2
- package/esm/commands/tcpip.d.ts.map +1 -1
- package/esm/commands/tcpip.js +4 -2
- package/esm/commands/tcpip.js.map +1 -1
- package/esm/{auth.d.ts → daemon/auth.d.ts} +1 -2
- package/esm/daemon/auth.d.ts.map +1 -0
- package/esm/{auth.js → daemon/auth.js} +14 -14
- package/esm/daemon/auth.js.map +1 -0
- package/esm/daemon/connection.d.ts +11 -0
- package/esm/daemon/connection.d.ts.map +1 -0
- package/esm/daemon/connection.js +2 -0
- package/esm/daemon/connection.js.map +1 -0
- package/esm/{crypto.d.ts → daemon/crypto.d.ts} +5 -5
- package/esm/daemon/crypto.d.ts.map +1 -0
- package/esm/{crypto.js → daemon/crypto.js} +23 -27
- package/esm/daemon/crypto.js.map +1 -0
- package/esm/{backend.d.ts → daemon/device.d.ts} +2 -2
- package/esm/daemon/device.d.ts.map +1 -0
- package/esm/daemon/device.js +2 -0
- package/esm/daemon/device.js.map +1 -0
- package/esm/{socket → daemon}/dispatcher.d.ts +8 -26
- package/esm/daemon/dispatcher.d.ts.map +1 -0
- package/esm/{socket → daemon}/dispatcher.js +65 -63
- package/esm/daemon/dispatcher.js.map +1 -0
- package/esm/daemon/index.d.ts +8 -0
- package/esm/daemon/index.d.ts.map +1 -0
- package/esm/daemon/index.js +8 -0
- package/esm/daemon/index.js.map +1 -0
- package/esm/{packet.d.ts → daemon/packet.d.ts} +4 -4
- package/esm/daemon/packet.d.ts.map +1 -0
- package/esm/{packet.js → daemon/packet.js} +1 -1
- package/esm/daemon/packet.js.map +1 -0
- package/esm/{socket → daemon}/socket.d.ts +15 -17
- package/esm/daemon/socket.d.ts.map +1 -0
- package/esm/{socket → daemon}/socket.js +38 -35
- package/esm/daemon/socket.js.map +1 -0
- package/esm/daemon/transport.d.ts +45 -0
- package/esm/daemon/transport.d.ts.map +1 -0
- package/esm/daemon/transport.js +184 -0
- package/esm/daemon/transport.js.map +1 -0
- package/esm/index.d.ts +3 -5
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +3 -5
- package/esm/index.js.map +1 -1
- package/esm/server/client.d.ts +78 -0
- package/esm/server/client.d.ts.map +1 -0
- package/esm/server/client.js +329 -0
- package/esm/server/client.js.map +1 -0
- package/esm/server/index.d.ts +3 -0
- package/esm/server/index.d.ts.map +1 -0
- package/esm/server/index.js +3 -0
- package/esm/server/index.js.map +1 -0
- package/esm/server/transport.d.ts +19 -0
- package/esm/server/transport.d.ts.map +1 -0
- package/esm/server/transport.js +44 -0
- package/esm/server/transport.js.map +1 -0
- package/esm/utils/auto-reset-event.d.ts +1 -2
- package/esm/utils/auto-reset-event.d.ts.map +1 -1
- package/esm/utils/auto-reset-event.js +12 -12
- package/esm/utils/auto-reset-event.js.map +1 -1
- package/esm/utils/base64.js +5 -5
- package/esm/utils/base64.js.map +1 -1
- package/esm/utils/conditional-variable.d.ts +1 -2
- package/esm/utils/conditional-variable.d.ts.map +1 -1
- package/esm/utils/conditional-variable.js +10 -10
- package/esm/utils/conditional-variable.js.map +1 -1
- package/esm/utils/hex.d.ts +3 -0
- package/esm/utils/hex.d.ts.map +1 -0
- package/esm/utils/hex.js +55 -0
- package/esm/utils/hex.js.map +1 -0
- package/esm/utils/index.d.ts +2 -0
- package/esm/utils/index.d.ts.map +1 -1
- package/esm/utils/index.js +2 -0
- package/esm/utils/index.js.map +1 -1
- package/esm/utils/no-op.d.ts +7 -0
- package/esm/utils/no-op.d.ts.map +1 -0
- package/esm/utils/no-op.js +12 -0
- package/esm/utils/no-op.js.map +1 -0
- package/package.json +11 -10
- package/src/adb.ts +41 -252
- package/src/banner.ts +82 -0
- package/src/commands/power.ts +2 -2
- package/src/commands/reverse.ts +68 -73
- package/src/commands/subprocess/protocols/none.ts +17 -18
- package/src/commands/subprocess/protocols/shell.ts +54 -56
- package/src/commands/subprocess/protocols/types.ts +1 -2
- package/src/commands/sync/list.ts +2 -2
- package/src/commands/sync/push.ts +22 -10
- package/src/commands/sync/request.ts +1 -1
- package/src/commands/sync/response.ts +6 -6
- package/src/commands/sync/socket.ts +37 -35
- package/src/commands/sync/sync.ts +25 -28
- package/src/commands/tcpip.ts +6 -4
- package/src/{auth.ts → daemon/auth.ts} +17 -17
- package/src/{crypto.ts → daemon/crypto.ts} +25 -33
- package/src/{backend.ts → daemon/device.ts} +1 -1
- package/src/{socket → daemon}/dispatcher.ts +71 -78
- package/src/daemon/index.ts +7 -0
- package/src/{packet.ts → daemon/packet.ts} +5 -5
- package/src/{socket → daemon}/socket.ts +50 -44
- package/src/daemon/transport.ts +269 -0
- package/src/index.ts +3 -5
- package/src/server/client.ts +476 -0
- package/src/server/index.ts +2 -0
- package/src/server/transport.ts +77 -0
- package/src/utils/auto-reset-event.ts +12 -12
- package/src/utils/conditional-variable.ts +10 -10
- package/src/utils/hex.ts +58 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/no-op.ts +12 -0
- package/tsconfig.build.json +12 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/esm/auth.d.ts.map +0 -1
- package/esm/auth.js.map +0 -1
- package/esm/backend.d.ts.map +0 -1
- package/esm/backend.js +0 -2
- package/esm/backend.js.map +0 -1
- package/esm/commands/install.d.ts +0 -10
- package/esm/commands/install.d.ts.map +0 -1
- package/esm/commands/install.js +0 -29
- package/esm/commands/install.js.map +0 -1
- package/esm/crypto.d.ts.map +0 -1
- package/esm/crypto.js.map +0 -1
- package/esm/packet.d.ts.map +0 -1
- package/esm/packet.js.map +0 -1
- package/esm/socket/dispatcher.d.ts.map +0 -1
- package/esm/socket/dispatcher.js.map +0 -1
- package/esm/socket/index.d.ts +0 -3
- package/esm/socket/index.d.ts.map +0 -1
- package/esm/socket/index.js +0 -3
- package/esm/socket/index.js.map +0 -1
- package/esm/socket/socket.d.ts.map +0 -1
- package/esm/socket/socket.js.map +0 -1
- package/src/socket/index.ts +0 -2
|
@@ -1,66 +1,69 @@
|
|
|
1
1
|
import { BufferCombiner, BufferedReadableStream, ConsumableWritableStream, } from "@yume-chan/stream-extra";
|
|
2
|
-
import { AutoResetEvent } from "../../index.js";
|
|
2
|
+
import { AutoResetEvent } from "../../utils/index.js";
|
|
3
3
|
export class AdbSyncSocketLocked {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
#writer;
|
|
5
|
+
#readable;
|
|
6
|
+
#socketLock;
|
|
7
|
+
#writeLock = new AutoResetEvent();
|
|
8
|
+
#combiner;
|
|
9
|
+
get position() {
|
|
10
|
+
return this.#readable.position;
|
|
11
|
+
}
|
|
9
12
|
constructor(writer, readable, bufferSize, lock) {
|
|
10
|
-
this
|
|
11
|
-
this
|
|
12
|
-
this
|
|
13
|
-
this
|
|
13
|
+
this.#writer = writer;
|
|
14
|
+
this.#readable = readable;
|
|
15
|
+
this.#socketLock = lock;
|
|
16
|
+
this.#combiner = new BufferCombiner(bufferSize);
|
|
14
17
|
}
|
|
15
18
|
async writeInnerStream(buffer) {
|
|
16
|
-
await ConsumableWritableStream.write(this
|
|
19
|
+
await ConsumableWritableStream.write(this.#writer, buffer);
|
|
17
20
|
}
|
|
18
21
|
async flush() {
|
|
19
22
|
try {
|
|
20
|
-
await this.
|
|
21
|
-
const buffer = this.
|
|
23
|
+
await this.#writeLock.wait();
|
|
24
|
+
const buffer = this.#combiner.flush();
|
|
22
25
|
if (buffer) {
|
|
23
26
|
await this.writeInnerStream(buffer);
|
|
24
27
|
}
|
|
25
28
|
}
|
|
26
29
|
finally {
|
|
27
|
-
this.
|
|
30
|
+
this.#writeLock.notifyOne();
|
|
28
31
|
}
|
|
29
32
|
}
|
|
30
33
|
async write(data) {
|
|
31
34
|
try {
|
|
32
|
-
await this.
|
|
33
|
-
for (const buffer of this.
|
|
35
|
+
await this.#writeLock.wait();
|
|
36
|
+
for (const buffer of this.#combiner.push(data)) {
|
|
34
37
|
await this.writeInnerStream(buffer);
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
finally {
|
|
38
|
-
this.
|
|
41
|
+
this.#writeLock.notifyOne();
|
|
39
42
|
}
|
|
40
43
|
}
|
|
41
|
-
async
|
|
44
|
+
async readExactly(length) {
|
|
42
45
|
await this.flush();
|
|
43
|
-
return await this.
|
|
46
|
+
return await this.#readable.readExactly(length);
|
|
44
47
|
}
|
|
45
48
|
release() {
|
|
46
|
-
this.
|
|
47
|
-
this.
|
|
49
|
+
this.#combiner.flush();
|
|
50
|
+
this.#socketLock.notifyOne();
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
53
|
export class AdbSyncSocket {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
#lock = new AutoResetEvent();
|
|
55
|
+
#socket;
|
|
56
|
+
#locked;
|
|
54
57
|
constructor(socket, bufferSize) {
|
|
55
|
-
this
|
|
56
|
-
this
|
|
58
|
+
this.#socket = socket;
|
|
59
|
+
this.#locked = new AdbSyncSocketLocked(socket.writable.getWriter(), new BufferedReadableStream(socket.readable), bufferSize, this.#lock);
|
|
57
60
|
}
|
|
58
61
|
async lock() {
|
|
59
|
-
await this.
|
|
60
|
-
return this
|
|
62
|
+
await this.#lock.wait();
|
|
63
|
+
return this.#locked;
|
|
61
64
|
}
|
|
62
65
|
async close() {
|
|
63
|
-
await this.
|
|
66
|
+
await this.#socket.close();
|
|
64
67
|
}
|
|
65
68
|
}
|
|
66
69
|
//# sourceMappingURL=socket.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../src/commands/sync/socket.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,cAAc,EACd,sBAAsB,EACtB,wBAAwB,GAC3B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../src/commands/sync/socket.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,cAAc,EACd,sBAAsB,EACtB,wBAAwB,GAC3B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,mBAAmB;IACnB,OAAO,CAAsD;IAC7D,SAAS,CAAyB;IAClC,WAAW,CAAiB;IAC5B,UAAU,GAAG,IAAI,cAAc,EAAE,CAAC;IAClC,SAAS,CAAiB;IAEnC,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,YACI,MAA2D,EAC3D,QAAgC,EAChC,UAAkB,EAClB,IAAoB;QAEpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,MAAkB;QAC7C,MAAM,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAEM,KAAK,CAAC,KAAK;QACd,IAAI;YACA,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,MAAM,EAAE;gBACR,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;aACvC;SACJ;gBAAS;YACN,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;SAC/B;IACL,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAgB;QAC/B,IAAI;YACA,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC7B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC5C,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;aACvC;SACJ;gBAAS;YACN,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;SAC/B;IACL,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,MAAc;QACnC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;CACJ;AAED,MAAM,OAAO,aAAa;IACb,KAAK,GAAG,IAAI,cAAc,EAAE,CAAC;IAC7B,OAAO,CAAY;IACnB,OAAO,CAAsB;IAEtC,YAAmB,MAAiB,EAAE,UAAkB;QACpD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,mBAAmB,CAClC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAC3B,IAAI,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC3C,UAAU,EACV,IAAI,CAAC,KAAK,CACb,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,IAAI;QACb,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,KAAK;QACd,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;CACJ"}
|
|
@@ -18,7 +18,7 @@ export const AdbSyncLstatResponse = new Struct({ littleEndian: true })
|
|
|
18
18
|
return (this.mode >> 12);
|
|
19
19
|
},
|
|
20
20
|
get permission() {
|
|
21
|
-
return this.mode &
|
|
21
|
+
return this.mode & 0b00001111_11111111;
|
|
22
22
|
},
|
|
23
23
|
})
|
|
24
24
|
.postDeserialize((object) => {
|
|
@@ -68,7 +68,7 @@ export const AdbSyncStatResponse = new Struct({ littleEndian: true })
|
|
|
68
68
|
return (this.mode >> 12);
|
|
69
69
|
},
|
|
70
70
|
get permission() {
|
|
71
|
-
return this.mode &
|
|
71
|
+
return this.mode & 0b00001111_11111111;
|
|
72
72
|
},
|
|
73
73
|
})
|
|
74
74
|
.postDeserialize((object) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stat.js","sourceRoot":"","sources":["../../../src/commands/sync/stat.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGvE,kGAAkG;AAClG,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,2DAAgB,CAAA;IAChB,iDAAW,CAAA;IACX,kDAAW,CAAA;AACf,CAAC,EAJW,aAAa,GAAb,aAAa,KAAb,aAAa,QAIxB;AAeD,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KACjE,KAAK,CAAC,MAAM,CAAC;KACb,KAAK,CAAC,MAAM,CAAC;KACb,KAAK,CAAC,OAAO,CAAC;KACd,KAAK,CAAC;IACH,EAAE,EAAE,iBAAiB,CAAC,KAAc;IACpC,IAAI,IAAI;QACJ,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAkB,CAAC;IAC9C,CAAC;IACD,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"stat.js","sourceRoot":"","sources":["../../../src/commands/sync/stat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { AutoDisposable } from "@yume-chan/event";
|
|
2
2
|
import type { Consumable, ReadableStream } from "@yume-chan/stream-extra";
|
|
3
|
-
import type { Adb } from "../../adb.js";
|
|
4
|
-
import type { AdbSocket } from "../../socket/index.js";
|
|
3
|
+
import type { Adb, AdbSocket } from "../../adb.js";
|
|
5
4
|
import type { AdbSyncEntry } from "./list.js";
|
|
6
5
|
import { AdbSyncSocket } from "./socket.js";
|
|
6
|
+
import type { AdbSyncStat, LinuxFileType } from "./stat.js";
|
|
7
7
|
/**
|
|
8
8
|
* A simplified `dirname` function that only handles absolute unix paths.
|
|
9
9
|
* @param path an absolute unix path
|
|
@@ -13,28 +13,25 @@ export declare function dirname(path: string): string;
|
|
|
13
13
|
export interface AdbSyncWriteOptions {
|
|
14
14
|
filename: string;
|
|
15
15
|
file: ReadableStream<Consumable<Uint8Array>>;
|
|
16
|
-
|
|
16
|
+
type?: LinuxFileType;
|
|
17
|
+
permission?: number;
|
|
17
18
|
mtime?: number;
|
|
18
19
|
dryRun?: boolean;
|
|
19
20
|
}
|
|
20
21
|
export declare class AdbSync extends AutoDisposable {
|
|
22
|
+
#private;
|
|
21
23
|
protected _adb: Adb;
|
|
22
24
|
protected _socket: AdbSyncSocket;
|
|
23
|
-
private _supportsStat;
|
|
24
|
-
private _supportsListV2;
|
|
25
|
-
private _fixedPushMkdir;
|
|
26
|
-
private _supportsSendReceiveV2;
|
|
27
|
-
private _needPushMkdirWorkaround;
|
|
28
25
|
get supportsStat(): boolean;
|
|
29
26
|
get supportsListV2(): boolean;
|
|
30
27
|
get fixedPushMkdir(): boolean;
|
|
31
28
|
get supportsSendReceiveV2(): boolean;
|
|
32
29
|
get needPushMkdirWorkaround(): boolean;
|
|
33
30
|
constructor(adb: Adb, socket: AdbSocket);
|
|
34
|
-
lstat(path: string): Promise<
|
|
31
|
+
lstat(path: string): Promise<AdbSyncStat>;
|
|
35
32
|
stat(path: string): Promise<{
|
|
36
33
|
id: import("./response.js").AdbSyncResponseId.Stat;
|
|
37
|
-
readonly type:
|
|
34
|
+
readonly type: LinuxFileType;
|
|
38
35
|
readonly permission: number;
|
|
39
36
|
error: import("./stat.js").AdbSyncStatErrorCode;
|
|
40
37
|
dev: bigint;
|
|
@@ -52,20 +49,16 @@ export declare class AdbSync extends AutoDisposable {
|
|
|
52
49
|
opendir(path: string): AsyncGenerator<AdbSyncEntry, void, void>;
|
|
53
50
|
readdir(path: string): Promise<AdbSyncEntry[]>;
|
|
54
51
|
/**
|
|
55
|
-
*
|
|
52
|
+
* Reads the content of a file on device.
|
|
56
53
|
*
|
|
57
54
|
* @param filename The full path of the file on device to read.
|
|
58
|
-
* @returns A `ReadableStream` that
|
|
55
|
+
* @returns A `ReadableStream` that contains the file content.
|
|
59
56
|
*/
|
|
60
57
|
read(filename: string): ReadableStream<Uint8Array>;
|
|
61
58
|
/**
|
|
62
|
-
*
|
|
59
|
+
* Writes a file on device. If the file name already exists, it will be overwritten.
|
|
63
60
|
*
|
|
64
|
-
* @param
|
|
65
|
-
* @param file The content to write.
|
|
66
|
-
* @param mode The unix permissions of the file.
|
|
67
|
-
* @param mtime The modified time of the file.
|
|
68
|
-
* @returns A `WritableStream` that writes to the file.
|
|
61
|
+
* @param options The content and options of the file to write.
|
|
69
62
|
*/
|
|
70
63
|
write(options: AdbSyncWriteOptions): Promise<void>;
|
|
71
64
|
dispose(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAInD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAI9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG5D;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS5C;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,OAAQ,SAAQ,cAAc;;IACvC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC;IACpB,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC;IAQjC,IAAW,YAAY,IAAI,OAAO,CAEjC;IAED,IAAW,cAAc,IAAI,OAAO,CAEnC;IAED,IAAW,cAAc,IAAI,OAAO,CAEnC;IAED,IAAW,qBAAqB,IAAI,OAAO,CAE1C;IAED,IAAW,uBAAuB,IAAI,OAAO,CAE5C;gBAEkB,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS;IAkBjC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIzC,IAAI,CAAC,IAAI,EAAE,MAAM;;;;;;;;;;;;;;;;IAQjB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASjD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC;IAIzD,OAAO,CAAC,IAAI,EAAE,MAAM;IAQjC;;;;;OAKG;IACI,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC;IAIzD;;;;OAIG;IACU,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBzC,OAAO;CAIhC"}
|
|
@@ -24,36 +24,36 @@ export function dirname(path) {
|
|
|
24
24
|
export class AdbSync extends AutoDisposable {
|
|
25
25
|
_adb;
|
|
26
26
|
_socket;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
#supportsStat;
|
|
28
|
+
#supportsListV2;
|
|
29
|
+
#fixedPushMkdir;
|
|
30
|
+
#supportsSendReceiveV2;
|
|
31
|
+
#needPushMkdirWorkaround;
|
|
32
32
|
get supportsStat() {
|
|
33
|
-
return this
|
|
33
|
+
return this.#supportsStat;
|
|
34
34
|
}
|
|
35
35
|
get supportsListV2() {
|
|
36
|
-
return this
|
|
36
|
+
return this.#supportsListV2;
|
|
37
37
|
}
|
|
38
38
|
get fixedPushMkdir() {
|
|
39
|
-
return this
|
|
39
|
+
return this.#fixedPushMkdir;
|
|
40
40
|
}
|
|
41
41
|
get supportsSendReceiveV2() {
|
|
42
|
-
return this
|
|
42
|
+
return this.#supportsSendReceiveV2;
|
|
43
43
|
}
|
|
44
44
|
get needPushMkdirWorkaround() {
|
|
45
|
-
return this
|
|
45
|
+
return this.#needPushMkdirWorkaround;
|
|
46
46
|
}
|
|
47
47
|
constructor(adb, socket) {
|
|
48
48
|
super();
|
|
49
49
|
this._adb = adb;
|
|
50
50
|
this._socket = new AdbSyncSocket(socket, adb.maxPayloadSize);
|
|
51
|
-
this
|
|
52
|
-
this
|
|
53
|
-
this
|
|
54
|
-
this
|
|
51
|
+
this.#supportsStat = adb.supportsFeature(AdbFeature.StatV2);
|
|
52
|
+
this.#supportsListV2 = adb.supportsFeature(AdbFeature.ListV2);
|
|
53
|
+
this.#fixedPushMkdir = adb.supportsFeature(AdbFeature.FixedPushMkdir);
|
|
54
|
+
this.#supportsSendReceiveV2 = adb.supportsFeature(AdbFeature.SendReceiveV2);
|
|
55
55
|
// https://android.googlesource.com/platform/packages/modules/adb/+/91768a57b7138166e0a3d11f79cd55909dda7014/client/file_sync_client.cpp#1361
|
|
56
|
-
this
|
|
56
|
+
this.#needPushMkdirWorkaround =
|
|
57
57
|
this._adb.supportsFeature(AdbFeature.ShellV2) &&
|
|
58
58
|
!this.fixedPushMkdir;
|
|
59
59
|
}
|
|
@@ -86,22 +86,18 @@ export class AdbSync extends AutoDisposable {
|
|
|
86
86
|
return results;
|
|
87
87
|
}
|
|
88
88
|
/**
|
|
89
|
-
*
|
|
89
|
+
* Reads the content of a file on device.
|
|
90
90
|
*
|
|
91
91
|
* @param filename The full path of the file on device to read.
|
|
92
|
-
* @returns A `ReadableStream` that
|
|
92
|
+
* @returns A `ReadableStream` that contains the file content.
|
|
93
93
|
*/
|
|
94
94
|
read(filename) {
|
|
95
95
|
return adbSyncPull(this._socket, filename);
|
|
96
96
|
}
|
|
97
97
|
/**
|
|
98
|
-
*
|
|
98
|
+
* Writes a file on device. If the file name already exists, it will be overwritten.
|
|
99
99
|
*
|
|
100
|
-
* @param
|
|
101
|
-
* @param file The content to write.
|
|
102
|
-
* @param mode The unix permissions of the file.
|
|
103
|
-
* @param mtime The modified time of the file.
|
|
104
|
-
* @returns A `WritableStream` that writes to the file.
|
|
100
|
+
* @param options The content and options of the file to write.
|
|
105
101
|
*/
|
|
106
102
|
async write(options) {
|
|
107
103
|
if (this.needPushMkdirWorkaround) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/sync/sync.ts"],"names":[],"mappings":"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"}
|
package/esm/commands/tcpip.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AdbCommandBase } from "./base.js";
|
|
2
2
|
export declare class AdbTcpIpCommand extends AdbCommandBase {
|
|
3
|
-
setPort(port: number): Promise<
|
|
4
|
-
disable(): Promise<
|
|
3
|
+
setPort(port: number): Promise<string>;
|
|
4
|
+
disable(): Promise<string>;
|
|
5
5
|
}
|
|
6
6
|
//# sourceMappingURL=tcpip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcpip.d.ts","sourceRoot":"","sources":["../../src/commands/tcpip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,qBAAa,eAAgB,SAAQ,cAAc;IAClC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"tcpip.d.ts","sourceRoot":"","sources":["../../src/commands/tcpip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,qBAAa,eAAgB,SAAQ,cAAc;IAClC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYtC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAO1C"}
|
package/esm/commands/tcpip.js
CHANGED
|
@@ -6,14 +6,16 @@ export class AdbTcpIpCommand extends AdbCommandBase {
|
|
|
6
6
|
}
|
|
7
7
|
const output = await this.adb.createSocketAndWait(`tcpip:${port}`);
|
|
8
8
|
if (output !== `restarting in TCP mode port: ${port}\n`) {
|
|
9
|
-
throw new Error(
|
|
9
|
+
throw new Error(output);
|
|
10
10
|
}
|
|
11
|
+
return output;
|
|
11
12
|
}
|
|
12
13
|
async disable() {
|
|
13
14
|
const output = await this.adb.createSocketAndWait("usb:");
|
|
14
15
|
if (output !== "restarting in USB mode\n") {
|
|
15
|
-
throw new Error(
|
|
16
|
+
throw new Error(output);
|
|
16
17
|
}
|
|
18
|
+
return output;
|
|
17
19
|
}
|
|
18
20
|
}
|
|
19
21
|
//# sourceMappingURL=tcpip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcpip.js","sourceRoot":"","sources":["../../src/commands/tcpip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,OAAO,eAAgB,SAAQ,cAAc;IACxC,KAAK,CAAC,OAAO,CAAC,IAAY;QAC7B,IAAI,IAAI,IAAI,CAAC,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;SAC3C;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACnE,IAAI,MAAM,KAAK,gCAAgC,IAAI,IAAI,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"tcpip.js","sourceRoot":"","sources":["../../src/commands/tcpip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,OAAO,eAAgB,SAAQ,cAAc;IACxC,KAAK,CAAC,OAAO,CAAC,IAAY;QAC7B,IAAI,IAAI,IAAI,CAAC,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;SAC3C;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACnE,IAAI,MAAM,KAAK,gCAAgC,IAAI,IAAI,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,MAAM,KAAK,0BAA0B,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
|
|
@@ -39,10 +39,9 @@ export declare const AdbSignatureAuthenticator: AdbAuthenticator;
|
|
|
39
39
|
export declare const AdbPublicKeyAuthenticator: AdbAuthenticator;
|
|
40
40
|
export declare const ADB_DEFAULT_AUTHENTICATORS: AdbAuthenticator[];
|
|
41
41
|
export declare class AdbAuthenticationProcessor implements Disposable {
|
|
42
|
+
#private;
|
|
42
43
|
readonly authenticators: readonly AdbAuthenticator[];
|
|
43
44
|
private readonly credentialStore;
|
|
44
|
-
private pendingRequest;
|
|
45
|
-
private iterator;
|
|
46
45
|
constructor(authenticators: readonly AdbAuthenticator[], credentialStore: AdbCredentialStore);
|
|
47
46
|
private getNextRequest;
|
|
48
47
|
private invokeAuthenticator;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/daemon/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;AAE9E,MAAM,WAAW,kBAAkB;IAC/B;;;;OAIG;IACH,WAAW,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IAE1C;;;;OAIG;IACH,WAAW,IAAI,cAAc,CAAC;CACjC;AAED,oBAAY,WAAW;IACnB,KAAK,IAAI;IACT,SAAS,IAAI;IACb,SAAS,IAAI;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC7B;;;;;;;;;;OAUG;IACH,CACI,eAAe,EAAE,kBAAkB,EACnC,cAAc,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,GAC7C,aAAa,CAAC,aAAa,CAAC,CAAC;CACnC;AAED,eAAO,MAAM,yBAAyB,EAAE,gBAmBvC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,gBAqCvC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,gBAAgB,EAGxD,CAAC;AAEF,qBAAa,0BAA2B,YAAW,UAAU;;IACzD,SAAgB,cAAc,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAE5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;gBAMjD,cAAc,EAAE,SAAS,gBAAgB,EAAE,EAC3C,eAAe,EAAE,kBAAkB;IAMvC,OAAO,CAAC,cAAc,CAEpB;YAEa,mBAAmB;IAuBrB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAe5D,OAAO;CAGjB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PromiseResolver } from "@yume-chan/async";
|
|
2
|
-
import {
|
|
2
|
+
import { calculateBase64EncodedLength, encodeBase64 } from "../utils/index.js";
|
|
3
|
+
import { adbGeneratePublicKey, adbGetPublicKeySize, rsaSign, } from "./crypto.js";
|
|
3
4
|
import { AdbCommand } from "./packet.js";
|
|
4
|
-
import { calculateBase64EncodedLength, encodeBase64 } from "./utils/index.js";
|
|
5
5
|
export var AdbAuthType;
|
|
6
6
|
(function (AdbAuthType) {
|
|
7
7
|
AdbAuthType[AdbAuthType["Token"] = 1] = "Token";
|
|
@@ -14,7 +14,7 @@ export const AdbSignatureAuthenticator = async function* (credentialStore, getNe
|
|
|
14
14
|
if (packet.arg0 !== AdbAuthType.Token) {
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
17
|
-
const signature =
|
|
17
|
+
const signature = rsaSign(key, packet.payload);
|
|
18
18
|
yield {
|
|
19
19
|
command: AdbCommand.Auth,
|
|
20
20
|
arg0: AdbAuthType.Signature,
|
|
@@ -36,11 +36,11 @@ export const AdbPublicKeyAuthenticator = async function* (credentialStore, getNe
|
|
|
36
36
|
if (!privateKey) {
|
|
37
37
|
privateKey = await credentialStore.generateKey();
|
|
38
38
|
}
|
|
39
|
-
const publicKeyLength =
|
|
39
|
+
const publicKeyLength = adbGetPublicKeySize();
|
|
40
40
|
const [publicKeyBase64Length] = calculateBase64EncodedLength(publicKeyLength);
|
|
41
41
|
const publicKeyBuffer = new Uint8Array(publicKeyBase64Length + 1 // Null character
|
|
42
42
|
);
|
|
43
|
-
|
|
43
|
+
adbGeneratePublicKey(privateKey, publicKeyBuffer);
|
|
44
44
|
encodeBase64(publicKeyBuffer.subarray(0, publicKeyLength), publicKeyBuffer);
|
|
45
45
|
yield {
|
|
46
46
|
command: AdbCommand.Auth,
|
|
@@ -56,21 +56,21 @@ export const ADB_DEFAULT_AUTHENTICATORS = [
|
|
|
56
56
|
export class AdbAuthenticationProcessor {
|
|
57
57
|
authenticators;
|
|
58
58
|
credentialStore;
|
|
59
|
-
pendingRequest = new PromiseResolver();
|
|
60
|
-
iterator;
|
|
59
|
+
#pendingRequest = new PromiseResolver();
|
|
60
|
+
#iterator;
|
|
61
61
|
constructor(authenticators, credentialStore) {
|
|
62
62
|
this.authenticators = authenticators;
|
|
63
63
|
this.credentialStore = credentialStore;
|
|
64
64
|
}
|
|
65
65
|
getNextRequest = () => {
|
|
66
|
-
return this
|
|
66
|
+
return this.#pendingRequest.promise;
|
|
67
67
|
};
|
|
68
68
|
async *invokeAuthenticator() {
|
|
69
69
|
for (const authenticator of this.authenticators) {
|
|
70
70
|
for await (const packet of authenticator(this.credentialStore, this.getNextRequest)) {
|
|
71
71
|
// If the authenticator yielded a response
|
|
72
72
|
// Prepare `nextRequest` for next authentication request
|
|
73
|
-
this
|
|
73
|
+
this.#pendingRequest = new PromiseResolver();
|
|
74
74
|
// Yield the response to outer layer
|
|
75
75
|
yield packet;
|
|
76
76
|
}
|
|
@@ -79,18 +79,18 @@ export class AdbAuthenticationProcessor {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
async process(packet) {
|
|
82
|
-
if (!this
|
|
83
|
-
this
|
|
82
|
+
if (!this.#iterator) {
|
|
83
|
+
this.#iterator = this.invokeAuthenticator();
|
|
84
84
|
}
|
|
85
|
-
this
|
|
86
|
-
const result = await this
|
|
85
|
+
this.#pendingRequest.resolve(packet);
|
|
86
|
+
const result = await this.#iterator.next();
|
|
87
87
|
if (result.done) {
|
|
88
88
|
throw new Error("No authenticator can handle the request");
|
|
89
89
|
}
|
|
90
90
|
return result.value;
|
|
91
91
|
}
|
|
92
92
|
dispose() {
|
|
93
|
-
void this
|
|
93
|
+
void this.#iterator?.return?.();
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/daemon/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Consumable, ReadableWritablePair } from "@yume-chan/stream-extra";
|
|
2
|
+
import type { ValueOrPromise } from "@yume-chan/struct";
|
|
3
|
+
import type { AdbPacketData, AdbPacketInit } from "../../src/daemon/packet.js";
|
|
4
|
+
export interface AdbDaemonDevice {
|
|
5
|
+
readonly serial: string;
|
|
6
|
+
readonly name: string | undefined;
|
|
7
|
+
connect(): ValueOrPromise<
|
|
8
|
+
ReadableWritablePair<AdbPacketData, Consumable<AdbPacketInit>>
|
|
9
|
+
>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/daemon/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,OAAO,IAAI,cAAc,CACrB,oBAAoB,CAAC,aAAa,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CACjE,CAAC;CACL"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/daemon/connection.ts"],"names":[],"mappings":""}
|
|
@@ -14,11 +14,11 @@ export declare function getBigUint(dataView: DataView, byteOffset: number, lengt
|
|
|
14
14
|
* otherwise a little-endian value should be written.
|
|
15
15
|
*/
|
|
16
16
|
export declare function setBigUint(dataView: DataView, byteOffset: number, value: bigint, littleEndian?: boolean): number;
|
|
17
|
-
export declare function
|
|
17
|
+
export declare function rsaParsePrivateKey(key: Uint8Array): [n: bigint, d: bigint];
|
|
18
18
|
export declare function modInverse(a: number, m: number): number;
|
|
19
|
-
export declare function
|
|
20
|
-
export declare function
|
|
21
|
-
export declare function
|
|
19
|
+
export declare function adbGetPublicKeySize(): number;
|
|
20
|
+
export declare function adbGeneratePublicKey(privateKey: Uint8Array): Uint8Array;
|
|
21
|
+
export declare function adbGeneratePublicKey(privateKey: Uint8Array, output: Uint8Array): number;
|
|
22
22
|
/**
|
|
23
23
|
* Modular exponentiation.
|
|
24
24
|
*
|
|
@@ -33,5 +33,5 @@ export declare const ASN1_OCTET_STRING = 4;
|
|
|
33
33
|
export declare const ASN1_NULL = 5;
|
|
34
34
|
export declare const ASN1_OID = 6;
|
|
35
35
|
export declare const SHA1_DIGEST_INFO: Uint8Array;
|
|
36
|
-
export declare function
|
|
36
|
+
export declare function rsaSign(privateKey: Uint8Array, data: Uint8Array): Uint8Array;
|
|
37
37
|
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/daemon/crypto.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,wBAAgB,UAAU,CACtB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACf,MAAM,CAaR;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACtB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,OAAO,UA0BzB;AA4BD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAK1E;AAKD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UAsB9C;AAED,wBAAgB,mBAAmB,WAElC;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC;AACzE,wBAAgB,oBAAoB,CAChC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,UAAU,GACnB,MAAM,CAAC;AA2EV;;;;;;GAMG;AACH,wBAAgB,MAAM,CAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAChB,MAAM,CAkBR;AAED,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,eAAO,MAAM,aAAa,KAAO,CAAC;AAClC,eAAO,MAAM,iBAAiB,IAAO,CAAC;AACtC,eAAO,MAAM,SAAS,IAAO,CAAC;AAC9B,eAAO,MAAM,QAAQ,IAAO,CAAC;AAG7B,eAAO,MAAM,gBAAgB,YAiB3B,CAAC;AAQH,wBAAgB,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAsC5E"}
|