appium-ios-remotexpc 0.0.3 → 0.0.5
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 +12 -0
- package/build/src/base-plist-service.d.ts +51 -0
- package/build/src/base-plist-service.d.ts.map +1 -0
- package/build/src/base-plist-service.js +61 -0
- package/build/src/base-socket-service.d.ts +15 -0
- package/build/src/base-socket-service.d.ts.map +1 -0
- package/build/src/base-socket-service.js +46 -0
- package/build/src/index.d.ts +9 -0
- package/build/src/index.d.ts.map +1 -0
- package/build/src/index.js +7 -0
- package/build/src/lib/apple-tv/constants.d.ts +77 -0
- package/build/src/lib/apple-tv/constants.d.ts.map +1 -0
- package/build/src/lib/apple-tv/constants.js +106 -0
- package/build/src/lib/apple-tv/encryption/chacha20-poly1305.d.ts +22 -0
- package/build/src/lib/apple-tv/encryption/chacha20-poly1305.d.ts.map +1 -0
- package/build/src/lib/apple-tv/encryption/chacha20-poly1305.js +97 -0
- package/build/src/lib/apple-tv/encryption/ed25519.d.ts +16 -0
- package/build/src/lib/apple-tv/encryption/ed25519.d.ts.map +1 -0
- package/build/src/lib/apple-tv/encryption/ed25519.js +93 -0
- package/build/src/lib/apple-tv/encryption/hkdf.d.ts +18 -0
- package/build/src/lib/apple-tv/encryption/hkdf.d.ts.map +1 -0
- package/build/src/lib/apple-tv/encryption/hkdf.js +73 -0
- package/build/src/lib/apple-tv/encryption/index.d.ts +5 -0
- package/build/src/lib/apple-tv/encryption/index.d.ts.map +1 -0
- package/build/src/lib/apple-tv/encryption/index.js +4 -0
- package/build/src/lib/apple-tv/encryption/opack2.d.ts +57 -0
- package/build/src/lib/apple-tv/encryption/opack2.d.ts.map +1 -0
- package/build/src/lib/apple-tv/encryption/opack2.js +203 -0
- package/build/src/lib/apple-tv/errors.d.ts +17 -0
- package/build/src/lib/apple-tv/errors.d.ts.map +1 -0
- package/build/src/lib/apple-tv/errors.js +30 -0
- package/build/src/lib/apple-tv/tlv/decoder.d.ts +19 -0
- package/build/src/lib/apple-tv/tlv/decoder.d.ts.map +1 -0
- package/build/src/lib/apple-tv/tlv/decoder.js +49 -0
- package/build/src/lib/apple-tv/tlv/encoder.d.ts +10 -0
- package/build/src/lib/apple-tv/tlv/encoder.d.ts.map +1 -0
- package/build/src/lib/apple-tv/tlv/encoder.js +20 -0
- package/build/src/lib/apple-tv/tlv/index.d.ts +4 -0
- package/build/src/lib/apple-tv/tlv/index.d.ts.map +1 -0
- package/build/src/lib/apple-tv/tlv/index.js +3 -0
- package/build/src/lib/apple-tv/tlv/pairing-tlv.d.ts +14 -0
- package/build/src/lib/apple-tv/tlv/pairing-tlv.d.ts.map +1 -0
- package/build/src/lib/apple-tv/tlv/pairing-tlv.js +27 -0
- package/build/src/lib/apple-tv/types.d.ts +36 -0
- package/build/src/lib/apple-tv/types.d.ts.map +1 -0
- package/build/src/lib/apple-tv/types.js +1 -0
- package/build/src/lib/apple-tv/utils/buffer-utils.d.ts +40 -0
- package/build/src/lib/apple-tv/utils/buffer-utils.d.ts.map +1 -0
- package/build/src/lib/apple-tv/utils/buffer-utils.js +76 -0
- package/build/src/lib/apple-tv/utils/index.d.ts +3 -0
- package/build/src/lib/apple-tv/utils/index.d.ts.map +1 -0
- package/build/src/lib/apple-tv/utils/index.js +2 -0
- package/build/src/lib/apple-tv/utils/uuid-generator.d.ts +9 -0
- package/build/src/lib/apple-tv/utils/uuid-generator.d.ts.map +1 -0
- package/build/src/lib/apple-tv/utils/uuid-generator.js +36 -0
- package/build/src/lib/lockdown/index.d.ts +87 -0
- package/build/src/lib/lockdown/index.d.ts.map +1 -0
- package/build/src/lib/lockdown/index.js +324 -0
- package/build/src/lib/pair-record/index.d.ts +3 -0
- package/build/src/lib/pair-record/index.d.ts.map +1 -0
- package/build/src/lib/pair-record/index.js +2 -0
- package/build/src/lib/pair-record/pair-record.d.ts +48 -0
- package/build/src/lib/pair-record/pair-record.d.ts.map +1 -0
- package/build/src/lib/pair-record/pair-record.js +85 -0
- package/build/src/lib/plist/binary-plist-creator.d.ts +14 -0
- package/build/src/lib/plist/binary-plist-creator.d.ts.map +1 -0
- package/build/src/lib/plist/binary-plist-creator.js +475 -0
- package/build/src/lib/plist/binary-plist-parser.d.ts +14 -0
- package/build/src/lib/plist/binary-plist-parser.d.ts.map +1 -0
- package/build/src/lib/plist/binary-plist-parser.js +449 -0
- package/build/src/lib/plist/constants.d.ts +36 -0
- package/build/src/lib/plist/constants.d.ts.map +1 -0
- package/build/src/lib/plist/constants.js +43 -0
- package/build/src/lib/plist/index.d.ts +14 -0
- package/build/src/lib/plist/index.d.ts.map +1 -0
- package/build/src/lib/plist/index.js +16 -0
- package/build/src/lib/plist/length-based-splitter.d.ts +43 -0
- package/build/src/lib/plist/length-based-splitter.d.ts.map +1 -0
- package/build/src/lib/plist/length-based-splitter.js +228 -0
- package/build/src/lib/plist/plist-creator.d.ts +8 -0
- package/build/src/lib/plist/plist-creator.d.ts.map +1 -0
- package/build/src/lib/plist/plist-creator.js +33 -0
- package/build/src/lib/plist/plist-decoder.d.ts +25 -0
- package/build/src/lib/plist/plist-decoder.d.ts.map +1 -0
- package/build/src/lib/plist/plist-decoder.js +103 -0
- package/build/src/lib/plist/plist-encoder.d.ts +10 -0
- package/build/src/lib/plist/plist-encoder.d.ts.map +1 -0
- package/build/src/lib/plist/plist-encoder.js +27 -0
- package/build/src/lib/plist/plist-parser.d.ts +9 -0
- package/build/src/lib/plist/plist-parser.d.ts.map +1 -0
- package/build/src/lib/plist/plist-parser.js +109 -0
- package/build/src/lib/plist/plist-service.d.ts +86 -0
- package/build/src/lib/plist/plist-service.d.ts.map +1 -0
- package/build/src/lib/plist/plist-service.js +180 -0
- package/build/src/lib/plist/unified-plist-creator.d.ts +9 -0
- package/build/src/lib/plist/unified-plist-creator.d.ts.map +1 -0
- package/build/src/lib/plist/unified-plist-creator.js +14 -0
- package/build/src/lib/plist/unified-plist-parser.d.ts +8 -0
- package/build/src/lib/plist/unified-plist-parser.d.ts.map +1 -0
- package/build/src/lib/plist/unified-plist-parser.js +23 -0
- package/build/src/lib/plist/utils.d.ts +97 -0
- package/build/src/lib/plist/utils.d.ts.map +1 -0
- package/build/src/lib/plist/utils.js +287 -0
- package/build/src/lib/remote-xpc/constants.d.ts +20 -0
- package/build/src/lib/remote-xpc/constants.d.ts.map +1 -0
- package/build/src/lib/remote-xpc/constants.js +21 -0
- package/build/src/lib/remote-xpc/handshake-frames.d.ts +74 -0
- package/build/src/lib/remote-xpc/handshake-frames.d.ts.map +1 -0
- package/build/src/lib/remote-xpc/handshake-frames.js +285 -0
- package/build/src/lib/remote-xpc/handshake.d.ts +14 -0
- package/build/src/lib/remote-xpc/handshake.d.ts.map +1 -0
- package/build/src/lib/remote-xpc/handshake.js +95 -0
- package/build/src/lib/remote-xpc/remote-xpc-connection.d.ts +55 -0
- package/build/src/lib/remote-xpc/remote-xpc-connection.d.ts.map +1 -0
- package/build/src/lib/remote-xpc/remote-xpc-connection.js +365 -0
- package/build/src/lib/remote-xpc/xpc-protocol.d.ts +22 -0
- package/build/src/lib/remote-xpc/xpc-protocol.d.ts.map +1 -0
- package/build/src/lib/remote-xpc/xpc-protocol.js +368 -0
- package/build/src/lib/tunnel/index.d.ts +69 -0
- package/build/src/lib/tunnel/index.d.ts.map +1 -0
- package/build/src/lib/tunnel/index.js +205 -0
- package/build/src/lib/tunnel/packet-stream-client.d.ts +46 -0
- package/build/src/lib/tunnel/packet-stream-client.d.ts.map +1 -0
- package/build/src/lib/tunnel/packet-stream-client.js +152 -0
- package/build/src/lib/tunnel/packet-stream-server.d.ts +37 -0
- package/build/src/lib/tunnel/packet-stream-server.d.ts.map +1 -0
- package/build/src/lib/tunnel/packet-stream-server.js +109 -0
- package/build/src/lib/tunnel/tunnel-api-client.d.ts +85 -0
- package/build/src/lib/tunnel/tunnel-api-client.d.ts.map +1 -0
- package/build/src/lib/tunnel/tunnel-api-client.js +207 -0
- package/build/src/lib/tunnel/tunnel-registry-server.d.ts +68 -0
- package/build/src/lib/tunnel/tunnel-registry-server.d.ts.map +1 -0
- package/build/src/lib/tunnel/tunnel-registry-server.js +351 -0
- package/build/src/lib/types.d.ts +238 -0
- package/build/src/lib/types.d.ts.map +1 -0
- package/build/src/lib/types.js +4 -0
- package/build/src/lib/usbmux/index.d.ts +177 -0
- package/build/src/lib/usbmux/index.d.ts.map +1 -0
- package/build/src/lib/usbmux/index.js +490 -0
- package/build/src/lib/usbmux/usbmux-decoder.d.ts +19 -0
- package/build/src/lib/usbmux/usbmux-decoder.d.ts.map +1 -0
- package/build/src/lib/usbmux/usbmux-decoder.js +38 -0
- package/build/src/lib/usbmux/usbmux-encoder.d.ts +12 -0
- package/build/src/lib/usbmux/usbmux-encoder.d.ts.map +1 -0
- package/build/src/lib/usbmux/usbmux-encoder.js +32 -0
- package/build/src/service-connection.d.ts +34 -0
- package/build/src/service-connection.d.ts.map +1 -0
- package/build/src/service-connection.js +51 -0
- package/build/src/services/index.d.ts +6 -0
- package/build/src/services/index.d.ts.map +1 -0
- package/build/src/services/index.js +5 -0
- package/build/src/services/ios/base-service.d.ts +35 -0
- package/build/src/services/ios/base-service.d.ts.map +1 -0
- package/build/src/services/ios/base-service.js +55 -0
- package/build/src/services/ios/diagnostic-service/index.d.ts +46 -0
- package/build/src/services/ios/diagnostic-service/index.d.ts.map +1 -0
- package/build/src/services/ios/diagnostic-service/index.js +169 -0
- package/build/src/services/ios/diagnostic-service/keys.d.ts +5 -0
- package/build/src/services/ios/diagnostic-service/keys.d.ts.map +1 -0
- package/build/src/services/ios/diagnostic-service/keys.js +770 -0
- package/build/src/services/ios/syslog-service/index.d.ts +91 -0
- package/build/src/services/ios/syslog-service/index.d.ts.map +1 -0
- package/build/src/services/ios/syslog-service/index.js +323 -0
- package/build/src/services/ios/tunnel-service/index.d.ts +17 -0
- package/build/src/services/ios/tunnel-service/index.d.ts.map +1 -0
- package/build/src/services/ios/tunnel-service/index.js +57 -0
- package/build/src/services.d.ts +14 -0
- package/build/src/services.d.ts.map +1 -0
- package/build/src/services.js +48 -0
- package/package.json +12 -3
- package/src/lib/apple-tv/constants.ts +42 -0
- package/src/lib/apple-tv/encryption/chacha20-poly1305.ts +147 -0
- package/src/lib/apple-tv/encryption/ed25519.ts +126 -0
- package/src/lib/apple-tv/encryption/hkdf.ts +95 -0
- package/src/lib/apple-tv/encryption/index.ts +11 -0
- package/src/lib/apple-tv/encryption/opack2.ts +257 -0
- package/.github/dependabot.yml +0 -38
- package/.github/workflows/format-check.yml +0 -43
- package/.github/workflows/lint-and-build.yml +0 -40
- package/.github/workflows/pr-title.yml +0 -16
- package/.github/workflows/publish.js.yml +0 -43
- package/.github/workflows/test-validation.yml +0 -40
- package/.mocharc.json +0 -8
- package/.prettierignore +0 -3
- package/.prettierrc +0 -17
- package/.releaserc +0 -48
- package/assets/images/ios-arch.png +0 -0
- package/eslint.config.js +0 -45
- package/npm-shrinkwrap.json +0 -2711
- package/test/integration/diagnostics-test.ts +0 -44
- package/test/integration/read-pair-record-test.ts +0 -39
- package/test/integration/tunnel-test.ts +0 -104
- package/test/unit/apple-tv/tlv/decoder.spec.ts +0 -144
- package/test/unit/apple-tv/tlv/encoder.spec.ts +0 -91
- package/test/unit/apple-tv/tlv/pairing-tlv.spec.ts +0 -101
- package/test/unit/apple-tv/tlv/tlv-integration.spec.ts +0 -146
- package/test/unit/apple-tv/utils/buffer-utils.spec.ts +0 -74
- package/test/unit/apple-tv/utils/uuid-generator.spec.ts +0 -39
- package/test/unit/fixtures/index.ts +0 -88
- package/test/unit/fixtures/usbmuxconnectmessage.bin +0 -0
- package/test/unit/fixtures/usbmuxlistdevicemessage.bin +0 -0
- package/test/unit/plist/error-handling.spec.ts +0 -101
- package/test/unit/plist/fixtures/sample.binary.plist +0 -0
- package/test/unit/plist/fixtures/sample.xml.plist +0 -38
- package/test/unit/plist/plist-parser.spec.ts +0 -283
- package/test/unit/plist/plist.spec.ts +0 -205
- package/test/unit/plist/tag-position-handling.spec.ts +0 -90
- package/test/unit/plist/unified-plist-parser.spec.ts +0 -227
- package/test/unit/plist/utils.spec.ts +0 -249
- package/test/unit/plist/xml-cleaning.spec.ts +0 -60
- package/test/unit/tunnel/tunnel-registry-server.spec.ts +0 -194
- package/test/unit/usbmux/usbmux-specs.ts +0 -71
- package/tsconfig.json +0 -36
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
declare class Struct {
|
|
2
|
+
private readonly types;
|
|
3
|
+
constructor(fmt: string);
|
|
4
|
+
byteLength(): number;
|
|
5
|
+
pack(...values: number[]): Buffer;
|
|
6
|
+
}
|
|
7
|
+
declare const STRUCT_HL: Struct;
|
|
8
|
+
type StreamAssociation = 'has-stream' | 'no-stream' | 'either';
|
|
9
|
+
declare class HyperframeError extends Error {
|
|
10
|
+
}
|
|
11
|
+
declare class InvalidDataError extends HyperframeError {
|
|
12
|
+
}
|
|
13
|
+
declare class Flag {
|
|
14
|
+
name: string;
|
|
15
|
+
bit: number;
|
|
16
|
+
constructor(name: string, bit: number);
|
|
17
|
+
}
|
|
18
|
+
declare class Flags {
|
|
19
|
+
definedFlags: Flag[];
|
|
20
|
+
flags: Set<string>;
|
|
21
|
+
constructor(definedFlags: Flag[]);
|
|
22
|
+
add(flag: string): void;
|
|
23
|
+
has(flag: string): boolean;
|
|
24
|
+
toString(): string;
|
|
25
|
+
}
|
|
26
|
+
export declare class Frame {
|
|
27
|
+
protected definedFlags: Flag[];
|
|
28
|
+
type: number | null;
|
|
29
|
+
streamAssociation: StreamAssociation | null;
|
|
30
|
+
streamId: number;
|
|
31
|
+
flags: Flags;
|
|
32
|
+
bodyLen: number;
|
|
33
|
+
constructor(streamId: number, flags?: string[]);
|
|
34
|
+
toString(): string;
|
|
35
|
+
serialize(): Buffer;
|
|
36
|
+
serializeBody(): Buffer;
|
|
37
|
+
protected bodyRepr(): string;
|
|
38
|
+
}
|
|
39
|
+
export declare class SettingsFrame extends Frame {
|
|
40
|
+
static MAX_CONCURRENT_STREAMS: number;
|
|
41
|
+
static INITIAL_WINDOW_SIZE: number;
|
|
42
|
+
settings: Record<number, number>;
|
|
43
|
+
constructor(streamId?: number, settings?: Record<number, number> | null, flags?: string[]);
|
|
44
|
+
bodyRepr(): string;
|
|
45
|
+
serializeBody(): Buffer;
|
|
46
|
+
}
|
|
47
|
+
export declare class DataFrame extends Frame {
|
|
48
|
+
data: Buffer;
|
|
49
|
+
padLength: number;
|
|
50
|
+
constructor(streamId: number, data?: Buffer | string, flags?: string[]);
|
|
51
|
+
serializePaddingData(): Buffer;
|
|
52
|
+
serializeBody(): Buffer;
|
|
53
|
+
}
|
|
54
|
+
export declare class HeadersFrame extends Frame {
|
|
55
|
+
data: Buffer;
|
|
56
|
+
padLength: number;
|
|
57
|
+
dependsOn: number;
|
|
58
|
+
streamWeight: number;
|
|
59
|
+
exclusive: boolean;
|
|
60
|
+
static ALL_FLAGS: Record<string, number>;
|
|
61
|
+
constructor(streamId: number, data?: Buffer | string, flags?: string[]);
|
|
62
|
+
serializePaddingData(): Buffer;
|
|
63
|
+
serializePriorityData(): Buffer;
|
|
64
|
+
bodyRepr(): string;
|
|
65
|
+
serializeBody(): Buffer;
|
|
66
|
+
}
|
|
67
|
+
export declare class WindowUpdateFrame extends Frame {
|
|
68
|
+
windowIncrement: number;
|
|
69
|
+
constructor(streamId: number, windowIncrement?: number, flags?: string[]);
|
|
70
|
+
bodyRepr(): string;
|
|
71
|
+
serializeBody(): Buffer;
|
|
72
|
+
}
|
|
73
|
+
export { InvalidDataError, STRUCT_HL };
|
|
74
|
+
//# sourceMappingURL=handshake-frames.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake-frames.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/handshake-frames.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
class Struct {
|
|
2
|
+
types;
|
|
3
|
+
constructor(fmt) {
|
|
4
|
+
if (!fmt.startsWith('>')) {
|
|
5
|
+
throw new Error('Only big-endian formats supported');
|
|
6
|
+
}
|
|
7
|
+
this.types = [];
|
|
8
|
+
for (const ch of fmt.slice(1)) {
|
|
9
|
+
if ('0123456789'.includes(ch)) {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
this.types.push(ch);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
byteLength() {
|
|
16
|
+
let total = 0;
|
|
17
|
+
for (const t of this.types) {
|
|
18
|
+
switch (t) {
|
|
19
|
+
case 'H':
|
|
20
|
+
total += 2;
|
|
21
|
+
break;
|
|
22
|
+
case 'B':
|
|
23
|
+
total += 1;
|
|
24
|
+
break;
|
|
25
|
+
case 'L':
|
|
26
|
+
total += 4;
|
|
27
|
+
break;
|
|
28
|
+
default:
|
|
29
|
+
throw new TypeError('Unsupported type: ' + t);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return total;
|
|
33
|
+
}
|
|
34
|
+
pack(...values) {
|
|
35
|
+
if (values.length !== this.types.length) {
|
|
36
|
+
throw new TypeError('Incorrect number of values to pack');
|
|
37
|
+
}
|
|
38
|
+
const buf = Buffer.alloc(this.byteLength());
|
|
39
|
+
let offset = 0;
|
|
40
|
+
for (const [i, t] of this.types.entries()) {
|
|
41
|
+
const v = values[i];
|
|
42
|
+
switch (t) {
|
|
43
|
+
case 'H':
|
|
44
|
+
buf.writeUInt16BE(v, offset);
|
|
45
|
+
offset += 2;
|
|
46
|
+
break;
|
|
47
|
+
case 'B':
|
|
48
|
+
buf.writeUInt8(v, offset);
|
|
49
|
+
offset += 1;
|
|
50
|
+
break;
|
|
51
|
+
case 'L':
|
|
52
|
+
buf.writeUInt32BE(v, offset);
|
|
53
|
+
offset += 4;
|
|
54
|
+
break;
|
|
55
|
+
default:
|
|
56
|
+
throw new TypeError('Unsupported type: ' + t);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return buf;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Struct constants
|
|
63
|
+
const STRUCT_HBBBL = new Struct('>HBBBL');
|
|
64
|
+
const STRUCT_HL = new Struct('>HL');
|
|
65
|
+
const STRUCT_LB = new Struct('>LB');
|
|
66
|
+
const STRUCT_L = new Struct('>L');
|
|
67
|
+
const STRUCT_B = new Struct('>B');
|
|
68
|
+
const STREAM_ASSOC_HAS_STREAM = 'has-stream';
|
|
69
|
+
const STREAM_ASSOC_NO_STREAM = 'no-stream';
|
|
70
|
+
const STREAM_ASSOC_EITHER = 'either';
|
|
71
|
+
// Error classes
|
|
72
|
+
class HyperframeError extends Error {
|
|
73
|
+
}
|
|
74
|
+
class InvalidDataError extends HyperframeError {
|
|
75
|
+
}
|
|
76
|
+
// Flag handling
|
|
77
|
+
class Flag {
|
|
78
|
+
name;
|
|
79
|
+
bit;
|
|
80
|
+
constructor(name, bit) {
|
|
81
|
+
this.name = name;
|
|
82
|
+
this.bit = bit;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
class Flags {
|
|
86
|
+
definedFlags;
|
|
87
|
+
flags;
|
|
88
|
+
constructor(definedFlags) {
|
|
89
|
+
this.definedFlags = definedFlags;
|
|
90
|
+
this.flags = new Set();
|
|
91
|
+
}
|
|
92
|
+
add(flag) {
|
|
93
|
+
this.flags.add(flag);
|
|
94
|
+
}
|
|
95
|
+
has(flag) {
|
|
96
|
+
return this.flags.has(flag);
|
|
97
|
+
}
|
|
98
|
+
toString() {
|
|
99
|
+
return Array.from(this.flags).join(', ');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Utility function
|
|
103
|
+
function rawDataRepr(data) {
|
|
104
|
+
if (!data || data.length === 0) {
|
|
105
|
+
return 'None';
|
|
106
|
+
}
|
|
107
|
+
let r = data.toString('hex');
|
|
108
|
+
if (r.length > 20) {
|
|
109
|
+
r = r.slice(0, 20) + '\u2026';
|
|
110
|
+
}
|
|
111
|
+
return '<hex:' + r + '>';
|
|
112
|
+
}
|
|
113
|
+
// Base frame class
|
|
114
|
+
export class Frame {
|
|
115
|
+
definedFlags = [];
|
|
116
|
+
type = null;
|
|
117
|
+
streamAssociation = null;
|
|
118
|
+
streamId;
|
|
119
|
+
flags;
|
|
120
|
+
bodyLen;
|
|
121
|
+
constructor(streamId, flags = []) {
|
|
122
|
+
this.streamId = streamId;
|
|
123
|
+
this.flags = new Flags(this.definedFlags);
|
|
124
|
+
this.bodyLen = 0;
|
|
125
|
+
for (const flag of flags) {
|
|
126
|
+
this.flags.add(flag);
|
|
127
|
+
}
|
|
128
|
+
if (!this.streamId && this.streamAssociation === STREAM_ASSOC_HAS_STREAM) {
|
|
129
|
+
throw new InvalidDataError(`Stream ID must be non-zero for ${this.constructor.name}`);
|
|
130
|
+
}
|
|
131
|
+
if (this.streamId && this.streamAssociation === STREAM_ASSOC_NO_STREAM) {
|
|
132
|
+
throw new InvalidDataError(`Stream ID must be zero for ${this.constructor.name} with streamId=${this.streamId}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
toString() {
|
|
136
|
+
return `${this.constructor.name}(streamId=${this.streamId}, flags=${this.flags.toString()}): ${this.bodyRepr()}`;
|
|
137
|
+
}
|
|
138
|
+
serialize() {
|
|
139
|
+
const body = this.serializeBody();
|
|
140
|
+
this.bodyLen = body.length;
|
|
141
|
+
let flagsVal = 0;
|
|
142
|
+
for (const f of this.definedFlags) {
|
|
143
|
+
if (this.flags.has(f.name)) {
|
|
144
|
+
flagsVal |= f.bit;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const header = STRUCT_HBBBL.pack((this.bodyLen >> 8) & 0xffff, this.bodyLen & 0xff, this.type, flagsVal, this.streamId & 0x7fffffff);
|
|
148
|
+
return Buffer.concat([header, body]);
|
|
149
|
+
}
|
|
150
|
+
serializeBody() {
|
|
151
|
+
throw new Error('Not implemented');
|
|
152
|
+
}
|
|
153
|
+
bodyRepr() {
|
|
154
|
+
return rawDataRepr(this.serializeBody());
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Specific frame implementations
|
|
158
|
+
export class SettingsFrame extends Frame {
|
|
159
|
+
static MAX_CONCURRENT_STREAMS = 0x03;
|
|
160
|
+
static INITIAL_WINDOW_SIZE = 0x04;
|
|
161
|
+
settings;
|
|
162
|
+
constructor(streamId = 0, settings = null, flags = []) {
|
|
163
|
+
super(streamId, flags);
|
|
164
|
+
this.definedFlags = [new Flag('ACK', 0x01)];
|
|
165
|
+
this.type = 0x04;
|
|
166
|
+
this.streamAssociation = STREAM_ASSOC_NO_STREAM;
|
|
167
|
+
if (settings && flags.includes('ACK')) {
|
|
168
|
+
throw new InvalidDataError('Settings must be empty if ACK flag is set.');
|
|
169
|
+
}
|
|
170
|
+
this.settings = settings || {};
|
|
171
|
+
}
|
|
172
|
+
bodyRepr() {
|
|
173
|
+
return `settings=${JSON.stringify(this.settings)}`;
|
|
174
|
+
}
|
|
175
|
+
serializeBody() {
|
|
176
|
+
if (this.flags.has('ACK')) {
|
|
177
|
+
return Buffer.alloc(0);
|
|
178
|
+
}
|
|
179
|
+
const buffers = [];
|
|
180
|
+
for (const setting of Object.keys(this.settings)) {
|
|
181
|
+
const buf = STRUCT_HL.pack(Number(setting) & 0xff, this.settings[Number(setting)]);
|
|
182
|
+
buffers.push(buf);
|
|
183
|
+
}
|
|
184
|
+
return Buffer.concat(buffers);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
export class DataFrame extends Frame {
|
|
188
|
+
data;
|
|
189
|
+
padLength;
|
|
190
|
+
constructor(streamId, data = Buffer.from(''), flags = []) {
|
|
191
|
+
super(streamId, flags);
|
|
192
|
+
this.definedFlags = [
|
|
193
|
+
new Flag('END_STREAM', 0x01),
|
|
194
|
+
new Flag('PADDED', 0x08),
|
|
195
|
+
];
|
|
196
|
+
this.type = 0x0;
|
|
197
|
+
this.streamAssociation = STREAM_ASSOC_HAS_STREAM;
|
|
198
|
+
this.padLength = 0;
|
|
199
|
+
this.data = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
200
|
+
}
|
|
201
|
+
serializePaddingData() {
|
|
202
|
+
if (this.flags.has('PADDED')) {
|
|
203
|
+
return STRUCT_B.pack(this.padLength);
|
|
204
|
+
}
|
|
205
|
+
return Buffer.alloc(0);
|
|
206
|
+
}
|
|
207
|
+
serializeBody() {
|
|
208
|
+
const paddingData = this.serializePaddingData();
|
|
209
|
+
const padding = Buffer.alloc(this.padLength, 0);
|
|
210
|
+
// Ensure data is a Buffer
|
|
211
|
+
if (!Buffer.isBuffer(this.data)) {
|
|
212
|
+
this.data = Buffer.from(this.data);
|
|
213
|
+
}
|
|
214
|
+
const payload = Buffer.concat([paddingData, this.data, padding]);
|
|
215
|
+
this.bodyLen = payload.length;
|
|
216
|
+
return payload;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
export class HeadersFrame extends Frame {
|
|
220
|
+
data;
|
|
221
|
+
padLength;
|
|
222
|
+
dependsOn;
|
|
223
|
+
streamWeight;
|
|
224
|
+
exclusive;
|
|
225
|
+
static ALL_FLAGS = {
|
|
226
|
+
END_STREAM: 0x01,
|
|
227
|
+
END_HEADERS: 0x04,
|
|
228
|
+
PADDED: 0x08,
|
|
229
|
+
PRIORITY: 0x20,
|
|
230
|
+
};
|
|
231
|
+
constructor(streamId, data = Buffer.from(''), flags = []) {
|
|
232
|
+
super(streamId, flags);
|
|
233
|
+
// Map given flags to Flag objects using ALL_FLAGS
|
|
234
|
+
this.definedFlags = flags.map((flag) => new Flag(flag, HeadersFrame.ALL_FLAGS[flag]));
|
|
235
|
+
this.type = 0x01;
|
|
236
|
+
this.streamAssociation = STREAM_ASSOC_HAS_STREAM;
|
|
237
|
+
this.padLength = 0;
|
|
238
|
+
this.dependsOn = 0;
|
|
239
|
+
this.streamWeight = 0;
|
|
240
|
+
this.exclusive = false;
|
|
241
|
+
this.data = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
242
|
+
}
|
|
243
|
+
serializePaddingData() {
|
|
244
|
+
if (this.flags.has('PADDED')) {
|
|
245
|
+
return STRUCT_B.pack(this.padLength);
|
|
246
|
+
}
|
|
247
|
+
return Buffer.alloc(0);
|
|
248
|
+
}
|
|
249
|
+
serializePriorityData() {
|
|
250
|
+
return STRUCT_LB.pack(this.dependsOn + (this.exclusive ? 0x80000000 : 0), this.streamWeight);
|
|
251
|
+
}
|
|
252
|
+
bodyRepr() {
|
|
253
|
+
return `exclusive=${this.exclusive}, dependsOn=${this.dependsOn}, streamWeight=${this.streamWeight}, data=${rawDataRepr(this.data)}`;
|
|
254
|
+
}
|
|
255
|
+
serializeBody() {
|
|
256
|
+
const paddingData = this.serializePaddingData();
|
|
257
|
+
const padding = Buffer.alloc(this.padLength, 0);
|
|
258
|
+
let priorityData;
|
|
259
|
+
if (this.flags.has('PRIORITY')) {
|
|
260
|
+
priorityData = this.serializePriorityData();
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
priorityData = Buffer.alloc(0);
|
|
264
|
+
}
|
|
265
|
+
return Buffer.concat([paddingData, priorityData, this.data, padding]);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
export class WindowUpdateFrame extends Frame {
|
|
269
|
+
windowIncrement;
|
|
270
|
+
constructor(streamId, windowIncrement = 0, flags = []) {
|
|
271
|
+
super(streamId, flags);
|
|
272
|
+
this.definedFlags = [];
|
|
273
|
+
this.type = 0x08;
|
|
274
|
+
this.streamAssociation = STREAM_ASSOC_EITHER;
|
|
275
|
+
this.windowIncrement = windowIncrement;
|
|
276
|
+
}
|
|
277
|
+
bodyRepr() {
|
|
278
|
+
return `windowIncrement=${this.windowIncrement}`;
|
|
279
|
+
}
|
|
280
|
+
serializeBody() {
|
|
281
|
+
return STRUCT_L.pack(this.windowIncrement & 0x7fffffff);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Exported constants and types
|
|
285
|
+
export { InvalidDataError, STRUCT_HL };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Socket } from 'net';
|
|
2
|
+
import { type XPCDictionary } from '../types.js';
|
|
3
|
+
export type ChannelId = number;
|
|
4
|
+
export type MessageId = number;
|
|
5
|
+
declare class Handshake {
|
|
6
|
+
private _socket;
|
|
7
|
+
private readonly _nextMessageId;
|
|
8
|
+
constructor(socket: Socket);
|
|
9
|
+
sendFrame(frame: Buffer): Promise<void>;
|
|
10
|
+
sendRequest(data: XPCDictionary): Promise<void>;
|
|
11
|
+
perform(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export default Handshake;
|
|
14
|
+
//# sourceMappingURL=handshake.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/handshake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAUjD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,cAAM,SAAS;IACb,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;gBAElD,MAAM,EAAE,MAAM;IAQpB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvC,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA6F/B;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Socket } from 'net';
|
|
2
|
+
import {} from '../types.js';
|
|
3
|
+
import { Http2Constants, XpcConstants } from './constants.js';
|
|
4
|
+
import { DataFrame, HeadersFrame, SettingsFrame, WindowUpdateFrame, } from './handshake-frames.js';
|
|
5
|
+
import { encodeMessage } from './xpc-protocol.js';
|
|
6
|
+
class Handshake {
|
|
7
|
+
_socket;
|
|
8
|
+
_nextMessageId;
|
|
9
|
+
constructor(socket) {
|
|
10
|
+
this._socket = socket;
|
|
11
|
+
this._nextMessageId = {
|
|
12
|
+
[Http2Constants.ROOT_CHANNEL]: 0,
|
|
13
|
+
[Http2Constants.REPLY_CHANNEL]: 0,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
async sendFrame(frame) {
|
|
17
|
+
return new Promise((resolve, reject) => {
|
|
18
|
+
if (!this._socket.writable) {
|
|
19
|
+
return reject(new Error('Socket is not writable'));
|
|
20
|
+
}
|
|
21
|
+
this._socket.write(frame, (error) => error ? reject(error) : resolve());
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
async sendRequest(data) {
|
|
25
|
+
const flags = XpcConstants.XPC_FLAGS_ALWAYS_SET;
|
|
26
|
+
const requestMessage = {
|
|
27
|
+
flags,
|
|
28
|
+
id: BigInt(this._nextMessageId[Http2Constants.ROOT_CHANNEL]),
|
|
29
|
+
body: data,
|
|
30
|
+
};
|
|
31
|
+
const encodedMessage = encodeMessage(requestMessage);
|
|
32
|
+
const dataFrame = new DataFrame(Http2Constants.ROOT_CHANNEL, encodedMessage, []);
|
|
33
|
+
await this.sendFrame(dataFrame.serialize());
|
|
34
|
+
}
|
|
35
|
+
async perform() {
|
|
36
|
+
try {
|
|
37
|
+
// Step 1: Send HTTP/2 magic sequence with proper error handling
|
|
38
|
+
await new Promise((resolve, reject) => {
|
|
39
|
+
if (!this._socket.writable) {
|
|
40
|
+
return reject(new Error('Socket is not writable for HTTP/2 magic sequence'));
|
|
41
|
+
}
|
|
42
|
+
this._socket.write(Http2Constants.HTTP2_MAGIC, (err) => err ? reject(err) : resolve());
|
|
43
|
+
});
|
|
44
|
+
// Step 2: Send SETTINGS frame on stream 0.
|
|
45
|
+
const settings = {
|
|
46
|
+
[SettingsFrame.MAX_CONCURRENT_STREAMS]: 100,
|
|
47
|
+
[SettingsFrame.INITIAL_WINDOW_SIZE]: 1048576,
|
|
48
|
+
};
|
|
49
|
+
const settingsFrame = new SettingsFrame(0, settings, []);
|
|
50
|
+
await this.sendFrame(settingsFrame.serialize());
|
|
51
|
+
// Step 3: Send WINDOW_UPDATE frame on stream 0.
|
|
52
|
+
const windowUpdateFrame = new WindowUpdateFrame(0, 983041);
|
|
53
|
+
await this.sendFrame(windowUpdateFrame.serialize());
|
|
54
|
+
// Step 4: Send a HEADERS frame on stream 1.
|
|
55
|
+
const headersFrameRoot = new HeadersFrame(Http2Constants.ROOT_CHANNEL, Buffer.from(''), ['END_HEADERS']);
|
|
56
|
+
await this.sendFrame(headersFrameRoot.serialize());
|
|
57
|
+
// Step 5: Send first DataFrame on stream 1 (empty payload).
|
|
58
|
+
await this.sendRequest({});
|
|
59
|
+
// Step 6: Send second DataFrame on stream 1 with specific flags.
|
|
60
|
+
const dataMessage = {
|
|
61
|
+
flags: 0x0201,
|
|
62
|
+
id: 0,
|
|
63
|
+
body: null,
|
|
64
|
+
};
|
|
65
|
+
const encodedDataMessage = encodeMessage(dataMessage);
|
|
66
|
+
const dataFrame = new DataFrame(Http2Constants.ROOT_CHANNEL, encodedDataMessage, []);
|
|
67
|
+
await this.sendFrame(dataFrame.serialize());
|
|
68
|
+
this._nextMessageId[Http2Constants.ROOT_CHANNEL]++;
|
|
69
|
+
// Step 7: Send a HEADERS frame on stream 3.
|
|
70
|
+
const headersFrameReply = new HeadersFrame(Http2Constants.REPLY_CHANNEL, Buffer.from(''), ['END_HEADERS']);
|
|
71
|
+
await this.sendFrame(headersFrameReply.serialize());
|
|
72
|
+
// Step 8: Open REPLY_CHANNEL with INIT_HANDSHAKE flags.
|
|
73
|
+
const replyMessage = {
|
|
74
|
+
flags: XpcConstants.XPC_FLAGS_ALWAYS_SET |
|
|
75
|
+
XpcConstants.XPC_FLAGS_INIT_HANDSHAKE,
|
|
76
|
+
id: 0,
|
|
77
|
+
body: null,
|
|
78
|
+
};
|
|
79
|
+
const encodedReplyMessage = encodeMessage(replyMessage);
|
|
80
|
+
const replyDataFrame = new DataFrame(Http2Constants.REPLY_CHANNEL, encodedReplyMessage, []);
|
|
81
|
+
await this.sendFrame(replyDataFrame.serialize());
|
|
82
|
+
this._nextMessageId[Http2Constants.REPLY_CHANNEL]++;
|
|
83
|
+
// Step 9: Send SETTINGS ACK frame.
|
|
84
|
+
const ackFrame = new SettingsFrame(0, null, ['ACK']);
|
|
85
|
+
await this.sendFrame(ackFrame.serialize());
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// Provide detailed error information
|
|
89
|
+
throw new Error(error instanceof Error
|
|
90
|
+
? `Handshake failed at step: ${error.message}`
|
|
91
|
+
: 'Unknown handshake error');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export default Handshake;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
interface Service {
|
|
2
|
+
serviceName: string;
|
|
3
|
+
port: string;
|
|
4
|
+
}
|
|
5
|
+
interface ServicesResponse {
|
|
6
|
+
services: Service[];
|
|
7
|
+
}
|
|
8
|
+
declare class RemoteXpcConnection {
|
|
9
|
+
private readonly _address;
|
|
10
|
+
private _socket;
|
|
11
|
+
private _handshake;
|
|
12
|
+
private _isConnected;
|
|
13
|
+
private _services;
|
|
14
|
+
constructor(address: [string, number]);
|
|
15
|
+
/**
|
|
16
|
+
* Connect to the remote device and perform handshake
|
|
17
|
+
* @returns Promise that resolves with the list of available services
|
|
18
|
+
*/
|
|
19
|
+
connect(): Promise<ServicesResponse>;
|
|
20
|
+
/**
|
|
21
|
+
* Close the connection
|
|
22
|
+
*/
|
|
23
|
+
close(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Get the list of available services
|
|
26
|
+
* @returns Array of available services
|
|
27
|
+
*/
|
|
28
|
+
getServices(): Service[];
|
|
29
|
+
/**
|
|
30
|
+
* List all available services
|
|
31
|
+
* @returns Array of all available services
|
|
32
|
+
*/
|
|
33
|
+
listAllServices(): Service[];
|
|
34
|
+
/**
|
|
35
|
+
* Find a service by name
|
|
36
|
+
* @param serviceName The name of the service to find
|
|
37
|
+
* @returns The service or throws an error if not found
|
|
38
|
+
*/
|
|
39
|
+
findService(serviceName: string): Service;
|
|
40
|
+
/**
|
|
41
|
+
* Remove all listeners from the socket to prevent memory leaks
|
|
42
|
+
*/
|
|
43
|
+
private cleanupSocket;
|
|
44
|
+
/**
|
|
45
|
+
* Clean up all resources
|
|
46
|
+
*/
|
|
47
|
+
private cleanupResources;
|
|
48
|
+
/**
|
|
49
|
+
* Force cleanup by destroying the socket and cleaning up resources
|
|
50
|
+
*/
|
|
51
|
+
private forceCleanup;
|
|
52
|
+
}
|
|
53
|
+
export default RemoteXpcConnection;
|
|
54
|
+
export { type Service, type ServicesResponse };
|
|
55
|
+
//# sourceMappingURL=remote-xpc-connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-xpc-connection.d.ts","sourceRoot":"","sources":["../../../../src/lib/remote-xpc/remote-xpc-connection.ts"],"names":[],"mappings":"AAgBA,UAAU,OAAO;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAKD,cAAM,mBAAmB;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,SAAS,CAAwB;gBAE7B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAQrC;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA0J1C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0E5B;;;OAGG;IACH,WAAW,IAAI,OAAO,EAAE;IAOxB;;;OAGG;IACH,eAAe,IAAI,OAAO,EAAE;IAI5B;;;;OAIG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAYzC;;OAEG;IACH,OAAO,CAAC,aAAa;IAgCrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,YAAY;CAerB;AAkFD,eAAe,mBAAmB,CAAC;AACnC,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,gBAAgB,EAAE,CAAC"}
|