@swmansion/argent 0.29.1-next.23 → 0.29.1-next.24

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.
Binary file
Binary file
Binary file
Binary file
package/dist/cli-cmds.mjs CHANGED
@@ -35549,7 +35549,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
35549
35549
  var SESSION_ID2 = randomUUID5();
35550
35550
  function readCliVersion() {
35551
35551
  if (true) {
35552
- return "0.29.1-next.23";
35552
+ return "0.29.1-next.24";
35553
35553
  }
35554
35554
  return "0.0.0";
35555
35555
  }
@@ -16875,7 +16875,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
16875
16875
  var SESSION_ID = randomUUID4();
16876
16876
  function readCliVersion() {
16877
16877
  if (true) {
16878
- return "0.29.1-next.23";
16878
+ return "0.29.1-next.24";
16879
16879
  }
16880
16880
  return "0.0.0";
16881
16881
  }
@@ -100766,7 +100766,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
100766
100766
  var SESSION_ID = (0, import_node_crypto3.randomUUID)();
100767
100767
  function readCliVersion() {
100768
100768
  if (true) {
100769
- return "0.29.1-next.23";
100769
+ return "0.29.1-next.24";
100770
100770
  }
100771
100771
  return "0.0.0";
100772
100772
  }
@@ -128117,6 +128117,7 @@ function androidDevtoolsRef(device) {
128117
128117
  }
128118
128118
  var READY_TIMEOUT_MS2 = 3e4;
128119
128119
  var EXIT_GRACE_MS = 200;
128120
+ var HELPER_EXIT_TIMEOUT_MS = 3e3;
128120
128121
  var HELPER_PORT_MARKER = /^INSTRUMENTATION_STATUS:\s*port=(\d+)/;
128121
128122
  var ADB_FORWARD_PORT_MARKER = /^(\d+)\s*$/;
128122
128123
  var HELPER_STATUS_MARKER = /^INSTRUMENTATION_STATUS:\s*Error=/;
