appium-mac2-driver 2.1.1 → 2.2.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.
- package/CHANGELOG.md +7 -0
- package/README.md +7 -0
- package/build/lib/commands/bidi/constants.d.ts +3 -0
- package/build/lib/commands/bidi/constants.d.ts.map +1 -0
- package/build/lib/commands/bidi/constants.js +7 -0
- package/build/lib/commands/bidi/constants.js.map +1 -0
- package/build/lib/commands/bidi/models.d.ts +3 -0
- package/build/lib/commands/bidi/models.d.ts.map +1 -0
- package/build/lib/commands/bidi/models.js +14 -0
- package/build/lib/commands/bidi/models.js.map +1 -0
- package/build/lib/commands/bidi/types.d.ts +12 -0
- package/build/lib/commands/bidi/types.d.ts.map +1 -0
- package/build/lib/commands/bidi/types.js +3 -0
- package/build/lib/commands/bidi/types.js.map +1 -0
- package/build/lib/commands/native-record-screen.d.ts +21 -10
- package/build/lib/commands/native-record-screen.d.ts.map +1 -1
- package/build/lib/commands/native-record-screen.js +195 -34
- package/build/lib/commands/native-record-screen.js.map +1 -1
- package/build/lib/driver.d.ts +4 -4
- package/build/lib/driver.d.ts.map +1 -1
- package/build/lib/driver.js +3 -3
- package/build/lib/driver.js.map +1 -1
- package/build/lib/execute-method-map.d.ts +1 -1
- package/build/lib/execute-method-map.d.ts.map +1 -1
- package/build/lib/execute-method-map.js +2 -1
- package/build/lib/execute-method-map.js.map +1 -1
- package/lib/commands/bidi/constants.ts +3 -0
- package/lib/commands/bidi/models.ts +15 -0
- package/lib/commands/bidi/types.ts +11 -0
- package/lib/commands/native-record-screen.ts +192 -38
- package/lib/driver.js +7 -7
- package/lib/execute-method-map.ts +2 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [2.2.0](https://github.com/appium/appium-mac2-driver/compare/v2.1.1...v2.2.0) (2025-02-11)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Publish native video chunks over bidi ([#333](https://github.com/appium/appium-mac2-driver/issues/333)) ([6cf4f6d](https://github.com/appium/appium-mac2-driver/commit/6cf4f6d341798290e8416120de2ac93e1263f051))
|
|
7
|
+
|
|
1
8
|
## [2.1.1](https://github.com/appium/appium-mac2-driver/compare/v2.1.0...v2.1.1) (2025-02-08)
|
|
2
9
|
|
|
3
10
|
|
package/README.md
CHANGED
|
@@ -617,6 +617,12 @@ then it would be stopped automatically upon the test session termination,
|
|
|
617
617
|
and leftover videos would be deleted as well.
|
|
618
618
|
Xcode must be at version 15+.
|
|
619
619
|
|
|
620
|
+
> [!TIP]
|
|
621
|
+
> Invocation of this API also triggers broadcasting of
|
|
622
|
+
> [appium:mac2.nativeVideoRecordingChunkAdded](./docs/bidi.md#appiummac2nativevideorecordingchunkadded)
|
|
623
|
+
> BiDi events. Make sure to subscribe to such events **before** this API is invoked to ensure
|
|
624
|
+
> all video chunks are being properly consumed on the client side.
|
|
625
|
+
|
|
620
626
|
#### Arguments
|
|
621
627
|
|
|
622
628
|
Name | Type | Required | Description | Example
|
|
@@ -677,6 +683,7 @@ method | string | no | The http multipart upload method name. The 'PUT' one is u
|
|
|
677
683
|
headers | map | no | Additional headers mapping for multipart http(s) uploads | `{"header": "value"}`
|
|
678
684
|
fileFieldName | string | no | The name of the form field, where the file content BLOB should be stored for http(s) uploads. `file` by default | payload
|
|
679
685
|
formFields | Map or `Array<Pair>` | no | Additional form fields for multipart http(s) uploads | `{"field1": "value1", "field2": "value2"}` or `[["field1", "value1"], ["field2", "value2"]]`
|
|
686
|
+
ignorePayload | boolean | no | Whether to ignore the resulting video payload and return an empty string. Useful if you prefer to fetch video chunks via the [appium:mac2.nativeVideoRecordingChunkAdded](./docs/bidi.md#appiummac2nativevideorecordingchunkadded) BiDi event. false by default. | true
|
|
680
687
|
|
|
681
688
|
#### Returns
|
|
682
689
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../lib/commands/bidi/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,cAAc,CAAC;AAE3C,eAAO,MAAM,8BAA8B,+CAAoD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NATIVE_VIDEO_CHUNK_ADDED_EVENT = exports.BIDI_EVENT_NAME = void 0;
|
|
4
|
+
exports.BIDI_EVENT_NAME = 'bidiEvent';
|
|
5
|
+
const DOMAIN = 'mac2';
|
|
6
|
+
exports.NATIVE_VIDEO_CHUNK_ADDED_EVENT = `appium:${DOMAIN}.nativeVideoRecordingChunkAdded`;
|
|
7
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../lib/commands/bidi/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,MAAM,GAAG,MAAM,CAAC;AACT,QAAA,8BAA8B,GAAG,UAAU,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../../lib/commands/bidi/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAG1D,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,0BAA0B,CAQ5B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toNativeVideoChunkAddedEvent = toNativeVideoChunkAddedEvent;
|
|
4
|
+
const constants_1 = require("./constants");
|
|
5
|
+
function toNativeVideoChunkAddedEvent(uuid, payload) {
|
|
6
|
+
return {
|
|
7
|
+
method: constants_1.NATIVE_VIDEO_CHUNK_ADDED_EVENT,
|
|
8
|
+
params: {
|
|
9
|
+
uuid,
|
|
10
|
+
payload: payload.toString('base64'),
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../lib/commands/bidi/models.ts"],"names":[],"mappings":";;AAGA,oEAWC;AAbD,2CAA6D;AAE7D,SAAgB,4BAA4B,CAC1C,IAAY,EACZ,OAAe;IAEf,OAAO;QACL,MAAM,EAAE,0CAA8B;QACtC,MAAM,EAAE;YACN,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;SACpC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface BiDiEvent<TParams> {
|
|
2
|
+
method: string;
|
|
3
|
+
params: TParams;
|
|
4
|
+
}
|
|
5
|
+
interface NativeVideoChunkAddedParams {
|
|
6
|
+
uuid: string;
|
|
7
|
+
payload: string;
|
|
8
|
+
}
|
|
9
|
+
export interface NativeVideoChunkAddedEvent extends BiDiEvent<NativeVideoChunkAddedParams> {
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../lib/commands/bidi/types.ts"],"names":[],"mappings":"AAAA,UAAU,SAAS,CAAC,OAAO;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,2BAA2B;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA2B,SAAQ,SAAS,CAAC,2BAA2B,CAAC;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/commands/bidi/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import type { Mac2Driver } from '../driver';
|
|
2
|
-
import type { StringRecord } from '@appium/types';
|
|
2
|
+
import type { AppiumLogger, StringRecord } from '@appium/types';
|
|
3
|
+
import type EventEmitter from 'node:events';
|
|
4
|
+
export declare class NativeVideoChunksBroadcaster {
|
|
5
|
+
private _ee;
|
|
6
|
+
private _log;
|
|
7
|
+
private _publishers;
|
|
8
|
+
private _terminated;
|
|
9
|
+
constructor(ee: EventEmitter, log: AppiumLogger);
|
|
10
|
+
get hasPublishers(): boolean;
|
|
11
|
+
schedule(uuid: string): void;
|
|
12
|
+
waitFor(uuid: string): Promise<void>;
|
|
13
|
+
shutdown(timeoutMs: number): Promise<void>;
|
|
14
|
+
private _createPublisher;
|
|
15
|
+
private _wait;
|
|
16
|
+
private _cleanup;
|
|
17
|
+
}
|
|
3
18
|
/**
|
|
4
19
|
* Initiates a new native screen recording session via XCTest.
|
|
5
20
|
* If the screen recording is already running then this call results in noop.
|
|
@@ -40,20 +55,16 @@ export declare function macosGetNativeScreenRecordingInfo(this: Mac2Driver): Pro
|
|
|
40
55
|
* @param fileFieldName The name of the form field, where the file content BLOB should
|
|
41
56
|
* be stored for http(s) uploads
|
|
42
57
|
* @param formFields Additional form fields for multipart http(s) uploads
|
|
58
|
+
* @param ignorePayload Whether to ignore the resulting video payload
|
|
59
|
+
* and return an empty string. Useful if you prefer to fetch
|
|
60
|
+
* video chunks via a BiDi web socket.
|
|
43
61
|
* @returns Base64-encoded content of the recorded media file if 'remotePath'
|
|
44
|
-
* parameter is falsy or an empty string
|
|
62
|
+
* parameter is falsy or an empty string or ignorePayload is set to `true`.
|
|
45
63
|
* @throws {Error} If there was an error while getting the name of a media file
|
|
46
64
|
* or the file content cannot be uploaded to the remote location
|
|
47
65
|
* or screen recording is not supported on the device under test.
|
|
48
66
|
*/
|
|
49
|
-
export declare function macosStopNativeScreenRecording(this: Mac2Driver, remotePath?: string, user?: string, pass?: string, method?: string, headers?: StringRecord | [string, any][], fileFieldName?: string, formFields?: StringRecord | [string, string][]): Promise<string>;
|
|
50
|
-
/**
|
|
51
|
-
* Deletes previously recorded videos with given ids.
|
|
52
|
-
* This call is safe and does not raise any errors.
|
|
53
|
-
*
|
|
54
|
-
* @param uuids One or more video UUIDs to be deleted
|
|
55
|
-
*/
|
|
56
|
-
export declare function cleanupNativeRecordedVideos(this: Mac2Driver, uuids: string | Set<string>): Promise<void>;
|
|
67
|
+
export declare function macosStopNativeScreenRecording(this: Mac2Driver, remotePath?: string, user?: string, pass?: string, method?: string, headers?: StringRecord | [string, any][], fileFieldName?: string, formFields?: StringRecord | [string, string][], ignorePayload?: boolean): Promise<string>;
|
|
57
68
|
/**
|
|
58
69
|
* Fetches information about available displays
|
|
59
70
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-record-screen.d.ts","sourceRoot":"","sources":["../../../lib/commands/native-record-screen.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"native-record-screen.d.ts","sourceRoot":"","sources":["../../../lib/commands/native-record-screen.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,YAAY,MAAM,aAAa,CAAC;AAW5C,qBAAa,4BAA4B;IACvC,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,WAAW,CAAU;gBAEhB,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY;IAOhD,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMtB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAYlC,gBAAgB;YA2DhB,KAAK;YAuBL,QAAQ;CAyBvB;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,GAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACtC,aAAa,CAAC,EAAE,MAAM,EACtB,UAAU,CAAC,EAAE,YAAY,GAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAC5C,aAAa,CAAC,EAAE,OAAO,GACtB,OAAO,CAAC,MAAM,CAAC,CAkDjB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAE5F;AAmBD,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"}
|
|
@@ -1,17 +1,185 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.NativeVideoChunksBroadcaster = void 0;
|
|
6
40
|
exports.macosStartNativeScreenRecording = macosStartNativeScreenRecording;
|
|
7
41
|
exports.macosGetNativeScreenRecordingInfo = macosGetNativeScreenRecordingInfo;
|
|
8
42
|
exports.macosStopNativeScreenRecording = macosStopNativeScreenRecording;
|
|
9
|
-
exports.cleanupNativeRecordedVideos = cleanupNativeRecordedVideos;
|
|
10
43
|
exports.macosListDisplays = macosListDisplays;
|
|
11
44
|
const lodash_1 = __importDefault(require("lodash"));
|
|
45
|
+
const bluebird_1 = __importStar(require("bluebird"));
|
|
12
46
|
const node_path_1 = __importDefault(require("node:path"));
|
|
13
47
|
const support_1 = require("appium/support");
|
|
14
48
|
const helpers_1 = require("./helpers");
|
|
49
|
+
const asyncbox_1 = require("asyncbox");
|
|
50
|
+
const teen_process_1 = require("teen_process");
|
|
51
|
+
const constants_1 = require("./bidi/constants");
|
|
52
|
+
const models_1 = require("./bidi/models");
|
|
53
|
+
const RECORDING_STARTUP_TIMEOUT_MS = 5000;
|
|
54
|
+
const BUFFER_SIZE = 0xFFFF;
|
|
55
|
+
const MONITORING_INTERVAL_DURATION_MS = 1000;
|
|
56
|
+
const MAX_MONITORING_DURATION_MS = 24 * 60 * 60 * 1000; // 1 day
|
|
57
|
+
class NativeVideoChunksBroadcaster {
|
|
58
|
+
constructor(ee, log) {
|
|
59
|
+
this._ee = ee;
|
|
60
|
+
this._log = log;
|
|
61
|
+
this._publishers = new Map();
|
|
62
|
+
this._terminated = false;
|
|
63
|
+
}
|
|
64
|
+
get hasPublishers() {
|
|
65
|
+
return this._publishers.size > 0;
|
|
66
|
+
}
|
|
67
|
+
schedule(uuid) {
|
|
68
|
+
if (!this._publishers.has(uuid)) {
|
|
69
|
+
this._publishers.set(uuid, this._createPublisher(uuid));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async waitFor(uuid) {
|
|
73
|
+
const publisher = this._publishers.get(uuid);
|
|
74
|
+
if (publisher) {
|
|
75
|
+
await publisher;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async shutdown(timeoutMs) {
|
|
79
|
+
try {
|
|
80
|
+
await this._wait(timeoutMs);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
this._log.warn(e.message);
|
|
84
|
+
}
|
|
85
|
+
await this._cleanup();
|
|
86
|
+
this._publishers = new Map();
|
|
87
|
+
}
|
|
88
|
+
async _createPublisher(uuid) {
|
|
89
|
+
let fullPath = '';
|
|
90
|
+
let bytesRead = 0n;
|
|
91
|
+
try {
|
|
92
|
+
await (0, asyncbox_1.waitForCondition)(async () => {
|
|
93
|
+
const paths = await listAttachments();
|
|
94
|
+
const result = paths.find((name) => name.endsWith(uuid));
|
|
95
|
+
if (result) {
|
|
96
|
+
fullPath = result;
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
}, {
|
|
101
|
+
waitMs: RECORDING_STARTUP_TIMEOUT_MS,
|
|
102
|
+
intervalMs: 300,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
throw new Error(`The video recording identified by ${uuid} did not ` +
|
|
107
|
+
`start within ${RECORDING_STARTUP_TIMEOUT_MS}ms timeout`);
|
|
108
|
+
}
|
|
109
|
+
const startedMs = performance.now();
|
|
110
|
+
while (!this._terminated && performance.now() - startedMs < MAX_MONITORING_DURATION_MS) {
|
|
111
|
+
const isCompleted = !(await isFileUsed(fullPath, 'testman'));
|
|
112
|
+
const { size } = await support_1.fs.stat(fullPath, { bigint: true });
|
|
113
|
+
if (bytesRead < size) {
|
|
114
|
+
const handle = await support_1.fs.open(fullPath, 'r');
|
|
115
|
+
try {
|
|
116
|
+
while (bytesRead < size) {
|
|
117
|
+
const bufferSize = Number(size - bytesRead > BUFFER_SIZE ? BUFFER_SIZE : size - bytesRead);
|
|
118
|
+
const buf = Buffer.alloc(bufferSize);
|
|
119
|
+
await support_1.fs.read(handle, buf, 0, bufferSize, bytesRead);
|
|
120
|
+
this._ee.emit(constants_1.BIDI_EVENT_NAME, (0, models_1.toNativeVideoChunkAddedEvent)(uuid, buf));
|
|
121
|
+
bytesRead += BigInt(bufferSize);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
await support_1.fs.close(handle);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (isCompleted) {
|
|
129
|
+
this._log.debug(`The native video recording identified by ${uuid} has been detected as completed`);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
await bluebird_1.default.delay(MONITORING_INTERVAL_DURATION_MS);
|
|
133
|
+
}
|
|
134
|
+
this._log.warn(`Stopped monitoring of the native video recording identified by ${uuid} ` +
|
|
135
|
+
`because of the timeout`);
|
|
136
|
+
}
|
|
137
|
+
async _wait(timeoutMs) {
|
|
138
|
+
if (!this.hasPublishers) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const timer = setTimeout(() => {
|
|
142
|
+
this._terminated = true;
|
|
143
|
+
}, timeoutMs);
|
|
144
|
+
const publishingErrors = [];
|
|
145
|
+
for (const publisher of this._publishers.values()) {
|
|
146
|
+
try {
|
|
147
|
+
await publisher;
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
publishingErrors.push(e.message);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
clearTimeout(timer);
|
|
154
|
+
if (!lodash_1.default.isEmpty(publishingErrors)) {
|
|
155
|
+
throw new Error(publishingErrors.join('\n'));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async _cleanup() {
|
|
159
|
+
if (!this.hasPublishers) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const attachments = await listAttachments();
|
|
163
|
+
if (lodash_1.default.isEmpty(attachments)) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const tasks = attachments
|
|
167
|
+
.map((attachmentPath) => [node_path_1.default.basename(attachmentPath), attachmentPath])
|
|
168
|
+
.filter(([name,]) => this._publishers.has(name))
|
|
169
|
+
.map(([, attachmentPath]) => support_1.fs.rimraf(attachmentPath));
|
|
170
|
+
if (lodash_1.default.isEmpty(tasks)) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
try {
|
|
174
|
+
await Promise.all(tasks);
|
|
175
|
+
this._log.debug(`Successfully deleted ${support_1.util.pluralize('leftover video recording', tasks.length, true)}`);
|
|
176
|
+
}
|
|
177
|
+
catch (e) {
|
|
178
|
+
this._log.warn(`Could not cleanup some leftover video recordings: ${e.message}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
exports.NativeVideoChunksBroadcaster = NativeVideoChunksBroadcaster;
|
|
15
183
|
/**
|
|
16
184
|
* Initiates a new native screen recording session via XCTest.
|
|
17
185
|
* If the screen recording is already running then this call results in noop.
|
|
@@ -33,7 +201,7 @@ async function macosStartNativeScreenRecording(fps, codec, displayId) {
|
|
|
33
201
|
codec,
|
|
34
202
|
displayId,
|
|
35
203
|
});
|
|
36
|
-
this.
|
|
204
|
+
this._videoChunksBroadcaster.schedule(result.uuid);
|
|
37
205
|
return result;
|
|
38
206
|
}
|
|
39
207
|
/**
|
|
@@ -62,18 +230,36 @@ async function macosGetNativeScreenRecordingInfo() {
|
|
|
62
230
|
* @param fileFieldName The name of the form field, where the file content BLOB should
|
|
63
231
|
* be stored for http(s) uploads
|
|
64
232
|
* @param formFields Additional form fields for multipart http(s) uploads
|
|
233
|
+
* @param ignorePayload Whether to ignore the resulting video payload
|
|
234
|
+
* and return an empty string. Useful if you prefer to fetch
|
|
235
|
+
* video chunks via a BiDi web socket.
|
|
65
236
|
* @returns Base64-encoded content of the recorded media file if 'remotePath'
|
|
66
|
-
* parameter is falsy or an empty string
|
|
237
|
+
* parameter is falsy or an empty string or ignorePayload is set to `true`.
|
|
67
238
|
* @throws {Error} If there was an error while getting the name of a media file
|
|
68
239
|
* or the file content cannot be uploaded to the remote location
|
|
69
240
|
* or screen recording is not supported on the device under test.
|
|
70
241
|
*/
|
|
71
|
-
async function macosStopNativeScreenRecording(remotePath, user, pass, method, headers, fileFieldName, formFields) {
|
|
242
|
+
async function macosStopNativeScreenRecording(remotePath, user, pass, method, headers, fileFieldName, formFields, ignorePayload) {
|
|
72
243
|
const response = (await this.wda.proxy.command('/wda/video/stop', 'POST', {}));
|
|
73
244
|
if (!response || !lodash_1.default.isPlainObject(response)) {
|
|
74
245
|
throw new Error('There is no active screen recording, thus nothing to stop. Did you start it before?');
|
|
75
246
|
}
|
|
76
247
|
const { uuid } = response;
|
|
248
|
+
try {
|
|
249
|
+
await bluebird_1.default.resolve(this._videoChunksBroadcaster.waitFor(uuid)).timeout(5000);
|
|
250
|
+
}
|
|
251
|
+
catch (e) {
|
|
252
|
+
if (e instanceof bluebird_1.TimeoutError) {
|
|
253
|
+
this.log.debug(`The BiDi chunks broadcaster for the native screen recording identified ` +
|
|
254
|
+
`by ${uuid} cannot complete within 5000ms timeout`);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
this.log.debug(e.stack);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
if (ignorePayload) {
|
|
261
|
+
return '';
|
|
262
|
+
}
|
|
77
263
|
const matchedVideoPath = lodash_1.default.first((await listAttachments()).filter((name) => name.endsWith(uuid)));
|
|
78
264
|
if (!matchedVideoPath) {
|
|
79
265
|
throw new Error(`The screen recording identified by ${uuid} cannot be retrieved. ` +
|
|
@@ -91,36 +277,7 @@ async function macosStopNativeScreenRecording(remotePath, user, pass, method, he
|
|
|
91
277
|
fileFieldName,
|
|
92
278
|
formFields
|
|
93
279
|
};
|
|
94
|
-
|
|
95
|
-
await cleanupNativeRecordedVideos.bind(this)(uuid);
|
|
96
|
-
this._recordedVideoIds.delete(uuid);
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Deletes previously recorded videos with given ids.
|
|
101
|
-
* This call is safe and does not raise any errors.
|
|
102
|
-
*
|
|
103
|
-
* @param uuids One or more video UUIDs to be deleted
|
|
104
|
-
*/
|
|
105
|
-
async function cleanupNativeRecordedVideos(uuids) {
|
|
106
|
-
const attachments = await listAttachments();
|
|
107
|
-
if (lodash_1.default.isEmpty(attachments)) {
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
const tasks = attachments
|
|
111
|
-
.map((attachmentPath) => [node_path_1.default.basename(attachmentPath), attachmentPath])
|
|
112
|
-
.filter(([name,]) => lodash_1.default.isString(uuids) ? uuids === name : uuids.has(name))
|
|
113
|
-
.map(([, attachmentPath]) => support_1.fs.rimraf(attachmentPath));
|
|
114
|
-
if (lodash_1.default.isEmpty(tasks)) {
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
try {
|
|
118
|
-
await Promise.all(tasks);
|
|
119
|
-
this.log.debug(`Successfully deleted ${support_1.util.pluralize('leftover video recording', tasks.length, true)}`);
|
|
120
|
-
}
|
|
121
|
-
catch (e) {
|
|
122
|
-
this.log.warn(`Could not cleanup some leftover video recordings: ${e.message}`);
|
|
123
|
-
}
|
|
280
|
+
return await helpers_1.uploadRecordedMedia.bind(this)(matchedVideoPath, remotePath, options);
|
|
124
281
|
}
|
|
125
282
|
/**
|
|
126
283
|
* Fetches information about available displays
|
|
@@ -140,5 +297,9 @@ async function listAttachments() {
|
|
|
140
297
|
absolute: true,
|
|
141
298
|
});
|
|
142
299
|
}
|
|
300
|
+
async function isFileUsed(fpath, userProcessName) {
|
|
301
|
+
const { stdout } = await (0, teen_process_1.exec)('lsof', [fpath]);
|
|
302
|
+
return stdout.includes(userProcessName);
|
|
303
|
+
}
|
|
143
304
|
// #endregion
|
|
144
305
|
//# sourceMappingURL=native-record-screen.js.map
|
|
@@ -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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"}
|
package/build/lib/driver.d.ts
CHANGED
|
@@ -184,7 +184,7 @@ export class Mac2Driver extends BaseDriver<any, import("@appium/types").StringRe
|
|
|
184
184
|
readonly 'macos: stopNativeScreenRecording': {
|
|
185
185
|
readonly command: "macosStopNativeScreenRecording";
|
|
186
186
|
readonly params: {
|
|
187
|
-
readonly optional: readonly ["remotePath", "user", "pass", "method", "headers", "fileFieldName", "formFields"];
|
|
187
|
+
readonly optional: readonly ["remotePath", "user", "pass", "method", "headers", "fileFieldName", "formFields", "ignorePayload"];
|
|
188
188
|
};
|
|
189
189
|
};
|
|
190
190
|
readonly 'macos: listDisplays': {
|
|
@@ -196,8 +196,8 @@ export class Mac2Driver extends BaseDriver<any, import("@appium/types").StringRe
|
|
|
196
196
|
isProxyActive: boolean;
|
|
197
197
|
/** @type {import('./wda-mac').WDAMacServer} */
|
|
198
198
|
wda: import("./wda-mac").WDAMacServer;
|
|
199
|
-
/** @type {
|
|
200
|
-
|
|
199
|
+
/** @type {nativeScreenRecordingCommands.NativeVideoChunksBroadcaster} */
|
|
200
|
+
_videoChunksBroadcaster: nativeScreenRecordingCommands.NativeVideoChunksBroadcaster;
|
|
201
201
|
desiredCapConstraints: {
|
|
202
202
|
systemPort: {
|
|
203
203
|
isNumber: boolean;
|
|
@@ -298,6 +298,7 @@ export class Mac2Driver extends BaseDriver<any, import("@appium/types").StringRe
|
|
|
298
298
|
}
|
|
299
299
|
export default Mac2Driver;
|
|
300
300
|
import { BaseDriver } from 'appium/driver';
|
|
301
|
+
import * as nativeScreenRecordingCommands from './commands/native-record-screen';
|
|
301
302
|
import { DeviceSettings } from 'appium/driver';
|
|
302
303
|
import * as appManagemenetCommands from './commands/app-management';
|
|
303
304
|
import * as appleScriptCommands from './commands/applescript';
|
|
@@ -306,7 +307,6 @@ import * as findCommands from './commands/find';
|
|
|
306
307
|
import * as gesturesCommands from './commands/gestures';
|
|
307
308
|
import * as navigationCommands from './commands/navigation';
|
|
308
309
|
import * as recordScreenCommands from './commands/record-screen';
|
|
309
|
-
import * as nativeScreenRecordingCommands from './commands/native-record-screen';
|
|
310
310
|
import * as screenshotCommands from './commands/screenshots';
|
|
311
311
|
import * as sourceCommands from './commands/source';
|
|
312
312
|
//# sourceMappingURL=driver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../lib/driver.js"],"names":[],"mappings":"AA8BA;IAUE;;;;;;;;;;;;;;;;;MAAmC;IACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAA2C;IAE3C,uBAqBC;IAjCD,sBAAsB;IACtB,eADW,OAAO,CACJ;IAEd,+CAA+C;IAC/C,KADW,OAAO,WAAW,EAAE,YAAY,CACvC;IAEJ,
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../lib/driver.js"],"names":[],"mappings":"AA8BA;IAUE;;;;;;;;;;;;;;;;;MAAmC;IACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAA2C;IAE3C,uBAqBC;IAjCD,sBAAsB;IACtB,eADW,OAAO,CACJ;IAEd,+CAA+C;IAC/C,KADW,OAAO,WAAW,EAAE,YAAY,CACvC;IAEJ,yEAAyE;IACzE,yBADW,6BAA6B,CAAC,4BAA4B,CAC7C;IAQtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAkD;IAiBlD,6BAAwE;IAG1E,yDAIC;IAED,mBASC;IANC,iBAAuB;IAKvB,qBAA2B;IAI7B,qCAEC;IAGD,0EAEC;IAED,oBAEC;IAED,mEAEC;IAGD,8BAEC;IAGD,kCAEC;IAGD,6FAwBC;IAED,+BA8BC;IAED,6DAAuD;IACvD,iEAA2D;IAC3D,mEAA6D;IAC7D,qEAA+D;IAE/D,sEAAgE;IAEhE,wCAAkC;IAElC,6CAAuC;IAEvC,qDAA+C;IAC/C,+CAAyC;IACzC,iDAA2C;IAC3C,+CAAyC;IACzC,yDAAmD;IACnD,+CAAyC;IACzC,2DAAqD;IACrD,6DAAuD;IACvD,2EAAqE;IACrE,6CAAuC;IACvC,6DAAuD;IACvD,2CAAqC;IACrC,uDAAiD;IACjD,6DAAuD;IACvD,2EAAqE;IAErE,uDAAiD;IAEjD,uEAAiE;IACjE,qEAA+D;IAE/D,sGAAgG;IAChG,0GAAoG;IACpG,oGAA8F;IAC9F,0EAAoE;IAEpE,6DAAuD;IAEvD,+CAAyC;CAC1C;;2BAjN0C,eAAe;+CAeX,iCAAiC;+BAfrC,eAAe;wCAGlB,2BAA2B;qCAC9B,wBAAwB;iCAC5B,oBAAoB;8BACvB,iBAAiB;kCACb,qBAAqB;oCACnB,uBAAuB;sCACrB,0BAA0B;oCAC5B,wBAAwB;gCAC5B,mBAAmB"}
|
package/build/lib/driver.js
CHANGED
|
@@ -125,7 +125,7 @@ class Mac2Driver extends driver_1.BaseDriver {
|
|
|
125
125
|
this.wda = null;
|
|
126
126
|
this.proxyReqRes = null;
|
|
127
127
|
this.isProxyActive = false;
|
|
128
|
-
this.
|
|
128
|
+
this._videoChunksBroadcaster = new nativeScreenRecordingCommands.NativeVideoChunksBroadcaster(this.eventEmitter, this.log);
|
|
129
129
|
this._screenRecorder = null;
|
|
130
130
|
}
|
|
131
131
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -179,12 +179,12 @@ class Mac2Driver extends driver_1.BaseDriver {
|
|
|
179
179
|
}
|
|
180
180
|
async deleteSession() {
|
|
181
181
|
await this._screenRecorder?.stop(true);
|
|
182
|
-
if (
|
|
182
|
+
if (this._videoChunksBroadcaster.hasPublishers) {
|
|
183
183
|
try {
|
|
184
184
|
await this.wda.proxy.command('/wda/video/stop', 'POST', {});
|
|
185
185
|
}
|
|
186
186
|
catch { }
|
|
187
|
-
await
|
|
187
|
+
await this._videoChunksBroadcaster.shutdown(5000);
|
|
188
188
|
}
|
|
189
189
|
await this.wda.stopSession();
|
|
190
190
|
if (this.opts.postrun) {
|
package/build/lib/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../lib/driver.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../lib/driver.js"],"names":[],"mappings":"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"}
|
|
@@ -165,7 +165,7 @@ export declare const executeMethodMap: {
|
|
|
165
165
|
readonly 'macos: stopNativeScreenRecording': {
|
|
166
166
|
readonly command: "macosStopNativeScreenRecording";
|
|
167
167
|
readonly params: {
|
|
168
|
-
readonly optional: readonly ["remotePath", "user", "pass", "method", "headers", "fileFieldName", "formFields"];
|
|
168
|
+
readonly optional: readonly ["remotePath", "user", "pass", "method", "headers", "fileFieldName", "formFields", "ignorePayload"];
|
|
169
169
|
};
|
|
170
170
|
};
|
|
171
171
|
readonly 'macos: listDisplays': {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-method-map.d.ts","sourceRoot":"","sources":["../../lib/execute-method-map.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"execute-method-map.d.ts","sourceRoot":"","sources":["../../lib/execute-method-map.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Ua,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-method-map.js","sourceRoot":"","sources":["../../lib/execute-method-map.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"execute-method-map.js","sourceRoot":"","sources":["../../lib/execute-method-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { NativeVideoChunkAddedEvent } from './types';
|
|
2
|
+
import { NATIVE_VIDEO_CHUNK_ADDED_EVENT } from './constants';
|
|
3
|
+
|
|
4
|
+
export function toNativeVideoChunkAddedEvent(
|
|
5
|
+
uuid: string,
|
|
6
|
+
payload: Buffer,
|
|
7
|
+
): NativeVideoChunkAddedEvent {
|
|
8
|
+
return {
|
|
9
|
+
method: NATIVE_VIDEO_CHUNK_ADDED_EVENT,
|
|
10
|
+
params: {
|
|
11
|
+
uuid,
|
|
12
|
+
payload: payload.toString('base64'),
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
}
|
|
@@ -1,9 +1,171 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
|
+
import B, {TimeoutError} from 'bluebird';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import { fs, util } from 'appium/support';
|
|
4
5
|
import type { Mac2Driver } from '../driver';
|
|
5
6
|
import { uploadRecordedMedia } from './helpers';
|
|
6
|
-
import type { StringRecord } from '@appium/types';
|
|
7
|
+
import type { AppiumLogger, StringRecord } from '@appium/types';
|
|
8
|
+
import type EventEmitter from 'node:events';
|
|
9
|
+
import { waitForCondition } from 'asyncbox';
|
|
10
|
+
import { exec } from 'teen_process';
|
|
11
|
+
import { BIDI_EVENT_NAME } from './bidi/constants';
|
|
12
|
+
import { toNativeVideoChunkAddedEvent } from './bidi/models';
|
|
13
|
+
|
|
14
|
+
const RECORDING_STARTUP_TIMEOUT_MS = 5000;
|
|
15
|
+
const BUFFER_SIZE = 0xFFFF;
|
|
16
|
+
const MONITORING_INTERVAL_DURATION_MS = 1000;
|
|
17
|
+
const MAX_MONITORING_DURATION_MS = 24 * 60 * 60 * 1000; // 1 day
|
|
18
|
+
|
|
19
|
+
export class NativeVideoChunksBroadcaster {
|
|
20
|
+
private _ee: EventEmitter;
|
|
21
|
+
private _log: AppiumLogger;
|
|
22
|
+
private _publishers: Map<string, Promise<void>>;
|
|
23
|
+
private _terminated: boolean;
|
|
24
|
+
|
|
25
|
+
constructor (ee: EventEmitter, log: AppiumLogger) {
|
|
26
|
+
this._ee = ee;
|
|
27
|
+
this._log = log;
|
|
28
|
+
this._publishers = new Map();
|
|
29
|
+
this._terminated = false;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
get hasPublishers(): boolean {
|
|
33
|
+
return this._publishers.size > 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
schedule(uuid: string): void {
|
|
37
|
+
if (!this._publishers.has(uuid)) {
|
|
38
|
+
this._publishers.set(uuid, this._createPublisher(uuid));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
async waitFor(uuid: string): Promise<void> {
|
|
43
|
+
const publisher = this._publishers.get(uuid);
|
|
44
|
+
if (publisher) {
|
|
45
|
+
await publisher;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async shutdown(timeoutMs: number): Promise<void> {
|
|
50
|
+
try {
|
|
51
|
+
await this._wait(timeoutMs);
|
|
52
|
+
} catch (e) {
|
|
53
|
+
this._log.warn(e.message);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
await this._cleanup();
|
|
57
|
+
|
|
58
|
+
this._publishers = new Map();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private async _createPublisher(uuid: string): Promise<void> {
|
|
62
|
+
let fullPath = '';
|
|
63
|
+
let bytesRead = 0n;
|
|
64
|
+
try {
|
|
65
|
+
await waitForCondition(async () => {
|
|
66
|
+
const paths = await listAttachments();
|
|
67
|
+
const result = paths.find((name) => name.endsWith(uuid));
|
|
68
|
+
if (result) {
|
|
69
|
+
fullPath = result;
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}, {
|
|
74
|
+
waitMs: RECORDING_STARTUP_TIMEOUT_MS,
|
|
75
|
+
intervalMs: 300,
|
|
76
|
+
});
|
|
77
|
+
} catch {
|
|
78
|
+
throw new Error(
|
|
79
|
+
`The video recording identified by ${uuid} did not ` +
|
|
80
|
+
`start within ${RECORDING_STARTUP_TIMEOUT_MS}ms timeout`
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const startedMs = performance.now();
|
|
85
|
+
while (!this._terminated && performance.now() - startedMs < MAX_MONITORING_DURATION_MS) {
|
|
86
|
+
const isCompleted = !(await isFileUsed(fullPath, 'testman'));
|
|
87
|
+
|
|
88
|
+
const { size } = await fs.stat(fullPath, {bigint: true});
|
|
89
|
+
if (bytesRead < size) {
|
|
90
|
+
const handle = await fs.open(fullPath, 'r');
|
|
91
|
+
try {
|
|
92
|
+
while (bytesRead < size) {
|
|
93
|
+
const bufferSize = Number(size - bytesRead > BUFFER_SIZE ? BUFFER_SIZE : size - bytesRead);
|
|
94
|
+
const buf = Buffer.alloc(bufferSize);
|
|
95
|
+
await fs.read(handle, buf as any, 0, bufferSize, bytesRead as any);
|
|
96
|
+
this._ee.emit(BIDI_EVENT_NAME, toNativeVideoChunkAddedEvent(uuid, buf));
|
|
97
|
+
bytesRead += BigInt(bufferSize);
|
|
98
|
+
}
|
|
99
|
+
} finally {
|
|
100
|
+
await fs.close(handle);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (isCompleted) {
|
|
105
|
+
this._log.debug(
|
|
106
|
+
`The native video recording identified by ${uuid} has been detected as completed`
|
|
107
|
+
);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
await B.delay(MONITORING_INTERVAL_DURATION_MS);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
this._log.warn(
|
|
115
|
+
`Stopped monitoring of the native video recording identified by ${uuid} ` +
|
|
116
|
+
`because of the timeout`
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
private async _wait(timeoutMs: number): Promise<void> {
|
|
121
|
+
if (!this.hasPublishers) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const timer = setTimeout(() => {
|
|
126
|
+
this._terminated = true;
|
|
127
|
+
}, timeoutMs);
|
|
128
|
+
const publishingErrors: string[] = [];
|
|
129
|
+
for (const publisher of this._publishers.values()) {
|
|
130
|
+
try {
|
|
131
|
+
await publisher;
|
|
132
|
+
} catch (e) {
|
|
133
|
+
publishingErrors.push(e.message);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
clearTimeout(timer);
|
|
137
|
+
|
|
138
|
+
if (!_.isEmpty(publishingErrors)) {
|
|
139
|
+
throw new Error(publishingErrors.join('\n'));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
private async _cleanup(): Promise<void> {
|
|
144
|
+
if (!this.hasPublishers) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const attachments = await listAttachments();
|
|
149
|
+
if (_.isEmpty(attachments)) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const tasks: Promise<any>[] = attachments
|
|
153
|
+
.map((attachmentPath) => [path.basename(attachmentPath), attachmentPath])
|
|
154
|
+
.filter(([name,]) => this._publishers.has(name))
|
|
155
|
+
.map(([, attachmentPath]) => fs.rimraf(attachmentPath));
|
|
156
|
+
if (_.isEmpty(tasks)) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
await Promise.all(tasks);
|
|
161
|
+
this._log.debug(
|
|
162
|
+
`Successfully deleted ${util.pluralize('leftover video recording', tasks.length, true)}`
|
|
163
|
+
);
|
|
164
|
+
} catch (e) {
|
|
165
|
+
this._log.warn(`Could not cleanup some leftover video recordings: ${e.message}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
7
169
|
|
|
8
170
|
/**
|
|
9
171
|
* Initiates a new native screen recording session via XCTest.
|
|
@@ -31,7 +193,7 @@ export async function macosStartNativeScreenRecording(
|
|
|
31
193
|
codec,
|
|
32
194
|
displayId,
|
|
33
195
|
}) as ActiveVideoInfo;
|
|
34
|
-
this.
|
|
196
|
+
this._videoChunksBroadcaster.schedule(result.uuid);
|
|
35
197
|
return result;
|
|
36
198
|
}
|
|
37
199
|
|
|
@@ -64,8 +226,11 @@ export async function macosGetNativeScreenRecordingInfo(
|
|
|
64
226
|
* @param fileFieldName The name of the form field, where the file content BLOB should
|
|
65
227
|
* be stored for http(s) uploads
|
|
66
228
|
* @param formFields Additional form fields for multipart http(s) uploads
|
|
229
|
+
* @param ignorePayload Whether to ignore the resulting video payload
|
|
230
|
+
* and return an empty string. Useful if you prefer to fetch
|
|
231
|
+
* video chunks via a BiDi web socket.
|
|
67
232
|
* @returns Base64-encoded content of the recorded media file if 'remotePath'
|
|
68
|
-
* parameter is falsy or an empty string
|
|
233
|
+
* parameter is falsy or an empty string or ignorePayload is set to `true`.
|
|
69
234
|
* @throws {Error} If there was an error while getting the name of a media file
|
|
70
235
|
* or the file content cannot be uploaded to the remote location
|
|
71
236
|
* or screen recording is not supported on the device under test.
|
|
@@ -79,6 +244,7 @@ export async function macosStopNativeScreenRecording(
|
|
|
79
244
|
headers?: StringRecord|[string, any][],
|
|
80
245
|
fileFieldName?: string,
|
|
81
246
|
formFields?: StringRecord|[string, string][],
|
|
247
|
+
ignorePayload?: boolean,
|
|
82
248
|
): Promise<string> {
|
|
83
249
|
const response: ActiveVideoInfo | null = (
|
|
84
250
|
await this.wda.proxy.command('/wda/video/stop', 'POST', {})
|
|
@@ -90,6 +256,23 @@ export async function macosStopNativeScreenRecording(
|
|
|
90
256
|
}
|
|
91
257
|
|
|
92
258
|
const { uuid } = response;
|
|
259
|
+
try {
|
|
260
|
+
await B.resolve(this._videoChunksBroadcaster.waitFor(uuid)).timeout(5000);
|
|
261
|
+
} catch (e) {
|
|
262
|
+
if (e instanceof TimeoutError) {
|
|
263
|
+
this.log.debug(
|
|
264
|
+
`The BiDi chunks broadcaster for the native screen recording identified ` +
|
|
265
|
+
`by ${uuid} cannot complete within 5000ms timeout`
|
|
266
|
+
);
|
|
267
|
+
} else {
|
|
268
|
+
this.log.debug(e.stack);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (ignorePayload) {
|
|
273
|
+
return '';
|
|
274
|
+
}
|
|
275
|
+
|
|
93
276
|
const matchedVideoPath = _.first(
|
|
94
277
|
(await listAttachments()).filter((name) => name.endsWith(uuid))
|
|
95
278
|
);
|
|
@@ -111,41 +294,7 @@ export async function macosStopNativeScreenRecording(
|
|
|
111
294
|
fileFieldName,
|
|
112
295
|
formFields
|
|
113
296
|
};
|
|
114
|
-
|
|
115
|
-
await cleanupNativeRecordedVideos.bind(this)(uuid);
|
|
116
|
-
this._recordedVideoIds.delete(uuid);
|
|
117
|
-
return result;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Deletes previously recorded videos with given ids.
|
|
122
|
-
* This call is safe and does not raise any errors.
|
|
123
|
-
*
|
|
124
|
-
* @param uuids One or more video UUIDs to be deleted
|
|
125
|
-
*/
|
|
126
|
-
export async function cleanupNativeRecordedVideos(
|
|
127
|
-
this: Mac2Driver,
|
|
128
|
-
uuids: string | Set<string>,
|
|
129
|
-
): Promise<void> {
|
|
130
|
-
const attachments = await listAttachments();
|
|
131
|
-
if (_.isEmpty(attachments)) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
const tasks: Promise<any>[] = attachments
|
|
135
|
-
.map((attachmentPath) => [path.basename(attachmentPath), attachmentPath])
|
|
136
|
-
.filter(([name,]) => _.isString(uuids) ? uuids === name : uuids.has(name))
|
|
137
|
-
.map(([, attachmentPath]) => fs.rimraf(attachmentPath));
|
|
138
|
-
if (_.isEmpty(tasks)) {
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
try {
|
|
142
|
-
await Promise.all(tasks);
|
|
143
|
-
this.log.debug(
|
|
144
|
-
`Successfully deleted ${util.pluralize('leftover video recording', tasks.length, true)}`
|
|
145
|
-
);
|
|
146
|
-
} catch (e) {
|
|
147
|
-
this.log.warn(`Could not cleanup some leftover video recordings: ${e.message}`);
|
|
148
|
-
}
|
|
297
|
+
return await uploadRecordedMedia.bind(this)(matchedVideoPath, remotePath, options);
|
|
149
298
|
}
|
|
150
299
|
|
|
151
300
|
/**
|
|
@@ -169,6 +318,11 @@ async function listAttachments(): Promise<string[]> {
|
|
|
169
318
|
});
|
|
170
319
|
}
|
|
171
320
|
|
|
321
|
+
async function isFileUsed(fpath: string, userProcessName: string): Promise<boolean> {
|
|
322
|
+
const { stdout } = await exec('lsof', [fpath]);
|
|
323
|
+
return stdout.includes(userProcessName);
|
|
324
|
+
}
|
|
325
|
+
|
|
172
326
|
interface ActiveVideoInfo {
|
|
173
327
|
fps: number;
|
|
174
328
|
codec: number;
|
package/lib/driver.js
CHANGED
|
@@ -35,8 +35,8 @@ export class Mac2Driver extends BaseDriver {
|
|
|
35
35
|
/** @type {import('./wda-mac').WDAMacServer} */
|
|
36
36
|
wda;
|
|
37
37
|
|
|
38
|
-
/** @type {
|
|
39
|
-
|
|
38
|
+
/** @type {nativeScreenRecordingCommands.NativeVideoChunksBroadcaster} */
|
|
39
|
+
_videoChunksBroadcaster;
|
|
40
40
|
|
|
41
41
|
static newMethodMap = newMethodMap;
|
|
42
42
|
static executeMethodMap = executeMethodMap;
|
|
@@ -75,7 +75,9 @@ export class Mac2Driver extends BaseDriver {
|
|
|
75
75
|
this.wda = null;
|
|
76
76
|
this.proxyReqRes = null;
|
|
77
77
|
this.isProxyActive = false;
|
|
78
|
-
this.
|
|
78
|
+
this._videoChunksBroadcaster = new nativeScreenRecordingCommands.NativeVideoChunksBroadcaster(
|
|
79
|
+
this.eventEmitter, this.log
|
|
80
|
+
);
|
|
79
81
|
this._screenRecorder = null;
|
|
80
82
|
}
|
|
81
83
|
|
|
@@ -136,13 +138,11 @@ export class Mac2Driver extends BaseDriver {
|
|
|
136
138
|
|
|
137
139
|
async deleteSession () {
|
|
138
140
|
await this._screenRecorder?.stop(true);
|
|
139
|
-
if (
|
|
141
|
+
if (this._videoChunksBroadcaster.hasPublishers) {
|
|
140
142
|
try {
|
|
141
143
|
await this.wda.proxy.command('/wda/video/stop', 'POST', {});
|
|
142
144
|
} catch {}
|
|
143
|
-
await
|
|
144
|
-
this._recordedVideoIds
|
|
145
|
-
);
|
|
145
|
+
await this._videoChunksBroadcaster.shutdown(5000);
|
|
146
146
|
}
|
|
147
147
|
await this.wda.stopSession();
|
|
148
148
|
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-mac2-driver",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "appium-mac2-driver",
|
|
9
|
-
"version": "2.
|
|
9
|
+
"version": "2.2.0",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@appium/strongbox": "^0.x",
|