@arenahito/droid-webscr 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin.js CHANGED
@@ -8,7 +8,7 @@ var __export = (target, all) => {
8
8
  // package.json
9
9
  var package_default = {
10
10
  name: "@arenahito/droid-webscr",
11
- version: "0.0.0",
11
+ version: "0.1.0",
12
12
  private: false,
13
13
  license: "MIT",
14
14
  repository: {
@@ -48,37 +48,29 @@ var package_default = {
48
48
  pino: "10.3.1"
49
49
  },
50
50
  devDependencies: {
51
+ "@droid-webscr/adb": "workspace:*",
52
+ "@droid-webscr/config": "workspace:*",
53
+ "@droid-webscr/protocol": "workspace:*",
54
+ "@droid-webscr/transport": "workspace:*",
51
55
  "@types/ws": "8.18.1"
52
56
  }
53
57
  };
54
58
 
55
- // ../../packages/adb/dist/provider.js
59
+ // ../../packages/adb/src/provider.ts
56
60
  import { Readable } from "stream";
57
- var AdbAuthorizationState;
58
- (function(AdbAuthorizationState2) {
59
- AdbAuthorizationState2["Authorized"] = "authorized";
60
- AdbAuthorizationState2["Offline"] = "offline";
61
- AdbAuthorizationState2["Unauthorized"] = "unauthorized";
62
- })(AdbAuthorizationState || (AdbAuthorizationState = {}));
63
- var AdbTransportKind;
64
- (function(AdbTransportKind2) {
65
- AdbTransportKind2["Emulator"] = "emulator";
66
- AdbTransportKind2["Network"] = "network";
67
- AdbTransportKind2["Usb"] = "usb";
68
- })(AdbTransportKind || (AdbTransportKind = {}));
69
61
  function isUsableDevice(device) {
70
- return device.authorizationState === AdbAuthorizationState.Authorized && device.serial.length > 0;
62
+ return device.authorizationState === "authorized" /* Authorized */ && device.serial.length > 0;
71
63
  }
72
64
 
73
- // ../../packages/adb/dist/system-adb-provider.js
65
+ // ../../packages/adb/src/system-adb-provider.ts
74
66
  import { spawn } from "child_process";
75
67
  import { createConnection, Server } from "net";
76
68
  import { Readable as Readable2 } from "stream";
77
69
  var SystemAdbProvider = class _SystemAdbProvider {
78
- adbPath;
79
70
  constructor(adbPath = "adb") {
80
71
  this.adbPath = adbPath;
81
72
  }
73
+ adbPath;
82
74
  /* v8 ignore next 4 -- external adb process boundary; deterministic parsing is unit-tested */
83
75
  async listDevices() {
84
76
  const output = await runAndCollect(this.adbPath, ["devices", "-l"]);
@@ -117,16 +109,16 @@ var SystemAdbProvider = class _SystemAdbProvider {
117
109
  }
118
110
  };
119
111
  var SystemAdbDeviceSession = class {
112
+ constructor(adbPath, serial) {
113
+ this.adbPath = adbPath;
114
+ this.serial = serial;
115
+ }
120
116
  adbPath;
121
117
  serial;
122
118
  forwards = /* @__PURE__ */ new Set();
123
119
  sockets = /* @__PURE__ */ new Set();
124
120
  shellChildren = /* @__PURE__ */ new Set();
125
121
  shellCloses = /* @__PURE__ */ new Map();
126
- constructor(adbPath, serial) {
127
- this.adbPath = adbPath;
128
- this.serial = serial;
129
- }
130
122
  async push(localPath, remotePath) {
131
123
  await runAndCollect(this.adbPath, ["-s", this.serial, "push", localPath, remotePath]);
132
124
  }
@@ -172,10 +164,16 @@ var SystemAdbDeviceSession = class {
172
164
  this.forwards.add(forward.local);
173
165
  try {
174
166
  const socket = await connectLocalPortWithRetry(localPort);
175
- const forwardedSocket = new ForwardedAdbSocket(this.adbPath, this.serial, forward.local, socket, () => {
176
- this.forwards.delete(forward.local);
177
- this.sockets.delete(forwardedSocket);
178
- });
167
+ const forwardedSocket = new ForwardedAdbSocket(
168
+ this.adbPath,
169
+ this.serial,
170
+ forward.local,
171
+ socket,
172
+ () => {
173
+ this.forwards.delete(forward.local);
174
+ this.sockets.delete(forwardedSocket);
175
+ }
176
+ );
179
177
  this.sockets.add(forwardedSocket);
180
178
  return forwardedSocket;
181
179
  } catch (error51) {
@@ -191,7 +189,9 @@ var SystemAdbDeviceSession = class {
191
189
  await Promise.allSettled([
192
190
  ...this.shellCloses.values(),
193
191
  ...[...this.sockets].map((socket) => socket.close()),
194
- ...[...this.forwards].map((forward) => runAndCollect(this.adbPath, ["-s", this.serial, "forward", "--remove", forward]))
192
+ ...[...this.forwards].map(
193
+ (forward) => runAndCollect(this.adbPath, ["-s", this.serial, "forward", "--remove", forward])
194
+ )
195
195
  ]);
196
196
  this.forwards.clear();
197
197
  }
@@ -220,24 +220,24 @@ function parseDeviceLine(line) {
220
220
  }
221
221
  function parseAuthorizationState(state) {
222
222
  if (state === "device") {
223
- return AdbAuthorizationState.Authorized;
223
+ return "authorized" /* Authorized */;
224
224
  }
225
225
  if (state === "unauthorized") {
226
- return AdbAuthorizationState.Unauthorized;
226
+ return "unauthorized" /* Unauthorized */;
227
227
  }
228
- return AdbAuthorizationState.Offline;
228
+ return "offline" /* Offline */;
229
229
  }
230
230
  function inferTransportKind(serial, fields) {
231
231
  if (serial.startsWith("emulator-")) {
232
- return AdbTransportKind.Emulator;
232
+ return "emulator" /* Emulator */;
233
233
  }
234
234
  if (serial.includes(":")) {
235
- return AdbTransportKind.Network;
235
+ return "network" /* Network */;
236
236
  }
237
237
  if (fields.some((field) => field.startsWith("usb:"))) {
238
- return AdbTransportKind.Usb;
238
+ return "usb" /* Usb */;
239
239
  }
240
- return AdbTransportKind.Usb;
240
+ return "usb" /* Usb */;
241
241
  }
242
242
  function parseField(fields, key) {
243
243
  const prefix = `${key}:`;
@@ -260,7 +260,9 @@ async function runAndCollect(command, args) {
260
260
  return stdout;
261
261
  }
262
262
  async function startLogcatTail(command, serial) {
263
- const epoch = Number((await runAndCollect(command, ["-s", serial, "shell", "date", "+%s"])).trim());
263
+ const epoch = Number(
264
+ (await runAndCollect(command, ["-s", serial, "shell", "date", "+%s"])).trim()
265
+ );
264
266
  if (!Number.isFinite(epoch)) {
265
267
  throw new Error("Failed to read device logcat start time.");
266
268
  }
@@ -369,12 +371,6 @@ function delay(ms) {
369
371
  return new Promise((resolve) => setTimeout(resolve, ms));
370
372
  }
371
373
  var ForwardedAdbSocket = class {
372
- adbPath;
373
- serial;
374
- localForward;
375
- socket;
376
- onClose;
377
- chunks;
378
374
  constructor(adbPath, serial, localForward, socket, onClose = () => {
379
375
  }) {
380
376
  this.adbPath = adbPath;
@@ -384,6 +380,12 @@ var ForwardedAdbSocket = class {
384
380
  this.onClose = onClose;
385
381
  this.chunks = socket;
386
382
  }
383
+ adbPath;
384
+ serial;
385
+ localForward;
386
+ socket;
387
+ onClose;
388
+ chunks;
387
389
  async write(chunk) {
388
390
  await new Promise((resolve, reject) => {
389
391
  this.socket.write(chunk, (error51) => {
@@ -411,7 +413,7 @@ var ForwardedAdbSocket = class {
411
413
  }
412
414
  };
413
415
 
414
- // ../../packages/shared/dist/index.js
416
+ // ../../packages/shared/src/index.ts
415
417
  var AppError = class extends Error {
416
418
  code;
417
419
  constructor(code, message) {
@@ -14941,7 +14943,7 @@ function date4(params) {
14941
14943
  // ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
14942
14944
  config(en_default());
14943
14945
 
14944
- // ../../packages/config/dist/schema.js
14946
+ // ../../packages/config/src/schema.ts
14945
14947
  var defaultAgentConfig = {
14946
14948
  authToken: void 0,
14947
14949
  bindHost: "127.0.0.1",
@@ -14964,7 +14966,9 @@ function validateAgentConfig(input) {
14964
14966
  return err(new ConfigError("CONFIG_INVALID", parsed.error.message));
14965
14967
  }
14966
14968
  if (!isLocalBind(parsed.data.bindHost) && !parsed.data.authToken) {
14967
- return err(new ConfigError("CONFIG_UNSAFE_BIND", "Non-local bind addresses require authToken."));
14969
+ return err(
14970
+ new ConfigError("CONFIG_UNSAFE_BIND", "Non-local bind addresses require authToken.")
14971
+ );
14968
14972
  }
14969
14973
  return ok(parsed.data);
14970
14974
  }
@@ -15196,33 +15200,26 @@ async function collectTextUntil(chunks, expected) {
15196
15200
  // src/server/create-fastify-app.ts
15197
15201
  import websocket from "@fastify/websocket";
15198
15202
 
15199
- // ../../packages/protocol/dist/streams.js
15200
- var StreamId;
15201
- (function(StreamId2) {
15203
+ // ../../packages/protocol/src/streams.ts
15204
+ var StreamId = /* @__PURE__ */ ((StreamId2) => {
15202
15205
  StreamId2[StreamId2["Session"] = 1] = "Session";
15203
15206
  StreamId2[StreamId2["Device"] = 2] = "Device";
15204
15207
  StreamId2[StreamId2["Video"] = 3] = "Video";
15205
15208
  StreamId2[StreamId2["Control"] = 4] = "Control";
15206
15209
  StreamId2[StreamId2["Log"] = 5] = "Log";
15207
- })(StreamId || (StreamId = {}));
15208
- var knownStreams = new Set(Object.values(StreamId).filter((value) => typeof value === "number"));
15210
+ return StreamId2;
15211
+ })(StreamId || {});
15212
+ var knownStreams = new Set(
15213
+ Object.values(StreamId).filter((value) => typeof value === "number")
15214
+ );
15209
15215
 
15210
- // ../../packages/protocol/dist/frame.js
15216
+ // ../../packages/protocol/src/frame.ts
15211
15217
  var FRAME_MAGIC = 1146573635;
15212
15218
  var FRAME_HEADER_LENGTH = 40;
15213
15219
  var WIRE_VERSION = 1;
15214
15220
  var DEFAULT_MAX_PAYLOAD_LENGTH = 16 * 1024 * 1024;
15215
15221
 
15216
- // ../../packages/protocol/dist/errors.js
15217
- var ProtocolErrorCode;
15218
- (function(ProtocolErrorCode2) {
15219
- ProtocolErrorCode2["FrameTooShort"] = "FRAME_TOO_SHORT";
15220
- ProtocolErrorCode2["InvalidMagic"] = "INVALID_MAGIC";
15221
- ProtocolErrorCode2["UnsupportedVersion"] = "UNSUPPORTED_VERSION";
15222
- ProtocolErrorCode2["UnsupportedHeaderLength"] = "UNSUPPORTED_HEADER_LENGTH";
15223
- ProtocolErrorCode2["PayloadLengthMismatch"] = "PAYLOAD_LENGTH_MISMATCH";
15224
- ProtocolErrorCode2["PayloadTooLarge"] = "PAYLOAD_TOO_LARGE";
15225
- })(ProtocolErrorCode || (ProtocolErrorCode = {}));
15222
+ // ../../packages/protocol/src/errors.ts
15226
15223
  var ProtocolError = class extends Error {
15227
15224
  code;
15228
15225
  constructor(code, message) {
@@ -15232,7 +15229,7 @@ var ProtocolError = class extends Error {
15232
15229
  }
15233
15230
  };
15234
15231
 
15235
- // ../../packages/protocol/dist/codec.js
15232
+ // ../../packages/protocol/src/codec.ts
15236
15233
  function encodeFrame(frame) {
15237
15234
  const payloadLength = frame.payload.byteLength;
15238
15235
  const output = new Uint8Array(FRAME_HEADER_LENGTH + payloadLength);
@@ -15253,28 +15250,37 @@ function encodeFrame(frame) {
15253
15250
  function decodeFrame(bytes, options = {}) {
15254
15251
  const maxPayloadLength = options.maxPayloadLength ?? DEFAULT_MAX_PAYLOAD_LENGTH;
15255
15252
  if (bytes.byteLength < FRAME_HEADER_LENGTH) {
15256
- return failure(ProtocolErrorCode.FrameTooShort, "Frame is shorter than the protocol header.");
15253
+ return failure("FRAME_TOO_SHORT" /* FrameTooShort */, "Frame is shorter than the protocol header.");
15257
15254
  }
15258
15255
  const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
15259
15256
  const magic = view.getUint32(0, false);
15260
15257
  if (magic !== FRAME_MAGIC) {
15261
- return failure(ProtocolErrorCode.InvalidMagic, "Frame magic does not match DWSC.");
15258
+ return failure("INVALID_MAGIC" /* InvalidMagic */, "Frame magic does not match DWSC.");
15262
15259
  }
15263
15260
  const version2 = view.getUint16(4, false);
15264
15261
  if (version2 !== WIRE_VERSION) {
15265
- return failure(ProtocolErrorCode.UnsupportedVersion, `Unsupported wire version: ${version2}.`);
15262
+ return failure("UNSUPPORTED_VERSION" /* UnsupportedVersion */, `Unsupported wire version: ${version2}.`);
15266
15263
  }
15267
15264
  const headerLength = view.getUint16(6, false);
15268
15265
  if (headerLength !== FRAME_HEADER_LENGTH) {
15269
- return failure(ProtocolErrorCode.UnsupportedHeaderLength, `Unsupported header length: ${headerLength}.`);
15266
+ return failure(
15267
+ "UNSUPPORTED_HEADER_LENGTH" /* UnsupportedHeaderLength */,
15268
+ `Unsupported header length: ${headerLength}.`
15269
+ );
15270
15270
  }
15271
15271
  const payloadLength = view.getUint32(16, false);
15272
15272
  if (payloadLength > maxPayloadLength) {
15273
- return failure(ProtocolErrorCode.PayloadTooLarge, `Payload length ${payloadLength} exceeds limit ${maxPayloadLength}.`);
15273
+ return failure(
15274
+ "PAYLOAD_TOO_LARGE" /* PayloadTooLarge */,
15275
+ `Payload length ${payloadLength} exceeds limit ${maxPayloadLength}.`
15276
+ );
15274
15277
  }
15275
15278
  const expectedLength = FRAME_HEADER_LENGTH + payloadLength;
15276
15279
  if (bytes.byteLength !== expectedLength) {
15277
- return failure(ProtocolErrorCode.PayloadLengthMismatch, `Frame length ${bytes.byteLength} does not match declared length ${expectedLength}.`);
15280
+ return failure(
15281
+ "PAYLOAD_LENGTH_MISMATCH" /* PayloadLengthMismatch */,
15282
+ `Frame length ${bytes.byteLength} does not match declared length ${expectedLength}.`
15283
+ );
15278
15284
  }
15279
15285
  return {
15280
15286
  ok: true,
@@ -15302,9 +15308,8 @@ function failure(code, message) {
15302
15308
  };
15303
15309
  }
15304
15310
 
15305
- // ../../packages/protocol/dist/messages.js
15306
- var MessageType;
15307
- (function(MessageType2) {
15311
+ // ../../packages/protocol/src/messages.ts
15312
+ var MessageType = /* @__PURE__ */ ((MessageType2) => {
15308
15313
  MessageType2[MessageType2["SessionHello"] = 1] = "SessionHello";
15309
15314
  MessageType2[MessageType2["SessionHelloAck"] = 2] = "SessionHelloAck";
15310
15315
  MessageType2[MessageType2["SessionStart"] = 3] = "SessionStart";
@@ -15321,10 +15326,13 @@ var MessageType;
15321
15326
  MessageType2[MessageType2["ControlSystem"] = 772] = "ControlSystem";
15322
15327
  MessageType2[MessageType2["ControlClipboard"] = 773] = "ControlClipboard";
15323
15328
  MessageType2[MessageType2["LogRecord"] = 1025] = "LogRecord";
15324
- })(MessageType || (MessageType = {}));
15325
- var knownMessageTypes = new Set(Object.values(MessageType).filter((value) => typeof value === "number"));
15329
+ return MessageType2;
15330
+ })(MessageType || {});
15331
+ var knownMessageTypes = new Set(
15332
+ Object.values(MessageType).filter((value) => typeof value === "number")
15333
+ );
15326
15334
 
15327
- // ../../packages/transport/dist/stream.js
15335
+ // ../../packages/transport/src/stream.ts
15328
15336
  var DEFAULT_MAX_BUFFERED_BYTES = 16 * 1024 * 1024;
15329
15337
  var FrameAssembler = class {
15330
15338
  buffer = new Uint8Array();
@@ -15393,7 +15401,7 @@ function readPayloadLength(bytes) {
15393
15401
  return view.getUint32(16, false);
15394
15402
  }
15395
15403
 
15396
- // ../../packages/transport/dist/backpressure.js
15404
+ // ../../packages/transport/src/backpressure.ts
15397
15405
  var VIDEO_KEYFRAME_FLAG = 1 << 0;
15398
15406
 
15399
15407
  // src/server/create-fastify-app.ts