@mcesystems/apple-kit 1.0.77 → 1.0.79

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 (2) hide show
  1. package/dist/types/index.d.ts +579 -10
  2. package/package.json +6 -5
@@ -1,14 +1,583 @@
1
+ // Generated by dts-bundle-generator v9.5.1
2
+
3
+ import { ChildProcess } from 'node:child_process';
4
+
5
+ export interface DeviceListOutput {
6
+ deviceList: string[];
7
+ }
8
+ export interface IosCommandResult {
9
+ command: string;
10
+ args: string[];
11
+ output: CommandOutput;
12
+ logMessages: LogMessage[];
13
+ exitCode: number;
14
+ raw: {
15
+ stdout: string;
16
+ stderr: string;
17
+ };
18
+ }
19
+ export interface LogMessage {
20
+ level: "info" | "error" | "warn" | "debug";
21
+ msg: string;
22
+ timestamp: string;
23
+ }
24
+ export type CommandOutput = Record<string, unknown>[] | DeviceListOutput[] | [
25
+ LockdownInfo
26
+ ];
27
+ export interface IosListResult {
28
+ udids: string[];
29
+ raw: IosCommandResult;
30
+ }
31
+ export interface IosFsyncTreeResult {
32
+ /** File/directory names listed in the app container path (e.g. ["qr.png", "test.jpg"]) */
33
+ entries: string[];
34
+ raw: IosCommandResult;
35
+ }
36
+ export interface IosProfileManifest {
37
+ Description?: string;
38
+ IsActive?: boolean;
39
+ }
40
+ export interface IosProfileMetadata {
41
+ PayloadDescription?: string;
42
+ PayloadDisplayName?: string;
43
+ PayloadRemovalDisallowed?: boolean;
44
+ PayloadUUID?: string;
45
+ PayloadVersion?: number;
46
+ }
47
+ export interface IosProfileListEntry {
48
+ Identifier?: string;
49
+ Manifest?: IosProfileManifest;
50
+ Metadata?: IosProfileMetadata;
51
+ Status?: string;
52
+ }
53
+ export interface IosProfileListResult {
54
+ profiles: IosProfileListEntry[];
55
+ raw: IosCommandResult;
56
+ }
57
+ export interface BasebandKeyHashInformation {
58
+ AKeyStatus: number;
59
+ SKeyHash: string;
60
+ SKeyStatus: number;
61
+ }
62
+ export interface NonVolatileRAM {
63
+ StartupMute?: string;
64
+ SystemAudioVolumeSaved?: string;
65
+ "auto-boot"?: string;
66
+ "backlight-level"?: string;
67
+ "backlight-nits"?: string;
68
+ "boot-args"?: string;
69
+ bootdelay?: string;
70
+ "fm-account-masked"?: string;
71
+ "fm-activation-locked"?: string;
72
+ "fm-spkeys"?: string;
73
+ "fm-spstatus"?: string;
74
+ obliteration?: string;
75
+ "panicmedic-telemetry"?: string;
76
+ usbcfwflasherResult?: string;
77
+ }
78
+ export interface LockdownInfo {
79
+ ActivationState: string;
80
+ ActivationStateAcknowledged: boolean;
81
+ BasebandActivationTicketVersion: string;
82
+ BasebandCertId: number;
83
+ BasebandChipID: number;
84
+ BasebandKeyHashInformation: BasebandKeyHashInformation;
85
+ BasebandMasterKeyHash: string;
86
+ BasebandRegionSKU: string;
87
+ BasebandSerialNumber: string;
88
+ BasebandStatus: string;
89
+ BasebandVersion: string;
90
+ BluetoothAddress: string;
91
+ BoardId: number;
92
+ BootSessionID: string;
93
+ BrickState: boolean;
94
+ BuildVersion: string;
95
+ CPUArchitecture: string;
96
+ CarrierBundleInfoArray: unknown[];
97
+ CertID: number;
98
+ ChipID: number;
99
+ ChipSerialNo: string;
100
+ DeviceClass: string;
101
+ DeviceColor: string;
102
+ DeviceName: string;
103
+ DieID: number;
104
+ EthernetAddress: string;
105
+ FirmwareVersion: string;
106
+ FusingStatus: number;
107
+ HardwareModel: string;
108
+ HardwarePlatform: string;
109
+ HasSiDP: boolean;
110
+ HostAttached: boolean;
111
+ HumanReadableProductVersionString: string;
112
+ InternationalMobileEquipmentIdentity: string;
113
+ InternationalMobileEquipmentIdentity2: string;
114
+ MLBSerialNumber: string;
115
+ MobileEquipmentIdentifier: string;
116
+ MobileSubscriberCountryCode: string;
117
+ MobileSubscriberNetworkCode: string;
118
+ ModelNumber: string;
119
+ NonVolatileRAM: NonVolatileRAM;
120
+ PairRecordProtectionClass: number;
121
+ PartitionType: string;
122
+ PasswordProtected: boolean;
123
+ PkHash: string;
124
+ ProductName: string;
125
+ ProductType: string;
126
+ ProductVersion: string;
127
+ ProductionSOC: boolean;
128
+ ProtocolVersion: string;
129
+ ProximitySensorCalibration: string;
130
+ RegionInfo: string;
131
+ ReleaseType: string;
132
+ SIMStatus: string;
133
+ SIMTrayStatus: string;
134
+ SerialNumber: string;
135
+ SoftwareBehavior: string;
136
+ SoftwareBundleVersion: string;
137
+ SupportedDeviceFamilies: number[];
138
+ TelephonyCapability: boolean;
139
+ TimeIntervalSince1970: number;
140
+ TimeZone: string;
141
+ TimeZoneOffsetFromUTC: number;
142
+ TrustedHostAttached: boolean;
143
+ UniqueChipID: number;
144
+ UniqueDeviceID: string;
145
+ UntrustedHostBUID: string;
146
+ UseRaptorCerts: boolean;
147
+ Uses24HourClock: boolean;
148
+ WiFiAddress: string;
149
+ WirelessBoardSerialNumber: string;
150
+ kCTPostponementInfoServiceProvisioningState: boolean;
151
+ kCTPostponementStatus: string;
152
+ }
1
153
  /**
2
- * @mcesystems/apple-kit
154
+ * Installed application info
155
+ */
156
+ export interface AppInfo {
157
+ /**
158
+ * Bundle identifier (e.g., "com.example.app")
159
+ */
160
+ bundleId: string;
161
+ /**
162
+ * Display name shown to user
163
+ */
164
+ displayName: string;
165
+ /**
166
+ * App version (CFBundleShortVersionString)
167
+ */
168
+ version: string;
169
+ /**
170
+ * Bundle version (CFBundleVersion)
171
+ */
172
+ bundleVersion: string;
173
+ }
174
+ /**
175
+ * Port forwarding result
176
+ */
177
+ export interface PortForwardResult {
178
+ /** The local port being forwarded */
179
+ localPort: number;
180
+ /** The device port being forwarded to */
181
+ devicePort: number;
182
+ }
183
+ export interface InstallAppMdmOptions {
184
+ appId?: string;
185
+ url?: string;
186
+ waitForInstalled?: boolean;
187
+ }
188
+ /**
189
+ * AppleDeviceKit - iOS device operations wrapper
190
+ *
191
+ * Uses idevice command-line tools for iOS device operations.
192
+ * Each instance is associated with a specific device by UDID.
3
193
  *
4
- * iOS device management toolkit using libimobiledevice command-line tools.
5
- * Provides device detection, app installation/uninstallation, port forwarding,
6
- * activation, and device property access.
194
+ * Port forwarding is managed automatically - each logical port (USB hub position)
195
+ * gets a dynamically allocated local port that is tracked and cleaned up on dispose.
7
196
  *
8
- * NOTE: On Windows, iTunes must be running for device communication to work.
197
+ * IMPORTANT: Call dispose() when the kit is no longer needed to clean up
198
+ * any running proxy processes and release port allocations.
9
199
  */
