react-native-mcp-kit 4.0.0 → 4.2.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.
Files changed (121) hide show
  1. package/README.md +8 -8
  2. package/dist/babel/testIdPlugin.d.ts.map +1 -1
  3. package/dist/babel/testIdPlugin.js +82 -25
  4. package/dist/babel/testIdPlugin.js.map +1 -1
  5. package/dist/bin/ios-hid +0 -0
  6. package/dist/client/core/McpClient.d.ts.map +1 -1
  7. package/dist/client/core/McpClient.js +16 -2
  8. package/dist/client/core/McpClient.js.map +1 -1
  9. package/dist/modules/alert/alert.d.ts.map +1 -1
  10. package/dist/modules/alert/alert.js +18 -3
  11. package/dist/modules/alert/alert.js.map +1 -1
  12. package/dist/modules/console/console.d.ts.map +1 -1
  13. package/dist/modules/console/console.js +38 -12
  14. package/dist/modules/console/console.js.map +1 -1
  15. package/dist/modules/console/types.d.ts +1 -1
  16. package/dist/modules/console/types.d.ts.map +1 -1
  17. package/dist/modules/device/device.d.ts.map +1 -1
  18. package/dist/modules/device/device.js +17 -4
  19. package/dist/modules/device/device.js.map +1 -1
  20. package/dist/modules/errors/errors.d.ts.map +1 -1
  21. package/dist/modules/errors/errors.js +3 -1
  22. package/dist/modules/errors/errors.js.map +1 -1
  23. package/dist/modules/fiberTree/fiberTree.d.ts.map +1 -1
  24. package/dist/modules/fiberTree/fiberTree.js +44 -7
  25. package/dist/modules/fiberTree/fiberTree.js.map +1 -1
  26. package/dist/modules/fiberTree/finder.d.ts +2 -0
  27. package/dist/modules/fiberTree/finder.d.ts.map +1 -1
  28. package/dist/modules/fiberTree/finder.js +3 -1
  29. package/dist/modules/fiberTree/finder.js.map +1 -1
  30. package/dist/modules/fiberTree/hooks.d.ts +17 -0
  31. package/dist/modules/fiberTree/hooks.d.ts.map +1 -1
  32. package/dist/modules/fiberTree/hooks.js +22 -4
  33. package/dist/modules/fiberTree/hooks.js.map +1 -1
  34. package/dist/modules/fiberTree/utils.d.ts.map +1 -1
  35. package/dist/modules/fiberTree/utils.js +29 -4
  36. package/dist/modules/fiberTree/utils.js.map +1 -1
  37. package/dist/modules/i18next/i18next.d.ts.map +1 -1
  38. package/dist/modules/i18next/i18next.js +27 -6
  39. package/dist/modules/i18next/i18next.js.map +1 -1
  40. package/dist/modules/logBox/logBox.d.ts.map +1 -1
  41. package/dist/modules/logBox/logBox.js +8 -4
  42. package/dist/modules/logBox/logBox.js.map +1 -1
  43. package/dist/modules/navigation/navigation.d.ts.map +1 -1
  44. package/dist/modules/navigation/navigation.js +19 -4
  45. package/dist/modules/navigation/navigation.js.map +1 -1
  46. package/dist/modules/network/network.js +1 -1
  47. package/dist/modules/network/network.js.map +1 -1
  48. package/dist/modules/reactQuery/reactQuery.d.ts.map +1 -1
  49. package/dist/modules/reactQuery/reactQuery.js +2 -1
  50. package/dist/modules/reactQuery/reactQuery.js.map +1 -1
  51. package/dist/modules/storage/storage.d.ts.map +1 -1
  52. package/dist/modules/storage/storage.js +23 -8
  53. package/dist/modules/storage/storage.js.map +1 -1
  54. package/dist/server/bridge.d.ts +3 -0
  55. package/dist/server/bridge.d.ts.map +1 -1
  56. package/dist/server/bridge.js +62 -5
  57. package/dist/server/bridge.js.map +1 -1
  58. package/dist/server/host/coredevice/dtx.d.ts +79 -0
  59. package/dist/server/host/coredevice/dtx.d.ts.map +1 -0
  60. package/dist/server/host/coredevice/dtx.js +453 -0
  61. package/dist/server/host/coredevice/dtx.js.map +1 -0
  62. package/dist/server/host/coredevice/nska.d.ts +6 -0
  63. package/dist/server/host/coredevice/nska.d.ts.map +1 -0
  64. package/dist/server/host/coredevice/nska.js +277 -0
  65. package/dist/server/host/coredevice/nska.js.map +1 -0
  66. package/dist/server/host/coredevice/rsd.d.ts +20 -0
  67. package/dist/server/host/coredevice/rsd.d.ts.map +1 -0
  68. package/dist/server/host/coredevice/rsd.js +244 -0
  69. package/dist/server/host/coredevice/rsd.js.map +1 -0
  70. package/dist/server/host/coredevice/screenshot.d.ts +11 -0
  71. package/dist/server/host/coredevice/screenshot.d.ts.map +1 -0
  72. package/dist/server/host/coredevice/screenshot.js +84 -0
  73. package/dist/server/host/coredevice/screenshot.js.map +1 -0
  74. package/dist/server/host/coredevice/tunnel.d.ts +29 -0
  75. package/dist/server/host/coredevice/tunnel.d.ts.map +1 -0
  76. package/dist/server/host/coredevice/tunnel.js +222 -0
  77. package/dist/server/host/coredevice/tunnel.js.map +1 -0
  78. package/dist/server/host/coredevice/xpc.d.ts +21 -0
  79. package/dist/server/host/coredevice/xpc.d.ts.map +1 -0
  80. package/dist/server/host/coredevice/xpc.js +318 -0
  81. package/dist/server/host/coredevice/xpc.js.map +1 -0
  82. package/dist/server/host/deviceResolver.d.ts +8 -0
  83. package/dist/server/host/deviceResolver.d.ts.map +1 -1
  84. package/dist/server/host/deviceResolver.js +128 -62
  85. package/dist/server/host/deviceResolver.js.map +1 -1
  86. package/dist/server/host/tools/capture.d.ts.map +1 -1
  87. package/dist/server/host/tools/capture.js +74 -18
  88. package/dist/server/host/tools/capture.js.map +1 -1
  89. package/dist/server/host/tools/devices.d.ts.map +1 -1
  90. package/dist/server/host/tools/devices.js +25 -4
  91. package/dist/server/host/tools/devices.js.map +1 -1
  92. package/dist/server/host/tools/input.d.ts.map +1 -1
  93. package/dist/server/host/tools/input.js +45 -20
  94. package/dist/server/host/tools/input.js.map +1 -1
  95. package/dist/server/host/tools/tapFiber.d.ts.map +1 -1
  96. package/dist/server/host/tools/tapFiber.js +2 -0
  97. package/dist/server/host/tools/tapFiber.js.map +1 -1
  98. package/dist/server/mcpServer.d.ts.map +1 -1
  99. package/dist/server/mcpServer.js +5 -4
  100. package/dist/server/mcpServer.js.map +1 -1
  101. package/dist/server/metro/tools/events.d.ts.map +1 -1
  102. package/dist/server/metro/tools/events.js +1 -0
  103. package/dist/server/metro/tools/events.js.map +1 -1
  104. package/dist/server/metro/tools/openInEditor.d.ts.map +1 -1
  105. package/dist/server/metro/tools/openInEditor.js +4 -1
  106. package/dist/server/metro/tools/openInEditor.js.map +1 -1
  107. package/dist/server/metro/tools/symbolicate.d.ts.map +1 -1
  108. package/dist/server/metro/tools/symbolicate.js +41 -11
  109. package/dist/server/metro/tools/symbolicate.js.map +1 -1
  110. package/dist/shared/projection/projectValue.d.ts +12 -1
  111. package/dist/shared/projection/projectValue.d.ts.map +1 -1
  112. package/dist/shared/projection/projectValue.js +42 -12
  113. package/dist/shared/projection/projectValue.js.map +1 -1
  114. package/dist/shared/projection/resolvePath.d.ts +14 -2
  115. package/dist/shared/projection/resolvePath.d.ts.map +1 -1
  116. package/dist/shared/projection/resolvePath.js +25 -3
  117. package/dist/shared/projection/resolvePath.js.map +1 -1
  118. package/dist/shared/protocol.d.ts +2 -1
  119. package/dist/shared/protocol.d.ts.map +1 -1
  120. package/dist/shared/protocol.js +1 -1
  121. package/package.json +3 -1
