appium-ios-remotexpc 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +28 -0
  3. package/build/src/constants.d.ts +2 -0
  4. package/build/src/constants.d.ts.map +1 -0
  5. package/build/src/constants.js +3 -0
  6. package/build/src/index.d.ts +2 -1
  7. package/build/src/index.d.ts.map +1 -1
  8. package/build/src/index.js +2 -1
  9. package/build/src/lib/apple-tv/constants.d.ts +0 -1
  10. package/build/src/lib/apple-tv/constants.d.ts.map +1 -1
  11. package/build/src/lib/apple-tv/constants.js +0 -1
  12. package/build/src/lib/apple-tv/discovery/device-discovery.d.ts +10 -0
  13. package/build/src/lib/apple-tv/discovery/device-discovery.d.ts.map +1 -0
  14. package/build/src/lib/apple-tv/discovery/device-discovery.js +22 -0
  15. package/build/src/lib/apple-tv/discovery/index.d.ts +2 -0
  16. package/build/src/lib/apple-tv/discovery/index.d.ts.map +1 -0
  17. package/build/src/lib/apple-tv/discovery/index.js +1 -0
  18. package/build/src/lib/apple-tv/encryption/chacha20-poly1305.js +2 -2
  19. package/build/src/lib/apple-tv/encryption/ed25519.js +2 -2
  20. package/build/src/lib/apple-tv/encryption/hkdf.js +2 -2
  21. package/build/src/lib/apple-tv/index.d.ts +5 -0
  22. package/build/src/lib/apple-tv/index.d.ts.map +1 -1
  23. package/build/src/lib/apple-tv/index.js +5 -0
  24. package/build/src/lib/apple-tv/network/constants.d.ts +10 -0
  25. package/build/src/lib/apple-tv/network/constants.d.ts.map +1 -0
  26. package/build/src/lib/apple-tv/network/constants.js +9 -0
  27. package/build/src/lib/apple-tv/network/index.d.ts +4 -0
  28. package/build/src/lib/apple-tv/network/index.d.ts.map +1 -0
  29. package/build/src/lib/apple-tv/network/index.js +2 -0
  30. package/build/src/lib/apple-tv/network/network-client.d.ts +16 -0
  31. package/build/src/lib/apple-tv/network/network-client.d.ts.map +1 -0
  32. package/build/src/lib/apple-tv/network/network-client.js +169 -0
  33. package/build/src/lib/apple-tv/network/types.d.ts +8 -0
  34. package/build/src/lib/apple-tv/network/types.d.ts.map +1 -0
  35. package/build/src/lib/apple-tv/network/types.js +1 -0
  36. package/build/src/lib/apple-tv/pairing/index.d.ts +3 -0
  37. package/build/src/lib/apple-tv/pairing/index.d.ts.map +1 -0
  38. package/build/src/lib/apple-tv/pairing/index.js +2 -0
  39. package/build/src/lib/apple-tv/pairing/pairing-service.d.ts +15 -0
  40. package/build/src/lib/apple-tv/pairing/pairing-service.d.ts.map +1 -0
  41. package/build/src/lib/apple-tv/pairing/pairing-service.js +112 -0
  42. package/build/src/lib/apple-tv/pairing/user-input-service.d.ts +8 -0
  43. package/build/src/lib/apple-tv/pairing/user-input-service.d.ts.map +1 -0
  44. package/build/src/lib/apple-tv/pairing/user-input-service.js +61 -0
  45. package/build/src/lib/apple-tv/pairing-protocol/constants.d.ts +18 -0
  46. package/build/src/lib/apple-tv/pairing-protocol/constants.d.ts.map +1 -0
  47. package/build/src/lib/apple-tv/pairing-protocol/constants.js +17 -0
  48. package/build/src/lib/apple-tv/pairing-protocol/index.d.ts +4 -0
  49. package/build/src/lib/apple-tv/pairing-protocol/index.d.ts.map +1 -0
  50. package/build/src/lib/apple-tv/pairing-protocol/index.js +2 -0
  51. package/build/src/lib/apple-tv/pairing-protocol/pairing-protocol.d.ts +159 -0
  52. package/build/src/lib/apple-tv/pairing-protocol/pairing-protocol.d.ts.map +1 -0
  53. package/build/src/lib/apple-tv/pairing-protocol/pairing-protocol.js +494 -0
  54. package/build/src/lib/apple-tv/pairing-protocol/types.d.ts +57 -0
  55. package/build/src/lib/apple-tv/pairing-protocol/types.d.ts.map +1 -0
  56. package/build/src/lib/apple-tv/pairing-protocol/types.js +1 -0
  57. package/build/src/lib/apple-tv/srp/srp-client.js +2 -2
  58. package/build/src/lib/apple-tv/storage/index.d.ts +3 -0
  59. package/build/src/lib/apple-tv/storage/index.d.ts.map +1 -0
  60. package/build/src/lib/apple-tv/storage/index.js +1 -0
  61. package/build/src/lib/apple-tv/storage/pairing-storage.d.ts +12 -0
  62. package/build/src/lib/apple-tv/storage/pairing-storage.d.ts.map +1 -0
  63. package/build/src/lib/apple-tv/storage/pairing-storage.js +36 -0
  64. package/build/src/lib/apple-tv/storage/types.d.ts +5 -0
  65. package/build/src/lib/apple-tv/storage/types.d.ts.map +1 -0
  66. package/build/src/lib/apple-tv/storage/types.js +1 -0
  67. package/build/src/lib/apple-tv/types.d.ts +0 -1
  68. package/build/src/lib/apple-tv/types.d.ts.map +1 -1
  69. package/build/src/lib/bonjour/bonjour-discovery.d.ts.map +1 -1
  70. package/build/src/lib/bonjour/bonjour-discovery.js +4 -2
  71. package/build/src/lib/lockdown/index.d.ts.map +1 -1
  72. package/build/src/lib/lockdown/index.js +4 -4
  73. package/build/src/lib/logger.d.ts +2 -0
  74. package/build/src/lib/logger.d.ts.map +1 -0
  75. package/build/src/lib/logger.js +7 -0
  76. package/build/src/lib/pair-record/pair-record.d.ts.map +1 -1
  77. package/build/src/lib/pair-record/pair-record.js +2 -2
  78. package/build/src/lib/plist/binary-plist-parser.d.ts.map +1 -1
  79. package/build/src/lib/plist/binary-plist-parser.js +2 -2
  80. package/build/src/lib/plist/length-based-splitter.d.ts.map +1 -1
  81. package/build/src/lib/plist/length-based-splitter.js +2 -2
  82. package/build/src/lib/plist/plist-decoder.d.ts.map +1 -1
  83. package/build/src/lib/plist/plist-decoder.js +2 -2
  84. package/build/src/lib/plist/plist-parser.js +2 -2
  85. package/build/src/lib/plist/plist-service.d.ts.map +1 -1
  86. package/build/src/lib/plist/plist-service.js +3 -3
  87. package/build/src/lib/remote-xpc/remote-xpc-connection.js +2 -2
  88. package/build/src/lib/tss/index.js +2 -2
  89. package/build/src/lib/tunnel/index.d.ts.map +1 -1
  90. package/build/src/lib/tunnel/index.js +2 -2
  91. package/build/src/lib/tunnel/packet-stream-client.d.ts.map +1 -1
  92. package/build/src/lib/tunnel/packet-stream-client.js +2 -2
  93. package/build/src/lib/tunnel/packet-stream-server.d.ts.map +1 -1
  94. package/build/src/lib/tunnel/packet-stream-server.js +2 -2
  95. package/build/src/lib/tunnel/tunnel-api-client.d.ts.map +1 -1
  96. package/build/src/lib/tunnel/tunnel-api-client.js +2 -2
  97. package/build/src/lib/tunnel/tunnel-registry-server.js +2 -2
  98. package/build/src/lib/usbmux/index.d.ts.map +1 -1
  99. package/build/src/lib/usbmux/index.js +2 -2
  100. package/build/src/services/ios/afc/index.d.ts.map +1 -1
  101. package/build/src/services/ios/afc/index.js +2 -2
  102. package/build/src/services/ios/base-service.d.ts.map +1 -1
  103. package/build/src/services/ios/base-service.js +2 -2
  104. package/build/src/services/ios/diagnostic-service/index.d.ts.map +1 -1
  105. package/build/src/services/ios/diagnostic-service/index.js +2 -2
  106. package/build/src/services/ios/mobile-config/index.d.ts.map +1 -1
  107. package/build/src/services/ios/mobile-config/index.js +3 -2
  108. package/build/src/services/ios/mobile-image-mounter/index.js +2 -2
  109. package/build/src/services/ios/notification-proxy/index.d.ts.map +1 -1
  110. package/build/src/services/ios/notification-proxy/index.js +2 -2
  111. package/build/src/services/ios/power-assertion/index.d.ts.map +1 -1
  112. package/build/src/services/ios/power-assertion/index.js +2 -2
  113. package/build/src/services/ios/syslog-service/index.d.ts.map +1 -1
  114. package/build/src/services/ios/syslog-service/index.js +3 -3
  115. package/build/src/services/ios/tunnel-service/index.d.ts.map +1 -1
  116. package/build/src/services/ios/tunnel-service/index.js +2 -2
  117. package/build/src/services/ios/webinspector/index.js +2 -2
  118. package/package.json +4 -2
  119. package/scripts/pair-appletv.ts +79 -0
  120. package/scripts/test-tunnel-creation.ts +1 -1
  121. package/src/constants.ts +4 -0
  122. package/src/index.ts +2 -0
  123. package/src/lib/apple-tv/constants.ts +0 -1
  124. package/src/lib/apple-tv/discovery/device-discovery.ts +34 -0
  125. package/src/lib/apple-tv/discovery/index.ts +1 -0
  126. package/src/lib/apple-tv/encryption/chacha20-poly1305.ts +2 -2
  127. package/src/lib/apple-tv/encryption/ed25519.ts +2 -2
  128. package/src/lib/apple-tv/encryption/hkdf.ts +2 -2
  129. package/src/lib/apple-tv/index.ts +5 -0
  130. package/src/lib/apple-tv/network/constants.ts +9 -0
  131. package/src/lib/apple-tv/network/index.ts +3 -0
  132. package/src/lib/apple-tv/network/network-client.ts +214 -0
  133. package/src/lib/apple-tv/network/types.ts +7 -0
  134. package/src/lib/apple-tv/pairing/index.ts +2 -0
  135. package/src/lib/apple-tv/pairing/pairing-service.ts +175 -0
  136. package/src/lib/apple-tv/pairing/user-input-service.ts +71 -0
  137. package/src/lib/apple-tv/pairing-protocol/constants.ts +19 -0
  138. package/src/lib/apple-tv/pairing-protocol/index.ts +8 -0
  139. package/src/lib/apple-tv/pairing-protocol/pairing-protocol.ts +636 -0
  140. package/src/lib/apple-tv/pairing-protocol/types.ts +60 -0
  141. package/src/lib/apple-tv/srp/srp-client.ts +2 -2
  142. package/src/lib/apple-tv/storage/index.ts +2 -0
  143. package/src/lib/apple-tv/storage/pairing-storage.ts +60 -0
  144. package/src/lib/apple-tv/storage/types.ts +9 -0
  145. package/src/lib/apple-tv/types.ts +0 -1
  146. package/src/lib/bonjour/bonjour-discovery.ts +4 -2
  147. package/src/lib/lockdown/index.ts +4 -4
  148. package/src/lib/logger.ts +9 -0
  149. package/src/lib/pair-record/pair-record.ts +3 -2
  150. package/src/lib/plist/binary-plist-parser.ts +2 -3
  151. package/src/lib/plist/length-based-splitter.ts +2 -2
  152. package/src/lib/plist/plist-decoder.ts +2 -2
  153. package/src/lib/plist/plist-parser.ts +2 -2
  154. package/src/lib/plist/plist-service.ts +3 -3
  155. package/src/lib/remote-xpc/remote-xpc-connection.ts +2 -2
  156. package/src/lib/tss/index.ts +2 -2
  157. package/src/lib/tunnel/index.ts +2 -2
  158. package/src/lib/tunnel/packet-stream-client.ts +3 -2
  159. package/src/lib/tunnel/packet-stream-server.ts +3 -2
  160. package/src/lib/tunnel/tunnel-api-client.ts +2 -3
  161. package/src/lib/tunnel/tunnel-registry-server.ts +2 -2
  162. package/src/lib/usbmux/index.ts +2 -2
  163. package/src/services/ios/afc/index.ts +2 -2
  164. package/src/services/ios/base-service.ts +2 -3
  165. package/src/services/ios/diagnostic-service/index.ts +2 -3
  166. package/src/services/ios/mobile-config/index.ts +3 -2
  167. package/src/services/ios/mobile-image-mounter/index.ts +2 -2
  168. package/src/services/ios/notification-proxy/index.ts +2 -3
  169. package/src/services/ios/power-assertion/index.ts +2 -3
  170. package/src/services/ios/syslog-service/index.ts +3 -3
  171. package/src/services/ios/tunnel-service/index.ts +2 -2
  172. package/src/services/ios/webinspector/index.ts +2 -2