10
- export { AppleDeviceKit } from "./logic/appleDeviceKit";
11
- export { ActivationFlow } from "./logic/activationFlow";
12
- export { IosClient } from "./logic/iosClient";
13
- export type { IosCli, IosCommandResult, IosListResult, IosFsyncTreeResult } from "./types/ios";
14
- //# sourceMappingURL=index.d.ts.map
200
+ export declare class AppleDeviceKit {
201
+ private readonly logicalPort;
202
+ private deviceId;
203
+ private proxyProcess;
204
+ private localDevicePort;
205
+ private isDisposed;
206
+ private readonly iosClient;
207
+ private readonly deviceActions;
208
+ private readonly installActions;
209
+ private readonly activationFlow;
210
+ private readonly proxyActions;
211
+ private tunnelProcess;
212
+ constructor(udid: string, logicalPort: number, usbmuxdAddress?: string);
213
+ static setResourcesDir(dir: string): void;
214
+ /**
215
+ * Throws if the kit has been disposed
216
+ */
217
+ private ensureNotDisposed;
218
+ info(): Promise<LockdownInfo>;
219
+ listDevices(): Promise<IosListResult>;
220
+ /**
221
+ * Check if device is paired/trusted with this computer
222
+ */
223
+ isPaired(): Promise<boolean>;
224
+ /**
225
+ * Wait for device to be paired
226
+ * Polls the pairing status until successful or timeout
227
+ *
228
+ * @param timeout Timeout in milliseconds (default: 120000)
229
+ * @param pollInterval Poll interval in milliseconds (default: 1000)
230
+ */
231
+ waitForPairing(timeout?: number, pollInterval?: number): Promise<boolean>;
232
+ /**
233
+ * Attempt to pair/trust the device
234
+ * User must accept the trust dialog on the device
235
+ */
236
+ pair(): Promise<boolean>;
237
+ /**
238
+ * Trust/pair the device - initiates pairing and waits for user to accept
239
+ *
240
+ * This is the recommended method for establishing trust with a device.
241
+ * It will:
242
+ * 1. Check if already paired
243
+ * 2. If not, initiate pairing (shows "Trust This Computer?" on device)
244
+ * 3. Wait for user to accept the trust dialog
245
+ *
246
+ * @param timeout Timeout in milliseconds to wait for user acceptance (default: 60000)
247
+ * @param onWaitingForTrust Callback when waiting for user to accept trust dialog
248
+ * @returns true if device is now trusted
249
+ */
250
+ trustDevice(timeout?: number, onWaitingForTrust?: () => void): Promise<boolean>;
251
+ /**
252
+ * Unpair/untrust the device
253
+ */
254
+ unpair(): Promise<boolean>;
255
+ /**
256
+ * Install an IPA file on the device (install agent)
257
+ *
258
+ * @param ipaPath Path to the IPA file
259
+ */
260
+ installApp(ipaPath: string, options: InstallAppMdmOptions): Promise<IosCommandResult>;
261
+ /**
262
+ * Uninstall an app by bundle ID (uninstall agent)
263
+ *
264
+ * @param bundleId Application bundle identifier
265
+ */
266
+ uninstallApp(bundleId: string): Promise<IosCommandResult>;
267
+ /**
268
+ * Check if an app is installed on the device
269
+ *
270
+ * @param bundleId Application bundle identifier
271
+ */
272
+ isAppInstalled(bundleId: string): Promise<boolean>;
273
+ /**
274
+ * List all installed user applications
275
+ */
276
+ listApps(): Promise<AppInfo[]>;
277
+ /**
278
+ * Start port forwarding and wait for it to be ready.
279
+ * The local port is automatically allocated based on the logical port.
280
+ *
281
+ * We need port forwarding to be able to connect to the device from the computer
282
+ * and communicate with it using the local port.
283
+ *
284
+ * Note: Only one port forward can be active at a time per kit instance.
285
+ * Starting a new port forward will kill any existing one.
286
+ *
287
+ * @param devicePort Device port to forward to
288
+ * @param startupTimeout Time to wait for proxy to start (ms)
289
+ * @returns The port forward result with the allocated local port
290
+ */
291
+ startPortForwardAsync(devicePort: number): Promise<PortForwardResult>;
292
+ /**
293
+ * Kill the current port forwarding process if running
294
+ */
295
+ private killProxyProcess;
296
+ /**
297
+ * Close the current port forwarding session and release the port
298
+ */
299
+ closePortForward(): void;
300
+ /**
301
+ * Wipe the device
302
+ */
303
+ wipe(): Promise<void>;
304
+ removeProfile(profileIdentifier: string): Promise<void>;
305
+ listProfiles(): Promise<IosProfileListResult>;
306
+ /**
307
+ * Activate the device using the activation flow.
308
+ *
309
+ * This flow can install WiFi/MDM/trust profiles and skip setup steps.
310
+ *
311
+ * Note: This requires a valid activation record or Apple server access.
312
+ *
313
+ * Precondition: the device must be paired and trusted.
314
+ */
315
+ activate(): Promise<(() => Promise<void>) | undefined>;
316
+ /**
317
+ * Get the device UDID
318
+ */
319
+ getDeviceId(): string;
320
+ /**
321
+ * Get the logical port number (USB hub position)
322
+ */
323
+ getLogicalPort(): number;
324
+ /**
325
+ * Get the currently allocated local port for forwarding
326
+ * Returns undefined if no port forward is active
327
+ */
328
+ getDevicePort(): number | null;
329
+ /**
330
+ * Check if this kit has been disposed
331
+ */
332
+ get disposed(): boolean;
333
+ /**
334
+ * Check if a port forward is currently active
335
+ */
336
+ get hasActivePortForward(): boolean;
337
+ /**
338
+ * Dispose of the kit and clean up all resources.
339
+ * This will kill any running proxy processes and release port allocations.
340
+ *
341
+ * After calling dispose(), the kit instance should not be used.
342
+ */
343
+ dispose(): void;
344
+ /**
345
+ * Symbol.dispose implementation for using with `using` keyword (TypeScript 5.2+)
346
+ */
347
+ [Symbol.dispose](): void;
348
+ }
349
+ export declare class IosClient {
350
+ private iosPath;
351
+ private udid;
352
+ private usbmuxdAddress?;
353
+ constructor(iosPath: string, udid: string, usbmuxdAddress?: string | undefined);
354
+ private safeParseJson;
355
+ private parseFsyncTreeStdout;
356
+ private parseIosOutput;
357
+ spawnIosCommand(args: string[]): import("child_process").ChildProcessByStdio<null, import("stream").Readable, import("stream").Readable>;
358
+ private runIosCommand;
359
+ listDevices(): Promise<IosListResult>;
360
+ wipe(): Promise<IosCommandResult>;
361
+ installProfile(profilePath: string): Promise<IosCommandResult>;
362
+ removeProfile(profileName: string): Promise<IosCommandResult>;
363
+ listProfiles(): Promise<IosProfileListResult>;
364
+ skipSteps(steps?: string[]): Promise<IosCommandResult>;
365
+ listSteps(): Promise<IosCommandResult>;
366
+ activate(): Promise<IosCommandResult>;
367
+ pair(): Promise<IosCommandResult>;
368
+ forward({ fromPort, toPort }: {
369
+ fromPort: number;
370
+ toPort: number;
371
+ }): Promise<import("child_process").ChildProcessByStdio<null, import("stream").Readable, import("stream").Readable>>;
372
+ info(): Promise<IosCommandResult>;
373
+ installApp(ipaPath: string): Promise<IosCommandResult>;
374
+ uninstallApp(bundleId: string): Promise<IosCommandResult>;
375
+ listApps(): Promise<{
376
+ bundleId: string;
377
+ displayName: string;
378
+ version: string;
379
+ }[]>;
380
+ devMode(): Promise<IosCommandResult>;
381
+ tunnelStart(userspace?: boolean): Promise<import("child_process").ChildProcessByStdio<null, import("stream").Readable, import("stream").Readable>>;
382
+ fsyncPull({ app, srcPath, dstPath, }: {
383
+ app: string;
384
+ srcPath: string;
385
+ dstPath: string;
386
+ }): Promise<IosCommandResult>;
387
+ fsyncPush({ app, srcPath, dstPath, }: {
388
+ app: string;
389
+ srcPath: string;
390
+ dstPath: string;
391
+ }): Promise<IosCommandResult>;
392
+ fsyncTree({ app, path, }: {
393
+ app: string;
394
+ path?: string;
395
+ }): Promise<IosFsyncTreeResult>;
396
+ }
397
+ export declare class ActivationFlow {
398
+ private readonly udid;
399
+ private readonly iosClient;
400
+ private mdmClient;
401
+ constructor(udid: string, iosClient: IosClient);
402
+ run(steps?: string[]): Promise<(() => Promise<void>) | undefined>;
403
+ private installWifiProfile;
404
+ private installMdmProfile;
405
+ private removeWifiProfile;
406
+ private retryIosCommand;
407
+ private retryActivateCommand;
408
+ private retry;
409
+ }
410
+ interface DeviceListOutput$1 {
411
+ deviceList: string[];
412
+ }
413
+ interface IosCommandResult$1 {
414
+ command: string;
415
+ args: string[];
416
+ output: CommandOutput$1;
417
+ logMessages: LogMessage$1[];
418
+ exitCode: number;
419
+ raw: {
420
+ stdout: string;
421
+ stderr: string;
422
+ };
423
+ }
424
+ interface LogMessage$1 {
425
+ level: "info" | "error" | "warn" | "debug";
426
+ msg: string;
427
+ timestamp: string;
428
+ }
429
+ type CommandOutput$1 = Record<string, unknown>[] | DeviceListOutput$1[] | [
430
+ LockdownInfo$1
431
+ ];
432
+ interface IosListResult$1 {
433
+ udids: string[];
434
+ raw: IosCommandResult$1;
435
+ }
436
+ interface IosFsyncTreeResult$1 {
437
+ /** File/directory names listed in the app container path (e.g. ["qr.png", "test.jpg"]) */
438
+ entries: string[];
439
+ raw: IosCommandResult$1;
440
+ }
441
+ interface IosProfileManifest$1 {
442
+ Description?: string;
443
+ IsActive?: boolean;
444
+ }
445
+ interface IosProfileMetadata$1 {
446
+ PayloadDescription?: string;
447
+ PayloadDisplayName?: string;
448
+ PayloadRemovalDisallowed?: boolean;
449
+ PayloadUUID?: string;
450
+ PayloadVersion?: number;
451
+ }
452
+ interface IosProfileListEntry$1 {
453
+ Identifier?: string;
454
+ Manifest?: IosProfileManifest$1;
455
+ Metadata?: IosProfileMetadata$1;
456
+ Status?: string;
457
+ }
458
+ interface IosProfileListResult$1 {
459
+ profiles: IosProfileListEntry$1[];
460
+ raw: IosCommandResult$1;
461
+ }
462
+ interface BasebandKeyHashInformation$1 {
463
+ AKeyStatus: number;
464
+ SKeyHash: string;
465
+ SKeyStatus: number;
466
+ }
467
+ interface NonVolatileRAM$1 {
468
+ StartupMute?: string;
469
+ SystemAudioVolumeSaved?: string;
470
+ "auto-boot"?: string;
471
+ "backlight-level"?: string;
472
+ "backlight-nits"?: string;
473
+ "boot-args"?: string;
474
+ bootdelay?: string;
475
+ "fm-account-masked"?: string;
476
+ "fm-activation-locked"?: string;
477
+ "fm-spkeys"?: string;
478
+ "fm-spstatus"?: string;
479
+ obliteration?: string;
480
+ "panicmedic-telemetry"?: string;
481
+ usbcfwflasherResult?: string;
482
+ }
483
+ interface LockdownInfo$1 {
484
+ ActivationState: string;
485
+ ActivationStateAcknowledged: boolean;
486
+ BasebandActivationTicketVersion: string;
487
+ BasebandCertId: number;
488
+ BasebandChipID: number;
489
+ BasebandKeyHashInformation: BasebandKeyHashInformation$1;
490
+ BasebandMasterKeyHash: string;
491
+ BasebandRegionSKU: string;
492
+ BasebandSerialNumber: string;
493
+ BasebandStatus: string;
494
+ BasebandVersion: string;
495
+ BluetoothAddress: string;
496
+ BoardId: number;
497
+ BootSessionID: string;
498
+ BrickState: boolean;
499
+ BuildVersion: string;
500
+ CPUArchitecture: string;
501
+ CarrierBundleInfoArray: unknown[];
502
+ CertID: number;
503
+ ChipID: number;
504
+ ChipSerialNo: string;
505
+ DeviceClass: string;
506
+ DeviceColor: string;
507
+ DeviceName: string;
508
+ DieID: number;
509
+ EthernetAddress: string;
510
+ FirmwareVersion: string;
511
+ FusingStatus: number;
512
+ HardwareModel: string;
513
+ HardwarePlatform: string;
514
+ HasSiDP: boolean;
515
+ HostAttached: boolean;
516
+ HumanReadableProductVersionString: string;
517
+ InternationalMobileEquipmentIdentity: string;
518
+ InternationalMobileEquipmentIdentity2: string;
519
+ MLBSerialNumber: string;
520
+ MobileEquipmentIdentifier: string;
521
+ MobileSubscriberCountryCode: string;
522
+ MobileSubscriberNetworkCode: string;
523
+ ModelNumber: string;
524
+ NonVolatileRAM: NonVolatileRAM$1;
525
+ PairRecordProtectionClass: number;
526
+ PartitionType: string;
527
+ PasswordProtected: boolean;
528
+ PkHash: string;
529
+ ProductName: string;
530
+ ProductType: string;
531
+ ProductVersion: string;
532
+ ProductionSOC: boolean;
533
+ ProtocolVersion: string;
534
+ ProximitySensorCalibration: string;
535
+ RegionInfo: string;
536
+ ReleaseType: string;
537
+ SIMStatus: string;
538
+ SIMTrayStatus: string;
539
+ SerialNumber: string;
540
+ SoftwareBehavior: string;
541
+ SoftwareBundleVersion: string;
542
+ SupportedDeviceFamilies: number[];
543
+ TelephonyCapability: boolean;
544
+ TimeIntervalSince1970: number;
545
+ TimeZone: string;
546
+ TimeZoneOffsetFromUTC: number;
547
+ TrustedHostAttached: boolean;
548
+ UniqueChipID: number;
549
+ UniqueDeviceID: string;
550
+ UntrustedHostBUID: string;
551
+ UseRaptorCerts: boolean;
552
+ Uses24HourClock: boolean;
553
+ WiFiAddress: string;
554
+ WirelessBoardSerialNumber: string;
555
+ kCTPostponementInfoServiceProvisioningState: boolean;
556
+ kCTPostponementStatus: string;
557
+ }
558
+ export interface IosCli {
559
+ listDevices(): Promise<IosListResult$1>;
560
+ wipe(deviceId: string): Promise<IosCommandResult$1>;
561
+ installProfile(deviceId: string, profilePath: string): Promise<IosCommandResult$1>;
562
+ removeProfile(deviceId: string, profileName: string): Promise<IosCommandResult$1>;
563
+ skipSteps(deviceId: string, steps?: string[]): Promise<IosCommandResult$1>;
564
+ printSteps(): Promise<IosCommandResult$1>;
565
+ activate(deviceId: string): Promise<IosCommandResult$1>;
566
+ pair(deviceId: string): Promise<IosCommandResult$1>;
567
+ forward(deviceId: string, fromPort: number, toPort: number): Promise<IosCommandResult$1>;
568
+ info(deviceId: string): Promise<IosCommandResult$1>;
569
+ listProfiles(deviceId: string): Promise<IosProfileListResult$1>;
570
+ installApp(deviceId: string, ipaPath: string): Promise<IosCommandResult$1>;
571
+ tunnelStart(deviceId: string, userspace?: boolean): Promise<ChildProcess>;
572
+ fsyncPull(deviceId: string, app: string, srcPath: string, dstPath: string): Promise<IosCommandResult$1>;
573
+ fsyncPush(deviceId: string, app: string, srcPath: string, dstPath: string): Promise<IosCommandResult$1>;
574
+ fsyncTree(deviceId: string, app: string, path?: string): Promise<IosFsyncTreeResult$1>;
575
+ }
576
+
577
+ export {
578
+ IosCommandResult$1 as IosCommandResult,
579
+ IosFsyncTreeResult$1 as IosFsyncTreeResult,
580
+ IosListResult$1 as IosListResult,
581
+ };
582
+
583
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcesystems/apple-kit",
3
- "version": "1.0.77",
3
+ "version": "1.0.79",
4
4
  "description": "iOS device management toolkit using libimobiledevice command-line tools",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -37,9 +37,9 @@
