appium-mac2-driver 3.4.1 → 3.4.2
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/lib/commands/native-record-screen.d.ts +13 -3
- package/build/lib/commands/native-record-screen.d.ts.map +1 -1
- package/build/lib/commands/native-record-screen.js +35 -12
- package/build/lib/commands/native-record-screen.js.map +1 -1
- package/lib/commands/native-record-screen.ts +36 -11
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [3.4.2](https://github.com/appium/appium-mac2-driver/compare/v3.4.1...v3.4.2) (2026-05-13)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* native video broadcast cleanup ([#384](https://github.com/appium/appium-mac2-driver/issues/384)) ([ea81c2f](https://github.com/appium/appium-mac2-driver/commit/ea81c2fd7b5177de2f8d7ae9f157c1ec73c55d3d))
|
|
6
|
+
|
|
1
7
|
## [3.4.1](https://github.com/appium/appium-mac2-driver/compare/v3.4.0...v3.4.1) (2026-05-13)
|
|
2
8
|
|
|
3
9
|
### Bug Fixes
|
|
@@ -41,9 +41,9 @@ export declare class NativeVideoChunksBroadcaster {
|
|
|
41
41
|
/**
|
|
42
42
|
* Background monitor for a native screen recording attachment.
|
|
43
43
|
*
|
|
44
|
-
* This is scheduled as a fire-and-forget task by {@link schedule}
|
|
45
|
-
*
|
|
46
|
-
*
|
|
44
|
+
* This is scheduled as a fire-and-forget task by {@link schedule}; the
|
|
45
|
+
* promise is removed from `_publishers` when the monitor exits (see
|
|
46
|
+
* {@link _finishPublisher}). To make sure a failure here can never surface as an
|
|
47
47
|
* unhandled promise rejection (which terminates the Appium server process
|
|
48
48
|
* on Node.js 24+), this method MUST never reject: every error path logs a
|
|
49
49
|
* warning and returns normally.
|
|
@@ -51,6 +51,16 @@ export declare class NativeVideoChunksBroadcaster {
|
|
|
51
51
|
private _createPublisher;
|
|
52
52
|
private _wait;
|
|
53
53
|
private _cleanup;
|
|
54
|
+
/**
|
|
55
|
+
* Runs {@link _createPublisher} and always clears `_publishers` /
|
|
56
|
+
* `_wakeups` / `_terminationRequests` for `uuid` when the monitor exits.
|
|
57
|
+
*/
|
|
58
|
+
private _runPublisher;
|
|
59
|
+
/**
|
|
60
|
+
* Drops all bookkeeping for a finished publisher so {@link hasPublishers}
|
|
61
|
+
* reflects reality and `notifyStopped` state does not leak across sessions.
|
|
62
|
+
*/
|
|
63
|
+
private _finishPublisher;
|
|
54
64
|
}
|
|
55
65
|
/**
|
|
56
66
|
* Initiates a new native screen recording session via XCTest.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-record-screen.d.ts","sourceRoot":"","sources":["../../../lib/commands/native-record-screen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,YAAY,MAAM,aAAa,CAAC;AAc5C,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,4BAA4B;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IAIzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IAKjE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAc;IACnD,OAAO,CAAC,WAAW,CAAU;gBAEjB,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY;IAS/C,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5B;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"native-record-screen.d.ts","sourceRoot":"","sources":["../../../lib/commands/native-record-screen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,YAAY,MAAM,aAAa,CAAC;AAc5C,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,4BAA4B;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IAIzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IAKjE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAc;IACnD,OAAO,CAAC,WAAW,CAAU;gBAEjB,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY;IAS/C,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5B;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBhD;;;;;;;;;OASG;YACW,gBAAgB;YA6GhB,KAAK;YAiBL,QAAQ;IA6BtB;;;OAGG;YACW,aAAa;IAQ3B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAKzB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,UAAU,EAChB,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAQ1B;AAED;;;;GAIG;AACH,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAEjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,UAAU,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACxC,aAAa,CAAC,EAAE,MAAM,EACtB,UAAU,CAAC,EAAE,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAC9C,aAAa,CAAC,EAAE,OAAO,GACtB,OAAO,CAAC,MAAM,CAAC,CAuDjB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAE5F"}
|
|
@@ -48,7 +48,7 @@ class NativeVideoChunksBroadcaster {
|
|
|
48
48
|
}
|
|
49
49
|
schedule(uuid) {
|
|
50
50
|
if (!this._publishers.has(uuid)) {
|
|
51
|
-
this._publishers.set(uuid, this.
|
|
51
|
+
this._publishers.set(uuid, this._runPublisher(uuid));
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
/**
|
|
@@ -78,9 +78,13 @@ class NativeVideoChunksBroadcaster {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
async shutdown(timeoutMs) {
|
|
81
|
+
// Snapshot keys before publishers remove themselves from `_publishers`
|
|
82
|
+
// in `_finishPublisher`, so we still know which attachment files to
|
|
83
|
+
// delete after `_wait` completes.
|
|
84
|
+
const uuidsAtShutdown = [...this._publishers.keys()];
|
|
81
85
|
// Wake up every active publisher so they don't have to wait for their
|
|
82
86
|
// next polling tick before flushing and exiting.
|
|
83
|
-
for (const uuid of
|
|
87
|
+
for (const uuid of uuidsAtShutdown) {
|
|
84
88
|
this.notifyStopped(uuid);
|
|
85
89
|
}
|
|
86
90
|
try {
|
|
@@ -89,7 +93,7 @@ class NativeVideoChunksBroadcaster {
|
|
|
89
93
|
catch (e) {
|
|
90
94
|
this._log.warn(e instanceof Error ? e.message : String(e));
|
|
91
95
|
}
|
|
92
|
-
await this._cleanup();
|
|
96
|
+
await this._cleanup(uuidsAtShutdown);
|
|
93
97
|
this._publishers.clear();
|
|
94
98
|
this._wakeups.clear();
|
|
95
99
|
this._terminationRequests.clear();
|
|
@@ -97,9 +101,9 @@ class NativeVideoChunksBroadcaster {
|
|
|
97
101
|
/**
|
|
98
102
|
* Background monitor for a native screen recording attachment.
|
|
99
103
|
*
|
|
100
|
-
* This is scheduled as a fire-and-forget task by {@link schedule}
|
|
101
|
-
*
|
|
102
|
-
*
|
|
104
|
+
* This is scheduled as a fire-and-forget task by {@link schedule}; the
|
|
105
|
+
* promise is removed from `_publishers` when the monitor exits (see
|
|
106
|
+
* {@link _finishPublisher}). To make sure a failure here can never surface as an
|
|
103
107
|
* unhandled promise rejection (which terminates the Appium server process
|
|
104
108
|
* on Node.js 24+), this method MUST never reject: every error path logs a
|
|
105
109
|
* warning and returns normally.
|
|
@@ -194,9 +198,6 @@ class NativeVideoChunksBroadcaster {
|
|
|
194
198
|
(e instanceof Error ? e.message : String(e)));
|
|
195
199
|
return;
|
|
196
200
|
}
|
|
197
|
-
finally {
|
|
198
|
-
this._terminationRequests.delete(uuid);
|
|
199
|
-
}
|
|
200
201
|
this._log.warn(`Stopped monitoring of the native video recording identified by ${uuid} ` +
|
|
201
202
|
`because of the timeout`);
|
|
202
203
|
}
|
|
@@ -216,17 +217,18 @@ class NativeVideoChunksBroadcaster {
|
|
|
216
217
|
clearTimeout(timer);
|
|
217
218
|
}
|
|
218
219
|
}
|
|
219
|
-
async _cleanup() {
|
|
220
|
-
if (
|
|
220
|
+
async _cleanup(uuids) {
|
|
221
|
+
if (uuids.length === 0) {
|
|
221
222
|
return;
|
|
222
223
|
}
|
|
224
|
+
const uuidSet = new Set(uuids);
|
|
223
225
|
const attachments = await listAttachments();
|
|
224
226
|
if (attachments.length === 0) {
|
|
225
227
|
return;
|
|
226
228
|
}
|
|
227
229
|
const tasks = attachments
|
|
228
230
|
.map((attachmentPath) => [node_path_1.default.basename(attachmentPath), attachmentPath])
|
|
229
|
-
.filter(([name]) =>
|
|
231
|
+
.filter(([name]) => uuidSet.has(name))
|
|
230
232
|
.map(([, attachmentPath]) => support_1.fs.rimraf(attachmentPath));
|
|
231
233
|
if (tasks.length === 0) {
|
|
232
234
|
return;
|
|
@@ -239,6 +241,27 @@ class NativeVideoChunksBroadcaster {
|
|
|
239
241
|
this._log.warn(`Could not cleanup some leftover video recordings: ${e instanceof Error ? e.message : String(e)}`);
|
|
240
242
|
}
|
|
241
243
|
}
|
|
244
|
+
/**
|
|
245
|
+
* Runs {@link _createPublisher} and always clears `_publishers` /
|
|
246
|
+
* `_wakeups` / `_terminationRequests` for `uuid` when the monitor exits.
|
|
247
|
+
*/
|
|
248
|
+
async _runPublisher(uuid) {
|
|
249
|
+
try {
|
|
250
|
+
await this._createPublisher(uuid);
|
|
251
|
+
}
|
|
252
|
+
finally {
|
|
253
|
+
this._finishPublisher(uuid);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Drops all bookkeeping for a finished publisher so {@link hasPublishers}
|
|
258
|
+
* reflects reality and `notifyStopped` state does not leak across sessions.
|
|
259
|
+
*/
|
|
260
|
+
_finishPublisher(uuid) {
|
|
261
|
+
this._publishers.delete(uuid);
|
|
262
|
+
this._wakeups.delete(uuid);
|
|
263
|
+
this._terminationRequests.delete(uuid);
|
|
264
|
+
}
|
|
242
265
|
}
|
|
243
266
|
exports.NativeVideoChunksBroadcaster = NativeVideoChunksBroadcaster;
|
|
244
267
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-record-screen.js","sourceRoot":"","sources":["../../../lib/commands/native-record-screen.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"native-record-screen.js","sourceRoot":"","sources":["../../../lib/commands/native-record-screen.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,7 +60,7 @@ export class NativeVideoChunksBroadcaster {
|
|
|
60
60
|
|
|
61
61
|
schedule(uuid: string): void {
|
|
62
62
|
if (!this._publishers.has(uuid)) {
|
|
63
|
-
this._publishers.set(uuid, this.
|
|
63
|
+
this._publishers.set(uuid, this._runPublisher(uuid));
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
@@ -93,9 +93,13 @@ export class NativeVideoChunksBroadcaster {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
async shutdown(timeoutMs: number): Promise<void> {
|
|
96
|
+
// Snapshot keys before publishers remove themselves from `_publishers`
|
|
97
|
+
// in `_finishPublisher`, so we still know which attachment files to
|
|
98
|
+
// delete after `_wait` completes.
|
|
99
|
+
const uuidsAtShutdown = [...this._publishers.keys()];
|
|
96
100
|
// Wake up every active publisher so they don't have to wait for their
|
|
97
101
|
// next polling tick before flushing and exiting.
|
|
98
|
-
for (const uuid of
|
|
102
|
+
for (const uuid of uuidsAtShutdown) {
|
|
99
103
|
this.notifyStopped(uuid);
|
|
100
104
|
}
|
|
101
105
|
try {
|
|
@@ -104,7 +108,7 @@ export class NativeVideoChunksBroadcaster {
|
|
|
104
108
|
this._log.warn(e instanceof Error ? e.message : String(e));
|
|
105
109
|
}
|
|
106
110
|
|
|
107
|
-
await this._cleanup();
|
|
111
|
+
await this._cleanup(uuidsAtShutdown);
|
|
108
112
|
|
|
109
113
|
this._publishers.clear();
|
|
110
114
|
this._wakeups.clear();
|
|
@@ -114,9 +118,9 @@ export class NativeVideoChunksBroadcaster {
|
|
|
114
118
|
/**
|
|
115
119
|
* Background monitor for a native screen recording attachment.
|
|
116
120
|
*
|
|
117
|
-
* This is scheduled as a fire-and-forget task by {@link schedule}
|
|
118
|
-
*
|
|
119
|
-
*
|
|
121
|
+
* This is scheduled as a fire-and-forget task by {@link schedule}; the
|
|
122
|
+
* promise is removed from `_publishers` when the monitor exits (see
|
|
123
|
+
* {@link _finishPublisher}). To make sure a failure here can never surface as an
|
|
120
124
|
* unhandled promise rejection (which terminates the Appium server process
|
|
121
125
|
* on Node.js 24+), this method MUST never reject: every error path logs a
|
|
122
126
|
* warning and returns normally.
|
|
@@ -222,8 +226,6 @@ export class NativeVideoChunksBroadcaster {
|
|
|
222
226
|
(e instanceof Error ? e.message : String(e)),
|
|
223
227
|
);
|
|
224
228
|
return;
|
|
225
|
-
} finally {
|
|
226
|
-
this._terminationRequests.delete(uuid);
|
|
227
229
|
}
|
|
228
230
|
|
|
229
231
|
this._log.warn(
|
|
@@ -249,10 +251,11 @@ export class NativeVideoChunksBroadcaster {
|
|
|
249
251
|
}
|
|
250
252
|
}
|
|
251
253
|
|
|
252
|
-
private async _cleanup(): Promise<void> {
|
|
253
|
-
if (
|
|
254
|
+
private async _cleanup(uuids: readonly string[]): Promise<void> {
|
|
255
|
+
if (uuids.length === 0) {
|
|
254
256
|
return;
|
|
255
257
|
}
|
|
258
|
+
const uuidSet = new Set(uuids);
|
|
256
259
|
|
|
257
260
|
const attachments = await listAttachments();
|
|
258
261
|
if (attachments.length === 0) {
|
|
@@ -260,7 +263,7 @@ export class NativeVideoChunksBroadcaster {
|
|
|
260
263
|
}
|
|
261
264
|
const tasks: Promise<any>[] = attachments
|
|
262
265
|
.map((attachmentPath) => [path.basename(attachmentPath), attachmentPath])
|
|
263
|
-
.filter(([name]) =>
|
|
266
|
+
.filter(([name]) => uuidSet.has(name))
|
|
264
267
|
.map(([, attachmentPath]) => fs.rimraf(attachmentPath));
|
|
265
268
|
if (tasks.length === 0) {
|
|
266
269
|
return;
|
|
@@ -276,6 +279,28 @@ export class NativeVideoChunksBroadcaster {
|
|
|
276
279
|
);
|
|
277
280
|
}
|
|
278
281
|
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Runs {@link _createPublisher} and always clears `_publishers` /
|
|
285
|
+
* `_wakeups` / `_terminationRequests` for `uuid` when the monitor exits.
|
|
286
|
+
*/
|
|
287
|
+
private async _runPublisher(uuid: string): Promise<void> {
|
|
288
|
+
try {
|
|
289
|
+
await this._createPublisher(uuid);
|
|
290
|
+
} finally {
|
|
291
|
+
this._finishPublisher(uuid);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Drops all bookkeeping for a finished publisher so {@link hasPublishers}
|
|
297
|
+
* reflects reality and `notifyStopped` state does not leak across sessions.
|
|
298
|
+
*/
|
|
299
|
+
private _finishPublisher(uuid: string): void {
|
|
300
|
+
this._publishers.delete(uuid);
|
|
301
|
+
this._wakeups.delete(uuid);
|
|
302
|
+
this._terminationRequests.delete(uuid);
|
|
303
|
+
}
|
|
279
304
|
}
|
|
280
305
|
|
|
281
306
|
/**
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-mac2-driver",
|
|
3
|
-
"version": "3.4.
|
|
3
|
+
"version": "3.4.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "appium-mac2-driver",
|
|
9
|
-
"version": "3.4.
|
|
9
|
+
"version": "3.4.2",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@appium/strongbox": "^1.0.0-rc.1",
|