appium-ios-remotexpc 0.3.3 → 0.4.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,9 @@
1
+ ## [0.4.0](https://github.com/appium/appium-ios-remotexpc/compare/v0.3.3...v0.4.0) (2025-09-13)
2
+
3
+ ### Features
4
+
5
+ * implement `mobile_image_mounter` service ([#68](https://github.com/appium/appium-ios-remotexpc/issues/68)) ([c8253f0](https://github.com/appium/appium-ios-remotexpc/commit/c8253f0dccc16652d68755fa0fc73bdd1711c881))
6
+
1
7
  ## [0.3.3](https://github.com/appium/appium-ios-remotexpc/compare/v0.3.2...v0.3.3) (2025-09-05)
2
8
 
3
9
  ### Bug Fixes
@@ -4,6 +4,6 @@ import { TunnelRegistryServer, startTunnelRegistryServer } from './lib/tunnel/tu
4
4
  import { Usbmux, createUsbmux } from './lib/usbmux/index.js';
5
5
  import * as Services from './services.js';
6
6
  import { startCoreDeviceProxy } from './services/ios/tunnel-service/index.js';
7
- export type { DiagnosticsService, SyslogService, SocketInfo, TunnelResult, TunnelRegistry, TunnelRegistryEntry, DiagnosticsServiceWithConnection, } from './lib/types.js';
7
+ export type { DiagnosticsService, MobileImageMounterService, SyslogService, SocketInfo, TunnelResult, TunnelRegistry, TunnelRegistryEntry, DiagnosticsServiceWithConnection, MobileImageMounterServiceWithConnection, } from './lib/types.js';
8
8
  export { createUsbmux, Services, Usbmux, TunnelManager, PacketStreamServer, PacketStreamClient, createLockdownServiceByUDID, startCoreDeviceProxy, TunnelRegistryServer, startTunnelRegistryServer, };
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,gCAAgC,GACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,EAC3B,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,GAC1B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,YAAY,EACV,kBAAkB,EAClB,yBAAyB,EACzB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,gCAAgC,EAChC,uCAAuC,GACxC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,EAC3B,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,GAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plist-creator.d.ts","sourceRoot":"","sources":["../../../../src/lib/plist/plist-creator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,aAAa,CAAC;AAG/D,wBAAgB,WAAW,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAiCxD"}
1
+ {"version":3,"file":"plist-creator.d.ts","sourceRoot":"","sources":["../../../../src/lib/plist/plist-creator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAc,MAAM,aAAa,CAAC;AAG/D,wBAAgB,WAAW,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAqCxD"}
@@ -10,6 +10,10 @@ export function createPlist(obj) {
10
10
  if (typeof value === 'string') {
11
11
  return `<string>${escapeXml(value)}</string>`;
12
12
  }
13
+ if (Buffer.isBuffer(value)) {
14
+ const base64Data = value.toString('base64');
15
+ return `<data>${base64Data}</data>`;
16
+ }
13
17
  if (Array.isArray(value)) {
14
18
  return `<array>${value.map((item) => convert(item)).join('')}</array>`;
15
19
  }
@@ -0,0 +1,71 @@
1
+ import type { PlistDictionary } from '../types.js';
2
+ export declare class TSSError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare class BuildIdentityNotFoundError extends TSSError {
6
+ constructor(message: string);
7
+ }
8
+ export interface TSSResponse {
9
+ [key: string]: any;
10
+ ApImg4Ticket?: Buffer;
11
+ }
12
+ export interface RestoreRequestRule {
13
+ Conditions?: {
14
+ ApRawProductionMode?: boolean;
15
+ ApCurrentProductionMode?: boolean;
16
+ ApRawSecurityMode?: boolean;
17
+ ApRequiresImage4?: boolean;
18
+ ApDemotionPolicyOverride?: string;
19
+ ApInRomDFU?: boolean;
20
+ [key: string]: any;
21
+ };
22
+ Actions?: {
23
+ [key: string]: any;
24
+ };
25
+ }
26
+ export interface ManifestEntry {
27
+ Info?: {
28
+ RestoreRequestRules?: RestoreRequestRule[];
29
+ [key: string]: any;
30
+ };
31
+ Digest?: Buffer;
32
+ Trusted?: boolean;
33
+ [key: string]: any;
34
+ }
35
+ export interface BuildManifest {
36
+ LoadableTrustCache?: ManifestEntry;
37
+ PersonalizedDMG?: ManifestEntry;
38
+ [key: string]: ManifestEntry | undefined;
39
+ }
40
+ export declare class TSSRequest {
41
+ private _request;
42
+ constructor();
43
+ /**
44
+ * Apply restore request rules to TSS entry
45
+ * @param tssEntry The TSS entry to modify
46
+ * @param parameters The parameters for rule evaluation
47
+ * @param rules The rules to apply
48
+ * @returns Modified TSS entry
49
+ */
50
+ static applyRestoreRequestRules(tssEntry: PlistDictionary, parameters: PlistDictionary, rules: RestoreRequestRule[]): PlistDictionary;
51
+ /**
52
+ * Update the TSS request with additional options
53
+ * @param options The options to add to the request
54
+ */
55
+ update(options: PlistDictionary): void;
56
+ /**
57
+ * Send the TSS request to Apple's servers and receive the response
58
+ * @returns Promise resolving to TSS response
59
+ */
60
+ sendReceive(): Promise<TSSResponse>;
61
+ }
62
+ /**
63
+ * Get manifest from Apple's TSS (Ticket Signing Server)
64
+ * @param ecid The device ECID
65
+ * @param buildManifest The build manifest dictionary
66
+ * @param queryPersonalizationIdentifiers Function to query personalization identifiers
67
+ * @param queryNonce Function to query nonce
68
+ * @returns Promise resolving to the manifest bytes
69
+ */
70
+ export declare function getManifestFromTSS(ecid: number, buildManifest: PlistDictionary, queryPersonalizationIdentifiers: () => Promise<PlistDictionary>, queryNonce: (personalizedImageType: string) => Promise<Buffer>): Promise<Buffer>;
71
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/tss/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAWnD,qBAAa,QAAS,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,0BAA2B,SAAQ,QAAQ;gBAC1C,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE;QACX,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE;QACL,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;QAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,kBAAkB,CAAC,EAAE,aAAa,CAAC;IACnC,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;CAC1C;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAkB;;IAUlC;;;;;;OAMG;IACH,MAAM,CAAC,wBAAwB,CAC7B,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,eAAe,EAC3B,KAAK,EAAE,kBAAkB,EAAE,GAC1B,eAAe;IA6DlB;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAItC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;CAwD1C;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,eAAe,EAC9B,+BAA+B,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,EAC/D,UAAU,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC7D,OAAO,CAAC,MAAM,CAAC,CAyGjB"}
@@ -0,0 +1,243 @@
1
+ import { logger } from '@appium/support';
2
+ import axios from 'axios';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { createPlist, parsePlist } from '../plist/index.js';
5
+ const log = logger.getLogger('TSSRequestor');
6
+ // TSS Constants
7
+ const TSS_CONTROLLER_ACTION_URL = 'http://gs.apple.com/TSS/controller?action=2';
8
+ const TSS_CLIENT_VERSION_STRING = 'libauthinstall-1033.80.3';
9
+ const TSS_SUCCESS_MESSAGE = 'SUCCESS';
10
+ const TSS_REQUEST_TIMEOUT = 10000; // 10 seconds
11
+ const TSS_RULE_IGNORE_VALUE = 255;
12
+ export class TSSError extends Error {
13
+ constructor(message) {
14
+ super(message);
15
+ this.name = 'TSSError';
16
+ }
17
+ }
18
+ export class BuildIdentityNotFoundError extends TSSError {
19
+ constructor(message) {
20
+ super(message);
21
+ this.name = 'BuildIdentityNotFoundError';
22
+ }
23
+ }
24
+ export class TSSRequest {
25
+ _request;
26
+ constructor() {
27
+ this._request = {
28
+ '@HostPlatformInfo': 'mac',
29
+ '@VersionInfo': TSS_CLIENT_VERSION_STRING,
30
+ '@UUID': randomUUID().toUpperCase(),
31
+ };
32
+ }
33
+ /**
34
+ * Apply restore request rules to TSS entry
35
+ * @param tssEntry The TSS entry to modify
36
+ * @param parameters The parameters for rule evaluation
37
+ * @param rules The rules to apply
38
+ * @returns Modified TSS entry
39
+ */
40
+ static applyRestoreRequestRules(tssEntry, parameters, rules) {
41
+ for (const rule of rules) {
42
+ let conditionsFulfilled = true;
43
+ const conditions = rule.Conditions || {};
44
+ for (const [key, value] of Object.entries(conditions)) {
45
+ if (!conditionsFulfilled) {
46
+ break;
47
+ }
48
+ let value2;
49
+ switch (key) {
50
+ case 'ApRawProductionMode':
51
+ case 'ApCurrentProductionMode':
52
+ value2 = parameters.ApProductionMode;
53
+ break;
54
+ case 'ApRawSecurityMode':
55
+ value2 = parameters.ApSecurityMode;
56
+ break;
57
+ case 'ApRequiresImage4':
58
+ value2 = parameters.ApSupportsImg4;
59
+ break;
60
+ case 'ApDemotionPolicyOverride':
61
+ value2 = parameters.DemotionPolicy;
62
+ break;
63
+ case 'ApInRomDFU':
64
+ value2 = parameters.ApInRomDFU;
65
+ break;
66
+ default:
67
+ log.error(`Unhandled condition ${key} while parsing RestoreRequestRules`);
68
+ value2 = null;
69
+ }
70
+ if (value2 !== null && value2 !== undefined) {
71
+ conditionsFulfilled = value === value2;
72
+ }
73
+ else {
74
+ conditionsFulfilled = false;
75
+ }
76
+ }
77
+ if (!conditionsFulfilled) {
78
+ continue;
79
+ }
80
+ const actions = rule.Actions || {};
81
+ for (const [key, value] of Object.entries(actions)) {
82
+ if (value !== TSS_RULE_IGNORE_VALUE) {
83
+ const value2 = tssEntry[key];
84
+ if (value2) {
85
+ delete tssEntry[key];
86
+ }
87
+ log.debug(`Adding ${key}=${value} to TSS entry`);
88
+ tssEntry[key] = value;
89
+ }
90
+ }
91
+ }
92
+ return tssEntry;
93
+ }
94
+ /**
95
+ * Update the TSS request with additional options
96
+ * @param options The options to add to the request
97
+ */
98
+ update(options) {
99
+ Object.assign(this._request, options);
100
+ }
101
+ /**
102
+ * Send the TSS request to Apple's servers and receive the response
103
+ * @returns Promise resolving to TSS response
104
+ */
105
+ async sendReceive() {
106
+ const headers = {
107
+ 'Cache-Control': 'no-cache',
108
+ 'Content-Type': 'text/xml; charset="utf-8"',
109
+ 'User-Agent': 'InetURL/1.0',
110
+ Expect: '',
111
+ };
112
+ log.info('Sending TSS request...');
113
+ log.debug('TSS Request:', this._request);
114
+ try {
115
+ const requestDataStr = createPlist(this._request);
116
+ const requestData = typeof requestDataStr === 'string'
117
+ ? Buffer.from(requestDataStr, 'utf8')
118
+ : requestDataStr;
119
+ const res = await axios.post(TSS_CONTROLLER_ACTION_URL, requestData, {
120
+ headers,
121
+ timeout: TSS_REQUEST_TIMEOUT,
122
+ responseType: 'text',
123
+ });
124
+ const response = res.data;
125
+ log.debug(`TSS response status: ${res.status}`);
126
+ if (response.includes('MESSAGE=SUCCESS')) {
127
+ log.debug('TSS response successfully received');
128
+ }
129
+ else {
130
+ log.warn('TSS response does not contain MESSAGE=SUCCESS');
131
+ }
132
+ const [, messagePart] = response.split('MESSAGE=');
133
+ if (!messagePart) {
134
+ throw new TSSError('Invalid TSS response format');
135
+ }
136
+ const [message] = messagePart.split('&');
137
+ log.debug(`TSS server message: ${message}`);
138
+ if (message !== TSS_SUCCESS_MESSAGE) {
139
+ throw new TSSError(`TSS server replied: ${message}`);
140
+ }
141
+ const [, requestStringPart] = response.split('REQUEST_STRING=');
142
+ if (!requestStringPart) {
143
+ throw new TSSError('No REQUEST_STRING in TSS response');
144
+ }
145
+ return parsePlist(requestStringPart);
146
+ }
147
+ catch (error) {
148
+ log.error('TSS request failed:', error);
149
+ throw error;
150
+ }
151
+ }
152
+ }
153
+ /**
154
+ * Get manifest from Apple's TSS (Ticket Signing Server)
155
+ * @param ecid The device ECID
156
+ * @param buildManifest The build manifest dictionary
157
+ * @param queryPersonalizationIdentifiers Function to query personalization identifiers
158
+ * @param queryNonce Function to query nonce
159
+ * @returns Promise resolving to the manifest bytes
160
+ */
161
+ export async function getManifestFromTSS(ecid, buildManifest, queryPersonalizationIdentifiers, queryNonce) {
162
+ log.debug('Starting TSS manifest generation process');
163
+ const request = new TSSRequest();
164
+ const personalizationIdentifiers = await queryPersonalizationIdentifiers();
165
+ for (const [key, value] of Object.entries(personalizationIdentifiers)) {
166
+ if (key.startsWith('Ap,')) {
167
+ request.update({ [key]: value });
168
+ }
169
+ }
170
+ const boardId = personalizationIdentifiers.BoardId;
171
+ const chipId = personalizationIdentifiers.ChipID;
172
+ let buildIdentity = null;
173
+ const buildIdentities = buildManifest.BuildIdentities;
174
+ for (const tmpBuildIdentity of buildIdentities) {
175
+ // ApBoardID and ApChipID are hex strings, so parse with radix 16
176
+ const apBoardId = parseInt(tmpBuildIdentity.ApBoardID, 16);
177
+ const apChipId = parseInt(tmpBuildIdentity.ApChipID, 16);
178
+ if (apBoardId === boardId && apChipId === chipId) {
179
+ buildIdentity = tmpBuildIdentity;
180
+ break;
181
+ }
182
+ }
183
+ if (!buildIdentity) {
184
+ throw new BuildIdentityNotFoundError(`Could not find the manifest for board ${boardId} and chip ${chipId}`);
185
+ }
186
+ const manifest = buildIdentity.Manifest;
187
+ const parameters = {
188
+ ApProductionMode: true,
189
+ ApSecurityDomain: 1,
190
+ ApSecurityMode: true,
191
+ ApSupportsImg4: true,
192
+ ApCurrentProductionMode: true,
193
+ ApRequiresImage4: true,
194
+ ApDemotionPolicyOverride: 'Demote',
195
+ ApInRomDFU: true,
196
+ ApRawSecurityMode: true,
197
+ };
198
+ const apNonce = await queryNonce('DeveloperDiskImage');
199
+ request.update({
200
+ '@ApImg4Ticket': true,
201
+ '@BBTicket': true,
202
+ ApBoardID: boardId,
203
+ ApChipID: chipId,
204
+ ApECID: ecid,
205
+ ApNonce: apNonce,
206
+ ApProductionMode: true,
207
+ ApSecurityDomain: 1,
208
+ ApSecurityMode: true,
209
+ SepNonce: Buffer.alloc(20, 0), // 20 bytes of zeros
210
+ UID_MODE: false,
211
+ });
212
+ for (const [key, manifestEntry] of Object.entries(manifest)) {
213
+ if (!manifestEntry?.Info) {
214
+ continue;
215
+ }
216
+ if (!manifestEntry.Trusted) {
217
+ log.debug(`Skipping ${key} as it is not trusted`);
218
+ continue;
219
+ }
220
+ log.debug(`Processing manifest entry: ${key}`);
221
+ const tssEntry = {
222
+ Digest: manifestEntry.Digest || Buffer.alloc(0),
223
+ Trusted: manifestEntry.Trusted || false,
224
+ };
225
+ if (key === 'PersonalizedDMG') {
226
+ tssEntry.Name = 'DeveloperDiskImage';
227
+ }
228
+ const loadableTrustCache = manifest.LoadableTrustCache;
229
+ if (loadableTrustCache?.Info?.RestoreRequestRules) {
230
+ const rules = loadableTrustCache.Info.RestoreRequestRules;
231
+ if (rules.length > 0) {
232
+ log.debug(`Applying restore request rules for entry ${key}`);
233
+ TSSRequest.applyRestoreRequestRules(tssEntry, parameters, rules);
234
+ }
235
+ }
236
+ request.update({ [key]: tssEntry });
237
+ }
238
+ const response = await request.sendReceive();
239
+ if (!response.ApImg4Ticket) {
240
+ throw new TSSError('TSS response does not contain ApImg4Ticket');
241
+ }
242
+ return response.ApImg4Ticket;
243
+ }
@@ -291,4 +291,83 @@ export interface SyslogServiceConstructor {
291
291
  */
292
292
  new (address: [string, number]): SyslogService;
293
293
  }
294
+ /**
295
+ * Represents the instance side of MobileImageMounterService
296
+ */
297
+ export interface MobileImageMounterService extends BaseService {
298
+ /**
299
+ * Lookup for mounted images by type
300
+ * @param imageType Type of image, 'Personalized' by default
301
+ * @returns Promise resolving to array of signatures of mounted images
302
+ */
303
+ lookup(imageType?: string): Promise<Buffer[]>;
304
+ /**
305
+ * Check if personalized image is mounted
306
+ * @returns Promise resolving to boolean indicating if personalized image is mounted
307
+ */
308
+ isPersonalizedImageMounted(): Promise<boolean>;
309
+ /**
310
+ * Mount personalized image for device (iOS 17+)
311
+ * @param imageFilePath The file path of the image (.dmg)
312
+ * @param buildManifestFilePath The build manifest file path (.plist)
313
+ * @param trustCacheFilePath The trust cache file path (.trustcache)
314
+ */
315
+ mount(imageFilePath: string, buildManifestFilePath: string, trustCacheFilePath: string): Promise<void>;
316
+ /**
317
+ * Unmount image from device
318
+ * @param mountPath The mount path to unmount, defaults to '/System/Developer'
319
+ */
320
+ unmountImage(mountPath?: string): Promise<void>;
321
+ /**
322
+ * Query developer mode status (iOS 16+)
323
+ * @returns Promise resolving to boolean indicating if developer mode is enabled
324
+ */
325
+ queryDeveloperModeStatus(): Promise<boolean>;
326
+ /**
327
+ * Query personalization nonce (for personalized images)
328
+ * @param personalizedImageType Optional personalized image type
329
+ * @returns Promise resolving to personalization nonce
330
+ */
331
+ queryNonce(personalizedImageType?: string): Promise<Buffer>;
332
+ /**
333
+ * Query personalization identifiers from the device
334
+ * @returns Promise resolving to personalization identifiers
335
+ */
336
+ queryPersonalizationIdentifiers(): Promise<PlistDictionary>;
337
+ /**
338
+ * Copy devices list
339
+ * @returns Promise resolving to array of mounted devices
340
+ */
341
+ copyDevices(): Promise<any[]>;
342
+ /**
343
+ * Query personalization manifest for a specific image
344
+ * @param imageType The image type (e.g., 'DeveloperDiskImage')
345
+ * @param signature The image signature/hash
346
+ * @returns Promise resolving to personalization manifest
347
+ */
348
+ queryPersonalizationManifest(imageType: string, signature: Buffer): Promise<Buffer>;
349
+ }
350
+ /**
351
+ * Represents the static side of MobileImageMounterService
352
+ */
353
+ export interface MobileImageMounterServiceConstructor {
354
+ /**
355
+ * RSD service name for the mobile image mounter service
356
+ */
357
+ readonly RSD_SERVICE_NAME: string;
358
+ /**
359
+ * Creates a new MobileImageMounterService instance
360
+ * @param address Tuple containing [host, port]
361
+ */
362
+ new (address: [string, number]): MobileImageMounterService;
363
+ }
364
+ /**
365
+ * Represents a MobileImageMounterService instance with its associated RemoteXPC connection
366
+ */
367
+ export interface MobileImageMounterServiceWithConnection {
368
+ /** The MobileImageMounterService instance */
369
+ mobileImageMounterService: MobileImageMounterService;
370
+ /** The RemoteXPC connection for service management */
371
+ remoteXPC: RemoteXpcConnection;
372
+ }
294
373
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,MAAM,GACN,UAAU,GACV,eAAe,GACf,IAAI,CAAC;AAET;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,eAAe,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,MAAM,GACN,UAAU,GACV,QAAQ,GACR,aAAa,GACb,IAAI,CAAC;AAET;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAEpD,MAAM,WAAW,mBAAmB;IAClC,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC7C,kCAAkC;IAClC,QAAQ,EAAE;QACR,iDAAiD;QACjD,WAAW,EAAE,MAAM,CAAC;QACpB,8CAA8C;QAC9C,YAAY,EAAE,MAAM,CAAC;QACrB,yCAAyC;QACzC,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,UAAU,EAAE;QACV,+BAA+B;QAC/B,IAAI,EAAE,MAAM,CAAC;QACb,+BAA+B;QAC/B,OAAO,EAAE,MAAM,CAAC;QAChB,0DAA0D;QAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,MAAM,EAAE;QACN,+BAA+B;QAC/B,OAAO,EAAE,MAAM,CAAC;QAChB,0DAA0D;QAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAEpC;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAErC;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAElC;;;;OAIG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D;;;OAGG;IACH,iCAAiC,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChE;;;;OAIG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACxD;;;;OAIG;IACH,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACrD;;;;OAIG;IACH,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IACpE;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC;;;OAGG;IACH,KAAK,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,kBAAkB,CAAC;CACrD;AAED;;;GAGG;AACH,MAAM,WAAW,gCAAgC;IAC/C,sCAAsC;IACtC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,wEAAwE;IACxE,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,sCAAsC;IACrD,4CAA4C;IAC5C,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,wEAAwE;IACxE,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,iBAAiB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IACtD,+BAA+B;IAC/B,oBAAoB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD;;;;;;OAMG;IACH,KAAK,CACH,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,EACtD,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAE5D;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAE9C;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAEhE;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAExD;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IAE3D;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,KAAK,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,WAAW;IAC5D;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE9C;;;OAGG;IACH,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/C;;;;;OAKG;IACH,KAAK,CACH,aAAa,EAAE,MAAM,EACrB,qBAAqB,EAAE,MAAM,EAC7B,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;OAGG;IACH,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;OAGG;IACH,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7C;;;;OAIG;IACH,UAAU,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5D;;;OAGG;IACH,+BAA+B,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAE5D;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE9B;;;;;OAKG;IACH,4BAA4B,CAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oCAAoC;IACnD;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC;;;OAGG;IACH,KAAK,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,yBAAyB,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,uCAAuC;IACtD,6CAA6C;IAC7C,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,sDAAsD;IACtD,SAAS,EAAE,mBAAmB,CAAC;CAChC"}
@@ -1,6 +1,7 @@
1
1
  import { TunnelRegistryServer, startTunnelRegistryServer } from '../lib/tunnel/tunnel-registry-server.js';
2
2
  import * as diagnostics from './ios/diagnostic-service/index.js';
3
+ import * as mobileImageMounter from './ios/mobile-image-mounter/index.js';
3
4
  import * as syslog from './ios/syslog-service/index.js';
4
5
  import * as tunnel from './ios/tunnel-service/index.js';
5
- export { diagnostics, syslog, tunnel, TunnelRegistryServer, startTunnelRegistryServer, };
6
+ export { diagnostics, mobileImageMounter, syslog, tunnel, TunnelRegistryServer, startTunnelRegistryServer, };
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,WAAW,MAAM,mCAAmC,CAAC;AACjE,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAC;AAExD,OAAO,EACL,WAAW,EACX,MAAM,EACN,MAAM,EACN,oBAAoB,EACpB,yBAAyB,GAC1B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,WAAW,MAAM,mCAAmC,CAAC;AACjE,OAAO,KAAK,kBAAkB,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAC;AAExD,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,MAAM,EACN,MAAM,EACN,oBAAoB,EACpB,yBAAyB,GAC1B,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { TunnelRegistryServer, startTunnelRegistryServer, } from '../lib/tunnel/tunnel-registry-server.js';
2
2
  import * as diagnostics from './ios/diagnostic-service/index.js';
3
+ import * as mobileImageMounter from './ios/mobile-image-mounter/index.js';
3
4
  import * as syslog from './ios/syslog-service/index.js';
4
5
  import * as tunnel from './ios/tunnel-service/index.js';
5
- export { diagnostics, syslog, tunnel, TunnelRegistryServer, startTunnelRegistryServer, };
6
+ export { diagnostics, mobileImageMounter, syslog, tunnel, TunnelRegistryServer, startTunnelRegistryServer, };
@@ -0,0 +1,122 @@
1
+ import type { MobileImageMounterService as MobileImageMounterServiceInterface, PlistDictionary } from '../../../lib/types.js';
2
+ import { BaseService } from '../base-service.js';
3
+ /**
4
+ * Base interface for service responses
5
+ */
6
+ interface BaseResponse {
7
+ Status?: string;
8
+ Error?: string;
9
+ DetailedError?: string;
10
+ }
11
+ /**
12
+ * Interface for image-related responses
13
+ */
14
+ export interface ImageResponse extends BaseResponse {
15
+ ImagePresent?: boolean;
16
+ ImageSignature?: Buffer[] | Buffer;
17
+ }
18
+ /**
19
+ * MobileImageMounterService provides an API to:
20
+ * - Mount Developer Disk Images on iOS devices
21
+ * - Lookup mounted images and their signatures
22
+ * - Check if personalized images are mounted
23
+ * - Unmount images when needed
24
+ */
25
+ declare class MobileImageMounterService extends BaseService implements MobileImageMounterServiceInterface {
26
+ static readonly RSD_SERVICE_NAME = "com.apple.mobile.mobile_image_mounter.shim.remote";
27
+ private static readonly FILE_TYPE_IMAGE;
28
+ private static readonly FILE_TYPE_BUILD_MANIFEST;
29
+ private static readonly FILE_TYPE_TRUST_CACHE;
30
+ private static readonly IMAGE_TYPE;
31
+ private static readonly MOUNT_PATH;
32
+ private static readonly UPLOAD_IMAGE_TIMEOUT;
33
+ private connection;
34
+ constructor(address: [string, number]);
35
+ /**
36
+ * Clean up resources when service is no longer needed
37
+ */
38
+ cleanup(): Promise<void>;
39
+ /**
40
+ * Lookup mounted images by type
41
+ * @param imageType Type of image to lookup (defaults to 'Personalized')
42
+ * @returns Array of signatures of mounted images
43
+ */
44
+ lookup(imageType?: string): Promise<Buffer[]>;
45
+ /**
46
+ * Check if personalized image is mounted
47
+ * @returns True if personalized image is mounted
48
+ */
49
+ isPersonalizedImageMounted(): Promise<boolean>;
50
+ /**
51
+ * Mount personalized image for device (iOS >= 17)
52
+ * @param imageFilePath Path to the image file (.dmg)
53
+ * @param buildManifestFilePath Path to the build manifest file (.plist)
54
+ * @param trustCacheFilePath Path to the trust cache file (.trustcache)
55
+ * @param infoPlist Optional info plist dictionary
56
+ */
57
+ mount(imageFilePath: string, buildManifestFilePath: string, trustCacheFilePath: string, infoPlist?: PlistDictionary): Promise<void>;
58
+ /**
59
+ * Unmount image from device
60
+ * @param mountPath Mount path to unmount (defaults to '/System/Developer')
61
+ */
62
+ unmountImage(mountPath?: string): Promise<void>;
63
+ /**
64
+ * Query developer mode status (iOS 16+)
65
+ * @returns True if developer mode is enabled (defaults to true for older iOS)
66
+ */
67
+ queryDeveloperModeStatus(): Promise<boolean>;
68
+ /**
69
+ * Query personalization nonce for personalized images
70
+ * @param personalizedImageType Optional personalized image type
71
+ * @returns Personalization nonce as Buffer
72
+ */
73
+ queryNonce(personalizedImageType?: string): Promise<Buffer>;
74
+ /**
75
+ * Query personalization identifiers from the device
76
+ * @returns Personalization identifiers dictionary
77
+ */
78
+ queryPersonalizationIdentifiers(): Promise<PlistDictionary>;
79
+ /**
80
+ * Copy devices info (only for mounted images)
81
+ * @returns List of mounted devices
82
+ */
83
+ copyDevices(): Promise<any[]>;
84
+ /**
85
+ * Query personalization manifest from device
86
+ * @param imageType The image type
87
+ * @param signature The image signature/hash
88
+ * @returns Personalization manifest as Buffer
89
+ */
90
+ queryPersonalizationManifest(imageType: string, signature: Buffer): Promise<Buffer>;
91
+ /**
92
+ * Upload image to device
93
+ * @param imageType The image type
94
+ * @param image The image data
95
+ * @param signature The image signature/manifest
96
+ * @param timeout Optional timeout for upload operation (defaults to 20000ms)
97
+ */
98
+ uploadImage(imageType: string, image: Buffer, signature: Buffer, timeout?: number): Promise<void>;
99
+ /**
100
+ * Mount image on device
101
+ * @param imageType The image type
102
+ * @param signature The image signature/manifest
103
+ * @param extras Additional parameters for mounting
104
+ */
105
+ mountImage(imageType: string, signature: Buffer, extras?: Record<string, any>): Promise<void>;
106
+ private sendRequest;
107
+ /**
108
+ * Calculate hash of a buffer asynchronously
109
+ * @param buffer The buffer to hash
110
+ * @returns Promise resolving to the hash digest
111
+ */
112
+ private hashLargeBufferAsync;
113
+ private getOrRetrieveManifestFromTSS;
114
+ private isConnectionDestroyed;
115
+ private connectToMobileImageMounterService;
116
+ private closeConnection;
117
+ private checkIfError;
118
+ private assertIsFile;
119
+ }
120
+ export default MobileImageMounterService;
121
+ export { MobileImageMounterService };
122
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/mobile-image-mounter/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,yBAAyB,IAAI,kCAAkC,EAC/D,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD;;GAEG;AACH,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;CACpC;AAED;;;;;;GAMG;AACH,cAAM,yBACJ,SAAQ,WACR,YAAW,kCAAkC;IAE7C,MAAM,CAAC,QAAQ,CAAC,gBAAgB,uDACsB;IAGtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAW;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAoB;IACpE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAiB;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAkB;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAuB;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAGrD,OAAO,CAAC,UAAU,CAAkC;gBAExC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAIrC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;OAIG;IACG,MAAM,CACV,SAAS,SAAuC,GAC/C,OAAO,CAAC,MAAM,EAAE,CAAC;IAUpB;;;OAGG;IACG,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC;IAQpD;;;;;;OAMG;IACG,KAAK,CACT,aAAa,EAAE,MAAM,EACrB,qBAAqB,EAAE,MAAM,EAC7B,kBAAkB,EAAE,MAAM,EAC1B,SAAS,CAAC,EAAE,eAAe,GAC1B,OAAO,CAAC,IAAI,CAAC;IAgEhB;;;OAGG;IACG,YAAY,CAChB,SAAS,SAAuC,GAC/C,OAAO,CAAC,IAAI,CAAC;IAsBhB;;;OAGG;IACG,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC;IAYlD;;;;OAIG;IACG,UAAU,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBjE;;;OAGG;IACG,+BAA+B,IAAI,OAAO,CAAC,eAAe,CAAC;IAQjE;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAKnC;;;;;OAKG;IACG,4BAA4B,CAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAgClB;;;;;;OAMG;IACG,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,SAAiD,GACvD,OAAO,CAAC,IAAI,CAAC;IAiChB;;;;;OAKG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC;YA4BF,WAAW;IAczB;;;;OAIG;YACW,oBAAoB;YAmBpB,4BAA4B;IAyC1C,OAAO,CAAC,qBAAqB;YASf,kCAAkC;IAchD,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,YAAY;YAMN,YAAY;CAiB3B;AAED,eAAe,yBAAyB,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,CAAC"}