@@ -128358,13 +128359,38 @@ var androidDevtoolsBlueprint = {
128358
128359
  const spawned = await spawnHelperWithRepair(serial);
128359
128360
  let ready2 = false;
128360
128361
  let disposed = false;
128362
+ let procExited = false;
128363
+ spawned.proc.once("exit", () => {
128364
+ procExited = true;
128365
+ });
128366
+ let generation = 0;
128367
+ let activeGeneration = 0;
128368
+ let socketLost = false;
128369
+ let clientClosed = false;
128370
+ let reconnecting = null;
128371
+ const onClientClosed = (gen, err) => {
128372
+ if (gen !== activeGeneration) return;
128373
+ clientClosed = true;
128374
+ if (disposed) return;
128375
+ if (!procExited && getFailureSignal(err)?.error_code === FAILURE_CODES.ANDROID_DEVTOOLS_SOCKET_CLOSED) {
128376
+ socketLost = true;
128377
+ return;
128378
+ }
128379
+ events.emit("terminated", err);
128380
+ };
128381
+ const openClient = async () => {
128382
+ const gen = ++generation;
128383
+ const opened = await connectAndroidDevtoolsClient(
128384
+ spawned.localPort,
128385
+ (err) => onClientClosed(gen, err)
128386
+ );
128387
+ return { client: opened, gen };
128388
+ };
128361
128389
  let client2;
128362
128390
  try {
128363
- client2 = await connectAndroidDevtoolsClient(spawned.localPort, (err) => {
128364
- if (!disposed) {
128365
- events.emit("terminated", err);
128366
- }
128367
- });
128391
+ const opened = await openClient();
128392
+ client2 = opened.client;
128393
+ activeGeneration = opened.gen;
128368
128394
  } catch (err) {
128369
128395
  try {
128370
128396
  spawned.proc.kill();
@@ -128404,10 +128430,60 @@ var androidDevtoolsBlueprint = {
128404
128430
  spawned.proc.on("error", (err) => {
128405
128431
  if (!disposed) events.emit("terminated", err);
128406
128432
  });
128433
+ const reconnect = async () => {
128434
+ let opened;
128435
+ try {
128436
+ opened = await openClient();
128437
+ await opened.client.request("ping");
128438
+ } catch (err) {
128439
+ opened?.client.close();
128440
+ if (!disposed) events.emit("terminated", err instanceof Error ? err : void 0);
128441
+ throw err;
128442
+ }
128443
+ if (disposed) {
128444
+ opened.client.close();
128445
+ throw new FailureError("AndroidDevtools client closed", {
128446
+ error_code: FAILURE_CODES.ANDROID_DEVTOOLS_RPC_CLIENT_CLOSED,
128447
+ failure_stage: "android_devtools_rpc_reconnect",
128448
+ failure_area: "tool_server",
128449
+ error_kind: "subprocess"
128450
+ });
128451
+ }
128452
+ client2 = opened.client;
128453
+ activeGeneration = opened.gen;
128454
+ socketLost = false;
128455
+ clientClosed = false;
128456
+ return client2;
128457
+ };
128458
+ const waitForHelperExit = (timeoutMs) => new Promise((resolve16) => {
128459
+ if (procExited) return resolve16();
128460
+ const timer = setTimeout(resolve16, timeoutMs);
128461
+ spawned.proc.once("exit", () => {
128462
+ clearTimeout(timer);
128463
+ resolve16();
128464
+ });
128465
+ });
128466
+ const request3 = async (method, params) => {
128467
+ let current = client2;
128468
+ if (socketLost && !disposed && !procExited) {
128469
+ reconnecting ??= reconnect().finally(() => {
128470
+ reconnecting = null;
128471
+ });
128472
+ current = await reconnecting;
128473
+ }
128474
+ try {
128475
+ return await current.request(method, params);
128476
+ } catch (err) {
128477
+ if (!disposed && getFailureSignal(err)?.error_code === FAILURE_CODES.ANDROID_DEVTOOLS_RPC_ERROR && err instanceof Error && err.message.includes("UiAutomation not connected")) {
128478
+ events.emit("terminated", err);
128479
+ }
128480
+ throw err;
128481
+ }
128482
+ };
128407
128483
  const api = {
128408
128484
  isReady: () => ready2 && !disposed,
128409
128485
  getHierarchy(getOpts = {}) {
128410
- return client2.request("getHierarchy", {
128486
+ return request3("getHierarchy", {
128411
128487
  waitForIdleMs: getOpts.waitForIdleMs ?? 500,
128412
128488
  maxDepth: getOpts.maxDepth ?? 128,
128413
128489
  maxNodes: getOpts.maxNodes ?? 5e3,
@@ -128415,15 +128491,15 @@ var androidDevtoolsBlueprint = {
128415
128491
  });
128416
128492
  },
128417
128493
  getScreenSize() {
128418
- return client2.request("getScreenSize");
128494
+ return request3("getScreenSize");
128419
128495
  },
128420
128496
  ping() {
128421
- return client2.request("ping");
128497
+ return request3("ping");
128422
128498
  },
128423
128499
  async setText(text, setOpts = {}) {
128424
128500
  let result;
128425
128501
  try {
128426
- result = await client2.request("setText", {
128502
+ result = await request3("setText", {
128427
128503
  text,
128428
128504
  ...setOpts.check ? { check: true } : {}
128429
128505
  });
@@ -128455,19 +128531,41 @@ var androidDevtoolsBlueprint = {
128455
128531
  dispose: async () => {
128456
128532
  disposed = true;
128457
128533
  ready2 = false;
128458
- try {
128459
- await Promise.race([
128460
- client2.request("shutdown"),
128461
- new Promise(
128462
- (_, reject) => setTimeout(() => reject(new Error("shutdown timeout")), 1e3)
128463
- )
128464
- ]);
128465
- } catch {
128534
+ let opening;
128535
+ let acknowledged = false;
128536
+ if (!procExited) {
128537
+ let timer;
128538
+ try {
128539
+ await Promise.race([
128540
+ (async () => {
128541
+ let target = client2;
128542
+ if (clientClosed) {
128543
+ opening = openClient();
128544
+ target = (await opening).client;
128545
+ }
128546
+ await target.request("shutdown");
128547
+ })(),
128548
+ new Promise((_, reject) => {
128549
+ timer = setTimeout(() => reject(new Error("shutdown timeout")), 1e3);
128550
+ })
128551
+ ]);
128552
+ acknowledged = true;
128553
+ } catch {
128554
+ } finally {
128555
+ clearTimeout(timer);
128556
+ }
128466
128557
  }
128558
+ if (acknowledged) await waitForHelperExit(HELPER_EXIT_TIMEOUT_MS);
128559
+ void opening?.then(
128560
+ (opened) => opened.client.close(),
128561
+ () => void 0
128562
+ );
128467
128563
  client2.close();
128468
- try {
128469
- spawned.proc.kill();
128470
- } catch {
128564
+ if (!procExited) {
128565
+ try {
128566
+ spawned.proc.kill();
128567
+ } catch {
128568
+ }
128471
128569
  }
128472
128570
  await removeAdbForward(serial, spawned.localPort);
128473
128571
  },
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swmansion/argent",
3
- "version": "0.29.1-next.23",
3
+ "version": "0.29.1-next.24",
4
4
  "mcpName": "io.github.software-mansion/argent",
5
5
  "description": "MCP server for iOS Simulator and Android Emulator control",
6
6
  "license": "Apache-2.0",