appium-xcuitest-driver 10.28.1 ā 10.30.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 +12 -0
- package/build/scripts/pair-appletv.d.mts +3 -0
- package/build/scripts/pair-appletv.d.mts.map +1 -0
- package/build/scripts/pair-appletv.mjs +42 -0
- package/build/scripts/pair-appletv.mjs.map +1 -0
- package/build/scripts/tunnel-creation.d.mts +39 -1
- package/build/scripts/tunnel-creation.d.mts.map +1 -1
- package/build/scripts/tunnel-creation.mjs +218 -42
- package/build/scripts/tunnel-creation.mjs.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/npm-shrinkwrap.json +26 -8
- package/package.json +3 -2
- package/scripts/pair-appletv.mjs +56 -0
- package/scripts/tunnel-creation.mjs +253 -48
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [10.30.0](https://github.com/appium/appium-xcuitest-driver/compare/v10.29.0...v10.30.0) (2026-03-14)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* Add wireless Apple TV devices to created tunnels ([#2755](https://github.com/appium/appium-xcuitest-driver/issues/2755)) ([07911a7](https://github.com/appium/appium-xcuitest-driver/commit/07911a72199402f6163df201b909d5f3fc544641))
|
|
6
|
+
|
|
7
|
+
## [10.29.0](https://github.com/appium/appium-xcuitest-driver/compare/v10.28.1...v10.29.0) (2026-03-14)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* 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))
|
|
12
|
+
|
|
1
13
|
## [10.28.1](https://github.com/appium/appium-xcuitest-driver/compare/v10.28.0...v10.28.1) (2026-03-13)
|
|
2
14
|
|
|
3
15
|
### Bug Fixes
|
|
@@ -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"}
|
|
@@ -1,3 +1,41 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Tunnel registry entry for an Apple TV (WiFi) device.
|
|
4
|
+
*/
|
|
5
|
+
export type AppleTVRegistryEntry = {
|
|
6
|
+
udid: string;
|
|
7
|
+
address: string;
|
|
8
|
+
rsdPort: number;
|
|
9
|
+
packetStreamPort: number;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Tunnel connection returned from TunnelManager.getTunnel for an Apple TV (WiFi) socket.
|
|
13
|
+
*/
|
|
14
|
+
export type AppleTVTunnelConnection = {
|
|
15
|
+
Address: string;
|
|
16
|
+
RsdPort?: number | undefined;
|
|
17
|
+
addPacketConsumer?: ((c: unknown) => void) | undefined;
|
|
18
|
+
closer?: (() => Promise<void>) | undefined;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Input for teardown of an Apple TV tunnel (full or partially created). All fields may be null if not yet created.
|
|
22
|
+
*/
|
|
23
|
+
export type AppleTVTunnelTeardownInput = {
|
|
24
|
+
tunnel?: AppleTVTunnelConnection | null | undefined;
|
|
25
|
+
packetStreamServer?: PacketStreamServer | null | undefined;
|
|
26
|
+
tunnelService?: AppleTVTunnelService | null | undefined;
|
|
27
|
+
tlsSocket?: import("node:tls").TLSSocket | null | undefined;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Resource handle for cleanup of a single Apple TV (WiFi) tunnel.
|
|
31
|
+
*/
|
|
32
|
+
export type AppleTVTunnelResource = {
|
|
33
|
+
packetStreamServer: import("appium-ios-remotexpc").PacketStreamServer;
|
|
34
|
+
tunnelService: import("appium-ios-remotexpc").AppleTVTunnelService;
|
|
35
|
+
udid: string;
|
|
36
|
+
tunnel: AppleTVTunnelConnection;
|
|
37
|
+
tlsSocket: import("node:tls").TLSSocket;
|
|
38
|
+
};
|
|
39
|
+
import { PacketStreamServer } from 'appium-ios-remotexpc';
|
|
40
|
+
import { AppleTVTunnelService } from 'appium-ios-remotexpc';
|
|
3
41
|
//# sourceMappingURL=tunnel-creation.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-creation.d.mts","sourceRoot":"","sources":["../../scripts/tunnel-creation.mjs"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"tunnel-creation.d.mts","sourceRoot":"","sources":["../../scripts/tunnel-creation.mjs"],"names":[],"mappings":";;;;;UAmkBc,MAAM;aACN,MAAM;aACN,MAAM;sBACN,MAAM;;;;;;aAMN,MAAM;;6BAEF,OAAO,KAAK,IAAI;oBACd,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;wBAenB,OAAO,sBAAsB,EAAE,kBAAkB;mBACjD,OAAO,sBAAsB,EAAE,oBAAoB;UACnD,MAAM;YACN,uBAAuB;eACvB,OAAO,UAAU,EAAE,SAAS;;mCAllBnC,sBAAsB;qCAAtB,sBAAsB"}
|
|
@@ -5,18 +5,21 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { logger, node, fs } from 'appium/support.js';
|
|
7
7
|
import _ from 'lodash';
|
|
8
|
-
import { PacketStreamServer, TunnelManager, createLockdownServiceByUDID, createUsbmux, startCoreDeviceProxy, startTunnelRegistryServer, } from 'appium-ios-remotexpc';
|
|
8
|
+
import { AppleTVTunnelService, 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
11
|
import { Command } from 'commander';
|
|
12
12
|
const log = logger.getLogger('TunnelCreation');
|
|
13
13
|
const TUNNEL_REGISTRY_PORT = 'tunnelRegistryPort';
|
|
14
14
|
/**
|
|
15
|
-
* TunnelCreator class for managing tunnel creation and related operations
|
|
15
|
+
* TunnelCreator class for managing tunnel creation and related operations (USB and optional Apple TV over WiFi).
|
|
16
16
|
*/
|
|
17
17
|
class TunnelCreator {
|
|
18
18
|
constructor() {
|
|
19
|
+
/** @type {Map<string, import('appium-ios-remotexpc').PacketStreamServer>} */
|
|
19
20
|
this._packetStreamServers = new Map();
|
|
21
|
+
/** @type {AppleTVTunnelResource[]} */
|
|
22
|
+
this._appletvResources = [];
|
|
20
23
|
// Default port value, will be updated in main() if --packet-stream-base-port is provided
|
|
21
24
|
this._packetStreamBasePort = 50000;
|
|
22
25
|
// Default port value, will be updated in main() if --tunnel-registry-port is provided
|
|
@@ -35,14 +38,14 @@ class TunnelCreator {
|
|
|
35
38
|
this._tunnelRegistryPort = port;
|
|
36
39
|
}
|
|
37
40
|
/**
|
|
38
|
-
* Update tunnel registry with
|
|
39
|
-
* @param {import('appium-ios-remotexpc').TunnelResult[]}
|
|
41
|
+
* Update tunnel registry with USB and optional Apple TV tunnel entries.
|
|
42
|
+
* @param {import('appium-ios-remotexpc').TunnelResult[]} usbResults - Array of USB tunnel results
|
|
43
|
+
* @param {AppleTVRegistryEntry[]} [appletvEntries] - Optional Apple TV tunnel entries
|
|
40
44
|
* @returns {Promise<import('appium-ios-remotexpc').TunnelRegistry>} Updated tunnel registry
|
|
41
45
|
*/
|
|
42
|
-
async updateTunnelRegistry(
|
|
46
|
+
async updateTunnelRegistry(usbResults, appletvEntries = []) {
|
|
43
47
|
const now = Date.now();
|
|
44
48
|
const nowISOString = new Date().toISOString();
|
|
45
|
-
// Initialize registry if it doesn't exist
|
|
46
49
|
const registry = {
|
|
47
50
|
tunnels: {},
|
|
48
51
|
metadata: {
|
|
@@ -51,8 +54,7 @@ class TunnelCreator {
|
|
|
51
54
|
activeTunnels: 0,
|
|
52
55
|
},
|
|
53
56
|
};
|
|
54
|
-
|
|
55
|
-
for (const result of results) {
|
|
57
|
+
for (const result of usbResults) {
|
|
56
58
|
if (result.success) {
|
|
57
59
|
const udid = result.device.Properties.SerialNumber;
|
|
58
60
|
registry.tunnels[udid] = {
|
|
@@ -63,16 +65,28 @@ class TunnelCreator {
|
|
|
63
65
|
packetStreamPort: result.packetStreamPort,
|
|
64
66
|
connectionType: result.device.Properties.ConnectionType,
|
|
65
67
|
productId: result.device.Properties.ProductID,
|
|
66
|
-
createdAt:
|
|
68
|
+
createdAt: now,
|
|
67
69
|
lastUpdated: now,
|
|
68
70
|
};
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
|
-
|
|
73
|
+
for (const entry of appletvEntries) {
|
|
74
|
+
registry.tunnels[entry.udid] = {
|
|
75
|
+
udid: entry.udid,
|
|
76
|
+
deviceId: 0,
|
|
77
|
+
address: entry.address,
|
|
78
|
+
rsdPort: entry.rsdPort,
|
|
79
|
+
packetStreamPort: entry.packetStreamPort,
|
|
80
|
+
connectionType: 'WiFi',
|
|
81
|
+
productId: 0,
|
|
82
|
+
createdAt: now,
|
|
83
|
+
lastUpdated: now,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
72
86
|
registry.metadata = {
|
|
73
87
|
lastUpdated: nowISOString,
|
|
74
88
|
totalTunnels: Object.keys(registry.tunnels).length,
|
|
75
|
-
activeTunnels: Object.keys(registry.tunnels).length,
|
|
89
|
+
activeTunnels: Object.keys(registry.tunnels).length,
|
|
76
90
|
};
|
|
77
91
|
return registry;
|
|
78
92
|
}
|
|
@@ -81,10 +95,14 @@ class TunnelCreator {
|
|
|
81
95
|
*/
|
|
82
96
|
async cleanup() {
|
|
83
97
|
log.warn('Cleaning up tunnel resources...');
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
98
|
+
const usbEntries = [...this._packetStreamServers.entries()];
|
|
99
|
+
const appletvResources = [...this._appletvResources];
|
|
100
|
+
const closeUsbPacketStreamServers = (async () => {
|
|
101
|
+
if (usbEntries.length === 0) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
log.info(`Closing ${usbEntries.length} packet stream server(s)...`);
|
|
105
|
+
await Promise.allSettled(usbEntries.map(async ([udid, server]) => {
|
|
88
106
|
try {
|
|
89
107
|
await server.stop();
|
|
90
108
|
log.info(`Closed packet stream server for device ${udid}`);
|
|
@@ -92,9 +110,21 @@ class TunnelCreator {
|
|
|
92
110
|
catch (err) {
|
|
93
111
|
log.warn(`Failed to close packet stream server for device ${udid}: ${err}`);
|
|
94
112
|
}
|
|
95
|
-
}
|
|
113
|
+
}));
|
|
96
114
|
this._packetStreamServers.clear();
|
|
97
|
-
}
|
|
115
|
+
})();
|
|
116
|
+
const closeAppleTVTunnels = (async () => {
|
|
117
|
+
if (appletvResources.length === 0) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
log.info(`Closing ${appletvResources.length} Apple TV tunnel(s)...`);
|
|
121
|
+
await Promise.allSettled(appletvResources.map(async (resource) => {
|
|
122
|
+
await teardownAppleTVTunnelResource(resource, resource.udid);
|
|
123
|
+
log.info(`Closed Apple TV tunnel for ${resource.udid}`);
|
|
124
|
+
}));
|
|
125
|
+
this._appletvResources.length = 0;
|
|
126
|
+
})();
|
|
127
|
+
await Promise.allSettled([closeUsbPacketStreamServers, closeAppleTVTunnels]);
|
|
98
128
|
log.info('Cleanup completed.');
|
|
99
129
|
}
|
|
100
130
|
/**
|
|
@@ -149,17 +179,18 @@ class TunnelCreator {
|
|
|
149
179
|
};
|
|
150
180
|
}
|
|
151
181
|
/**
|
|
152
|
-
* Sets up tunnels for all connected devices.
|
|
182
|
+
* Sets up tunnels for all connected USB devices. Does not start the registry server.
|
|
153
183
|
* @param {import('appium-ios-remotexpc').Usbmux} usbmux - The usbmux object.
|
|
154
184
|
* @param {string|undefined} specificUdid - A specific UDID to process, or undefined for all devices.
|
|
155
185
|
* @param {import('tls').ConnectionOptions} tlsOptions - TLS options.
|
|
186
|
+
* @returns {Promise<Array<import('appium-ios-remotexpc').TunnelResult>>} USB tunnel results (may be empty).
|
|
156
187
|
*/
|
|
157
188
|
async setupTunnels(usbmux, specificUdid, tlsOptions) {
|
|
158
189
|
log.info('Listing all connected devices...');
|
|
159
190
|
const devices = await usbmux.listDevices();
|
|
160
191
|
if (devices.length === 0) {
|
|
161
|
-
log.
|
|
162
|
-
return;
|
|
192
|
+
log.info('No USB devices found.');
|
|
193
|
+
return [];
|
|
163
194
|
}
|
|
164
195
|
log.info(`Found ${devices.length} connected device(s):`);
|
|
165
196
|
devices.forEach((device, index) => {
|
|
@@ -187,30 +218,113 @@ class TunnelCreator {
|
|
|
187
218
|
const result = await this.createTunnelForDevice(device, tlsOptions);
|
|
188
219
|
results.push(result);
|
|
189
220
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
221
|
+
return results;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Sets up tunnel(s) for paired Apple TV device(s) over WiFi. Uses a single tunnel when no
|
|
225
|
+
* API to enumerate paired devices is available. Does not start the registry server.
|
|
226
|
+
* @param {string|undefined} [specificDeviceId] - Optional Apple TV device identifier to target.
|
|
227
|
+
* @returns {Promise<AppleTVRegistryEntry[]>} Apple TV registry entries.
|
|
228
|
+
*/
|
|
229
|
+
async setupAppleTVTunnels(specificDeviceId) {
|
|
230
|
+
/** @type {AppleTVRegistryEntry[]} */
|
|
231
|
+
const entries = [];
|
|
232
|
+
/** @type {import('appium-ios-remotexpc').AppleTVTunnelService | null} */
|
|
233
|
+
let tunnelService = null;
|
|
234
|
+
/** @type {AppleTVTunnelConnection | null} */
|
|
235
|
+
let tunnel = null;
|
|
236
|
+
/** @type {import('appium-ios-remotexpc').PacketStreamServer | null} */
|
|
237
|
+
let packetStreamServer = null;
|
|
238
|
+
/** @type {import('node:tls').TLSSocket | null} */
|
|
239
|
+
let tlsSocket = null;
|
|
240
|
+
try {
|
|
241
|
+
log.info('Starting Apple TV tunnel (WiFi)...');
|
|
242
|
+
tunnelService = new AppleTVTunnelService();
|
|
243
|
+
const result = await tunnelService.startTunnel(undefined, specificDeviceId ?? undefined);
|
|
244
|
+
tlsSocket = result.socket;
|
|
245
|
+
const deviceInfo = result.device;
|
|
246
|
+
if (!tlsSocket) {
|
|
247
|
+
log.warn('Apple TV TLS socket not established.');
|
|
248
|
+
return entries;
|
|
249
|
+
}
|
|
250
|
+
log.info(`Creating tunnel for Apple TV: ${deviceInfo.identifier}`);
|
|
251
|
+
tunnel = await TunnelManager.getTunnel(tlsSocket);
|
|
252
|
+
const packetStreamPort = this._packetStreamBasePort++;
|
|
253
|
+
packetStreamServer = new PacketStreamServer(packetStreamPort);
|
|
254
|
+
await packetStreamServer.start();
|
|
255
|
+
const consumer = packetStreamServer.getPacketConsumer();
|
|
256
|
+
if (consumer && tunnel?.addPacketConsumer) {
|
|
257
|
+
tunnel.addPacketConsumer(consumer);
|
|
210
258
|
}
|
|
259
|
+
log.info(`Apple TV packet stream server started on port ${packetStreamPort}`);
|
|
260
|
+
this._appletvResources.push({
|
|
261
|
+
tunnel,
|
|
262
|
+
packetStreamServer,
|
|
263
|
+
tunnelService,
|
|
264
|
+
udid: deviceInfo.identifier,
|
|
265
|
+
tlsSocket,
|
|
266
|
+
});
|
|
267
|
+
entries.push({
|
|
268
|
+
udid: deviceInfo.identifier,
|
|
269
|
+
address: tunnel.Address,
|
|
270
|
+
rsdPort: tunnel.RsdPort ?? 0,
|
|
271
|
+
packetStreamPort,
|
|
272
|
+
});
|
|
273
|
+
log.info(`ā
Apple TV tunnel ready for ${deviceInfo.identifier}`);
|
|
274
|
+
return entries;
|
|
275
|
+
}
|
|
276
|
+
catch (err) {
|
|
277
|
+
log.warn('Apple TV tunnel setup failed (ensure device is paired and on same network):', err?.message ?? err);
|
|
278
|
+
// Clean up partially created resources so we don't leave a lingering WiFi connection
|
|
279
|
+
if (tunnelService) {
|
|
280
|
+
await teardownAppleTVTunnelResource({ tunnel, packetStreamServer, tunnelService, tlsSocket }, 'partially created');
|
|
281
|
+
}
|
|
282
|
+
return entries;
|
|
211
283
|
}
|
|
212
284
|
}
|
|
213
285
|
}
|
|
286
|
+
/**
|
|
287
|
+
* Tears down a single Apple TV tunnel resource (packet stream server, tunnel, tunnel service).
|
|
288
|
+
* Each step runs in its own try/catch so one failure does not skip the rest.
|
|
289
|
+
* @param {AppleTVTunnelTeardownInput} resource
|
|
290
|
+
* @param {string} [label] - Label for log messages (e.g. device udid or 'partially created')
|
|
291
|
+
*/
|
|
292
|
+
async function teardownAppleTVTunnelResource(resource, label = 'Apple TV') {
|
|
293
|
+
const { tunnel, packetStreamServer, tunnelService, tlsSocket } = resource;
|
|
294
|
+
// Order aligned with remotexpc start-appletv-tunnel.ts: stop server, close tunnel, destroy socket, disconnect
|
|
295
|
+
try {
|
|
296
|
+
if (packetStreamServer) {
|
|
297
|
+
await packetStreamServer.stop();
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
log.warn(`Failed to stop packet stream server for ${label}: ${err}`);
|
|
302
|
+
}
|
|
303
|
+
try {
|
|
304
|
+
if (_.isFunction(tunnel?.closer)) {
|
|
305
|
+
await tunnel.closer();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
log.warn(`Failed to close tunnel for ${label}: ${err}`);
|
|
310
|
+
}
|
|
311
|
+
try {
|
|
312
|
+
if (tlsSocket && !tlsSocket.destroyed) {
|
|
313
|
+
tlsSocket.destroy();
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
catch (err) {
|
|
317
|
+
log.warn(`Failed to destroy TLS socket for ${label}: ${err}`);
|
|
318
|
+
}
|
|
319
|
+
try {
|
|
320
|
+
if (tunnelService?.disconnect) {
|
|
321
|
+
tunnelService.disconnect();
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
catch (err) {
|
|
325
|
+
log.warn(`Failed to disconnect tunnel service for ${label}: ${err}`);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
214
328
|
/**
|
|
215
329
|
* Sets up signal and error handlers to ensure tunnels are cleaned up exactly once
|
|
216
330
|
* and an appropriate process exit code is set on shutdown.
|
|
@@ -285,7 +399,8 @@ async function main() {
|
|
|
285
399
|
throw new Error(`Invalid tunnel registry port: ${value}. Expected an integer between 1 and 65535.`);
|
|
286
400
|
}
|
|
287
401
|
return port;
|
|
288
|
-
})
|
|
402
|
+
})
|
|
403
|
+
.option('--appletv-device-id <identifier>', 'Apple TV device identifier to tunnel (from pair-appletv); omit to use first discovered paired device');
|
|
289
404
|
program.parse(process.argv);
|
|
290
405
|
const options = program.opts();
|
|
291
406
|
const tunnelCreator = new TunnelCreator();
|
|
@@ -317,16 +432,77 @@ async function main() {
|
|
|
317
432
|
};
|
|
318
433
|
log.info('Connecting to usbmuxd...');
|
|
319
434
|
const usbmux = await createUsbmux();
|
|
435
|
+
/** @type {import('appium-ios-remotexpc').TunnelResult[]} */
|
|
436
|
+
let usbResults = [];
|
|
320
437
|
try {
|
|
321
|
-
await tunnelCreator.setupTunnels(usbmux, options.udid, tlsOptions);
|
|
438
|
+
usbResults = await tunnelCreator.setupTunnels(usbmux, options.udid, tlsOptions);
|
|
322
439
|
}
|
|
323
440
|
finally {
|
|
324
441
|
await usbmux.close();
|
|
325
442
|
}
|
|
443
|
+
// Automatically add paired Apple TV(s) over WiFi when available
|
|
444
|
+
/** @type {AppleTVRegistryEntry[]} */
|
|
445
|
+
const appletvEntries = await tunnelCreator.setupAppleTVTunnels(options.appletvDeviceId);
|
|
446
|
+
const registry = await tunnelCreator.updateTunnelRegistry(usbResults, appletvEntries);
|
|
447
|
+
const totalTunnels = Object.keys(registry.tunnels).length;
|
|
448
|
+
if (totalTunnels === 0) {
|
|
449
|
+
log.warn('No tunnels created (no USB devices and no Apple TV tunnel).');
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
await startTunnelRegistryServer(registry, tunnelCreator.tunnelRegistryPort);
|
|
453
|
+
const successfulUsb = usbResults.filter((r) => r.success);
|
|
454
|
+
log.info('\n=== TUNNEL CREATION SUMMARY ===');
|
|
455
|
+
log.info(`USB tunnels: ${successfulUsb.length}`);
|
|
456
|
+
log.info(`Apple TV (WiFi) tunnels: ${appletvEntries.length}`);
|
|
457
|
+
log.info(`Total tunnels: ${totalTunnels}`);
|
|
458
|
+
log.info('\nš Tunnel registry API:');
|
|
459
|
+
log.info(' The tunnel registry is now available through the API at:');
|
|
460
|
+
log.info(` http://localhost:${tunnelCreator.tunnelRegistryPort}/remotexpc/tunnels`);
|
|
461
|
+
log.info('\n Available endpoints:');
|
|
462
|
+
log.info(' - GET /remotexpc/tunnels - List all tunnels');
|
|
463
|
+
log.info(' - GET /remotexpc/tunnels/:udid - Get tunnel by UDID');
|
|
464
|
+
log.info(' - GET /remotexpc/tunnels/metadata - Get registry metadata');
|
|
465
|
+
const firstUdid = successfulUsb[0]?.device?.Properties?.SerialNumber ?? appletvEntries[0]?.udid;
|
|
466
|
+
if (firstUdid) {
|
|
467
|
+
log.info(` curl http://localhost:${tunnelCreator.tunnelRegistryPort}/remotexpc/tunnels/${firstUdid}`);
|
|
468
|
+
}
|
|
326
469
|
}
|
|
327
470
|
finally {
|
|
328
471
|
await cleanupOnce();
|
|
329
472
|
}
|
|
330
473
|
}
|
|
331
474
|
await main();
|
|
475
|
+
/**
|
|
476
|
+
* @typedef {Object} AppleTVRegistryEntry
|
|
477
|
+
* Tunnel registry entry for an Apple TV (WiFi) device.
|
|
478
|
+
* @property {string} udid
|
|
479
|
+
* @property {string} address
|
|
480
|
+
* @property {number} rsdPort
|
|
481
|
+
* @property {number} packetStreamPort
|
|
482
|
+
*/
|
|
483
|
+
/**
|
|
484
|
+
* @typedef {Object} AppleTVTunnelConnection
|
|
485
|
+
* Tunnel connection returned from TunnelManager.getTunnel for an Apple TV (WiFi) socket.
|
|
486
|
+
* @property {string} Address
|
|
487
|
+
* @property {number} [RsdPort]
|
|
488
|
+
* @property {(c: unknown) => void} [addPacketConsumer]
|
|
489
|
+
* @property {() => Promise<void>} [closer]
|
|
490
|
+
*/
|
|
491
|
+
/**
|
|
492
|
+
* @typedef {Object} AppleTVTunnelTeardownInput
|
|
493
|
+
* Input for teardown of an Apple TV tunnel (full or partially created). All fields may be null if not yet created.
|
|
494
|
+
* @property {AppleTVTunnelConnection | null} [tunnel]
|
|
495
|
+
* @property {import('appium-ios-remotexpc').PacketStreamServer | null} [packetStreamServer]
|
|
496
|
+
* @property {import('appium-ios-remotexpc').AppleTVTunnelService | null} [tunnelService]
|
|
497
|
+
* @property {import('node:tls').TLSSocket | null} [tlsSocket]
|
|
498
|
+
*/
|
|
499
|
+
/**
|
|
500
|
+
* @typedef {Object} AppleTVTunnelResource
|
|
501
|
+
* Resource handle for cleanup of a single Apple TV (WiFi) tunnel.
|
|
502
|
+
* @property {import('appium-ios-remotexpc').PacketStreamServer} packetStreamServer
|
|
503
|
+
* @property {import('appium-ios-remotexpc').AppleTVTunnelService} tunnelService
|
|
504
|
+
* @property {string} udid
|
|
505
|
+
* @property {AppleTVTunnelConnection} tunnel
|
|
506
|
+
* @property {import('node:tls').TLSSocket} tlsSocket
|
|
507
|
+
*/
|
|
332
508
|
//# 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":"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"}
|