@@ -0,0 +1,318 @@
1
+ "use strict";
2
+ // Encoder/decoder for Apple's binary XPC object format. RemoteXPC sends
3
+ // these as the payload of an `XpcWrapper` inside HTTP/2 DATA frames.
4
+ //
5
+ // Wire layout reference: PROTOCOL.md. Integers are little-endian and
6
+ // every variable-width field is zero-padded to a 4-byte boundary.
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.parseXpcWrapper = exports.buildXpcWrapper = exports.XpcFlags = void 0;
9
+ const TYPE_NULL = 0x00001000;
10
+ const TYPE_BOOL = 0x00002000;
11
+ const TYPE_INT64 = 0x00003000;
12
+ const TYPE_UINT64 = 0x00004000;
13
+ const TYPE_DOUBLE = 0x00005000;
14
+ const TYPE_DATA = 0x00008000;
15
+ const TYPE_STRING = 0x00009000;
16
+ const TYPE_UUID = 0x0000a000;
17
+ const TYPE_ARRAY = 0x0000e000;
18
+ const TYPE_DICTIONARY = 0x0000f000;
19
+ const XPC_WRAPPER_MAGIC = 0x29b00b92;
20
+ const XPC_PAYLOAD_MAGIC = 0x42133742;
21
+ const XPC_PAYLOAD_VERSION = 5;
22
+ const pad4 = (n) => {
23
+ return (4 - (n % 4)) % 4;
24
+ };
25
+ class Reader {
26
+ buf;
27
+ offset = 0;
28
+ constructor(buf) {
29
+ this.buf = buf;
30
+ }
31
+ u32() {
32
+ const value = this.buf.readUInt32LE(this.offset);
33
+ this.offset += 4;
34
+ return value;
35
+ }
36
+ u64() {
37
+ const value = this.buf.readBigUInt64LE(this.offset);
38
+ this.offset += 8;
39
+ return value;
40
+ }
41
+ i64() {
42
+ const value = this.buf.readBigInt64LE(this.offset);
43
+ this.offset += 8;
44
+ return value;
45
+ }
46
+ f64() {
47
+ const value = this.buf.readDoubleLE(this.offset);
48
+ this.offset += 8;
49
+ return value;
50
+ }
51
+ bytes(n) {
52
+ const slice = this.buf.subarray(this.offset, this.offset + n);
53
+ this.offset += n;
54
+ return slice;
55
+ }
56
+ skipPadding(unpaddedSize) {
57
+ this.offset += pad4(unpaddedSize);
58
+ }
59
+ position() {
60
+ return this.offset;
61
+ }
62
+ readCString() {
63
+ let end = this.offset;
64
+ while (end < this.buf.length && this.buf[end] !== 0)
65
+ end++;
66
+ if (end >= this.buf.length) {
67
+ throw new Error(`Unterminated CString at offset ${this.offset}`);
68
+ }
69
+ const text = this.buf.subarray(this.offset, end).toString('utf8');
70
+ this.offset = end + 1;
71
+ return text;
72
+ }
73
+ }
74
+ class Writer {
75
+ chunks = [];
76
+ length = 0;
77
+ push(buf) {
78
+ this.chunks.push(buf);
79
+ this.length += buf.length;
80
+ }
81
+ u32(value) {
82
+ const b = Buffer.alloc(4);
83
+ b.writeUInt32LE(value, 0);
84
+ this.push(b);
85
+ }
86
+ u64(value) {
87
+ const b = Buffer.alloc(8);
88
+ b.writeBigUInt64LE(value, 0);
89
+ this.push(b);
90
+ }
91
+ i64(value) {
92
+ const b = Buffer.alloc(8);
93
+ b.writeBigInt64LE(value, 0);
94
+ this.push(b);
95
+ }
96
+ f64(value) {
97
+ const b = Buffer.alloc(8);
98
+ b.writeDoubleLE(value, 0);
99
+ this.push(b);
100
+ }
101
+ bytes(buf) {
102
+ this.push(buf);
103
+ }
104
+ pad() {
105
+ const padding = pad4(this.length);
106
+ if (padding)
107
+ this.push(Buffer.alloc(padding));
108
+ }
109
+ size() {
110
+ return this.length;
111
+ }
112
+ build() {
113
+ return Buffer.concat(this.chunks, this.length);
114
+ }
115
+ }
116
+ const decodeObject = (reader) => {
117
+ const type = reader.u32();
118
+ switch (type) {
119
+ case TYPE_NULL:
120
+ return null;
121
+ case TYPE_BOOL:
122
+ return reader.u32() !== 0;
123
+ case TYPE_INT64:
124
+ return reader.i64();
125
+ case TYPE_UINT64:
126
+ return reader.u64();
127
+ case TYPE_DOUBLE:
128
+ return reader.f64();
129
+ case TYPE_DATA: {
130
+ const len = reader.u32();
131
+ const data = Buffer.from(reader.bytes(len));
132
+ reader.skipPadding(len);
133
+ return data;
134
+ }
135
+ case TYPE_STRING: {
136
+ const lenIncludingNul = reader.u32();
137
+ const raw = reader.bytes(lenIncludingNul);
138
+ reader.skipPadding(lenIncludingNul);
139
+ let end = raw.length;
140
+ while (end > 0 && raw[end - 1] === 0)
141
+ end--;
142
+ return raw.subarray(0, end).toString('utf8');
143
+ }
144
+ case TYPE_UUID: {
145
+ const data = reader.bytes(16);
146
+ const hex = data.toString('hex');
147
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
148
+ }
149
+ case TYPE_ARRAY: {
150
+ reader.u32(); // body length
151
+ const count = reader.u32();
152
+ const items = [];
153
+ for (let i = 0; i < count; i++)
154
+ items.push(decodeObject(reader));
155
+ return items;
156
+ }
157
+ case TYPE_DICTIONARY: {
158
+ // Entry keys are AlignedString (NUL-terminated UTF-8 padded to 4),
159
+ // values are XpcObjects. Don't confuse the key encoding with
160
+ // XpcString (length-prefixed) — they look similar but are not.
161
+ reader.u32(); // body length
162
+ const count = reader.u32();
163
+ const out = {};
164
+ for (let i = 0; i < count; i++) {
165
+ const start = reader.position();
166
+ const key = reader.readCString();
167
+ reader.skipPadding(reader.position() - start);
168
+ out[key] = decodeObject(reader);
169
+ }
170
+ return out;
171
+ }
172
+ default:
173
+ throw new Error(`Unknown XPC type tag 0x${type.toString(16)}`);
174
+ }
175
+ };
176
+ const encodeObject = (writer, value) => {
177
+ if (value === null) {
178
+ writer.u32(TYPE_NULL);
179
+ return;
180
+ }
181
+ if (typeof value === 'boolean') {
182
+ writer.u32(TYPE_BOOL);
183
+ writer.u32(value ? 1 : 0);
184
+ return;
185
+ }
186
+ if (typeof value === 'bigint') {
187
+ writer.u32(value < 0n ? TYPE_INT64 : TYPE_UINT64);
188
+ if (value < 0n)
189
+ writer.i64(value);
190
+ else
191
+ writer.u64(value);
192
+ return;
193
+ }
194
+ if (typeof value === 'number') {
195
+ writer.u32(TYPE_DOUBLE);
196
+ writer.f64(value);
197
+ return;
198
+ }
199
+ if (typeof value === 'string') {
200
+ writer.u32(TYPE_STRING);
201
+ const utf8 = Buffer.from(value, 'utf8');
202
+ writer.u32(utf8.length + 1);
203
+ writer.bytes(utf8);
204
+ writer.bytes(Buffer.from([0]));
205
+ writer.pad();
206
+ return;
207
+ }
208
+ if (Buffer.isBuffer(value)) {
209
+ writer.u32(TYPE_DATA);
210
+ writer.u32(value.length);
211
+ writer.bytes(value);
212
+ writer.pad();
213
+ return;
214
+ }
215
+ if (Array.isArray(value)) {
216
+ writer.u32(TYPE_ARRAY);
217
+ const body = new Writer();
218
+ body.u32(value.length);
219
+ for (const item of value)
220
+ encodeObject(body, item);
221
+ const bodyBuf = body.build();
222
+ writer.u32(bodyBuf.length);
223
+ writer.bytes(bodyBuf);
224
+ return;
225
+ }
226
+ if (typeof value === 'object') {
227
+ writer.u32(TYPE_DICTIONARY);
228
+ const entries = Object.entries(value);
229
+ const body = new Writer();
230
+ body.u32(entries.length);
231
+ for (const [key, val] of entries) {
232
+ const keyUtf8 = Buffer.from(key, 'utf8');
233
+ body.bytes(keyUtf8);
234
+ body.bytes(Buffer.from([0]));
235
+ const padding = pad4(keyUtf8.length + 1);
236
+ if (padding)
237
+ body.bytes(Buffer.alloc(padding));
238
+ encodeObject(body, val);
239
+ }
240
+ const bodyBuf = body.build();
241
+ writer.u32(bodyBuf.length);
242
+ writer.bytes(bodyBuf);
243
+ return;
244
+ }
245
+ throw new Error(`Cannot encode XPC value of type ${typeof value}`);
246
+ };
247
+ const encodeXpcObject = (value) => {
248
+ const writer = new Writer();
249
+ encodeObject(writer, value);
250
+ return writer.build();
251
+ };
252
+ const decodeXpcObject = (buf) => {
253
+ return decodeObject(new Reader(buf));
254
+ };
255
+ // XpcWrapper frames an XpcObject on the RemoteXPC wire. Layout
256
+ // (little-endian throughout):
257
+ //
258
+ // uint32 magic = 0x29B00B92
259
+ // uint32 flags
260
+ // uint64 messageLen on-wire value = inner_size - 8
261
+ // uint64 messageId
262
+ // if payload present:
263
+ // uint32 payloadMagic = 0x42133742
264
+ // uint32 protocolVersion = 5
265
+ // XpcObject
266
+ exports.XpcFlags = {
267
+ ALWAYS_SET: 0x00000001,
268
+ DATA_PRESENT: 0x00000100,
269
+ INIT_HANDSHAKE: 0x00400000,
270
+ PING: 0x00000002,
271
+ REPLY: 0x00020000,
272
+ WANTING_REPLY: 0x00010000,
273
+ };
274
+ const buildXpcWrapper = (flags, messageId, payload) => {
275
+ const writer = new Writer();
276
+ writer.u32(XPC_WRAPPER_MAGIC);
277
+ writer.u32(flags);
278
+ writer.bytes(Buffer.alloc(8)); // messageLen placeholder, patched below
279
+ const innerStart = writer.size();
280
+ writer.u64(messageId);
281
+ if (payload !== null) {
282
+ writer.u32(XPC_PAYLOAD_MAGIC);
283
+ writer.u32(XPC_PAYLOAD_VERSION);
284
+ writer.bytes(encodeXpcObject(payload));
285
+ }
286
+ const built = writer.build();
287
+ built.writeBigUInt64LE(BigInt(built.length - innerStart - 8), 8);
288
+ return built;
289
+ };
290
+ exports.buildXpcWrapper = buildXpcWrapper;
291
+ const parseXpcWrapper = (buf, offset = 0) => {
292
+ const reader = new Reader(buf.subarray(offset));
293
+ const magic = reader.u32();
294
+ if (magic !== XPC_WRAPPER_MAGIC) {
295
+ throw new Error(`Bad XpcWrapper magic 0x${magic.toString(16)} at offset ${offset}`);
296
+ }
297
+ const flags = reader.u32();
298
+ const innerLen = Number(reader.u64()) + 8;
299
+ const messageId = reader.u64();
300
+ const remaining = innerLen - 8;
301
+ let payload = null;
302
+ if (remaining >= 8) {
303
+ const payloadMagic = reader.u32();
304
+ if (payloadMagic !== XPC_PAYLOAD_MAGIC) {
305
+ throw new Error(`Bad payload magic 0x${payloadMagic.toString(16)}`);
306
+ }
307
+ reader.u32(); // protocolVersion
308
+ if (remaining > 8) {
309
+ payload = decodeXpcObject(Buffer.from(reader.bytes(remaining - 8)));
310
+ }
311
+ }
312
+ else if (remaining > 0) {
313
+ reader.bytes(remaining);
314
+ }
315
+ return { flags, messageId, payload, totalSize: 16 + innerLen };
316
+ };
317
+ exports.parseXpcWrapper = parseXpcWrapper;
318
+ //# sourceMappingURL=xpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xpc.js","sourceRoot":"","sources":["../../../../src/server/host/coredevice/xpc.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,qEAAqE;AACrE,EAAE;AACF,qEAAqE;AACrE,kEAAkE;;;AAElE,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,MAAM,UAAU,GAAG,UAAU,CAAC;AAC9B,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,MAAM,UAAU,GAAG,UAAU,CAAC;AAC9B,MAAM,eAAe,GAAG,UAAU,CAAC;AAEnC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AACrC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AACrC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE;IACjC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,MAAM;IAGmB;IAFrB,MAAM,GAAG,CAAC,CAAC;IAEnB,YAA6B,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAE5C,GAAG;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,CAAS;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,CAAC,YAAoB;QAC9B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,WAAW;QACT,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,GAAG,EAAE,CAAC;QAC3D,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,MAAM;IACF,MAAM,GAAa,EAAE,CAAC;IACtB,MAAM,GAAG,CAAC,CAAC;IAEnB,IAAI,CAAC,GAAW;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,KAAa;QACf,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;IAED,GAAG,CAAC,KAAa;QACf,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;IAED,GAAG,CAAC,KAAa;QACf,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;IAED,GAAG,CAAC,KAAa;QACf,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;IAED,KAAK,CAAC,GAAW;QACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,GAAG;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK;QACH,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;CACF;AAYD,MAAM,YAAY,GAAG,CAAC,MAAc,EAAY,EAAE;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IAC1B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,KAAK,UAAU;YACb,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC;QACtB,KAAK,WAAW;YACd,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC;QACtB,KAAK,WAAW;YACd,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC;QACtB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC1C,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;YACrB,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;gBAAE,GAAG,EAAE,CAAC;YAC5C,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7G,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,cAAc;YAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAe,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YACjE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,mEAAmE;YACnE,6DAA6D;YAC7D,+DAA+D;YAC/D,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,cAAc;YAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,GAAG,GAA6B,EAAE,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;gBACjC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC;gBAC9C,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,KAAe,EAAQ,EAAE;IAC7D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,KAAK,GAAG,EAAE;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;YAC7B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO;IACT,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACzC,IAAI,OAAO;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/C,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,KAAK,EAAE,CAAC,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAe,EAAU,EAAE;IAClD,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAC5B,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,GAAW,EAAY,EAAE;IAChD,OAAO,YAAY,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,+DAA+D;AAC/D,8BAA8B;AAC9B,EAAE;AACF,mCAAmC;AACnC,iBAAiB;AACjB,uDAAuD;AACvD,qBAAqB;AACrB,wBAAwB;AACxB,yCAAyC;AACzC,iCAAiC;AACjC,gBAAgB;AAEH,QAAA,QAAQ,GAAG;IACtB,UAAU,EAAE,UAAU;IACtB,YAAY,EAAE,UAAU;IACxB,cAAc,EAAE,UAAU;IAC1B,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,aAAa,EAAE,UAAU;CACjB,CAAC;AAUJ,MAAM,eAAe,GAAG,CAC7B,KAAa,EACb,SAAiB,EACjB,OAAwB,EAChB,EAAE;IACV,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wCAAwC;IACvE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7B,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAnBW,QAAA,eAAe,mBAmB1B;AAEK,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,MAAM,GAAG,CAAC,EAAoB,EAAE;IAC3E,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IAC3B,IAAI,KAAK,KAAK,iBAAiB,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC/B,IAAI,OAAO,GAAoB,IAAI,CAAC;IACpC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,YAAY,KAAK,iBAAiB,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,uBAAuB,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,kBAAkB;QAChC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;SAAM,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC;AACjE,CAAC,CAAC;AAxBW,QAAA,eAAe,mBAwB1B"}
@@ -6,12 +6,19 @@ export interface IosSimulator {
6
6
  state: string;
7
7
  udid: string;
8
8
  }
