@yume-chan/adb 0.0.20 → 0.0.22
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 +45 -0
- package/CHANGELOG.md +22 -1
- package/README.md +46 -364
- package/esm/adb.d.ts +9 -5
- package/esm/adb.d.ts.map +1 -1
- package/esm/adb.js +21 -11
- package/esm/adb.js.map +1 -1
- package/esm/banner.d.ts.map +1 -1
- package/esm/banner.js +1 -1
- package/esm/banner.js.map +1 -1
- package/esm/commands/base.d.ts.map +1 -1
- package/esm/commands/base.js.map +1 -1
- package/esm/commands/framebuffer.d.ts +9 -0
- package/esm/commands/framebuffer.d.ts.map +1 -1
- package/esm/commands/framebuffer.js +27 -3
- package/esm/commands/framebuffer.js.map +1 -1
- package/esm/commands/power.d.ts.map +1 -1
- package/esm/commands/power.js.map +1 -1
- package/esm/commands/reverse.d.ts.map +1 -1
- package/esm/commands/reverse.js.map +1 -1
- package/esm/commands/subprocess/command.d.ts +1 -1
- package/esm/commands/subprocess/command.d.ts.map +1 -1
- package/esm/commands/subprocess/command.js +15 -13
- package/esm/commands/subprocess/command.js.map +1 -1
- package/esm/commands/subprocess/protocols/none.d.ts +2 -1
- package/esm/commands/subprocess/protocols/none.d.ts.map +1 -1
- package/esm/commands/subprocess/protocols/none.js +11 -14
- package/esm/commands/subprocess/protocols/none.js.map +1 -1
- package/esm/commands/subprocess/protocols/shell.d.ts.map +1 -1
- package/esm/commands/subprocess/protocols/shell.js +21 -17
- package/esm/commands/subprocess/protocols/shell.js.map +1 -1
- package/esm/commands/subprocess/utils.js.map +1 -1
- package/esm/commands/sync/list.d.ts +2 -1
- package/esm/commands/sync/list.d.ts.map +1 -1
- package/esm/commands/sync/list.js +2 -2
- package/esm/commands/sync/list.js.map +1 -1
- package/esm/commands/sync/pull.d.ts.map +1 -1
- package/esm/commands/sync/pull.js +4 -0
- package/esm/commands/sync/pull.js.map +1 -1
- package/esm/commands/sync/push.js +1 -1
- package/esm/commands/sync/push.js.map +1 -1
- package/esm/commands/sync/request.js +1 -1
- package/esm/commands/sync/request.js.map +1 -1
- package/esm/commands/sync/response.d.ts +3 -1
- package/esm/commands/sync/response.d.ts.map +1 -1
- package/esm/commands/sync/response.js +5 -3
- package/esm/commands/sync/response.js.map +1 -1
- package/esm/commands/sync/socket.d.ts +1 -1
- package/esm/commands/sync/socket.d.ts.map +1 -1
- package/esm/commands/sync/socket.js +7 -3
- 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 +15 -0
- package/esm/commands/sync/sync.d.ts.map +1 -1
- package/esm/commands/sync/sync.js +17 -2
- package/esm/commands/sync/sync.js.map +1 -1
- package/esm/commands/tcpip.d.ts +21 -0
- package/esm/commands/tcpip.d.ts.map +1 -1
- package/esm/commands/tcpip.js +18 -0
- package/esm/commands/tcpip.js.map +1 -1
- package/esm/daemon/auth.d.ts +11 -9
- package/esm/daemon/auth.d.ts.map +1 -1
- package/esm/daemon/auth.js +21 -12
- package/esm/daemon/auth.js.map +1 -1
- package/esm/daemon/crypto.js +2 -2
- package/esm/daemon/crypto.js.map +1 -1
- package/esm/daemon/dispatcher.d.ts +6 -5
- package/esm/daemon/dispatcher.d.ts.map +1 -1
- package/esm/daemon/dispatcher.js +69 -58
- package/esm/daemon/dispatcher.js.map +1 -1
- package/esm/daemon/packet.d.ts +5 -5
- package/esm/daemon/packet.d.ts.map +1 -1
- package/esm/daemon/packet.js +2 -2
- package/esm/daemon/packet.js.map +1 -1
- package/esm/daemon/socket.d.ts +7 -14
- package/esm/daemon/socket.d.ts.map +1 -1
- package/esm/daemon/socket.js +58 -46
- package/esm/daemon/socket.js.map +1 -1
- package/esm/daemon/transport.d.ts +16 -4
- package/esm/daemon/transport.d.ts.map +1 -1
- package/esm/daemon/transport.js +11 -7
- package/esm/daemon/transport.js.map +1 -1
- package/esm/features.js +1 -1
- package/esm/features.js.map +1 -1
- package/esm/server/client.d.ts +12 -8
- package/esm/server/client.d.ts.map +1 -1
- package/esm/server/client.js +41 -22
- package/esm/server/client.js.map +1 -1
- package/esm/server/transport.d.ts.map +1 -1
- package/esm/server/transport.js.map +1 -1
- package/esm/utils/auto-reset-event.d.ts.map +1 -1
- package/esm/utils/auto-reset-event.js.map +1 -1
- package/esm/utils/base64.js.map +1 -1
- package/esm/utils/conditional-variable.d.ts.map +1 -1
- package/esm/utils/conditional-variable.js.map +1 -1
- package/esm/utils/hex.js.map +1 -1
- package/package.json +13 -14
- package/src/adb.ts +49 -35
- package/src/banner.ts +7 -7
- package/src/commands/base.ts +1 -1
- package/src/commands/framebuffer.ts +31 -3
- package/src/commands/power.ts +9 -9
- package/src/commands/reverse.ts +13 -13
- package/src/commands/subprocess/command.ts +24 -25
- package/src/commands/subprocess/protocols/none.ts +23 -27
- package/src/commands/subprocess/protocols/shell.ts +42 -37
- package/src/commands/sync/list.ts +11 -7
- package/src/commands/sync/pull.ts +7 -4
- package/src/commands/sync/push.ts +6 -6
- package/src/commands/sync/request.ts +3 -3
- package/src/commands/sync/response.ts +8 -6
- package/src/commands/sync/socket.ts +19 -14
- package/src/commands/sync/stat.ts +5 -5
- package/src/commands/sync/sync.ts +32 -17
- package/src/commands/tcpip.ts +46 -2
- package/src/daemon/auth.ts +49 -30
- package/src/daemon/crypto.ts +9 -9
- package/src/daemon/dispatcher.ts +104 -88
- package/src/daemon/packet.ts +2 -2
- package/src/daemon/socket.ts +106 -115
- package/src/daemon/transport.ts +49 -29
- package/src/server/client.ts +88 -77
- package/src/server/transport.ts +13 -13
- package/src/utils/auto-reset-event.ts +4 -4
- package/src/utils/base64.ts +5 -5
- package/src/utils/conditional-variable.ts +4 -4
- package/tsconfig.build.tsbuildinfo +1 -1
- package/esm/daemon/connection.d.ts +0 -11
- package/esm/daemon/connection.d.ts.map +0 -1
- package/esm/daemon/connection.js +0 -2
- package/esm/daemon/connection.js.map +0 -1
package/esm/daemon/dispatcher.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { AsyncOperationManager, PromiseResolver } from "@yume-chan/async";
|
|
1
|
+
import { AsyncOperationManager, PromiseResolver, delay, } from "@yume-chan/async";
|
|
2
2
|
import { AbortController, ConsumableWritableStream, WritableStream, } from "@yume-chan/stream-extra";
|
|
3
3
|
import { EMPTY_UINT8_ARRAY } from "@yume-chan/struct";
|
|
4
|
-
import { decodeUtf8, encodeUtf8
|
|
4
|
+
import { decodeUtf8, encodeUtf8 } from "../utils/index.js";
|
|
5
5
|
import { AdbCommand, calculateChecksum } from "./packet.js";
|
|
6
6
|
import { AdbDaemonSocketController } from "./socket.js";
|
|
7
7
|
/**
|
|
@@ -37,23 +37,17 @@ export class AdbPacketDispatcher {
|
|
|
37
37
|
.pipeTo(new WritableStream({
|
|
38
38
|
write: async (packet) => {
|
|
39
39
|
switch (packet.command) {
|
|
40
|
-
case AdbCommand.OK:
|
|
41
|
-
this.handleOk(packet);
|
|
42
|
-
break;
|
|
43
40
|
case AdbCommand.Close:
|
|
44
|
-
await this
|
|
41
|
+
await this.#handleClose(packet);
|
|
42
|
+
break;
|
|
43
|
+
case AdbCommand.Okay:
|
|
44
|
+
this.#handleOkay(packet);
|
|
45
45
|
break;
|
|
46
|
-
case AdbCommand.Write:
|
|
47
|
-
if (this.#sockets.has(packet.arg1)) {
|
|
48
|
-
await this.#sockets
|
|
49
|
-
.get(packet.arg1)
|
|
50
|
-
.enqueue(packet.payload);
|
|
51
|
-
await this.sendPacket(AdbCommand.OK, packet.arg1, packet.arg0);
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
|
-
throw new Error(`Unknown local socket id: ${packet.arg1}`);
|
|
55
46
|
case AdbCommand.Open:
|
|
56
|
-
await this
|
|
47
|
+
await this.#handleOpen(packet);
|
|
48
|
+
break;
|
|
49
|
+
case AdbCommand.Write:
|
|
50
|
+
await this.#handleWrite(packet);
|
|
57
51
|
break;
|
|
58
52
|
default:
|
|
59
53
|
// Junk data may only appear in the authentication phase,
|
|
@@ -64,40 +58,20 @@ export class AdbPacketDispatcher {
|
|
|
64
58
|
}
|
|
65
59
|
},
|
|
66
60
|
}), {
|
|
67
|
-
|
|
68
|
-
// (device disconnection, protocol error, or user abortion)
|
|
69
|
-
// if the underlying streams are still open,
|
|
70
|
-
// it's still possible to create another ADB connection.
|
|
71
|
-
// So don't close `readable` here.
|
|
72
|
-
preventCancel: true,
|
|
61
|
+
preventCancel: options.preserveConnection ?? false,
|
|
73
62
|
signal: this.#readAbortController.signal,
|
|
74
63
|
})
|
|
75
64
|
.then(() => {
|
|
76
|
-
this
|
|
65
|
+
this.#dispose();
|
|
77
66
|
}, (e) => {
|
|
78
67
|
if (!this.#closed) {
|
|
79
68
|
this.#disconnected.reject(e);
|
|
80
69
|
}
|
|
81
|
-
this
|
|
70
|
+
this.#dispose();
|
|
82
71
|
});
|
|
83
72
|
this.#writer = connection.writable.getWriter();
|
|
84
73
|
}
|
|
85
|
-
|
|
86
|
-
if (this.#initializers.resolve(packet.arg1, packet.arg0)) {
|
|
87
|
-
// Device successfully created the socket
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
const socket = this.#sockets.get(packet.arg1);
|
|
91
|
-
if (socket) {
|
|
92
|
-
// Device has received last `WRTE` to the socket
|
|
93
|
-
socket.ack();
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
// Maybe the device is responding to a packet of last connection
|
|
97
|
-
// Tell the device to close the socket
|
|
98
|
-
void this.sendPacket(AdbCommand.Close, packet.arg1, packet.arg0);
|
|
99
|
-
}
|
|
100
|
-
async handleClose(packet) {
|
|
74
|
+
async #handleClose(packet) {
|
|
101
75
|
// If the socket is still pending
|
|
102
76
|
if (packet.arg0 === 0 &&
|
|
103
77
|
this.#initializers.reject(packet.arg1, new Error("Socket open failed"))) {
|
|
@@ -117,11 +91,8 @@ export class AdbPacketDispatcher {
|
|
|
117
91
|
// Ignore `arg0` and search for the socket
|
|
118
92
|
const socket = this.#sockets.get(packet.arg1);
|
|
119
93
|
if (socket) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
await this.sendPacket(AdbCommand.Close, packet.arg1, packet.arg0);
|
|
123
|
-
}
|
|
124
|
-
await socket.dispose();
|
|
94
|
+
await socket.close();
|
|
95
|
+
socket.dispose();
|
|
125
96
|
this.#sockets.delete(packet.arg1);
|
|
126
97
|
return;
|
|
127
98
|
}
|
|
@@ -129,16 +100,22 @@ export class AdbPacketDispatcher {
|
|
|
129
100
|
// If the client sends two `CLSE` packets for one socket,
|
|
130
101
|
// the device may also respond with two `CLSE` packets.
|
|
131
102
|
}
|
|
132
|
-
|
|
133
|
-
this.#
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
103
|
+
#handleOkay(packet) {
|
|
104
|
+
if (this.#initializers.resolve(packet.arg1, packet.arg0)) {
|
|
105
|
+
// Device successfully created the socket
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const socket = this.#sockets.get(packet.arg1);
|
|
109
|
+
if (socket) {
|
|
110
|
+
// Device has received last `WRTE` to the socket
|
|
111
|
+
socket.ack();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// Maybe the device is responding to a packet of last connection
|
|
115
|
+
// Tell the device to close the socket
|
|
116
|
+
void this.sendPacket(AdbCommand.Close, packet.arg1, packet.arg0);
|
|
140
117
|
}
|
|
141
|
-
async handleOpen(packet) {
|
|
118
|
+
async #handleOpen(packet) {
|
|
142
119
|
// `AsyncOperationManager` doesn't support skipping IDs
|
|
143
120
|
// Use `add` + `resolve` to simulate this behavior
|
|
144
121
|
const [localId] = this.#initializers.add();
|
|
@@ -163,12 +140,32 @@ export class AdbPacketDispatcher {
|
|
|
163
140
|
try {
|
|
164
141
|
await handler(controller.socket);
|
|
165
142
|
this.#sockets.set(localId, controller);
|
|
166
|
-
await this.sendPacket(AdbCommand.
|
|
143
|
+
await this.sendPacket(AdbCommand.Okay, localId, remoteId);
|
|
167
144
|
}
|
|
168
145
|
catch (e) {
|
|
169
146
|
await this.sendPacket(AdbCommand.Close, 0, remoteId);
|
|
170
147
|
}
|
|
171
148
|
}
|
|
149
|
+
async #handleWrite(packet) {
|
|
150
|
+
const socket = this.#sockets.get(packet.arg1);
|
|
151
|
+
if (!socket) {
|
|
152
|
+
throw new Error(`Unknown local socket id: ${packet.arg1}`);
|
|
153
|
+
}
|
|
154
|
+
let handled = false;
|
|
155
|
+
await Promise.race([
|
|
156
|
+
delay(5000).then(() => {
|
|
157
|
+
if (this.options.debugSlowRead && !handled) {
|
|
158
|
+
throw new Error(`packet for \`${socket.service}\` not handled in 5 seconds`);
|
|
159
|
+
}
|
|
160
|
+
}),
|
|
161
|
+
(async () => {
|
|
162
|
+
await socket.enqueue(packet.payload);
|
|
163
|
+
await this.sendPacket(AdbCommand.Okay, packet.arg1, packet.arg0);
|
|
164
|
+
handled = true;
|
|
165
|
+
})(),
|
|
166
|
+
]);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
172
169
|
async createSocket(service) {
|
|
173
170
|
if (this.options.appendNullToServiceString) {
|
|
174
171
|
service += "\0";
|
|
@@ -187,6 +184,15 @@ export class AdbPacketDispatcher {
|
|
|
187
184
|
this.#sockets.set(localId, controller);
|
|
188
185
|
return controller.socket;
|
|
189
186
|
}
|
|
187
|
+
addReverseTunnel(service, handler) {
|
|
188
|
+
this.#incomingSocketHandlers.set(service, handler);
|
|
189
|
+
}
|
|
190
|
+
removeReverseTunnel(address) {
|
|
191
|
+
this.#incomingSocketHandlers.delete(address);
|
|
192
|
+
}
|
|
193
|
+
clearReverseTunnels() {
|
|
194
|
+
this.#incomingSocketHandlers.clear();
|
|
195
|
+
}
|
|
190
196
|
async sendPacket(command, arg0, arg1, payload = EMPTY_UINT8_ARRAY) {
|
|
191
197
|
if (typeof payload === "string") {
|
|
192
198
|
payload = encodeUtf8(payload);
|
|
@@ -213,12 +219,17 @@ export class AdbPacketDispatcher {
|
|
|
213
219
|
// but it doesn't matter, the next connection can cope with them.
|
|
214
220
|
this.#closed = true;
|
|
215
221
|
this.#readAbortController.abort();
|
|
216
|
-
this
|
|
222
|
+
if (this.options.preserveConnection) {
|
|
223
|
+
this.#writer.releaseLock();
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
await this.#writer.close();
|
|
227
|
+
}
|
|
217
228
|
// `pipe().then()` will call `dispose`
|
|
218
229
|
}
|
|
219
|
-
dispose() {
|
|
230
|
+
#dispose() {
|
|
220
231
|
for (const socket of this.#sockets.values()) {
|
|
221
|
-
socket.dispose()
|
|
232
|
+
socket.dispose();
|
|
222
233
|
}
|
|
223
234
|
this.#disconnected.resolve();
|
|
224
235
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/daemon/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/daemon/dispatcher.ts"],"names":[],"mappings":"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"}
|
package/esm/daemon/packet.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ConsumableTransformStream } from "@yume-chan/stream-extra";
|
|
2
2
|
import Struct from "@yume-chan/struct";
|
|
3
3
|
export declare enum AdbCommand {
|
|
4
|
-
Auth = 1213486401
|
|
5
|
-
Close = 1163086915
|
|
6
|
-
Connect = 1314410051
|
|
7
|
-
|
|
8
|
-
Open = 1313165391
|
|
4
|
+
Auth = 1213486401,// 'AUTH'
|
|
5
|
+
Close = 1163086915,// 'CLSE'
|
|
6
|
+
Connect = 1314410051,// 'CNXN'
|
|
7
|
+
Okay = 1497451343,// 'OKAY'
|
|
8
|
+
Open = 1313165391,// 'OPEN'
|
|
9
9
|
Write = 1163154007
|
|
10
10
|
}
|
|
11
11
|
export declare const AdbPacketHeader: Struct<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packet.d.ts","sourceRoot":"","sources":["../../src/daemon/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,oBAAY,UAAU;IAClB,IAAI,aAAa;
|
|
1
|
+
{"version":3,"file":"packet.d.ts","sourceRoot":"","sources":["../../src/daemon/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,oBAAY,UAAU;IAClB,IAAI,aAAa,CAAE,SAAS;IAC5B,KAAK,aAAa,CAAE,SAAS;IAC7B,OAAO,aAAa,CAAE,SAAS;IAC/B,IAAI,aAAa,CAAE,SAAS;IAC5B,IAAI,aAAa,CAAE,SAAS;IAC5B,KAAK,aAAa;CACrB;AAED,eAAO,MAAM,eAAe;;;;;;;0CAMT,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAI7E,eAAO,MAAM,SAAS;;;;;;;;oDAEsC,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAC5B,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAC,EAC3B,UAAU,GAAG,OAAO,CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;AAExD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAE7D;AAED,qBAAa,wBAAyB,SAAQ,yBAAyB,CACnE,aAAa,EACb,UAAU,CACb;;CAoBA"}
|
package/esm/daemon/packet.js
CHANGED
|
@@ -5,10 +5,10 @@ export var AdbCommand;
|
|
|
5
5
|
AdbCommand[AdbCommand["Auth"] = 1213486401] = "Auth";
|
|
6
6
|
AdbCommand[AdbCommand["Close"] = 1163086915] = "Close";
|
|
7
7
|
AdbCommand[AdbCommand["Connect"] = 1314410051] = "Connect";
|
|
8
|
-
AdbCommand[AdbCommand["
|
|
8
|
+
AdbCommand[AdbCommand["Okay"] = 1497451343] = "Okay";
|
|
9
9
|
AdbCommand[AdbCommand["Open"] = 1313165391] = "Open";
|
|
10
10
|
AdbCommand[AdbCommand["Write"] = 1163154007] = "Write";
|
|
11
|
-
})(AdbCommand
|
|
11
|
+
})(AdbCommand || (AdbCommand = {}));
|
|
12
12
|
export const AdbPacketHeader = new Struct({ littleEndian: true })
|
|
13
13
|
.uint32("command")
|
|
14
14
|
.uint32("arg0")
|
package/esm/daemon/packet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packet.js","sourceRoot":"","sources":["../../src/daemon/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAN,IAAY,UAOX;AAPD,WAAY,UAAU;IAClB,oDAAiB,CAAA;IACjB,sDAAkB,CAAA;IAClB,0DAAoB,CAAA;IACpB,
|
|
1
|
+
{"version":3,"file":"packet.js","sourceRoot":"","sources":["../../src/daemon/packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAN,IAAY,UAOX;AAPD,WAAY,UAAU;IAClB,oDAAiB,CAAA;IACjB,sDAAkB,CAAA;IAClB,0DAAoB,CAAA;IACpB,oDAAiB,CAAA;IACjB,oDAAiB,CAAA;IACjB,sDAAkB,CAAA;AACtB,CAAC,EAPW,UAAU,KAAV,UAAU,QAOrB;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KAC5D,MAAM,CAAC,SAAS,CAAC;KACjB,MAAM,CAAC,MAAM,CAAC;KACd,MAAM,CAAC,MAAM,CAAC;KACd,MAAM,CAAC,eAAe,CAAC;KACvB,MAAM,CAAC,UAAU,CAAC;KAClB,KAAK,CAAC,OAAO,CAAC,CAAC;AAMpB,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;KACtD,MAAM,CAAC,eAAe,CAAC;KACvB,UAAU,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;AAqB7D,MAAM,UAAU,iBAAiB,CAAC,OAAmB;IACjD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,OAAO,wBAAyB,SAAQ,yBAG7C;IACG;QACI,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1D,KAAK,CAAC;YACF,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACnC,MAAM,IAAI,GAAG,KAA4C,CAAC;gBAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBAE7C,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAC9C,MAAM,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAEvC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;oBAC1B,4CAA4C;oBAC5C,0DAA0D;oBAC1D,oDAAoD;oBACpD,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3C,CAAC;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
|
package/esm/daemon/socket.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Disposable } from "@yume-chan/event";
|
|
2
|
-
import type { Consumable, ReadableStream,
|
|
3
|
-
import type {
|
|
2
|
+
import type { Consumable, ReadableStream, WritableStream } from "@yume-chan/stream-extra";
|
|
3
|
+
import type { AdbSocket } from "../adb.js";
|
|
4
4
|
import type { AdbPacketDispatcher } from "./dispatcher.js";
|
|
5
5
|
export interface AdbDaemonSocketInfo {
|
|
6
6
|
localId: number;
|
|
@@ -12,28 +12,21 @@ export interface AdbDaemonSocketConstructionOptions extends AdbDaemonSocketInfo
|
|
|
12
12
|
dispatcher: AdbPacketDispatcher;
|
|
13
13
|
highWaterMark?: number | undefined;
|
|
14
14
|
}
|
|
15
|
-
export declare class AdbDaemonSocketController implements AdbDaemonSocketInfo,
|
|
15
|
+
export declare class AdbDaemonSocketController implements AdbDaemonSocketInfo, AdbSocket, Disposable {
|
|
16
16
|
#private;
|
|
17
|
-
private readonly dispatcher;
|
|
18
17
|
readonly localId: number;
|
|
19
18
|
readonly remoteId: number;
|
|
20
19
|
readonly localCreated: boolean;
|
|
21
20
|
readonly service: string;
|
|
22
21
|
get readable(): ReadableStream<Uint8Array>;
|
|
23
22
|
readonly writable: WritableStream<Consumable<Uint8Array>>;
|
|
24
|
-
|
|
25
|
-
* Whether the socket is half-closed (i.e. the local side initiated the close).
|
|
26
|
-
*
|
|
27
|
-
* It's only used by dispatcher to avoid sending another `CLSE` packet to remote.
|
|
28
|
-
*/
|
|
29
|
-
get closed(): boolean;
|
|
30
|
-
private _socket;
|
|
23
|
+
get closed(): Promise<void>;
|
|
31
24
|
get socket(): AdbDaemonSocket;
|
|
32
25
|
constructor(options: AdbDaemonSocketConstructionOptions);
|
|
33
26
|
enqueue(data: Uint8Array): Promise<void>;
|
|
34
27
|
ack(): void;
|
|
35
28
|
close(): Promise<void>;
|
|
36
|
-
dispose():
|
|
29
|
+
dispose(): void;
|
|
37
30
|
}
|
|
38
31
|
/**
|
|
39
32
|
* A duplex stream representing a socket to ADB daemon.
|
|
@@ -43,7 +36,7 @@ export declare class AdbDaemonSocketController implements AdbDaemonSocketInfo, R
|
|
|
43
36
|
* `socket.writable.abort()`, `socket.writable.getWriter().abort()`,
|
|
44
37
|
* `socket.writable.close()` or `socket.writable.getWriter().close()`.
|
|
45
38
|
*/
|
|
46
|
-
export declare class AdbDaemonSocket implements AdbDaemonSocketInfo,
|
|
39
|
+
export declare class AdbDaemonSocket implements AdbDaemonSocketInfo, AdbSocket {
|
|
47
40
|
#private;
|
|
48
41
|
get localId(): number;
|
|
49
42
|
get remoteId(): number;
|
|
@@ -51,7 +44,7 @@ export declare class AdbDaemonSocket implements AdbDaemonSocketInfo, ReadableWri
|
|
|
51
44
|
get service(): string;
|
|
52
45
|
get readable(): ReadableStream<Uint8Array>;
|
|
53
46
|
get writable(): WritableStream<Consumable<Uint8Array>>;
|
|
54
|
-
get closed():
|
|
47
|
+
get closed(): Promise<void>;
|
|
55
48
|
constructor(controller: AdbDaemonSocketController);
|
|
56
49
|
close(): Promise<void>;
|
|
57
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/daemon/socket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACR,UAAU,EAEV,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/daemon/socket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACR,UAAU,EAEV,cAAc,EACd,cAAc,EAEjB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IAEjB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kCACb,SAAQ,mBAAmB;IAC3B,UAAU,EAAE,mBAAmB,CAAC;IAEhC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,qBAAa,yBACT,YAAW,mBAAmB,EAAE,SAAS,EAAE,UAAU;;IAIrD,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAC;IAI1B,IAAI,QAAQ,+BAEX;IAID,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAK1D,IAAI,MAAM,kBAET;IAGD,IAAI,MAAM,oBAET;gBAEW,OAAO,EAAE,kCAAkC;IA0CjD,OAAO,CAAC,IAAI,EAAE,UAAU;IAiB9B,GAAG;IAIG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B,OAAO;CASV;AAED;;;;;;;GAOG;AACH,qBAAa,eAAgB,YAAW,mBAAmB,EAAE,SAAS;;IAGlE,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,QAAQ,IAAI,MAAM,CAErB;IACD,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,QAAQ,IAAI,cAAc,CAAC,UAAU,CAAC,CAEzC;IACD,IAAI,QAAQ,IAAI,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAErD;IAED,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;gBAEW,UAAU,EAAE,yBAAyB;IAIjD,KAAK;CAGR"}
|
package/esm/daemon/socket.js
CHANGED
|
@@ -1,84 +1,96 @@
|
|
|
1
1
|
import { PromiseResolver } from "@yume-chan/async";
|
|
2
|
-
import { ConsumableWritableStream,
|
|
2
|
+
import { ConsumableWritableStream, PushReadableStream, } from "@yume-chan/stream-extra";
|
|
3
|
+
import { raceSignal } from "../server/index.js";
|
|
3
4
|
import { AdbCommand } from "./packet.js";
|
|
4
5
|
export class AdbDaemonSocketController {
|
|
5
|
-
dispatcher;
|
|
6
|
+
#dispatcher;
|
|
6
7
|
localId;
|
|
7
8
|
remoteId;
|
|
8
9
|
localCreated;
|
|
9
10
|
service;
|
|
10
|
-
#duplex;
|
|
11
11
|
#readable;
|
|
12
12
|
#readableController;
|
|
13
13
|
get readable() {
|
|
14
14
|
return this.#readable;
|
|
15
15
|
}
|
|
16
16
|
#writePromise;
|
|
17
|
+
#writableController;
|
|
17
18
|
writable;
|
|
18
19
|
#closed = false;
|
|
19
|
-
|
|
20
|
-
* Whether the socket is half-closed (i.e. the local side initiated the close).
|
|
21
|
-
*
|
|
22
|
-
* It's only used by dispatcher to avoid sending another `CLSE` packet to remote.
|
|
23
|
-
*/
|
|
20
|
+
#closedPromise = new PromiseResolver();
|
|
24
21
|
get closed() {
|
|
25
|
-
return this.#
|
|
22
|
+
return this.#closedPromise.promise;
|
|
26
23
|
}
|
|
27
|
-
|
|
24
|
+
#socket;
|
|
28
25
|
get socket() {
|
|
29
|
-
return this
|
|
26
|
+
return this.#socket;
|
|
30
27
|
}
|
|
31
28
|
constructor(options) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
this
|
|
37
|
-
|
|
38
|
-
this.#closed = true;
|
|
39
|
-
await this.dispatcher.sendPacket(AdbCommand.Close, this.localId, this.remoteId);
|
|
40
|
-
// Don't `dispose` here, we need to wait for `CLSE` response packet.
|
|
41
|
-
return false;
|
|
42
|
-
},
|
|
43
|
-
dispose: () => {
|
|
44
|
-
// Error out the pending writes
|
|
45
|
-
this.#writePromise?.reject(new Error("Socket closed"));
|
|
46
|
-
},
|
|
47
|
-
});
|
|
48
|
-
this.#readable = this.#duplex.wrapReadable(new PushReadableStream((controller) => {
|
|
29
|
+
this.#dispatcher = options.dispatcher;
|
|
30
|
+
this.localId = options.localId;
|
|
31
|
+
this.remoteId = options.remoteId;
|
|
32
|
+
this.localCreated = options.localCreated;
|
|
33
|
+
this.service = options.service;
|
|
34
|
+
this.#readable = new PushReadableStream((controller) => {
|
|
49
35
|
this.#readableController = controller;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
36
|
+
});
|
|
37
|
+
this.writable = new ConsumableWritableStream({
|
|
38
|
+
start: (controller) => {
|
|
39
|
+
this.#writableController = controller;
|
|
54
40
|
},
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
41
|
+
write: async (data, controller) => {
|
|
42
|
+
const size = data.length;
|
|
43
|
+
const chunkSize = this.#dispatcher.options.maxPayloadSize;
|
|
44
|
+
for (let start = 0, end = chunkSize; start < size; start = end, end += chunkSize) {
|
|
45
|
+
this.#writePromise = new PromiseResolver();
|
|
46
|
+
await this.#dispatcher.sendPacket(AdbCommand.Write, this.localId, this.remoteId, data.subarray(start, end));
|
|
47
|
+
// Wait for ack packet
|
|
48
|
+
await raceSignal(() => this.#writePromise.promise, controller.signal);
|
|
49
|
+
}
|
|
62
50
|
},
|
|
63
|
-
})
|
|
64
|
-
this
|
|
51
|
+
});
|
|
52
|
+
this.#socket = new AdbDaemonSocket(this);
|
|
65
53
|
}
|
|
66
54
|
async enqueue(data) {
|
|
67
|
-
//
|
|
68
|
-
//
|
|
55
|
+
// Consumers can `cancel` the `readable` if they are not interested in future data.
|
|
56
|
+
// Throw away the data if that happens.
|
|
69
57
|
if (this.#readableController.abortSignal.aborted) {
|
|
70
58
|
return;
|
|
71
59
|
}
|
|
72
|
-
|
|
60
|
+
try {
|
|
61
|
+
await this.#readableController.enqueue(data);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
if (this.#readableController.abortSignal.aborted) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
throw e;
|
|
68
|
+
}
|
|
73
69
|
}
|
|
74
70
|
ack() {
|
|
75
71
|
this.#writePromise?.resolve();
|
|
76
72
|
}
|
|
77
73
|
async close() {
|
|
78
|
-
|
|
74
|
+
if (this.#closed) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.#closed = true;
|
|
78
|
+
try {
|
|
79
|
+
this.#writableController.error(new Error("Socket closed"));
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// ignore
|
|
83
|
+
}
|
|
84
|
+
await this.#dispatcher.sendPacket(AdbCommand.Close, this.localId, this.remoteId);
|
|
79
85
|
}
|
|
80
86
|
dispose() {
|
|
81
|
-
|
|
87
|
+
try {
|
|
88
|
+
this.#readableController.close();
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// ignore
|
|
92
|
+
}
|
|
93
|
+
this.#closedPromise.resolve();
|
|
82
94
|
}
|
|
83
95
|
}
|
|
84
96
|
/**
|
package/esm/daemon/socket.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/daemon/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AASnD,OAAO,EACH,wBAAwB,EACxB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/daemon/socket.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,18 +5,29 @@ import { AdbBanner } from "../banner.js";
|
|
|
5
5
|
import type { AdbAuthenticator, AdbCredentialStore } from "./auth.js";
|
|
6
6
|
import type { AdbPacketData, AdbPacketInit } from "./packet.js";
|
|
7
7
|
export declare const ADB_DAEMON_VERSION_OMIT_CHECKSUM = 16777217;
|
|
8
|
+
export type AdbDaemonConnection = ReadableWritablePair<AdbPacketData, Consumable<AdbPacketInit>>;
|
|
8
9
|
interface AdbDaemonAuthenticationOptions {
|
|
9
10
|
serial: string;
|
|
10
|
-
connection:
|
|
11
|
+
connection: AdbDaemonConnection;
|
|
11
12
|
credentialStore: AdbCredentialStore;
|
|
12
13
|
authenticators?: AdbAuthenticator[];
|
|
14
|
+
/**
|
|
15
|
+
* Whether to preserve the connection open after the `AdbDaemonTransport` is closed.
|
|
16
|
+
*/
|
|
17
|
+
preserveConnection?: boolean | undefined;
|
|
18
|
+
debugSlowRead?: boolean | undefined;
|
|
13
19
|
}
|
|
14
20
|
interface AdbDaemonSocketConnectorConstructionOptions {
|
|
15
21
|
serial: string;
|
|
16
|
-
connection:
|
|
22
|
+
connection: AdbDaemonConnection;
|
|
17
23
|
version: number;
|
|
18
24
|
maxPayloadSize: number;
|
|
19
25
|
banner: string;
|
|
26
|
+
/**
|
|
27
|
+
* Whether to preserve the connection open after the `AdbDaemonTransport` is closed.
|
|
28
|
+
*/
|
|
29
|
+
preserveConnection?: boolean | undefined;
|
|
30
|
+
debugSlowRead?: boolean | undefined;
|
|
20
31
|
}
|
|
21
32
|
export declare class AdbDaemonTransport implements AdbTransport {
|
|
22
33
|
#private;
|
|
@@ -28,13 +39,14 @@ export declare class AdbDaemonTransport implements AdbTransport {
|
|
|
28
39
|
* on the same connection. Because every time the device receives a `CNXN` packet,
|
|
29
40
|
* it resets all internal state, and starts a new authentication process.
|
|
30
41
|
*/
|
|
31
|
-
static authenticate({ serial, connection, credentialStore, authenticators, }: AdbDaemonAuthenticationOptions): Promise<AdbDaemonTransport>;
|
|
42
|
+
static authenticate({ serial, connection, credentialStore, authenticators, ...options }: AdbDaemonAuthenticationOptions): Promise<AdbDaemonTransport>;
|
|
43
|
+
get connection(): AdbDaemonConnection;
|
|
32
44
|
get serial(): string;
|
|
33
45
|
get protocolVersion(): number;
|
|
34
46
|
get maxPayloadSize(): number;
|
|
35
47
|
get banner(): AdbBanner;
|
|
36
48
|
get disconnected(): Promise<void>;
|
|
37
|
-
constructor({ serial, connection, version,
|
|
49
|
+
constructor({ serial, connection, version, banner, ...options }: AdbDaemonSocketConnectorConstructionOptions);
|
|
38
50
|
connect(service: string): ValueOrPromise<AdbSocket>;
|
|
39
51
|
addReverseTunnel(handler: AdbIncomingSocketHandler, address?: string): string;
|
|
40
52
|
removeReverseTunnel(address: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/daemon/transport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAMhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,KAAK,EACR,wBAAwB,EACxB,SAAS,EACT,YAAY,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAMtE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGhE,eAAO,MAAM,gCAAgC,WAAa,CAAC;AAE3D,UAAU,8BAA8B;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/daemon/transport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAMhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,KAAK,EACR,wBAAwB,EACxB,SAAS,EACT,YAAY,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAMtE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGhE,eAAO,MAAM,gCAAgC,WAAa,CAAC;AAE3D,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,CAClD,aAAa,EACb,UAAU,CAAC,aAAa,CAAC,CAC5B,CAAC;AAEF,UAAU,8BAA8B;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,mBAAmB,CAAC;IAChC,eAAe,EAAE,kBAAkB,CAAC;IACpC,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACpC;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACvC;AAED,UAAU,2CAA2C;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,mBAAmB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACvC;AAED,qBAAa,kBAAmB,YAAW,YAAY;;IACnD;;;;;;;OAOG;WACU,YAAY,CAAC,EACtB,MAAM,EACN,UAAU,EACV,eAAe,EACf,cAA2C,EAC3C,GAAG,OAAO,EACb,EAAE,8BAA8B,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAgI/D,IAAI,UAAU,wBAEb;IAKD,IAAI,MAAM,WAET;IAGD,IAAI,eAAe,WAElB;IAED,IAAI,cAAc,WAEjB;IAGD,IAAI,MAAM,cAET;IAED,IAAI,YAAY,kBAEf;gBAEW,EACR,MAAM,EACN,UAAU,EACV,OAAO,EACP,MAAM,EACN,GAAG,OAAO,EACb,EAAE,2CAA2C;IAwB9C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC;IAInD,gBAAgB,CACZ,OAAO,EAAE,wBAAwB,EACjC,OAAO,CAAC,EAAE,MAAM,GACjB,MAAM;IAST,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI1C,mBAAmB,IAAI,IAAI;IAI3B,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC;CAGhC"}
|