@@ -0,0 +1,8 @@
1
+ import type { UserInputInterface } from '../pairing-protocol/types.js';
2
+ /** Handles user interaction for PIN input during pairing */
3
+ export declare class UserInputService implements UserInputInterface {
4
+ private readonly log;
5
+ promptForPIN(): Promise<string>;
6
+ promptForInput(prompt: string): Promise<string>;
7
+ }
8
+ //# sourceMappingURL=user-input-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-input-service.d.ts","sourceRoot":"","sources":["../../../../../src/lib/apple-tv/pairing/user-input-service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,4DAA4D;AAC5D,qBAAa,gBAAiB,YAAW,kBAAkB;IACzD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwC;IAEtD,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAyC/B,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAkBtD"}
@@ -0,0 +1,61 @@
1
+ import { logger } from '@appium/support';
2
+ import { createInterface } from 'node:readline';
3
+ import { PairingError } from '../errors.js';
4
+ import { NETWORK_CONSTANTS } from '../network/constants.js';
5
+ /** Handles user interaction for PIN input during pairing */
6
+ export class UserInputService {
7
+ log = logger.getLogger('UserInputService');
8
+ async promptForPIN() {
9
+ const rl = createInterface({
10
+ input: process.stdin,
11
+ output: process.stdout,
12
+ });
13
+ let timeoutId = null;
14
+ try {
15
+ const pin = await new Promise((resolve, reject) => {
16
+ timeoutId = setTimeout(() => {
17
+ reject(new PairingError('PIN input timeout', 'INPUT_TIMEOUT'));
18
+ }, NETWORK_CONSTANTS.PIN_INPUT_TIMEOUT_MS);
19
+ rl.question('Enter PIN from Apple TV screen: ', (answer) => {
20
+ // Clear timeout since we got the PIN
21
+ if (timeoutId) {
22
+ clearTimeout(timeoutId);
23
+ timeoutId = null;
24
+ }
25
+ resolve(answer);
26
+ });
27
+ });
28
+ const cleanPin = pin.trim();
29
+ if (!/^\d+$/.test(cleanPin)) {
30
+ this.log.error('Invalid PIN format');
31
+ throw new PairingError('PIN must contain only digits', 'INVALID_PIN');
32
+ }
33
+ this.log.debug('PIN received successfully');
34
+ return cleanPin;
35
+ }
36
+ finally {
37
+ // Clean up timeout if error occurred before clearing
38
+ if (timeoutId) {
39
+ clearTimeout(timeoutId);
40
+ }
41
+ rl.close();
42
+ }
43
+ }
44
+ async promptForInput(prompt) {
45
+ const rl = createInterface({
46
+ input: process.stdin,
47
+ output: process.stdout,
48
+ });
49
+ try {
50
+ const input = await new Promise((resolve) => {
51
+ rl.question(prompt, (answer) => {
52
+ resolve(answer);
53
+ });
54
+ });
55
+ return input.trim();
56
+ }
57
+ finally {
58
+ rl.close();
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,18 @@
1
+ /** Constants for pairing protocol states */
2
+ export declare const PAIRING_STATES: {
3
+ readonly M3: 3;
4
+ readonly M5: 5;
5
+ readonly M6: 6;
6
+ };
7
+ /** Constants for pairing protocol messages */
8
+ export declare const PAIRING_MESSAGES: {
9
+ readonly ENCRYPT_SALT: "Pair-Setup-Encrypt-Salt";
10
+ readonly ENCRYPT_INFO: "Pair-Setup-Encrypt-Info";
11
+ readonly SIGN_SALT: "Pair-Setup-Controller-Sign-Salt";
12
+ readonly SIGN_INFO: "Pair-Setup-Controller-Sign-Info";
13
+ readonly M5_NONCE: "PS-Msg05";
14
+ readonly M6_NONCE: "PS-Msg06";
15
+ };
16
+ /** TLV type for device info */
17
+ export declare const INFO_TYPE = 17;
18
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/lib/apple-tv/pairing-protocol/constants.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB;;;;;;;CAOnB,CAAC;AAEX,+BAA+B;AAC/B,eAAO,MAAM,SAAS,KAAO,CAAC"}
@@ -0,0 +1,17 @@
1
+ /** Constants for pairing protocol states */
2
+ export const PAIRING_STATES = {
3
+ M3: 0x03,
4
+ M5: 0x05,
5
+ M6: 0x06,
6
+ };
7
+ /** Constants for pairing protocol messages */
8
+ export const PAIRING_MESSAGES = {
9
+ ENCRYPT_SALT: 'Pair-Setup-Encrypt-Salt',
10
+ ENCRYPT_INFO: 'Pair-Setup-Encrypt-Info',
11
+ SIGN_SALT: 'Pair-Setup-Controller-Sign-Salt',
12
+ SIGN_INFO: 'Pair-Setup-Controller-Sign-Info',
13
+ M5_NONCE: 'PS-Msg05',
14
+ M6_NONCE: 'PS-Msg06',
15
+ };
16
+ /** TLV type for device info */
17
+ export const INFO_TYPE = 0x11;
@@ -0,0 +1,4 @@
1
+ export { PairingProtocol } from './pairing-protocol.js';
2
+ export { PAIRING_STATES, PAIRING_MESSAGES, INFO_TYPE } from './constants.js';
3
+ export type { EncryptionKeys, PairingRequest, UserInputInterface, PairingProtocolInterface, } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/apple-tv/pairing-protocol/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7E,YAAY,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { PairingProtocol } from './pairing-protocol.js';
2
+ export { PAIRING_STATES, PAIRING_MESSAGES, INFO_TYPE } from './constants.js';
@@ -0,0 +1,159 @@
1
+ import type { AppleTVDevice } from '../../bonjour/bonjour-discovery.js';
2
+ import type { NetworkClientInterface } from '../network/types.js';
3
+ import type { PairingProtocolInterface, UserInputInterface } from './types.js';
4
+ /** Implements the Apple TV pairing protocol including SRP authentication and key exchange */
5
+ export declare class PairingProtocol implements PairingProtocolInterface {
6
+ private readonly networkClient;
7
+ private readonly userInput;
8
+ private static readonly log;
9
+ private _sequenceNumber;
10
+ constructor(networkClient: NetworkClientInterface, userInput: UserInputInterface);
11
+ executePairingFlow(device: AppleTVDevice): Promise<string>;
12
+ private createRequest;
13
+ /**
14
+ * Fragments a buffer into TLV8 items of maximum fragment size
15
+ * @param buffer Buffer to fragment
16
+ * @param type TLV8 type identifier
17
+ * @returns Array of TLV8 items
18
+ */
19
+ private fragmentBuffer;
20
+ /**
21
+ * Creates a nonce buffer with prefix padding
22
+ * @param nonceString The nonce string identifier
23
+ * @returns Padded nonce buffer
24
+ */
25
+ private createNonce;
26
+ /**
27
+ * Performs initial handshake with Apple TV to establish connection
28
+ * Sends handshake request with host options and wire protocol version
29
+ */
30
+ private performHandshake;
31
+ /**
32
+ * Attempts to verify existing pairing credentials with Apple TV
33
+ * Creates pair verification request and handles expected failure for new pairing flow
34
+ */
35
+ private attemptPairVerification;
36
+ /**
37
+ * Initiates manual pairing setup process with Apple TV
38
+ * Sends setup request and receives SRP challenge data
39
+ * @returns Response containing SRP salt and server public key
40
+ */
41
+ private setupManualPairing;
42
+ /**
43
+ * Extracts and validates SRP pairing data from Apple TV response
44
+ * @param response Network response containing pairing data
45
+ * @returns Parsed TLV8 dictionary with SRP challenge components
46
+ * @throws PairingError if pairing data is missing or invalid
47
+ */
48
+ private extractAndValidatePairingData;
49
+ /**
50
+ * Performs SRP authentication using user-provided PIN
51
+ * Prompts for PIN, creates SRP client, sends proof, and validates response
52
+ * @param parsedSRP SRP challenge data from Apple TV
53
+ * @returns Authenticated SRP client with session key
54
+ * @throws PairingError if PIN is incorrect or authentication fails
55
+ */
56
+ private performSRPAuthentication;
57
+ /**
58
+ * Receives and processes M6 pairing completion message from Apple TV
59
+ * Attempts to decrypt and validate final pairing state
60
+ * @param decryptKey Decryption key for M6 encrypted data
61
+ */
62
+ private receiveM6Completion;
63
+ /**
64
+ * Constructs initial handshake request packet
65
+ * Includes host options and wire protocol version for pairing session
66
+ * @returns Handshake request with sequence number 0
67
+ */
68
+ private createHandshakeRequest;
69
+ /**
70
+ * Creates pair verification request with X25519 public key
71
+ * Used to attempt verification of existing pairing credentials
72
+ * @returns Pair verification request with random X25519 key
73
+ */
74
+ private createPairVerificationRequest;
75
+ /**
76
+ * Creates pair verification failed event request
77
+ * Sent after verification attempt to proceed with manual pairing setup
78
+ * @returns Pair verify failed event packet
79
+ */
80
+ private createPairVerifyFailedRequest;
81
+ /**
82
+ * Constructs manual pairing setup request packet
83
+ * Initiates M1/M2 exchange with setup pairing data
84
+ * @returns Setup manual pairing request with host information
85
+ */
86
+ private createSetupManualPairingRequest;
87
+ /**
88
+ * Parses base64-encoded TLV8 response into dictionary
89
+ * Decodes base64 string and converts TLV8 format to key-value pairs
90
+ * @param data Base64-encoded TLV8 data
91
+ * @returns Dictionary mapping TLV8 type numbers to buffer values
92
+ * @throws PairingError if TLV8 parsing fails
93
+ */
94
+ private parseTLV8Response;
95
+ /**
96
+ * Validates SRP response for errors and required challenge data
97
+ * Checks for error codes and verifies presence of salt and public key
98
+ * @param parsedSRP Parsed SRP response dictionary
99
+ * @throws PairingError if response contains errors or missing required data
100
+ */
101
+ private validateSRPResponse;
102
+ /**
103
+ * Initializes SRP client with PIN and server challenge data
104
+ * Sets up identity, salt, and server public key for proof computation
105
+ * @param pin User-provided pairing PIN
106
+ * @param parsedSRP SRP challenge data containing salt and server public key
107
+ * @returns Configured SRP client ready for proof generation
108
+ * @throws PairingError if required SRP data is missing
109
+ */
110
+ private createSRPClient;
111
+ /**
112
+ * Sends M3 message containing SRP proof to Apple TV
113
+ * Includes client public key and computed proof for authentication
114
+ * @param srpClient Configured SRP client with computed proof
115
+ */
116
+ private sendSRPProof;
117
+ /**
118
+ * Validates M4 SRP proof response from Apple TV
119
+ * Checks for authentication errors indicating incorrect PIN
120
+ * @param response Network response containing SRP proof validation result
121
+ * @throws PairingError if PIN authentication failed
122
+ */
123
+ private validateSRPProofResponse;
124
+ /**
125
+ * Sends M5 exchange message with encrypted pairing credentials
126
+ * Includes long-term public key, signature, and device information encrypted with session key
127
+ * @param encryptKey Encryption key derived from session key
128
+ * @param devicePairingID Host device pairing identifier
129
+ * @param ltpk Long-term public key (Ed25519)
130
+ * @param ltsk Long-term secret key (Ed25519)
131
+ * @param sessionKey SRP session key for signature derivation
132
+ * @throws PairingError if M5 message creation fails
133
+ */
134
+ private sendM5Message;
135
+ /**
136
+ * Processes and decrypts M6 completion response from Apple TV
137
+ * Validates pairing completion state and decrypts final exchange data
138
+ * @param m6Response Network response containing M6 completion message
139
+ * @param decryptKey Decryption key for M6 encrypted data
140
+ */
141
+ private processM6Response;
142
+ /**
143
+ * Derives encryption and decryption keys from SRP session key
144
+ * Uses HKDF with pairing-specific salt and info strings
145
+ * @param sessionKey SRP session key from authentication
146
+ * @returns Encryption keys for M5/M6 message exchange
147
+ */
148
+ private deriveEncryptionKeys;
149
+ /**
150
+ * Saves pairing credentials to storage and returns credential path
151
+ * Persists long-term public and private keys for future connections
152
+ * @param device Apple TV device information
153
+ * @param ltpk Long-term public key to save
154
+ * @param ltsk Long-term secret key to save
155
+ * @returns Path to saved pairing credentials file
156
+ */
157
+ private createPairingResult;
158
+ }
159
+ //# sourceMappingURL=pairing-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairing-protocol.d.ts","sourceRoot":"","sources":["../../../../../src/lib/apple-tv/pairing-protocol/pairing-protocol.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAexE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAYlE,OAAO,KAAK,EAEV,wBAAwB,EAExB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,6FAA6F;AAC7F,qBAAa,eAAgB,YAAW,wBAAwB;IAK5D,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAuC;IAClE,OAAO,CAAC,eAAe,CAAK;gBAGT,aAAa,EAAE,sBAAsB,EACrC,SAAS,EAAE,kBAAkB;IAG1C,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAwChE,OAAO,CAAC,aAAa;IAYrB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAetB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAInB;;;OAGG;YACW,gBAAgB;IAO9B;;;OAGG;YACW,uBAAuB;IAUrC;;;;OAIG;YACW,kBAAkB;IAQhC;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAYrC;;;;;;OAMG;YACW,wBAAwB;IActC;;;;OAIG;YACW,mBAAmB;IAcjC;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;IAmBrC;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;IAUrC;;;;OAIG;IACH,OAAO,CAAC,+BAA+B;IAmBvC;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAsBvB;;;;OAIG;YACW,YAAY;IAmC1B;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAiBhC;;;;;;;;;OASG;YACW,aAAa;IA2E3B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAsCzB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;;;;;;OAOG;YACW,mBAAmB;CAQlC"}