9
+ export interface IosRealDevice {
10
+ coreDeviceIdentifier: string;
11
+ name: string;
12
+ pairingState: string;
13
+ }
9
14
  export interface AndroidDevice {
10
15
  serial: string;
11
16
  state: string;
12
17
  }
18
+ export type DeviceKind = 'real-device' | 'simulator';
13
19
  export interface ResolvedDevice {
14
20
  displayName: string;
21
+ kind: DeviceKind;
15
22
  nativeId: string;
16
23
  platform: 'android' | 'ios';
17
24
  bundleId?: string;
@@ -46,6 +53,7 @@ interface ResolveOptions {
46
53
  }
47
54
  export declare const clearDeviceCache: () => void;
48
55
  export declare const listIosSimulators: (runner: ProcessRunner) => Promise<IosSimulator[]>;
56
+ export declare const listIosRealDevices: (runner: ProcessRunner) => Promise<IosRealDevice[]>;
49
57
  export declare const listAndroidDevices: (runner: ProcessRunner) => Promise<AndroidDevice[]>;
50
58
  export declare const resolveDevice: (ctx: HostContext, options: ResolveOptions, runner: ProcessRunner) => Promise<DeviceResolution>;
51
59
  export declare const enrichDevicesWithClientStatus: (bridge: Bridge, runner: ProcessRunner) => Promise<EnrichedDeviceList>;
@@ -1 +1 @@
1
- {"version":3,"file":"deviceResolver.d.ts","sourceRoot":"","sources":["../../../src/server/host/deviceResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAoB,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAK3C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,qBAAqB,EAAE,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,GAAG,EAAE,cAAc,EAAE,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC;AAOnG,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAKD,eAAO,MAAM,gBAAgB,QAAO,IAGnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAAkB,aAAa,KAAG,OAAO,CAAC,YAAY,EAAE,CAyBrF,CAAC;AAEF,eAAO,MAAM,kBAAkB,WAAkB,aAAa,KAAG,OAAO,CAAC,aAAa,EAAE,CAwBvF,CAAC;AA8VF,eAAO,MAAM,aAAa,QACnB,WAAW,WACP,cAAc,UACf,aAAa,KACpB,OAAO,CAAC,gBAAgB,CAuD1B,CAAC;AAEF,eAAO,MAAM,6BAA6B,WAChC,MAAM,UACN,aAAa,KACpB,OAAO,CAAC,kBAAkB,CAuH5B,CAAC"}
1
+ {"version":3,"file":"deviceResolver.d.ts","sourceRoot":"","sources":["../../../src/server/host/deviceResolver.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,MAAM,EAAoB,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAK3C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,WAAW,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,qBAAqB,EAAE,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,GAAG,EAAE,cAAc,EAAE,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC;AAOnG,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAMD,eAAO,MAAM,gBAAgB,QAAO,IAInC,CAAC;AAiBF,eAAO,MAAM,iBAAiB,WAAkB,aAAa,KAAG,OAAO,CAAC,YAAY,EAAE,CAyBrF,CAAC;AAKF,eAAO,MAAM,kBAAkB,WAAkB,aAAa,KAAG,OAAO,CAAC,aAAa,EAAE,CA2CvF,CAAC;AAEF,eAAO,MAAM,kBAAkB,WAAkB,aAAa,KAAG,OAAO,CAAC,aAAa,EAAE,CAwBvF,CAAC;AA4WF,eAAO,MAAM,aAAa,QACnB,WAAW,WACP,cAAc,UACf,aAAa,KACpB,OAAO,CAAC,gBAAgB,CAuD1B,CAAC;AAEF,eAAO,MAAM,6BAA6B,WAChC,MAAM,UACN,aAAa,KACpB,OAAO,CAAC,kBAAkB,CAuH5B,CAAC"}
@@ -1,16 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.enrichDevicesWithClientStatus = exports.resolveDevice = exports.listAndroidDevices = exports.listIosSimulators = exports.clearDeviceCache = void 0;
3
+ exports.enrichDevicesWithClientStatus = exports.resolveDevice = exports.listAndroidDevices = exports.listIosRealDevices = exports.listIosSimulators = exports.clearDeviceCache = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const node_fs_1 = require("node:fs");
6
+ const promises_1 = require("node:fs/promises");
7
+ const node_os_1 = require("node:os");
8
+ const node_path_1 = require("node:path");
4
9
  const processRunner_1 = require("./processRunner");
5
10
  const CACHE_TTL_MS = 5_000;
6
11
  const LIST_TIMEOUT_MS = 5_000;
7
12
  let iosCache = null;
13
+ let iosRealCache = null;
8
14
  let androidCache = null;
9
15
  const clearDeviceCache = () => {
10
16
  iosCache = null;
17
+ iosRealCache = null;
11
18
  androidCache = null;
12
19
  };
13
20
  exports.clearDeviceCache = clearDeviceCache;
21
+ const XCRUN_MISSING_ERROR = 'xcrun not found. iOS host tools require Xcode command line tools (macOS only).';
22
+ const ADB_MISSING_ERROR = 'adb not found. Android host tools require Android platform-tools on PATH.';
23
+ // Map a thrown error to a user-facing DeviceResolution error. Handles the
24
+ // common ProcessNotFoundError → "install the toolchain" message; everything
25
+ // else gets wrapped as a context-prefixed message.
26
+ const toDeviceError = (err, context, toolMissing) => {
27
+ if (err instanceof processRunner_1.ProcessNotFoundError) {
28
+ return { error: toolMissing, ok: false };
29
+ }
30
+ return { error: `${context}: ${err.message}`, ok: false };
31
+ };
14
32
  const listIosSimulators = async (runner) => {
15
33
  if (iosCache && Date.now() - iosCache.timestamp < CACHE_TTL_MS) {
16
34
  return iosCache.result;
@@ -34,6 +52,45 @@ const listIosSimulators = async (runner) => {
34
52
  return out;
35
53
  };
36
54
  exports.listIosSimulators = listIosSimulators;
55
+ // Paired physical iOS devices come from `xcrun devicectl` — simctl knows
56
+ // nothing about them. The JSON output of `list devices` is the only stable
57
+ // integration surface (its stdout has a human-readable header first).
58
+ const listIosRealDevices = async (runner) => {
59
+ if (iosRealCache && Date.now() - iosRealCache.timestamp < CACHE_TTL_MS) {
60
+ return iosRealCache.result;
61
+ }
62
+ const tmpPath = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `rnmcp-devicectl-${(0, node_crypto_1.randomUUID)()}.json`);
63
+ try {
64
+ const proc = await runner('xcrun', ['devicectl', 'list', 'devices', '--json-output', tmpPath], {
65
+ timeoutMs: LIST_TIMEOUT_MS,
66
+ });
67
+ if (proc.exitCode !== 0) {
68
+ throw new Error(`xcrun devicectl list failed (exit ${proc.exitCode}): ${proc.stderr.toString('utf8').trim().slice(0, 500)}`);
69
+ }
70
+ const raw = (0, node_fs_1.readFileSync)(tmpPath, 'utf8');
71
+ const parsed = JSON.parse(raw);
72
+ const devices = parsed.result?.devices ?? [];
73
+ const out = [];
74
+ for (const d of devices) {
75
+ if (d.hardwareProperties?.platform !== 'iOS')
76
+ continue;
77
+ const id = d.identifier;
78
+ const name = d.deviceProperties?.name;
79
+ const pairingState = d.connectionProperties?.pairingState;
80
+ if (typeof id === 'string' && typeof name === 'string' && typeof pairingState === 'string') {
81
+ out.push({ coreDeviceIdentifier: id, name, pairingState });
82
+ }
83
+ }
84
+ iosRealCache = { result: out, timestamp: Date.now() };
85
+ return out;
86
+ }
87
+ finally {
88
+ (0, promises_1.rm)(tmpPath, { force: true }).catch(() => {
89
+ // best-effort
90
+ });
91
+ }
92
+ };
93
+ exports.listIosRealDevices = listIosRealDevices;
37
94
  const listAndroidDevices = async (runner) => {
38
95
  if (androidCache && Date.now() - androidCache.timestamp < CACHE_TTL_MS) {
39
96
  return androidCache.result;
@@ -92,7 +149,60 @@ const matchAndroidDeviceByClient = (devices) => {
92
149
  });
93
150
  return online.length === 1 ? online[0] : null;
94
151
  };
152
+ const matchIosRealDeviceByClient = (devices, client) => {
153
+ const paired = devices.filter((d) => {
154
+ return d.pairingState === 'paired';
155
+ });
156
+ if (paired.length === 0)
157
+ return null;
158
+ if (!client.label) {
159
+ return paired.length === 1 ? paired[0] : null;
160
+ }
161
+ const label = client.label;
162
+ const substring = paired.filter((d) => {
163
+ return d.name.includes(label) || label.includes(d.name);
164
+ });
165
+ if (substring.length === 1)
166
+ return substring[0];
167
+ return paired.length === 1 ? paired[0] : null;
168
+ };
169
+ const resolveIosRealClient = async (client, runner) => {
170
+ try {
171
+ const devices = await (0, exports.listIosRealDevices)(runner);
172
+ const matched = matchIosRealDeviceByClient(devices, client);
173
+ if (matched) {
174
+ return {
175
+ device: {
176
+ bundleId: client.bundleId,
177
+ displayName: matched.name,
178
+ kind: 'real-device',
179
+ nativeId: matched.coreDeviceIdentifier,
180
+ platform: 'ios',
181
+ },
182
+ ok: true,
183
+ };
184
+ }
185
+ const pairedList = devices
186
+ .filter((d) => {
187
+ return d.pairingState === 'paired';
188
+ })
189
+ .map((d) => {
190
+ return `${d.name} (${d.coreDeviceIdentifier})`;
191
+ })
192
+ .join(', ');
193
+ return {
194
+ error: `Cannot resolve iOS client '${client.id}' to a paired real device. Label hint: "${client.label ?? '(none)'}". Paired devices: ${pairedList || '(none)'}.`,
195
+ ok: false,
196
+ };
197
+ }
198
+ catch (err) {
199
+ return toDeviceError(err, 'Failed to list iOS real devices', XCRUN_MISSING_ERROR);
200
+ }
201
+ };
95
202
  const resolveIosClient = async (client, runner) => {
203
+ if (client.isSimulator === false) {
204
+ return resolveIosRealClient(client, runner);
205
+ }
96
206
  try {
97
207
  const sims = await (0, exports.listIosSimulators)(runner);
98
208
  const matched = matchIosSimByClient(sims, client);
@@ -101,6 +211,7 @@ const resolveIosClient = async (client, runner) => {
101
211
  device: {
102
212
  bundleId: client.bundleId,
103
213
  displayName: matched.name,
214
+ kind: 'simulator',
104
215
  nativeId: matched.udid,
105
216
  platform: 'ios',
106
217
  },
@@ -121,16 +232,7 @@ const resolveIosClient = async (client, runner) => {
121
232
  };
122
233
  }
123
234
  catch (err) {
124
- if (err instanceof processRunner_1.ProcessNotFoundError) {
125
- return {
126
- error: 'xcrun not found. iOS host tools require Xcode command line tools (macOS only).',
127
- ok: false,
128
- };
129
- }
130
- return {
131
- error: `Failed to list iOS simulators: ${err.message}`,
132
- ok: false,
133
- };
235
+ return toDeviceError(err, 'Failed to list iOS simulators', XCRUN_MISSING_ERROR);
134
236
  }
135
237
  };
136
238
  const resolveAndroidClient = async (client, runner) => {
@@ -142,6 +244,7 @@ const resolveAndroidClient = async (client, runner) => {
142
244
  device: {
143
245
  bundleId: client.bundleId,
144
246
  displayName: matched.serial,
247
+ kind: 'real-device',
145
248
  nativeId: matched.serial,
146
249
  platform: 'android',
147
250
  },
@@ -162,16 +265,7 @@ const resolveAndroidClient = async (client, runner) => {
162
265
  };
163
266
  }
164
267
  catch (err) {
165
- if (err instanceof processRunner_1.ProcessNotFoundError) {
166
- return {
167
- error: 'adb not found. Android host tools require Android platform-tools on PATH.',
168
- ok: false,
169
- };
170
- }
171
- return {
172
- error: `Failed to list Android devices: ${err.message}`,
173
- ok: false,
174
- };
268
+ return toDeviceError(err, 'Failed to list Android devices', ADB_MISSING_ERROR);
175
269
  }
176
270
  };
177
271
  const resolveClientToDevice = async (client, runner) => {
@@ -201,7 +295,12 @@ const scanIosDevices = async (runner) => {
201
295
  if (booted.length === 1) {
202
296
  const only = booted[0];
203
297
  return {
204
- device: { displayName: only.name, nativeId: only.udid, platform: 'ios' },
298
+ device: {
299
+ displayName: only.name,
300
+ kind: 'simulator',
301
+ nativeId: only.udid,
302
+ platform: 'ios',
303
+ },
205
304
  ok: true,
206
305
  };
207
306
  }
@@ -216,16 +315,7 @@ const scanIosDevices = async (runner) => {
216
315
  };
217
316
  }
218
317
  catch (err) {
219
- if (err instanceof processRunner_1.ProcessNotFoundError) {
220
- return {
221
- error: 'xcrun not found. iOS host tools require Xcode command line tools (macOS only).',
222
- ok: false,
223
- };
224
- }
225
- return {
226
- error: `Failed to list iOS simulators: ${err.message}`,
227
- ok: false,
228
- };
318
+ return toDeviceError(err, 'Failed to list iOS simulators', XCRUN_MISSING_ERROR);
229
319
  }
230
320
  };
231
321
  const scanAndroidDevices = async (runner) => {
@@ -245,6 +335,7 @@ const scanAndroidDevices = async (runner) => {
245
335
  return {
246
336
  device: {
247
337
  displayName: only.serial,
338
+ kind: 'real-device',
248
339
  nativeId: only.serial,
249
340
  platform: 'android',
250
341
  },
@@ -262,16 +353,7 @@ const scanAndroidDevices = async (runner) => {
262
353
  };
263
354
  }
264
355
  catch (err) {
265
- if (err instanceof processRunner_1.ProcessNotFoundError) {
266
- return {
267
- error: 'adb not found. Android host tools require Android platform-tools on PATH.',
268
- ok: false,
269
- };
270
- }
271
- return {
272
- error: `Failed to list Android devices: ${err.message}`,
273
- ok: false,
274
- };
356
+ return toDeviceError(err, 'Failed to list Android devices', ADB_MISSING_ERROR);
275
357
  }
276
358
  };
277
359
  const resolveIosByUdid = async (udid, runner) => {
@@ -300,6 +382,7 @@ const resolveIosByUdid = async (udid, runner) => {
300
382
  return {
301
383
  device: {
302
384
  displayName: match.name,
385
+ kind: 'simulator',
303
386
  nativeId: match.udid,
304
387
  platform: 'ios',
305
388
  },
@@ -307,16 +390,7 @@ const resolveIosByUdid = async (udid, runner) => {
307
390
  };
308
391
  }
309
392
  catch (err) {
310
- if (err instanceof processRunner_1.ProcessNotFoundError) {
311
- return {
312
- error: 'xcrun not found. iOS host tools require Xcode command line tools (macOS only).',
313
- ok: false,
314
- };
315
- }
316
- return {
317
- error: `Failed to list iOS simulators: ${err.message}`,
318
- ok: false,
319
- };
393
+ return toDeviceError(err, 'Failed to list iOS simulators', XCRUN_MISSING_ERROR);
320
394
  }
321
395
  };
322
396
  const resolveAndroidBySerial = async (serial, runner) => {
@@ -345,6 +419,7 @@ const resolveAndroidBySerial = async (serial, runner) => {
345
419
  return {
346
420
  device: {
347
421
  displayName: match.serial,
422
+ kind: 'real-device',
348
423
  nativeId: match.serial,
349
424
  platform: 'android',
350
425
  },
@@ -352,16 +427,7 @@ const resolveAndroidBySerial = async (serial, runner) => {
352
427
  };
353
428
  }
354
429
  catch (err) {
355
- if (err instanceof processRunner_1.ProcessNotFoundError) {
356
- return {
357
- error: 'adb not found. Android host tools require Android platform-tools on PATH.',
358
- ok: false,
359
- };
360
- }
361
- return {
362
- error: `Failed to list Android devices: ${err.message}`,
363
- ok: false,
364
- };
430
+ return toDeviceError(err, 'Failed to list Android devices', ADB_MISSING_ERROR);
365
431
  }
366
432
  };
367
433
  const scanForDevice = async (platform, runner) => {