appium-ios-remotexpc 0.18.0 → 0.18.1

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 (35) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/src/lib/apple-tv/encryption/ed25519.d.ts.map +1 -1
  3. package/build/src/lib/apple-tv/encryption/ed25519.js +1 -1
  4. package/build/src/lib/tunnel/packet-stream-client.js +1 -1
  5. package/build/src/services/ios/dvt/instruments/application-listing.d.ts +2 -9
  6. package/build/src/services/ios/dvt/instruments/application-listing.d.ts.map +1 -1
  7. package/build/src/services/ios/dvt/instruments/application-listing.js +2 -15
  8. package/build/src/services/ios/dvt/instruments/base-instrument.d.ts +19 -0
  9. package/build/src/services/ios/dvt/instruments/base-instrument.d.ts.map +1 -0
  10. package/build/src/services/ios/dvt/instruments/base-instrument.js +24 -0
  11. package/build/src/services/ios/dvt/instruments/condition-inducer.d.ts +2 -9
  12. package/build/src/services/ios/dvt/instruments/condition-inducer.d.ts.map +1 -1
  13. package/build/src/services/ios/dvt/instruments/condition-inducer.js +2 -15
  14. package/build/src/services/ios/dvt/instruments/device-info.d.ts +2 -9
  15. package/build/src/services/ios/dvt/instruments/device-info.d.ts.map +1 -1
  16. package/build/src/services/ios/dvt/instruments/device-info.js +2 -14
  17. package/build/src/services/ios/dvt/instruments/graphics.d.ts +2 -6
  18. package/build/src/services/ios/dvt/instruments/graphics.d.ts.map +1 -1
  19. package/build/src/services/ios/dvt/instruments/graphics.js +2 -11
  20. package/build/src/services/ios/dvt/instruments/location-simulation.d.ts +2 -9
  21. package/build/src/services/ios/dvt/instruments/location-simulation.d.ts.map +1 -1
  22. package/build/src/services/ios/dvt/instruments/location-simulation.js +2 -15
  23. package/build/src/services/ios/dvt/instruments/screenshot.d.ts +2 -6
  24. package/build/src/services/ios/dvt/instruments/screenshot.d.ts.map +1 -1
  25. package/build/src/services/ios/dvt/instruments/screenshot.js +2 -11
  26. package/package.json +2 -2
  27. package/src/lib/apple-tv/encryption/ed25519.ts +2 -6
  28. package/src/lib/tunnel/packet-stream-client.ts +1 -1
  29. package/src/services/ios/dvt/instruments/application-listing.ts +2 -17
  30. package/src/services/ios/dvt/instruments/base-instrument.ts +27 -0
  31. package/src/services/ios/dvt/instruments/condition-inducer.ts +2 -17
  32. package/src/services/ios/dvt/instruments/device-info.ts +2 -15
  33. package/src/services/ios/dvt/instruments/graphics.ts +2 -13
  34. package/src/services/ios/dvt/instruments/location-simulation.ts +2 -18
  35. package/src/services/ios/dvt/instruments/screenshot.ts +2 -13
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [0.18.1](https://github.com/appium/appium-ios-remotexpc/compare/v0.18.0...v0.18.1) (2025-12-16)
2
+
3
+ ### Miscellaneous Chores
4
+
5
+ * **deps:** bump @types/node from 24.10.4 to 25.0.2 ([#114](https://github.com/appium/appium-ios-remotexpc/issues/114)) ([0435e18](https://github.com/appium/appium-ios-remotexpc/commit/0435e183cfc80aff4ed4459f313b1d481295f0d2))
6
+
1
7
  ## [0.18.0](https://github.com/appium/appium-ios-remotexpc/compare/v0.17.0...v0.18.0) (2025-12-05)
2
8
 
3
9
  ### Features
@@ -1 +1 @@
1
- {"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../../../../src/lib/apple-tv/encryption/ed25519.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW/C;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,WAAW,CA4BpD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,MAAM,CA0BR"}
1
+ {"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../../../../src/lib/apple-tv/encryption/ed25519.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW/C;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,WAAW,CA4BpD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,MAAM,CA0BR"}
@@ -1,4 +1,4 @@
1
- import { generateKeyPairSync, sign, } from 'node:crypto';
1
+ import { generateKeyPairSync, sign } from 'node:crypto';
2
2
  import { getLogger } from '../../logger.js';
3
3
  import { CryptographyError } from '../errors.js';
4
4
  const log = getLogger('Ed25519');
@@ -34,7 +34,7 @@ export class PacketStreamClient extends EventEmitter {
34
34
  resolve();
35
35
  });
36
36
  this.socket.on('data', (data) => {
37
- this.handleData(data);
37
+ this.handleData(Buffer.isBuffer(data) ? data : Buffer.from(data));
38
38
  });
39
39
  this.socket.once('close', () => {
40
40
  log.info('Disconnected from packet stream server');
@@ -1,4 +1,4 @@
1
- import type { DVTSecureSocketProxyService } from '../index.js';
1
+ import { BaseInstrument } from './base-instrument.js';
2
2
  export interface iOSApplication {
3
3
  /** Display name of the application/plugin */
4
4
  DisplayName: string;
@@ -28,15 +28,8 @@ export interface iOSApplication {
28
28
  /**
29
29
  * Application Listing service for retrieving installed applications
30
30
  */
31
- export declare class ApplicationListing {
32
- private readonly dvt;
31
+ export declare class ApplicationListing extends BaseInstrument {
33
32
  static readonly IDENTIFIER = "com.apple.instruments.server.services.device.applictionListing";
34
- private channel;
35
- constructor(dvt: DVTSecureSocketProxyService);
36
- /**
37
- * Initialize the application listing channel
38
- */
39
- initialize(): Promise<void>;
40
33
  /**
41
34
  * Get the list of installed applications from the device
42
35
  * @returns {Promise<iOSApplication[]>}
@@ -1 +1 @@
1
- {"version":3,"file":"application-listing.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/application-listing.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAI/D,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IAEpB,mDAAmD;IACnD,kBAAkB,EAAE,MAAM,CAAC;IAE3B,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IAEnB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAEhB,uCAAuC;IACvC,cAAc,EAAE,MAAM,CAAC;IAEvB,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IAEnB,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IAEb,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IAEnB,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1C,6DAA6D;IAC7D,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAMjB,OAAO,CAAC,QAAQ,CAAC,GAAG;IALhC,MAAM,CAAC,QAAQ,CAAC,UAAU,oEACyC;IAEnE,OAAO,CAAC,OAAO,CAAwB;gBAEV,GAAG,EAAE,2BAA2B;IAE7D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;CA0BxC"}
1
+ {"version":3,"file":"application-listing.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/application-listing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IAEpB,mDAAmD;IACnD,kBAAkB,EAAE,MAAM,CAAC;IAE3B,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IAEnB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAEhB,uCAAuC;IACvC,cAAc,EAAE,MAAM,CAAC;IAEvB,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IAEnB,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IAEb,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IAEnB,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1C,6DAA6D;IAC7D,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,MAAM,CAAC,QAAQ,CAAC,UAAU,oEACyC;IAEnE;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;CA0BxC"}
@@ -1,25 +1,12 @@
1
1
  import { getLogger } from '../../../../lib/logger.js';
2
2
  import { MessageAux } from '../dtx-message.js';
3
+ import { BaseInstrument } from './base-instrument.js';
3
4
  const log = getLogger('ApplicationListing');
4
5
  /**
5
6
  * Application Listing service for retrieving installed applications
6
7
  */
7
- export class ApplicationListing {
8
- dvt;
8
+ export class ApplicationListing extends BaseInstrument {
9
9
  static IDENTIFIER = 'com.apple.instruments.server.services.device.applictionListing';
10
- channel = null;
11
- constructor(dvt) {
12
- this.dvt = dvt;
13
- }
14
- /**
15
- * Initialize the application listing channel
16
- */
17
- async initialize() {
18
- if (this.channel) {
19
- return;
20
- }
21
- this.channel = await this.dvt.makeChannel(ApplicationListing.IDENTIFIER);
22
- }
23
10
  /**
24
11
  * Get the list of installed applications from the device
25
12
  * @returns {Promise<iOSApplication[]>}
@@ -0,0 +1,19 @@
1
+ import type { Channel } from '../channel.js';
2
+ import type { DVTSecureSocketProxyService } from '../index.js';
3
+ /**
4
+ * Base class for DVT instrument services.
5
+ *
6
+ * Subclasses must define a static `IDENTIFIER` property.
7
+ */
8
+ export declare abstract class BaseInstrument {
9
+ protected readonly dvt: DVTSecureSocketProxyService;
10
+ static readonly IDENTIFIER: string;
11
+ protected channel: Channel | null;
12
+ constructor(dvt: DVTSecureSocketProxyService);
13
+ protected get identifier(): string;
14
+ /**
15
+ * Initialize the instrument channel.
16
+ */
17
+ initialize(): Promise<void>;
18
+ }
19
+ //# sourceMappingURL=base-instrument.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-instrument.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/base-instrument.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE/D;;;;GAIG;AACH,8BAAsB,cAAc;IAItB,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,2BAA2B;IAH/D,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAEnC,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAQ;gBACV,GAAG,EAAE,2BAA2B;IAE/D,SAAS,KAAK,UAAU,IAAI,MAAM,CAEjC;IAED;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAKlC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Base class for DVT instrument services.
3
+ *
4
+ * Subclasses must define a static `IDENTIFIER` property.
5
+ */
6
+ export class BaseInstrument {
7
+ dvt;
8
+ static IDENTIFIER;
9
+ channel = null;
10
+ constructor(dvt) {
11
+ this.dvt = dvt;
12
+ }
13
+ get identifier() {
14
+ return this.constructor.IDENTIFIER;
15
+ }
16
+ /**
17
+ * Initialize the instrument channel.
18
+ */
19
+ async initialize() {
20
+ if (!this.channel) {
21
+ this.channel = await this.dvt.makeChannel(this.identifier);
22
+ }
23
+ }
24
+ }
@@ -1,18 +1,11 @@
1
1
  import type { ConditionGroup } from '../../../../lib/types.js';
2
- import type { DVTSecureSocketProxyService } from '../index.js';
2
+ import { BaseInstrument } from './base-instrument.js';
3
3
  /**
4
4
  * Condition Inducer service for simulating various device conditions
5
5
  * such as network conditions, thermal states, etc.
6
6
  */
7
- export declare class ConditionInducer {
8
- private readonly dvt;
7
+ export declare class ConditionInducer extends BaseInstrument {
9
8
  static readonly IDENTIFIER = "com.apple.instruments.server.services.ConditionInducer";
10
- private channel;
11
- constructor(dvt: DVTSecureSocketProxyService);
12
- /**
13
- * Initialize the condition inducer channel
14
- */
15
- initialize(): Promise<void>;
16
9
  /**
17
10
  * List all available condition inducers and their profiles
18
11
  * @returns Array of condition groups with their available profiles
@@ -1 +1 @@
1
- {"version":3,"file":"condition-inducer.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/condition-inducer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAI/D;;;GAGG;AACH,qBAAa,gBAAgB;IAMf,OAAO,CAAC,QAAQ,CAAC,GAAG;IALhC,MAAM,CAAC,QAAQ,CAAC,UAAU,4DACiC;IAE3D,OAAO,CAAC,OAAO,CAAwB;gBAEV,GAAG,EAAE,2BAA2B;IAE7D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAwBvC;;;;;OAKG;IACG,GAAG,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CnD;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB9B,OAAO,CAAC,SAAS;CAKlB"}
1
+ {"version":3,"file":"condition-inducer.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/condition-inducer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAClD,MAAM,CAAC,QAAQ,CAAC,UAAU,4DACiC;IAE3D;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAwBvC;;;;;OAKG;IACG,GAAG,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CnD;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB9B,OAAO,CAAC,SAAS;CAKlB"}
@@ -1,26 +1,13 @@
1
1
  import { getLogger } from '../../../../lib/logger.js';
2
2
  import { MessageAux } from '../dtx-message.js';
3
+ import { BaseInstrument } from './base-instrument.js';
3
4
  const log = getLogger('ConditionInducer');
4
5
  /**
5
6
  * Condition Inducer service for simulating various device conditions
6
7
  * such as network conditions, thermal states, etc.
7
8
  */
8
- export class ConditionInducer {
9
- dvt;
9
+ export class ConditionInducer extends BaseInstrument {
10
10
  static IDENTIFIER = 'com.apple.instruments.server.services.ConditionInducer';
11
- channel = null;
12
- constructor(dvt) {
13
- this.dvt = dvt;
14
- }
15
- /**
16
- * Initialize the condition inducer channel
17
- */
18
- async initialize() {
19
- if (this.channel) {
20
- return;
21
- }
22
- this.channel = await this.dvt.makeChannel(ConditionInducer.IDENTIFIER);
23
- }
24
11
  /**
25
12
  * List all available condition inducers and their profiles
26
13
  * @returns Array of condition groups with their available profiles
@@ -1,5 +1,5 @@
1
1
  import type { ProcessInfo } from '../../../../lib/types.js';
2
- import type { DVTSecureSocketProxyService } from '../index.js';
2
+ import { BaseInstrument } from './base-instrument.js';
3
3
  /**
4
4
  * DeviceInfo service provides access to device information, file system,
5
5
  * and process management through the DTX protocol.
@@ -18,15 +18,8 @@ import type { DVTSecureSocketProxyService } from '../index.js';
18
18
  * - nameForUid(uid): Get username for UID
19
19
  * - nameForGid(gid): Get group name for GID
20
20
  */
21
- export declare class DeviceInfo {
22
- private readonly dvt;
21
+ export declare class DeviceInfo extends BaseInstrument {
23
22
  static readonly IDENTIFIER = "com.apple.instruments.server.services.deviceinfo";
24
- private channel;
25
- constructor(dvt: DVTSecureSocketProxyService);
26
- /**
27
- * Initialize the device info channel
28
- */
29
- initialize(): Promise<void>;
30
23
  /**
31
24
  * List directory contents at the specified path.
32
25
  * @param path - The directory path to list
@@ -1 +1 @@
1
- {"version":3,"file":"device-info.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/device-info.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAI/D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,UAAU;IAKT,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJhC,MAAM,CAAC,QAAQ,CAAC,UAAU,sDAC2B;IAErD,OAAO,CAAC,OAAO,CAAwB;gBACV,GAAG,EAAE,2BAA2B;IAE7D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;;;OAKG;IACG,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAczC;;;;OAIG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlD;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAaxC;;;;OAIG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjD;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC;IAIzC;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC;IAIxC;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC;IAIlC;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAIvC;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAoBzC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAoBnD;;;;OAIG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9C;;;;OAIG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9C;;;;;;OAMG;YACW,kBAAkB;CAajC"}
1
+ {"version":3,"file":"device-info.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/device-info.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,UAAW,SAAQ,cAAc;IAC5C,MAAM,CAAC,QAAQ,CAAC,UAAU,sDAC2B;IAErD;;;;;OAKG;IACG,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAczC;;;;OAIG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlD;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAaxC;;;;OAIG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjD;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC;IAIzC;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC;IAIxC;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC;IAIlC;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAIvC;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAoBzC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAoBnD;;;;OAIG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9C;;;;OAIG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9C;;;;;;OAMG;YACW,kBAAkB;CAajC"}
@@ -1,6 +1,7 @@
1
1
  import { getLogger } from '../../../../lib/logger.js';
2
2
  import { parseBinaryPlist } from '../../../../lib/plist/index.js';
3
3
  import { MessageAux } from '../dtx-message.js';
4
+ import { BaseInstrument } from './base-instrument.js';
4
5
  const log = getLogger('DeviceInfo');
5
6
  /**
6
7
  * DeviceInfo service provides access to device information, file system,
@@ -20,21 +21,8 @@ const log = getLogger('DeviceInfo');
20
21
  * - nameForUid(uid): Get username for UID
21
22
  * - nameForGid(gid): Get group name for GID
22
23
  */
23
- export class DeviceInfo {
24
- dvt;
24
+ export class DeviceInfo extends BaseInstrument {
25
25
  static IDENTIFIER = 'com.apple.instruments.server.services.deviceinfo';
26
- channel = null;
27
- constructor(dvt) {
28
- this.dvt = dvt;
29
- }
30
- /**
31
- * Initialize the device info channel
32
- */
33
- async initialize() {
34
- if (!this.channel) {
35
- this.channel = await this.dvt.makeChannel(DeviceInfo.IDENTIFIER);
36
- }
37
- }
38
26
  /**
39
27
  * List directory contents at the specified path.
40
28
  * @param path - The directory path to list
@@ -1,10 +1,6 @@
1
- import type { DVTSecureSocketProxyService } from '../index.js';
2
- export declare class Graphics {
3
- private readonly dvt;
1
+ import { BaseInstrument } from './base-instrument.js';
2
+ export declare class Graphics extends BaseInstrument {
4
3
  static readonly IDENTIFIER = "com.apple.instruments.server.services.graphics.opengl";
5
- private channel;
6
- constructor(dvt: DVTSecureSocketProxyService);
7
- initialize(): Promise<void>;
8
4
  start(): Promise<void>;
9
5
  stop(): Promise<void>;
10
6
  messages(): AsyncGenerator<unknown, void, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"graphics.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/graphics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAI/D,qBAAa,QAAQ;IAMP,OAAO,CAAC,QAAQ,CAAC,GAAG;IALhC,MAAM,CAAC,QAAQ,CAAC,UAAU,2DACgC;IAE1D,OAAO,CAAC,OAAO,CAAwB;gBAEV,GAAG,EAAE,2BAA2B;IAEvD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpB,QAAQ,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC;CAa1D"}
1
+ {"version":3,"file":"graphics.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/graphics.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,qBAAa,QAAS,SAAQ,cAAc;IAC1C,MAAM,CAAC,QAAQ,CAAC,UAAU,2DACgC;IAEpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpB,QAAQ,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC;CAa1D"}
@@ -1,18 +1,9 @@
1
1
  import { getLogger } from '../../../../lib/logger.js';
2
2
  import { MessageAux } from '../dtx-message.js';
3
+ import { BaseInstrument } from './base-instrument.js';
3
4
  const log = getLogger('Graphics');
4
- export class Graphics {
5
- dvt;
5
+ export class Graphics extends BaseInstrument {
6
6
  static IDENTIFIER = 'com.apple.instruments.server.services.graphics.opengl';
7
- channel = null;
8
- constructor(dvt) {
9
- this.dvt = dvt;
10
- }
11
- async initialize() {
12
- if (!this.channel) {
13
- this.channel = await this.dvt.makeChannel(Graphics.IDENTIFIER);
14
- }
15
- }
16
7
  async start() {
17
8
  await this.initialize();
18
9
  const args = new MessageAux().appendObj(0.0);
@@ -1,4 +1,4 @@
1
- import type { DVTSecureSocketProxyService } from '../index.js';
1
+ import { BaseInstrument } from './base-instrument.js';
2
2
  /**
3
3
  * Geographic coordinates
4
4
  */
@@ -9,15 +9,8 @@ export interface LocationCoordinates {
9
9
  /**
10
10
  * Location simulation service for simulating device GPS location
11
11
  */
12
- export declare class LocationSimulation {
13
- private readonly dvt;
12
+ export declare class LocationSimulation extends BaseInstrument {
14
13
  static readonly IDENTIFIER = "com.apple.instruments.server.services.LocationSimulation";
15
- private channel;
16
- constructor(dvt: DVTSecureSocketProxyService);
17
- /**
18
- * Initialize the location simulation channel
19
- */
20
- initialize(): Promise<void>;
21
14
  /**
22
15
  * Set the simulated GPS location
23
16
  * @param coordinates The location coordinates
@@ -1 +1 @@
1
- {"version":3,"file":"location-simulation.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/location-simulation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAI/D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAMjB,OAAO,CAAC,QAAQ,CAAC,GAAG;IALhC,MAAM,CAAC,QAAQ,CAAC,UAAU,8DACmC;IAE7D,OAAO,CAAC,OAAO,CAAwB;gBAEV,GAAG,EAAE,2BAA2B;IAE7D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;;OAGG;IACG,GAAG,CAAC,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1D;;;;OAIG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
1
+ {"version":3,"file":"location-simulation.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/location-simulation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,MAAM,CAAC,QAAQ,CAAC,UAAU,8DACmC;IAE7D;;;OAGG;IACG,GAAG,CAAC,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1D;;;;OAIG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
@@ -1,25 +1,12 @@
1
1
  import { getLogger } from '../../../../lib/logger.js';
2
2
  import { MessageAux } from '../dtx-message.js';
3
+ import { BaseInstrument } from './base-instrument.js';
3
4
  const log = getLogger('LocationSimulation');
4
5
  /**
5
6
  * Location simulation service for simulating device GPS location
6
7
  */
7
- export class LocationSimulation {
8
- dvt;
8
+ export class LocationSimulation extends BaseInstrument {
9
9
  static IDENTIFIER = 'com.apple.instruments.server.services.LocationSimulation';
10
- channel = null;
11
- constructor(dvt) {
12
- this.dvt = dvt;
13
- }
14
- /**
15
- * Initialize the location simulation channel
16
- */
17
- async initialize() {
18
- if (this.channel) {
19
- return;
20
- }
21
- this.channel = await this.dvt.makeChannel(LocationSimulation.IDENTIFIER);
22
- }
23
10
  /**
24
11
  * Set the simulated GPS location
25
12
  * @param coordinates The location coordinates
@@ -1,13 +1,9 @@
1
- import type { DVTSecureSocketProxyService } from '../index.js';
1
+ import { BaseInstrument } from './base-instrument.js';
2
2
  /**
3
3
  * Screenshot service for capturing device screenshots
4
4
  */
5
- export declare class Screenshot {
6
- private readonly dvt;
5
+ export declare class Screenshot extends BaseInstrument {
7
6
  static readonly IDENTIFIER = "com.apple.instruments.server.services.screenshot";
8
- private channel;
9
- constructor(dvt: DVTSecureSocketProxyService);
10
- initialize(): Promise<void>;
11
7
  /**
12
8
  * Capture a screenshot from the device
13
9
  * @returns The screenshot data as a Buffer
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/screenshot.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAI/D;;GAEG;AACH,qBAAa,UAAU;IAMT,OAAO,CAAC,QAAQ,CAAC,GAAG;IALhC,MAAM,CAAC,QAAQ,CAAC,UAAU,sDAC2B;IAErD,OAAO,CAAC,OAAO,CAAwB;gBAEV,GAAG,EAAE,2BAA2B;IAEvD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CAmBvC"}
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../../../../src/services/ios/dvt/instruments/screenshot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD;;GAEG;AACH,qBAAa,UAAW,SAAQ,cAAc;IAC5C,MAAM,CAAC,QAAQ,CAAC,UAAU,sDAC2B;IAErD;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CAmBvC"}
@@ -1,20 +1,11 @@
1
1
  import { getLogger } from '../../../../lib/logger.js';
2
+ import { BaseInstrument } from './base-instrument.js';
2
3
  const log = getLogger('Screenshot');
3
4
  /**
4
5
  * Screenshot service for capturing device screenshots
5
6
  */
6
- export class Screenshot {
7
- dvt;
7
+ export class Screenshot extends BaseInstrument {
8
8
  static IDENTIFIER = 'com.apple.instruments.server.services.screenshot';
9
- channel = null;
10
- constructor(dvt) {
11
- this.dvt = dvt;
12
- }
13
- async initialize() {
14
- if (!this.channel) {
15
- this.channel = await this.dvt.makeChannel(Screenshot.IDENTIFIER);
16
- }
17
- }
18
9
  /**
19
10
  * Capture a screenshot from the device
20
11
  * @returns The screenshot data as a Buffer
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-ios-remotexpc",
3
- "version": "0.18.0",
3
+ "version": "0.18.1",
4
4
  "main": "build/src/index.js",
5
5
  "types": "build/src/index.d.ts",
6
6
  "type": "module",
@@ -84,7 +84,7 @@
84
84
  "dependencies": {
85
85
  "@appium/strongbox": "^1.0.0-rc.1",
86
86
  "@appium/support": "^7.0.0-rc.1",
87
- "@types/node": "^24.0.10",
87
+ "@types/node": "^25.0.2",
88
88
  "@xmldom/xmldom": "^0.9.8",
89
89
  "appium-ios-tuntap": "^0.x",
90
90
  "axios": "^1.12.0",
@@ -1,8 +1,4 @@
1
- import {
2
- type KeyPairKeyObjectResult,
3
- generateKeyPairSync,
4
- sign,
5
- } from 'node:crypto';
1
+ import { generateKeyPairSync, sign } from 'node:crypto';
6
2
 
7
3
  import { getLogger } from '../../logger.js';
8
4
  import { CryptographyError } from '../errors.js';
@@ -24,7 +20,7 @@ const ED25519_PKCS8_PREFIX = Buffer.from(
24
20
  */
25
21
  export function generateEd25519KeyPair(): PairingKeys {
26
22
  try {
27
- const keyPair: KeyPairKeyObjectResult = generateKeyPairSync('ed25519');
23
+ const keyPair = generateKeyPairSync('ed25519');
28
24
 
29
25
  const publicKeyDer = keyPair.publicKey.export({
30
26
  type: 'spki',
@@ -47,7 +47,7 @@ export class PacketStreamClient extends EventEmitter {
47
47
  );
48
48
 
49
49
  this.socket.on('data', (data) => {
50
- this.handleData(data);
50
+ this.handleData(Buffer.isBuffer(data) ? data : Buffer.from(data));
51
51
  });
52
52
 
53
53
  this.socket.once('close', () => {
@@ -1,7 +1,6 @@
1
1
  import { getLogger } from '../../../../lib/logger.js';
2
- import type { Channel } from '../channel.js';
3
2
  import { MessageAux } from '../dtx-message.js';
4
- import type { DVTSecureSocketProxyService } from '../index.js';
3
+ import { BaseInstrument } from './base-instrument.js';
5
4
 
6
5
  const log = getLogger('ApplicationListing');
7
6
 
@@ -46,24 +45,10 @@ export interface iOSApplication {
46
45
  /**
47
46
  * Application Listing service for retrieving installed applications
48
47
  */
49
- export class ApplicationListing {
48
+ export class ApplicationListing extends BaseInstrument {
50
49
  static readonly IDENTIFIER =
51
50
  'com.apple.instruments.server.services.device.applictionListing';
52
51
 
53
- private channel: Channel | null = null;
54
-
55
- constructor(private readonly dvt: DVTSecureSocketProxyService) {}
56
-
57
- /**
58
- * Initialize the application listing channel
59
- */
60
- async initialize(): Promise<void> {
61
- if (this.channel) {
62
- return;
63
- }
64
- this.channel = await this.dvt.makeChannel(ApplicationListing.IDENTIFIER);
65
- }
66
-
67
52
  /**
68
53
  * Get the list of installed applications from the device
69
54
  * @returns {Promise<iOSApplication[]>}
@@ -0,0 +1,27 @@
1
+ import type { Channel } from '../channel.js';
2
+ import type { DVTSecureSocketProxyService } from '../index.js';
3
+
4
+ /**
5
+ * Base class for DVT instrument services.
6
+ *
7
+ * Subclasses must define a static `IDENTIFIER` property.
8
+ */
9
+ export abstract class BaseInstrument {
10
+ static readonly IDENTIFIER: string;
11
+
12
+ protected channel: Channel | null = null;
13
+ constructor(protected readonly dvt: DVTSecureSocketProxyService) {}
14
+
15
+ protected get identifier(): string {
16
+ return (this.constructor as typeof BaseInstrument).IDENTIFIER;
17
+ }
18
+
19
+ /**
20
+ * Initialize the instrument channel.
21
+ */
22
+ async initialize(): Promise<void> {
23
+ if (!this.channel) {
24
+ this.channel = await this.dvt.makeChannel(this.identifier);
25
+ }
26
+ }
27
+ }
@@ -1,8 +1,7 @@
1
1
  import { getLogger } from '../../../../lib/logger.js';
2
2
  import type { ConditionGroup } from '../../../../lib/types.js';
3
- import type { Channel } from '../channel.js';
4
3
  import { MessageAux } from '../dtx-message.js';
5
- import type { DVTSecureSocketProxyService } from '../index.js';
4
+ import { BaseInstrument } from './base-instrument.js';
6
5
 
7
6
  const log = getLogger('ConditionInducer');
8
7
 
@@ -10,24 +9,10 @@ const log = getLogger('ConditionInducer');
10
9
  * Condition Inducer service for simulating various device conditions
11
10
  * such as network conditions, thermal states, etc.
12
11
  */
13
- export class ConditionInducer {
12
+ export class ConditionInducer extends BaseInstrument {
14
13
  static readonly IDENTIFIER =
15
14
  'com.apple.instruments.server.services.ConditionInducer';
16
15
 
17
- private channel: Channel | null = null;
18
-
19
- constructor(private readonly dvt: DVTSecureSocketProxyService) {}
20
-
21
- /**
22
- * Initialize the condition inducer channel
23
- */
24
- async initialize(): Promise<void> {
25
- if (this.channel) {
26
- return;
27
- }
28
- this.channel = await this.dvt.makeChannel(ConditionInducer.IDENTIFIER);
29
- }
30
-
31
16
  /**
32
17
  * List all available condition inducers and their profiles
33
18
  * @returns Array of condition groups with their available profiles
@@ -1,9 +1,8 @@
1
1
  import { getLogger } from '../../../../lib/logger.js';
2
2
  import { parseBinaryPlist } from '../../../../lib/plist/index.js';
3
3
  import type { ProcessInfo } from '../../../../lib/types.js';
4
- import type { Channel } from '../channel.js';
5
4
  import { MessageAux } from '../dtx-message.js';
6
- import type { DVTSecureSocketProxyService } from '../index.js';
5
+ import { BaseInstrument } from './base-instrument.js';
7
6
 
8
7
  const log = getLogger('DeviceInfo');
9
8
 
@@ -25,22 +24,10 @@ const log = getLogger('DeviceInfo');
25
24
  * - nameForUid(uid): Get username for UID
26
25
  * - nameForGid(gid): Get group name for GID
27
26
  */
28
- export class DeviceInfo {
27
+ export class DeviceInfo extends BaseInstrument {
29
28
  static readonly IDENTIFIER =
30
29
  'com.apple.instruments.server.services.deviceinfo';
31
30
 
32
- private channel: Channel | null = null;
33
- constructor(private readonly dvt: DVTSecureSocketProxyService) {}
34
-
35
- /**
36
- * Initialize the device info channel
37
- */
38
- async initialize(): Promise<void> {
39
- if (!this.channel) {
40
- this.channel = await this.dvt.makeChannel(DeviceInfo.IDENTIFIER);
41
- }
42
- }
43
-
44
31
  /**
45
32
  * List directory contents at the specified path.
46
33
  * @param path - The directory path to list
@@ -1,24 +1,13 @@
1
1
  import { getLogger } from '../../../../lib/logger.js';
2
- import type { Channel } from '../channel.js';
3
2
  import { MessageAux } from '../dtx-message.js';
4
- import type { DVTSecureSocketProxyService } from '../index.js';
3
+ import { BaseInstrument } from './base-instrument.js';
5
4
 
6
5
  const log = getLogger('Graphics');
7
6
 
8
- export class Graphics {
7
+ export class Graphics extends BaseInstrument {
9
8
  static readonly IDENTIFIER =
10
9
  'com.apple.instruments.server.services.graphics.opengl';
11
10
 
12
- private channel: Channel | null = null;
13
-
14
- constructor(private readonly dvt: DVTSecureSocketProxyService) {}
15
-
16
- async initialize(): Promise<void> {
17
- if (!this.channel) {
18
- this.channel = await this.dvt.makeChannel(Graphics.IDENTIFIER);
19
- }
20
- }
21
-
22
11
  async start(): Promise<void> {
23
12
  await this.initialize();
24
13
 
@@ -1,7 +1,6 @@
1
1
  import { getLogger } from '../../../../lib/logger.js';
2
- import type { Channel } from '../channel.js';
3
2
  import { MessageAux } from '../dtx-message.js';
4
- import type { DVTSecureSocketProxyService } from '../index.js';
3
+ import { BaseInstrument } from './base-instrument.js';
5
4
 
6
5
  const log = getLogger('LocationSimulation');
7
6
 
@@ -16,25 +15,10 @@ export interface LocationCoordinates {
16
15
  /**
17
16
  * Location simulation service for simulating device GPS location
18
17
  */
19
- export class LocationSimulation {
18
+ export class LocationSimulation extends BaseInstrument {
20
19
  static readonly IDENTIFIER =
21
20
  'com.apple.instruments.server.services.LocationSimulation';
22
21
 
23
- private channel: Channel | null = null;
24
-
25
- constructor(private readonly dvt: DVTSecureSocketProxyService) {}
26
-
27
- /**
28
- * Initialize the location simulation channel
29
- */
30
- async initialize(): Promise<void> {
31
- if (this.channel) {
32
- return;
33
- }
34
-
35
- this.channel = await this.dvt.makeChannel(LocationSimulation.IDENTIFIER);
36
- }
37
-
38
22
  /**
39
23
  * Set the simulated GPS location
40
24
  * @param coordinates The location coordinates
@@ -1,26 +1,15 @@
1
1
  import { getLogger } from '../../../../lib/logger.js';
2
- import type { Channel } from '../channel.js';
3
- import type { DVTSecureSocketProxyService } from '../index.js';
2
+ import { BaseInstrument } from './base-instrument.js';
4
3
 
5
4
  const log = getLogger('Screenshot');
6
5
 
7
6
  /**
8
7
  * Screenshot service for capturing device screenshots
9
8
  */
10
- export class Screenshot {
9
+ export class Screenshot extends BaseInstrument {
11
10
  static readonly IDENTIFIER =
12
11
  'com.apple.instruments.server.services.screenshot';
13
12
 
14
- private channel: Channel | null = null;
15
-
16
- constructor(private readonly dvt: DVTSecureSocketProxyService) {}
17
-
18
- async initialize(): Promise<void> {
19
- if (!this.channel) {
20
- this.channel = await this.dvt.makeChannel(Screenshot.IDENTIFIER);
21
- }
22
- }
23
-
24
13
  /**
25
14
  * Capture a screenshot from the device
26
15
  * @returns The screenshot data as a Buffer