37
37
  "graphql-request": "^5.2.0",
38
38
  "tsx": "^4.21.0",
39
39
  "plist": "^3.1.0",
40
- "@mcesystems/mdm-client-g4": "1.0.77",
41
- "@mcesystems/tool-debug-g4": "1.0.77",
42
- "@mcesystems/usbmuxd-instance-manager": "1.0.77"
40
+ "@mcesystems/mdm-client-g4": "1.0.79",
41
+ "@mcesystems/tool-debug-g4": "1.0.79",
42
+ "@mcesystems/usbmuxd-instance-manager": "1.0.79"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "^22.10.2",
@@ -47,6 +47,7 @@
47
47
  "dotenv": "^17.2.3",
48
48
  "esbuild": "^0.27.0",
49
49
  "esbuild-plugin-copy": "^2.1.1",
50
+ "esbuild-plugin-d.ts": "^1.3.1",
50
51
  "go-ios": "^1.0.188",
51
52
  "pnpm": "10.24.0",
52
53
  "rimraf": "^6.0.1",
@@ -67,7 +68,7 @@
67
68
  "export-apple-resources": "./scripts/export-resources.ts"
68
69
  },
69
70
  "scripts": {
70
- "build": "tsx esbuild.config.mts && tsc --emitDeclarationOnly",
71
+ "build": "tsx esbuild.config.mts",
71
72
  "build:all": "pnpm --filter @mcesystems/apple-kit... build",
72
73
  "clean": "rimraf dist",
73
74
  "check:types": "tsc --noEmit",