appium-xcuitest-driver 10.28.0 → 10.29.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/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [10.29.0](https://github.com/appium/appium-xcuitest-driver/compare/v10.28.1...v10.29.0) (2026-03-14)
2
+
3
+ ### Features
4
+
5
+ * Add script for pairing AppleTV over WiFi ([#2754](https://github.com/appium/appium-xcuitest-driver/issues/2754)) ([1912dd9](https://github.com/appium/appium-xcuitest-driver/commit/1912dd9549c303574100cb43b9732b3ebc84d16a))
6
+
7
+ ## [10.28.1](https://github.com/appium/appium-xcuitest-driver/compare/v10.28.0...v10.28.1) (2026-03-13)
8
+
9
+ ### Bug Fixes
10
+
11
+ * Update cleanup logic in the tunnel creation script ([#2751](https://github.com/appium/appium-xcuitest-driver/issues/2751)) ([2ba43d4](https://github.com/appium/appium-xcuitest-driver/commit/2ba43d4a8cb16a5a2cedcda642386d8aa6ae418a))
12
+
1
13
  ## [10.28.0](https://github.com/appium/appium-xcuitest-driver/compare/v10.27.0...v10.28.0) (2026-03-13)
2
14
 
3
15
  ### Features
@@ -1,2 +1,5 @@
1
- export {};
1
+ export type BuildOptions = {
2
+ name?: string | undefined;
3
+ sdk?: string | undefined;
4
+ };
2
5
  //# sourceMappingURL=build-wda.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-wda.d.mts","sourceRoot":"","sources":["../../scripts/build-wda.mjs"],"names":[],"mappings":""}
1
+ {"version":3,"file":"build-wda.d.mts","sourceRoot":"","sources":["../../scripts/build-wda.mjs"],"names":[],"mappings":";WA+Ec,MAAM,GAAG,SAAS;UAClB,MAAM,GAAG,SAAS"}
@@ -3,11 +3,14 @@ import * as xcode from 'appium-xcode';
3
3
  import { Simctl } from 'node-simctl';
4
4
  import { getSimulator } from 'appium-ios-simulator';
5
5
  import { logger } from 'appium/support.js';
6
- import { parseArgValue } from './utils.js';
6
+ import { Command } from 'commander';
7
7
  const log = logger.getLogger('WDA');
8
- async function build() {
9
- const customDevice = parseArgValue('name');
10
- const platformVersion = parseArgValue('sdk') || (await xcode.getMaxIOSSDK());
8
+ /**
9
+ * @param {BuildOptions} [options]
10
+ */
11
+ async function build(options) {
12
+ const customDevice = options?.name ?? null;
13
+ const platformVersion = options?.sdk || (await xcode.getMaxIOSSDK());
11
14
  if (!platformVersion) {
12
15
  throw new Error('Cannot determine iOS SDK version to build for. Please specify --sdk=<version> or ensure Xcode and its command-line tools are installed (try `xcodebuild -showsdks` or `xcode-select --print-path`).');
13
16
  }
@@ -32,5 +35,29 @@ async function build() {
32
35
  log.info(`Building WDA for ${deviceInfo.name} ${platformVersion} with udid '${deviceInfo.udid}' Simulator...`);
33
36
  await wda.xcodebuild.start(true);
34
37
  }
35
- (async () => await build())();
38
+ async function main() {
39
+ const program = new Command();
40
+ program
41
+ .name('appium driver run xcuitest build-wda')
42
+ .description('Build WebDriverAgent for a target iOS simulator')
43
+ .option('--name <deviceName>', 'Simulator name to build for (defaults to iPhone*)')
44
+ .option('--sdk <sdkVersion>', 'iOS SDK / platform version (e.g. 17.2)')
45
+ .addHelpText('after', `
46
+ EXAMPLES:
47
+ # Build WDA for default simulator
48
+ appium driver run xcuitest build-wda
49
+
50
+ # Build WDA for specific simulator and SDK
51
+ appium driver run xcuitest build-wda --name "iPhone 15" --sdk 17.2`)
52
+ .action(async (options) => {
53
+ await build(options);
54
+ });
55
+ await program.parseAsync(process.argv);
56
+ }
57
+ await main();
58
+ /**
59
+ * @typedef {Object} BuildOptions
60
+ * @property {string | undefined} [name]
61
+ * @property {string | undefined} [sdk]
62
+ */
36
63
  //# sourceMappingURL=build-wda.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-wda.mjs","sourceRoot":"","sources":["../../scripts/build-wda.mjs"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAEzC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAEpC,KAAK,UAAU,KAAK;IAClB,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAE7E,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,qMAAqM,CACtM,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACzE,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,EAAE;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,iCAAiC,eAAe,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,2EAA2E,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChN,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,oBAAoB,CACrC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC,CACrE,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE;QACjD,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,cAAc,EAAE,KAAK;KACtB,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC;QAC7B,aAAa,EAAE,eAAe;QAC9B,eAAe;QACf,YAAY,EAAE,IAAI;QAClB,MAAM;KACP,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CACN,oBAAoB,UAAU,CAAC,IAAI,IAAI,eAAe,eAAe,UAAU,CAAC,IAAI,gBAAgB,CACrG,CAAC;IACF,MAAM,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"build-wda.mjs","sourceRoot":"","sources":["../../scripts/build-wda.mjs"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAElC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAEpC;;GAEG;AACH,KAAK,UAAU,KAAK,CAAC,OAAO;IAC1B,MAAM,YAAY,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;IAC3C,MAAM,eAAe,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAErE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,qMAAqM,CACtM,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACzE,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,EAAE;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,iCAAiC,eAAe,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,2EAA2E,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChN,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,oBAAoB,CACrC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC,CACrE,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE;QACjD,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,cAAc,EAAE,KAAK;KACtB,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC;QAC7B,aAAa,EAAE,eAAe;QAC9B,eAAe;QACf,YAAY,EAAE,IAAI;QAClB,MAAM;KACP,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CACN,oBAAoB,UAAU,CAAC,IAAI,IAAI,eAAe,eAAe,UAAU,CAAC,IAAI,gBAAgB,CACrG,CAAC;IACF,MAAM,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,sCAAsC,CAAC;SAC5C,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,qBAAqB,EAAE,mDAAmD,CAAC;SAClF,MAAM,CAAC,oBAAoB,EAAE,wCAAwC,CAAC;SACtE,WAAW,CACV,OAAO,EACP;;;;;;qEAM+D,CAChE;SACA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEL,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,IAAI,EAAE,CAAC;AAEb;;;;GAIG"}
@@ -1,2 +1,5 @@
1
- export {};
1
+ export type DownloadOptions = {
2
+ outdir: string;
3
+ platform: string;
4
+ };
2
5
  //# sourceMappingURL=download-wda-sim.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"download-wda-sim.d.mts","sourceRoot":"","sources":["../../scripts/download-wda-sim.mjs"],"names":[],"mappings":""}
1
+ {"version":3,"file":"download-wda-sim.d.mts","sourceRoot":"","sources":["../../scripts/download-wda-sim.mjs"],"names":[],"mappings":";YAwGc,MAAM;cACN,MAAM"}
@@ -2,16 +2,16 @@ import { fs, logger, zip, net, node } from 'appium/support.js';
2
2
  import _ from 'lodash';
3
3
  import os from 'node:os';
4
4
  import path from 'node:path';
5
- import { parseArgValue } from './utils.js';
5
+ import { Command } from 'commander';
6
6
  const log = logger.getLogger('download-wda-sim');
7
- const wdaUrl = (version, zipFileName) => `https://github.com/appium/WebDriverAgent/releases/download/v${version}/${zipFileName}`;
8
- const destZip = (platform) => {
7
+ const wdaUrl = (/** @type {string} */ version, /** @type {string} */ zipFileName) => `https://github.com/appium/WebDriverAgent/releases/download/v${version}/${zipFileName}`;
8
+ const destZip = (/** @type {string} */ platform) => {
9
9
  const scheme = `WebDriverAgentRunner${_.toLower(platform) === 'tvos' ? '_tvOS' : ''}`;
10
10
  return `${scheme}-Build-Sim-${os.arch() === 'arm64' ? 'arm64' : 'x86_64'}.zip`;
11
11
  };
12
12
  /**
13
13
  * Return installed appium-webdriveragent package version
14
- * @returns {Promise<number>}
14
+ * @returns {Promise<string>}
15
15
  */
16
16
  async function webdriveragentPkgVersion() {
17
17
  const moduleRoot = node.getModuleRootSync('appium-xcuitest-driver', import.meta.url);
@@ -19,29 +19,29 @@ async function webdriveragentPkgVersion() {
19
19
  throw new Error('Cannot resolve module root for appium-xcuitest-driver');
20
20
  }
21
21
  const pkgPath = path.join(moduleRoot, 'node_modules', 'appium-webdriveragent', 'package.json');
22
- return JSON.parse(await fs.readFile(pkgPath, 'utf8')).version;
22
+ const pkg = JSON.parse(await fs.readFile(pkgPath, 'utf8'));
23
+ return String(pkg.version);
23
24
  }
24
25
  ;
25
26
  /**
26
27
  * Prepare the working root directory.
28
+ * @param {string} outdir
27
29
  * @returns {Promise<string>} Root directory to download and unzip.
28
30
  */
29
- async function prepareRootDir() {
30
- const destDirRoot = parseArgValue('outdir');
31
- if (!destDirRoot) {
32
- throw new Error(`--outdir is required`);
33
- }
34
- const destDir = path.resolve(process.cwd(), destDirRoot);
31
+ async function prepareRootDir(outdir) {
32
+ const destDir = path.resolve(process.cwd(), outdir);
35
33
  if (await fs.exists(destDir)) {
36
34
  throw new Error(`${destDir} already exists`);
37
35
  }
38
36
  await fs.mkdir(destDir, { recursive: true });
39
37
  return destDir;
40
38
  }
41
- async function getWDAPrebuiltPackage() {
42
- const destDir = await prepareRootDir();
43
- const platform = parseArgValue('platform');
44
- const zipFileName = destZip(platform);
39
+ /**
40
+ * @param {DownloadOptions} options
41
+ */
42
+ async function getWDAPrebuiltPackage(options) {
43
+ const destDir = await prepareRootDir(options.outdir);
44
+ const zipFileName = destZip(options.platform);
45
45
  const wdaVersion = await webdriveragentPkgVersion();
46
46
  const urlToDownload = wdaUrl(wdaVersion, zipFileName);
47
47
  const downloadedZipFile = path.join(destDir, zipFileName);
@@ -58,5 +58,29 @@ async function getWDAPrebuiltPackage() {
58
58
  }
59
59
  }
60
60
  }
61
- (async () => await getWDAPrebuiltPackage())();
61
+ async function main() {
62
+ const program = new Command();
63
+ program
64
+ .name('appium driver run xcuitest download-wda-sim')
65
+ .description('Download a prebuilt WebDriverAgentRunner for iOS/tvOS simulator')
66
+ .requiredOption('--outdir <path>', 'Destination directory to download and unpack into')
67
+ .requiredOption('--platform <platform>', 'Target platform (e.g. iOS or tvOS)', (value) => value)
68
+ .addHelpText('after', `
69
+ EXAMPLES:
70
+ # Download WDA for iOS simulator
71
+ appium driver run xcuitest download-wda-sim --outdir ./wda-sim --platform iOS
72
+
73
+ # Download WDA for tvOS simulator
74
+ appium driver run xcuitest download-wda-sim --outdir ./wda-sim-tvos --platform tvOS`)
75
+ .action(async (options) => {
76
+ await getWDAPrebuiltPackage(options);
77
+ });
78
+ await program.parseAsync(process.argv);
79
+ }
80
+ await main();
81
+ /**
82
+ * @typedef {Object} DownloadOptions
83
+ * @property {string} outdir
84
+ * @property {string} platform
85
+ */
62
86
  //# sourceMappingURL=download-wda-sim.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"download-wda-sim.mjs","sourceRoot":"","sources":["../../scripts/download-wda-sim.mjs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"download-wda-sim.mjs","sourceRoot":"","sources":["../../scripts/download-wda-sim.mjs"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=pair-appletv.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pair-appletv.d.mts","sourceRoot":"","sources":["../../scripts/pair-appletv.mjs"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Pair Apple TV / tvOS devices over WiFi for Remote XPC tunnels.
4
+ *
5
+ * This script wraps the Apple TV pairing support provided by the optional
6
+ * `appium-ios-remotexpc` dependency. It discovers Apple TV devices on the
7
+ * local network, lets you select one (or target it via a selector), and runs
8
+ * the pairing flow so that subsequent WiFi tunnels can be established.
9
+ *
10
+ * Usage (from Appium CLI):
11
+ *
12
+ * appium driver run xcuitest pair-appletv -- [options]
13
+ *
14
+ * Options:
15
+ * -d, --device <selector> Device selector:
16
+ * - Device name (e.g. "Living Room")
17
+ * - Device identifier (e.g. "AA:BB:CC:DD:EE:FF")
18
+ * - Device index (e.g. "0", "1", "2")
19
+ */
20
+ import { logger } from 'appium/support.js';
21
+ import { Command } from 'commander';
22
+ import { AppleTVPairingService, UserInputService } from 'appium-ios-remotexpc';
23
+ const log = logger.getLogger('AppleTVPairing');
24
+ async function main() {
25
+ const program = new Command();
26
+ program
27
+ .name('appium driver run xcuitest pair-appletv')
28
+ .description('Pair Apple TV / tvOS devices over WiFi for Remote XPC tunnels')
29
+ .option('-d, --device <selector>', 'Apple TV device selector (name, identifier, or index)');
30
+ program.parse(process.argv);
31
+ const options = program.opts();
32
+ const userInput = new UserInputService();
33
+ const pairingService = new AppleTVPairingService(userInput);
34
+ const result = await pairingService.discoverAndPair(options.device);
35
+ if (!result.success) {
36
+ throw result.error ?? new Error('Pairing failed');
37
+ }
38
+ log.info('Pairing successful. ' +
39
+ `Use this identifier as the udid for WiFi tvOS tunnels: ${result.deviceId}`);
40
+ }
41
+ await main();
42
+ //# sourceMappingURL=pair-appletv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pair-appletv.mjs","sourceRoot":"","sources":["../../scripts/pair-appletv.mjs"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,qBAAqB,EAAE,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAE7E,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAE/C,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,yCAAyC,CAAC;SAC/C,WAAW,CAAC,+DAA+D,CAAC;SAC5E,MAAM,CACL,yBAAyB,EACzB,uDAAuD,CACxD,CAAC;IAEJ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,IAAI,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpD,CAAC;IAED,GAAG,CAAC,IAAI,CACN,sBAAsB;QACtB,0DAA0D,MAAM,CAAC,QAAQ,EAAE,CAC5E,CAAC;AACJ,CAAC;AAGD,MAAM,IAAI,EAAE,CAAC"}
@@ -3,12 +3,12 @@
3
3
  * Test script for creating lockdown service, starting CoreDeviceProxy, and creating tunnel
4
4
  * This script demonstrates the tunnel creation workflow for all connected devices
5
5
  */
6
- import { logger, node } from 'appium/support.js';
6
+ import { logger, node, fs } from 'appium/support.js';
7
7
  import _ from 'lodash';
8
8
  import { PacketStreamServer, TunnelManager, createLockdownServiceByUDID, createUsbmux, startCoreDeviceProxy, startTunnelRegistryServer, } from 'appium-ios-remotexpc';
9
9
  import { strongbox } from '@appium/strongbox';
10
10
  import path from 'node:path';
11
- import fs from 'node:fs';
11
+ import { Command } from 'commander';
12
12
  const log = logger.getLogger('TunnelCreation');
13
13
  const TUNNEL_REGISTRY_PORT = 'tunnelRegistryPort';
14
14
  /**
@@ -77,41 +77,25 @@ class TunnelCreator {
77
77
  return registry;
78
78
  }
79
79
  /**
80
- * Setup cleanup handlers for graceful shutdown
80
+ * Cleanup resources for graceful shutdown
81
81
  */
82
- setupCleanupHandlers() {
83
- const cleanup = async (signal) => {
84
- log.warn(`\nReceived ${signal}. Cleaning up...`);
85
- // Close all packet stream servers
86
- if (this._packetStreamServers.size > 0) {
87
- log.info(`Closing ${this._packetStreamServers.size} packet stream server(s)...`);
88
- for (const [udid, server] of this._packetStreamServers) {
89
- try {
90
- await server.stop();
91
- log.info(`Closed packet stream server for device ${udid}`);
92
- }
93
- catch (err) {
94
- log.warn(`Failed to close packet stream server for device ${udid}: ${err}`);
95
- }
82
+ async cleanup() {
83
+ log.warn('Cleaning up tunnel resources...');
84
+ // Close all packet stream servers
85
+ if (this._packetStreamServers.size > 0) {
86
+ log.info(`Closing ${this._packetStreamServers.size} packet stream server(s)...`);
87
+ for (const [udid, server] of this._packetStreamServers) {
88
+ try {
89
+ await server.stop();
90
+ log.info(`Closed packet stream server for device ${udid}`);
91
+ }
92
+ catch (err) {
93
+ log.warn(`Failed to close packet stream server for device ${udid}: ${err}`);
96
94
  }
97
- this._packetStreamServers.clear();
98
95
  }
99
- log.info('Cleanup completed. Exiting...');
100
- process.exit(0);
101
- };
102
- // Handle various termination signals
103
- process.on('SIGINT', () => cleanup('SIGINT (Ctrl+C)'));
104
- process.on('SIGTERM', () => cleanup('SIGTERM'));
105
- process.on('SIGHUP', () => cleanup('SIGHUP'));
106
- // Handle uncaught exceptions and unhandled rejections
107
- process.on('uncaughtException', async (error) => {
108
- log.error('Uncaught Exception:', error);
109
- await cleanup('Uncaught Exception');
110
- });
111
- process.on('unhandledRejection', async (reason, promise) => {
112
- log.error('Unhandled Rejection at:', promise, 'reason:', reason);
113
- await cleanup('Unhandled Rejection');
114
- });
96
+ this._packetStreamServers.clear();
97
+ }
98
+ log.info('Cleanup completed.');
115
99
  }
116
100
  /**
117
101
  * Create tunnel for a single device
@@ -222,76 +206,127 @@ class TunnelCreator {
222
206
  log.info(' - GET /remotexpc/tunnels/metadata - Get registry metadata');
223
207
  if (successful.length > 0) {
224
208
  const firstUdid = successful[0].device.Properties.SerialNumber;
225
- log.info(` curl http://localhost:4723/remotexpc/tunnels/${firstUdid}`);
209
+ log.info(` curl http://localhost:${this._tunnelRegistryPort}/remotexpc/tunnels/${firstUdid}`);
226
210
  }
227
211
  }
228
212
  }
229
213
  }
230
214
  /**
231
- * Helper function to parse string arguments
232
- * @param {string[]} args - Array of command line arguments
233
- * @param {string} flagName - Name of the flag to parse (e.g. '--udid')
234
- * @returns {string|undefined} The value of the flag if found, undefined otherwise
215
+ * Sets up signal and error handlers to ensure tunnels are cleaned up exactly once
216
+ * and an appropriate process exit code is set on shutdown.
217
+ *
218
+ * @param {TunnelCreator} tunnelCreator
219
+ * @returns {() => Promise<void>} cleanup function that can be awaited in a finally block
235
220
  */
236
- function parseArg(args, flagName) {
237
- const equalsArg = args.find((arg) => arg.startsWith(`${flagName}=`));
238
- if (equalsArg) {
239
- const value = equalsArg.split('=')[1];
240
- log.info(`Using ${flagName.slice(2)}: ${value}`);
241
- return value;
242
- }
243
- else {
244
- const flagIndex = args.indexOf(flagName);
245
- if (flagIndex !== -1 && flagIndex + 1 < args.length) {
246
- const value = args[flagIndex + 1];
247
- log.info(`Using ${flagName.slice(2)}: ${value}`);
248
- return value;
221
+ function setupCleanupHandlers(tunnelCreator) {
222
+ let shuttingDown = false;
223
+ const cleanupOnce = async () => {
224
+ if (shuttingDown) {
225
+ return;
226
+ }
227
+ shuttingDown = true;
228
+ try {
229
+ await tunnelCreator.cleanup();
230
+ }
231
+ catch (err) {
232
+ log.warn(`Error during tunnel cleanup: ${err?.message ?? err}`);
249
233
  }
234
+ };
235
+ const shutdownSignals = ['SIGINT', 'SIGTERM', 'SIGHUP'];
236
+ for (const signal of shutdownSignals) {
237
+ process.on(signal, () => {
238
+ if (process.exitCode == null) {
239
+ // Follow conventional POSIX exit codes for signals where possible.
240
+ if (signal === 'SIGINT') {
241
+ process.exitCode = 130;
242
+ }
243
+ else if (signal === 'SIGTERM') {
244
+ process.exitCode = 143;
245
+ }
246
+ else {
247
+ process.exitCode = 1;
248
+ }
249
+ }
250
+ void cleanupOnce();
251
+ });
250
252
  }
251
- return undefined;
253
+ process.on('unhandledRejection', (reason) => {
254
+ log.error('Unhandled promise rejection', reason);
255
+ if (process.exitCode == null) {
256
+ process.exitCode = 1;
257
+ }
258
+ void cleanupOnce();
259
+ });
260
+ process.on('uncaughtException', (err) => {
261
+ log.error('Uncaught exception', err);
262
+ if (process.exitCode == null) {
263
+ process.exitCode = 1;
264
+ }
265
+ void cleanupOnce();
266
+ });
267
+ return cleanupOnce;
252
268
  }
253
- ;
254
- const BOOTSTRAP_PATH = node.getModuleRootSync('appium-xcuitest-driver', import.meta.url);
255
- /**
256
- */
257
269
  async function main() {
258
- // Create an instance of TunnelCreator
270
+ const program = new Command();
271
+ program
272
+ .name('appium driver run xcuitest tunnel-creation')
273
+ .description('Create tunnels for connected iOS devices')
274
+ .option('--udid <udid>', 'UDID of the device to create tunnel for')
275
+ .option('--packet-stream-base-port <port>', 'Base port for packet stream servers (1-65535)', (value) => {
276
+ const port = Number.parseInt(value, 10);
277
+ if (!Number.isFinite(port) || port <= 0 || port > 65535) {
278
+ throw new Error(`Invalid packet stream base port: ${value}. Expected an integer between 1 and 65535.`);
279
+ }
280
+ return port;
281
+ })
282
+ .option('--tunnel-registry-port <port>', 'Port for the tunnel registry API server (1-65535)', (value) => {
283
+ const port = Number.parseInt(value, 10);
284
+ if (!Number.isFinite(port) || port <= 0 || port > 65535) {
285
+ throw new Error(`Invalid tunnel registry port: ${value}. Expected an integer between 1 and 65535.`);
286
+ }
287
+ return port;
288
+ });
289
+ program.parse(process.argv);
290
+ const options = program.opts();
259
291
  const tunnelCreator = new TunnelCreator();
260
- tunnelCreator.setupCleanupHandlers();
261
- const args = process.argv.slice(2);
262
- const specificUdid = parseArg(args, '--udid');
263
- const packetStreamBasePort = parseArg(args, '--packet-stream-base-port');
264
- if (packetStreamBasePort !== undefined) {
265
- tunnelCreator.packetStreamBasePort = parseInt(packetStreamBasePort, 10);
266
- }
267
- const tunnelRegistryPort = parseArg(args, '--tunnel-registry-port');
268
- if (tunnelRegistryPort !== undefined) {
269
- tunnelCreator.tunnelRegistryPort = parseInt(tunnelRegistryPort, 10);
270
- }
271
- if (!BOOTSTRAP_PATH) {
272
- throw new Error(`BOOTSTRAP_PATH is null`);
273
- }
274
- const packageInfo = JSON.parse(fs.readFileSync(path.join(BOOTSTRAP_PATH, 'package.json'), 'utf8'));
275
- const box = strongbox(packageInfo.name);
276
- try {
277
- await box.createItemWithValue(TUNNEL_REGISTRY_PORT, String(tunnelCreator.tunnelRegistryPort));
278
- }
279
- catch (error) {
280
- throw new Error(`Tunnel registry port cannot be persisted: ${error.message}`);
281
- }
282
- /** @type {import('tls').ConnectionOptions} */
283
- const tlsOptions = {
284
- rejectUnauthorized: false,
285
- minVersion: 'TLSv1.2',
286
- };
287
- log.info('Connecting to usbmuxd...');
288
- const usbmux = await createUsbmux();
292
+ const cleanupOnce = setupCleanupHandlers(tunnelCreator);
289
293
  try {
290
- await tunnelCreator.setupTunnels(usbmux, specificUdid, tlsOptions);
294
+ if (options.packetStreamBasePort !== undefined) {
295
+ tunnelCreator.packetStreamBasePort = options.packetStreamBasePort;
296
+ }
297
+ if (options.tunnelRegistryPort !== undefined) {
298
+ tunnelCreator.tunnelRegistryPort = options.tunnelRegistryPort;
299
+ }
300
+ const moduleRoot = node.getModuleRootSync('appium-xcuitest-driver', import.meta.url);
301
+ if (!moduleRoot) {
302
+ throw new Error('Cannot resolve module root for appium-xcuitest-driver');
303
+ }
304
+ const packageJson = await fs.readFile(path.join(moduleRoot, 'package.json'), 'utf8');
305
+ const packageInfo = JSON.parse(packageJson);
306
+ const box = strongbox(packageInfo.name);
307
+ try {
308
+ await box.createItemWithValue(TUNNEL_REGISTRY_PORT, String(tunnelCreator.tunnelRegistryPort));
309
+ }
310
+ catch (error) {
311
+ throw new Error(`Tunnel registry port cannot be persisted: ${error.message}`);
312
+ }
313
+ /** @type {import('tls').ConnectionOptions} */
314
+ const tlsOptions = {
315
+ rejectUnauthorized: false,
316
+ minVersion: 'TLSv1.2',
317
+ };
318
+ log.info('Connecting to usbmuxd...');
319
+ const usbmux = await createUsbmux();
320
+ try {
321
+ await tunnelCreator.setupTunnels(usbmux, options.udid, tlsOptions);
322
+ }
323
+ finally {
324
+ await usbmux.close();
325
+ }
291
326
  }
292
327
  finally {
293
- await usbmux.close();
328
+ await cleanupOnce();
294
329
  }
295
330
  }
296
- (async () => await main())();
331
+ await main();
297
332
  //# sourceMappingURL=tunnel-creation.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-creation.mjs","sourceRoot":"","sources":["../../scripts/tunnel-creation.mjs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tunnel-creation.mjs","sourceRoot":"","sources":["../../scripts/tunnel-creation.mjs"],"names":[],"mappings":";AACA;;;GAGG;AACH,OAAO,EAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,CAAC,MAAM,QAAQ,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,2BAA2B,EAC3B,YAAY,EACZ,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAElC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAC/C,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,aAAa;IACjB;QACE,IAAI,CAAC,oBAAoB,GAAG,IAAI,GAAG,EAAE,CAAC;QACtC,yFAAyF;QACzF,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACnC,sFAAsF;QACtF,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;IACnC,CAAC;IAED,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAED,IAAI,oBAAoB,CAAC,IAAI;QAC3B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;IACpC,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAI,kBAAkB,CAAC,IAAI;QACzB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CAAC,OAAO;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE9C,0CAA0C;QAC1C,MAAM,QAAQ,GAAG;YACf,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE;gBACR,WAAW,EAAE,YAAY;gBACzB,YAAY,EAAE,CAAC;gBACf,aAAa,EAAE,CAAC;aACjB;SACF,CAAC;QAEF,iBAAiB;QACjB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;gBACnD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;oBACvB,IAAI;oBACJ,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;oBAChC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;oBAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC;oBACnC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;oBACzC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc;oBACvD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS;oBAC7C,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,IAAI,GAAG;oBACnD,WAAW,EAAE,GAAG;iBACjB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,QAAQ,CAAC,QAAQ,GAAG;YAClB,WAAW,EAAE,YAAY;YACzB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM;YAClD,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,kCAAkC;SACxF,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAE5C,kCAAkC;QAClC,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,oBAAoB,CAAC,IAAI,6BAA6B,CAAC,CAAC;YACjF,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACvD,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;oBACpB,GAAG,CAAC,IAAI,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;gBAC7D,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,IAAI,CAAC,mDAAmD,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;gBAC9E,CAAC;YACH,CAAC;YACD,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QACpC,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU;QAE5C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;QAE5C,GAAG,CAAC,IAAI,CAAC,4BAA4B,IAAI,MAAM,CAAC,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;QAEvD,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACzC,MAAM,EAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAC,GAAG,MAAM,2BAA2B,CAAC,IAAI,CAAC,CAAC;QAC1F,GAAG,CAAC,IAAI,CAAC,wCAAwC,cAAc,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;QAE3F,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACxC,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,oBAAoB,CACzC,eAAe,EACf,cAAc,CAAC,QAAQ,EACvB,cAAc,CAAC,UAAU,CAAC,YAAY,EACtC,UAAU,CACX,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAEjD,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,OAAO,kBAAkB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAE1F,IAAI,gBAAgB,CAAC;QACrB,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAChD,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QACpE,MAAM,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAEjC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,iBAAiB,EAAE,CAAC;QACxD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QAExD,GAAG,CAAC,IAAI,CAAC,wCAAwC,gBAAgB,EAAE,CAAC,CAAC;QAErE,GAAG,CAAC,IAAI,CAAC,wDAAwD,IAAI,EAAE,CAAC,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,IAAI,gBAAgB,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,0BAA0B,gBAAgB,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO;YACL,MAAM;YACN,MAAM,EAAE;gBACN,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB;YACD,gBAAgB;YAChB,OAAO,EAAE,IAAI;YACb,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU;QACjD,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAE3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,uBAAuB,CAAC,CAAC;QACzD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAChC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,WAAW,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;YACpE,GAAG,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/C,GAAG,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;YACjE,GAAG,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,IAAI,gBAAgB,GAAG,OAAO,CAAC;QAC/B,IAAI,YAAY,EAAE,CAAC;YACjB,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAC/B,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,KAAK,YAAY,CAC5D,CAAC;YAEF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,GAAG,CAAC,KAAK,CAAC,oBAAoB,YAAY,kCAAkC,CAAC,CAAC;gBAC9E,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAChC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBACzB,GAAG,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;gBACrD,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,gBAAgB,gBAAgB,CAAC,MAAM,eAAe,CAAC,CAAC;QAEjE,4DAA4D;QAC5D,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAEjD,GAAG,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,uBAAuB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAE7C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC1D,MAAM,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAEpE,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACtC,GAAG,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YACxE,GAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,mBAAmB,oBAAoB,CAAC,CAAC;YAC9E,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACtC,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAC3D,GAAG,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACnE,GAAG,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;YACzE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;gBAC/D,GAAG,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,mBAAmB,sBAAsB,SAAS,EAAE,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,aAAa;IACzC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,gCAAgC,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACxD,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACtB,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;gBAC7B,mEAAmE;gBACnE,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACxB,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACzB,CAAC;qBAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBAChC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,KAAK,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC7B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,KAAK,WAAW,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC7B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,KAAK,WAAW,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,4CAA4C,CAAC;SAClD,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,eAAe,EAAE,yCAAyC,CAAC;SAClE,MAAM,CACL,kCAAkC,EAClC,+CAA+C,EAC/C,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,oCAAoC,KAAK,4CAA4C,CACtF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CACF;SACA,MAAM,CACL,+BAA+B,EAC/B,mDAAmD,EACnD,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,iCAAiC,KAAK,4CAA4C,CACnF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CACF,CAAC;IAEJ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,WAAW,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAExD,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;YAC/C,aAAa,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;QACpE,CAAC;QACD,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC7C,aAAa,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAChE,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;QACrF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,mBAAmB,CAC3B,oBAAoB,EACpB,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,CACzC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6CAA6C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,8CAA8C;QAC9C,MAAM,UAAU,GAAG;YACjB,kBAAkB,EAAE,KAAK;YACzB,UAAU,EAAE,SAAS;SACtB,CAAC;QAEF,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACrE,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}