appium-ios-remotexpc 0.3.2 → 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 +16 -0
- package/build/src/index.d.ts +1 -1
- package/build/src/index.d.ts.map +1 -1
- package/build/src/lib/plist/binary-plist-creator.d.ts.map +1 -1
- package/build/src/lib/plist/binary-plist-creator.js +17 -5
- package/build/src/lib/plist/binary-plist-parser.d.ts.map +1 -1
- package/build/src/lib/plist/binary-plist-parser.js +19 -9
- package/build/src/lib/plist/plist-creator.d.ts.map +1 -1
- package/build/src/lib/plist/plist-creator.js +4 -0
- package/build/src/lib/tss/index.d.ts +71 -0
- package/build/src/lib/tss/index.d.ts.map +1 -0
- package/build/src/lib/tss/index.js +243 -0
- package/build/src/lib/types.d.ts +79 -0
- package/build/src/lib/types.d.ts.map +1 -1
- package/build/src/services/index.d.ts +2 -1
- package/build/src/services/index.d.ts.map +1 -1
- package/build/src/services/index.js +2 -1
- package/build/src/services/ios/mobile-image-mounter/index.d.ts +122 -0
- package/build/src/services/ios/mobile-image-mounter/index.d.ts.map +1 -0
- package/build/src/services/ios/mobile-image-mounter/index.js +363 -0
- package/build/src/services.d.ts +2 -1
- package/build/src/services.d.ts.map +1 -1
- package/build/src/services.js +12 -0
- package/package.json +5 -3
- package/src/index.ts +2 -0
- package/src/lib/plist/binary-plist-creator.ts +20 -5
- package/src/lib/plist/binary-plist-parser.ts +22 -12
- package/src/lib/plist/plist-creator.ts +4 -0
- package/src/lib/tss/index.ts +338 -0
- package/src/lib/types.ts +98 -0
- package/src/services/index.ts +2 -0
- package/src/services/ios/mobile-image-mounter/index.ts +525 -0
- package/src/services.ts +18 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
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
|
+
|
|
7
|
+
## [0.3.3](https://github.com/appium/appium-ios-remotexpc/compare/v0.3.2...v0.3.3) (2025-09-05)
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* correct UTF-16BE string parsing and TempObject handling in binary plist parser ([#65](https://github.com/appium/appium-ios-remotexpc/issues/65)) ([e64933a](https://github.com/appium/appium-ios-remotexpc/commit/e64933a5126ea796b12fcd001d12cab93a3bb9f8))
|
|
12
|
+
|
|
13
|
+
### Miscellaneous Chores
|
|
14
|
+
|
|
15
|
+
* **deps:** bump actions/checkout from 4 to 5 ([#64](https://github.com/appium/appium-ios-remotexpc/issues/64)) ([2fc7af0](https://github.com/appium/appium-ios-remotexpc/commit/2fc7af0c29f774f4dc37339c0825b109d410b815))
|
|
16
|
+
|
|
1
17
|
## [0.3.2](https://github.com/appium/appium-ios-remotexpc/compare/v0.3.1...v0.3.2) (2025-08-31)
|
|
2
18
|
|
|
3
19
|
### Miscellaneous Chores
|
package/build/src/index.d.ts
CHANGED
|
@@ -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
|
package/build/src/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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":"binary-plist-creator.d.ts","sourceRoot":"","sources":["../../../../src/lib/plist/binary-plist-creator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAmB,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"binary-plist-creator.d.ts","sourceRoot":"","sources":["../../../../src/lib/plist/binary-plist-creator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAmB,UAAU,EAAE,MAAM,aAAa,CAAC;AA2jB/D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAGzD"}
|
|
@@ -39,7 +39,9 @@ class BinaryPlistCreator {
|
|
|
39
39
|
const objectOffsets = [];
|
|
40
40
|
const objectData = [];
|
|
41
41
|
for (const value of this._objectTable) {
|
|
42
|
-
|
|
42
|
+
// Calculate offset including the header length
|
|
43
|
+
objectOffsets.push(BPLIST_MAGIC_AND_VERSION.length +
|
|
44
|
+
this._calculateObjectDataLength(objectData));
|
|
43
45
|
objectData.push(this._createObjectData(value));
|
|
44
46
|
}
|
|
45
47
|
// Calculate offset table size
|
|
@@ -291,10 +293,20 @@ class BinaryPlistCreator {
|
|
|
291
293
|
// Check if string can be ASCII
|
|
292
294
|
// eslint-disable-next-line no-control-regex
|
|
293
295
|
const isAscii = /^[\x00-\x7F]*$/.test(value);
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
296
|
+
let stringBuffer;
|
|
297
|
+
if (isAscii) {
|
|
298
|
+
stringBuffer = Buffer.from(value, 'ascii');
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
// Unicode strings should be stored as UTF-16BE in binary plists
|
|
302
|
+
const utf16leBuffer = Buffer.from(value, 'utf16le');
|
|
303
|
+
stringBuffer = Buffer.alloc(utf16leBuffer.length);
|
|
304
|
+
// Convert UTF-16LE to UTF-16BE
|
|
305
|
+
for (let i = 0; i < utf16leBuffer.length; i += 2) {
|
|
306
|
+
stringBuffer[i] = utf16leBuffer[i + 1]; // High byte
|
|
307
|
+
stringBuffer[i + 1] = utf16leBuffer[i]; // Low byte
|
|
308
|
+
}
|
|
309
|
+
}
|
|
298
310
|
const length = isAscii ? value.length : stringBuffer.length / 2;
|
|
299
311
|
let header;
|
|
300
312
|
if (length < 15) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-plist-parser.d.ts","sourceRoot":"","sources":["../../../../src/lib/plist/binary-plist-parser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAA+B,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"binary-plist-parser.d.ts","sourceRoot":"","sources":["../../../../src/lib/plist/binary-plist-parser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAA+B,UAAU,EAAE,MAAM,aAAa,CAAC;AAyjB3E;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAG3D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAIrD"}
|
|
@@ -200,12 +200,16 @@ class BinaryPlistParser {
|
|
|
200
200
|
* @returns The parsed string
|
|
201
201
|
*/
|
|
202
202
|
_parseUnicodeString(startOffset, objLength) {
|
|
203
|
-
// Unicode strings are stored as UTF-16BE
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
203
|
+
// Unicode strings are stored as UTF-16BE in binary plists
|
|
204
|
+
const bytesToRead = objLength * 2;
|
|
205
|
+
const stringBuffer = this._buffer.slice(startOffset, startOffset + bytesToRead);
|
|
206
|
+
// Convert UTF-16BE to UTF-16LE for proper decoding
|
|
207
|
+
const utf16leBuffer = Buffer.alloc(bytesToRead);
|
|
208
|
+
for (let i = 0; i < bytesToRead; i += 2) {
|
|
209
|
+
utf16leBuffer[i] = stringBuffer[i + 1]; // Low byte
|
|
210
|
+
utf16leBuffer[i + 1] = stringBuffer[i]; // High byte
|
|
207
211
|
}
|
|
208
|
-
return
|
|
212
|
+
return utf16leBuffer.toString('utf16le');
|
|
209
213
|
}
|
|
210
214
|
/**
|
|
211
215
|
* Parses a UID value from the buffer
|
|
@@ -358,8 +362,11 @@ class BinaryPlistParser {
|
|
|
358
362
|
for (let j = 0; j < obj.objLength; j++) {
|
|
359
363
|
const refIdx = this._readObjectRef(obj.startOffset + j * this._objectRefSize);
|
|
360
364
|
const refValue = this._objectTable[refIdx];
|
|
361
|
-
//
|
|
362
|
-
if (
|
|
365
|
+
// Handle TempObjects correctly - they should be resolved by the time we get here
|
|
366
|
+
if (this._isTempObject(refValue)) {
|
|
367
|
+
array.push(refValue.value);
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
363
370
|
array.push(refValue);
|
|
364
371
|
}
|
|
365
372
|
}
|
|
@@ -382,8 +389,11 @@ class BinaryPlistParser {
|
|
|
382
389
|
if (typeof key !== 'string') {
|
|
383
390
|
throw new TypeError(`Dictionary key must be a string, got ${typeof key}`);
|
|
384
391
|
}
|
|
385
|
-
//
|
|
386
|
-
if (
|
|
392
|
+
// Handle TempObjects correctly - they should be resolved by the time we get here
|
|
393
|
+
if (this._isTempObject(value)) {
|
|
394
|
+
dict[key] = value.value;
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
387
397
|
dict[key] = value;
|
|
388
398
|
}
|
|
389
399
|
}
|
|
@@ -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,
|
|
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
|
+
}
|
package/build/src/lib/types.d.ts
CHANGED
|
@@ -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":"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"}
|
|
@@ -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, };
|