appium-ios-remotexpc 1.1.2 → 1.1.3
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 +6 -0
- package/build/src/lib/port-forwarding/device-port-forwarder.d.ts +1 -1
- package/build/src/lib/port-forwarding/device-port-forwarder.d.ts.map +1 -1
- package/build/src/lib/port-forwarding/device-port-forwarder.js +24 -14
- package/build/src/lib/port-forwarding/device-port-forwarder.js.map +1 -1
- package/build/src/lib/port-forwarding/types.d.ts +3 -2
- package/build/src/lib/port-forwarding/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/lib/port-forwarding/device-port-forwarder.ts +26 -14
- package/src/lib/port-forwarding/types.ts +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [1.1.3](https://github.com/appium/appium-ios-remotexpc/compare/v1.1.2...v1.1.3) (2026-05-06)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* Tune emitted events on the port forwarder ([#199](https://github.com/appium/appium-ios-remotexpc/issues/199)) ([d528f6e](https://github.com/appium/appium-ios-remotexpc/commit/d528f6e779e34371ba9ac980300f14b1eb779fe5))
|
|
6
|
+
|
|
1
7
|
## [1.1.2](https://github.com/appium/appium-ios-remotexpc/compare/v1.1.1...v1.1.2) (2026-05-03)
|
|
2
8
|
|
|
3
9
|
### Bug Fixes
|
|
@@ -24,7 +24,7 @@ export declare class DevicePortForwarder extends EventEmitter {
|
|
|
24
24
|
on<K extends keyof DevicePortForwarderEvents>(eventName: K, listener: DevicePortForwarderEvents[K]): this;
|
|
25
25
|
once<K extends keyof DevicePortForwarderEvents>(eventName: K, listener: DevicePortForwarderEvents[K]): this;
|
|
26
26
|
off<K extends keyof DevicePortForwarderEvents>(eventName: K, listener: DevicePortForwarderEvents[K]): this;
|
|
27
|
-
private
|
|
27
|
+
private handleDownstreamConnection;
|
|
28
28
|
private openUpstreamSocket;
|
|
29
29
|
}
|
|
30
30
|
//# sourceMappingURL=device-port-forwarder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-port-forwarder.d.ts","sourceRoot":"","sources":["../../../../src/lib/port-forwarding/device-port-forwarder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAE3B,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0B;IAC3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAA0B;IAC7D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;gBAGjD,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,0BAA0B;IAUrC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBlB,EAAE,CAAC,CAAC,SAAS,MAAM,yBAAyB,EACnD,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACrC,IAAI;IAOE,IAAI,CAAC,CAAC,SAAS,MAAM,yBAAyB,EACrD,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACrC,IAAI;IAOE,GAAG,CAAC,CAAC,SAAS,MAAM,yBAAyB,EACpD,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACrC,IAAI;YAOO,
|
|
1
|
+
{"version":3,"file":"device-port-forwarder.d.ts","sourceRoot":"","sources":["../../../../src/lib/port-forwarding/device-port-forwarder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAE3B,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0B;IAC3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAA0B;IAC7D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;gBAGjD,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,0BAA0B;IAUrC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBlB,EAAE,CAAC,CAAC,SAAS,MAAM,yBAAyB,EACnD,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACrC,IAAI;IAOE,IAAI,CAAC,CAAC,SAAS,MAAM,yBAAyB,EACrD,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACrC,IAAI;IAOE,GAAG,CAAC,CAAC,SAAS,MAAM,yBAAyB,EACpD,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACrC,IAAI;YAOO,0BAA0B;YA4D1B,kBAAkB;CAUjC"}
|
|
@@ -30,7 +30,7 @@ export class DevicePortForwarder extends EventEmitter {
|
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
32
|
this.server = createServer((localSocket) => {
|
|
33
|
-
void this.
|
|
33
|
+
void this.handleDownstreamConnection(localSocket);
|
|
34
34
|
});
|
|
35
35
|
await new Promise((resolve, reject) => {
|
|
36
36
|
this.server?.once('error', reject);
|
|
@@ -66,21 +66,18 @@ export class DevicePortForwarder extends EventEmitter {
|
|
|
66
66
|
off(eventName, listener) {
|
|
67
67
|
return super.off(eventName, listener);
|
|
68
68
|
}
|
|
69
|
-
async
|
|
69
|
+
async handleDownstreamConnection(localSocket) {
|
|
70
70
|
this.activeSockets.add(localSocket);
|
|
71
71
|
this.emit('clientConnected', localSocket);
|
|
72
|
-
localSocket.once('close', () => {
|
|
73
|
-
this.activeSockets.delete(localSocket);
|
|
74
|
-
this.emit('clientDisconnected', localSocket);
|
|
75
|
-
});
|
|
76
72
|
let upstreamSocket;
|
|
77
73
|
try {
|
|
78
74
|
upstreamSocket = await this.openUpstreamSocket();
|
|
79
75
|
}
|
|
80
76
|
catch (err) {
|
|
77
|
+
this.activeSockets.delete(localSocket);
|
|
81
78
|
log.debug(`Failed to open upstream socket for device port ${this.devicePort}: ${err}`);
|
|
82
79
|
this.emit('upstreamConnectError', err);
|
|
83
|
-
this.emit('
|
|
80
|
+
this.emit('clientDisconnected', localSocket, err);
|
|
84
81
|
localSocket.destroy();
|
|
85
82
|
return;
|
|
86
83
|
}
|
|
@@ -88,6 +85,8 @@ export class DevicePortForwarder extends EventEmitter {
|
|
|
88
85
|
this.emit('upstreamConnected', upstreamSocket);
|
|
89
86
|
let cleanedUp = false;
|
|
90
87
|
const teardown = () => {
|
|
88
|
+
this.activeSockets.delete(localSocket);
|
|
89
|
+
this.activeSockets.delete(upstreamSocket);
|
|
91
90
|
if (cleanedUp) {
|
|
92
91
|
return;
|
|
93
92
|
}
|
|
@@ -96,14 +95,25 @@ export class DevicePortForwarder extends EventEmitter {
|
|
|
96
95
|
upstreamSocket.unpipe(localSocket);
|
|
97
96
|
localSocket.destroy();
|
|
98
97
|
upstreamSocket.destroy();
|
|
99
|
-
this.activeSockets.delete(localSocket);
|
|
100
|
-
this.activeSockets.delete(upstreamSocket);
|
|
101
|
-
this.emit('upstreamDisconnected', upstreamSocket);
|
|
102
98
|
};
|
|
103
|
-
|
|
104
|
-
localSocket.once('error',
|
|
105
|
-
|
|
106
|
-
|
|
99
|
+
let clientError;
|
|
100
|
+
localSocket.once('error', (err) => {
|
|
101
|
+
clientError = err;
|
|
102
|
+
teardown();
|
|
103
|
+
});
|
|
104
|
+
localSocket.once('close', () => {
|
|
105
|
+
this.emit('clientDisconnected', localSocket, clientError);
|
|
106
|
+
teardown();
|
|
107
|
+
});
|
|
108
|
+
let upstreamError;
|
|
109
|
+
upstreamSocket.once('error', (err) => {
|
|
110
|
+
upstreamError = err;
|
|
111
|
+
teardown();
|
|
112
|
+
});
|
|
113
|
+
upstreamSocket.once('close', () => {
|
|
114
|
+
this.emit('upstreamDisconnected', upstreamSocket, upstreamError);
|
|
115
|
+
teardown();
|
|
116
|
+
});
|
|
107
117
|
localSocket.pipe(upstreamSocket);
|
|
108
118
|
upstreamSocket.pipe(localSocket);
|
|
109
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-port-forwarder.js","sourceRoot":"","sources":["../../../../src/lib/port-forwarding/device-port-forwarder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAkB,YAAY,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAOzC,MAAM,GAAG,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAExC;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IAC3C,MAAM,CAAU;IACP,SAAS,CAAS;IAClB,UAAU,CAAS;IACnB,IAAI,CAAS;IACb,gBAAgB,CAA0B;IAC1C,iBAAiB,CAA2B;IAC5C,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnD,YACE,SAAiB,EACjB,UAAkB,EAClB,OAAmC;QAEnC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;QACxC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,WAAmB,EAAE,EAAE;YACjD,KAAK,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"device-port-forwarder.js","sourceRoot":"","sources":["../../../../src/lib/port-forwarding/device-port-forwarder.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,10 +29,11 @@ export interface DevicePortForwarderEvents {
|
|
|
29
29
|
started: () => void;
|
|
30
30
|
stopped: () => void;
|
|
31
31
|
clientConnected: (socket: Socket) => void;
|
|
32
|
-
clientDisconnected: (socket: Socket) => void;
|
|
32
|
+
clientDisconnected: (socket: Socket, error?: Error) => void;
|
|
33
33
|
upstreamConnected: (socket: Socket) => void;
|
|
34
|
-
upstreamDisconnected: (socket: Socket) => void;
|
|
34
|
+
upstreamDisconnected: (socket: Socket, error?: Error) => void;
|
|
35
35
|
upstreamConnectError: (error: unknown) => void;
|
|
36
|
+
/** @deprecated Not used, will be removed in the next major version. */
|
|
36
37
|
error: (error: unknown) => void;
|
|
37
38
|
}
|
|
38
39
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/port-forwarding/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,CACpC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,gBAAgB,CAAC,EAAE,MAAM,KACtB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C;;;OAGG;IACH,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;CAC7C;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/port-forwarding/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,CACpC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,gBAAgB,CAAC,EAAE,MAAM,KACtB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C;;;OAGG;IACH,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;CAC7C;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC5D,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9D,oBAAoB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,uEAAuE;IACvE,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACjC"}
|
package/package.json
CHANGED
|
@@ -45,7 +45,7 @@ export class DevicePortForwarder extends EventEmitter {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
this.server = createServer((localSocket: Socket) => {
|
|
48
|
-
void this.
|
|
48
|
+
void this.handleDownstreamConnection(localSocket);
|
|
49
49
|
});
|
|
50
50
|
|
|
51
51
|
await new Promise<void>((resolve, reject) => {
|
|
@@ -107,23 +107,20 @@ export class DevicePortForwarder extends EventEmitter {
|
|
|
107
107
|
) as this;
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
private async
|
|
110
|
+
private async handleDownstreamConnection(localSocket: Socket): Promise<void> {
|
|
111
111
|
this.activeSockets.add(localSocket);
|
|
112
112
|
this.emit('clientConnected', localSocket);
|
|
113
|
-
localSocket.once('close', () => {
|
|
114
|
-
this.activeSockets.delete(localSocket);
|
|
115
|
-
this.emit('clientDisconnected', localSocket);
|
|
116
|
-
});
|
|
117
113
|
|
|
118
114
|
let upstreamSocket: Socket | undefined;
|
|
119
115
|
try {
|
|
120
116
|
upstreamSocket = await this.openUpstreamSocket();
|
|
121
117
|
} catch (err) {
|
|
118
|
+
this.activeSockets.delete(localSocket);
|
|
122
119
|
log.debug(
|
|
123
120
|
`Failed to open upstream socket for device port ${this.devicePort}: ${err}`,
|
|
124
121
|
);
|
|
125
122
|
this.emit('upstreamConnectError', err);
|
|
126
|
-
this.emit('
|
|
123
|
+
this.emit('clientDisconnected', localSocket, err);
|
|
127
124
|
localSocket.destroy();
|
|
128
125
|
return;
|
|
129
126
|
}
|
|
@@ -133,23 +130,38 @@ export class DevicePortForwarder extends EventEmitter {
|
|
|
133
130
|
|
|
134
131
|
let cleanedUp = false;
|
|
135
132
|
const teardown = (): void => {
|
|
133
|
+
this.activeSockets.delete(localSocket);
|
|
134
|
+
this.activeSockets.delete(upstreamSocket);
|
|
135
|
+
|
|
136
136
|
if (cleanedUp) {
|
|
137
137
|
return;
|
|
138
138
|
}
|
|
139
139
|
cleanedUp = true;
|
|
140
|
+
|
|
140
141
|
localSocket.unpipe(upstreamSocket);
|
|
141
142
|
upstreamSocket.unpipe(localSocket);
|
|
142
143
|
localSocket.destroy();
|
|
143
144
|
upstreamSocket.destroy();
|
|
144
|
-
this.activeSockets.delete(localSocket);
|
|
145
|
-
this.activeSockets.delete(upstreamSocket);
|
|
146
|
-
this.emit('upstreamDisconnected', upstreamSocket);
|
|
147
145
|
};
|
|
148
146
|
|
|
149
|
-
|
|
150
|
-
localSocket.once('error',
|
|
151
|
-
|
|
152
|
-
|
|
147
|
+
let clientError: Error | undefined;
|
|
148
|
+
localSocket.once('error', (err) => {
|
|
149
|
+
clientError = err;
|
|
150
|
+
teardown();
|
|
151
|
+
});
|
|
152
|
+
localSocket.once('close', () => {
|
|
153
|
+
this.emit('clientDisconnected', localSocket, clientError);
|
|
154
|
+
teardown();
|
|
155
|
+
});
|
|
156
|
+
let upstreamError: Error | undefined;
|
|
157
|
+
upstreamSocket.once('error', (err) => {
|
|
158
|
+
upstreamError = err;
|
|
159
|
+
teardown();
|
|
160
|
+
});
|
|
161
|
+
upstreamSocket.once('close', () => {
|
|
162
|
+
this.emit('upstreamDisconnected', upstreamSocket, upstreamError);
|
|
163
|
+
teardown();
|
|
164
|
+
});
|
|
153
165
|
|
|
154
166
|
localSocket.pipe(upstreamSocket);
|
|
155
167
|
upstreamSocket.pipe(localSocket);
|
|
@@ -37,9 +37,10 @@ export interface DevicePortForwarderEvents {
|
|
|
37
37
|
started: () => void;
|
|
38
38
|
stopped: () => void;
|
|
39
39
|
clientConnected: (socket: Socket) => void;
|
|
40
|
-
clientDisconnected: (socket: Socket) => void;
|
|
40
|
+
clientDisconnected: (socket: Socket, error?: Error) => void;
|
|
41
41
|
upstreamConnected: (socket: Socket) => void;
|
|
42
|
-
upstreamDisconnected: (socket: Socket) => void;
|
|
42
|
+
upstreamDisconnected: (socket: Socket, error?: Error) => void;
|
|
43
43
|
upstreamConnectError: (error: unknown) => void;
|
|
44
|
+
/** @deprecated Not used, will be removed in the next major version. */
|
|
44
45
|
error: (error: unknown) => void;
|
|
45
46
|
}
|