@mobilewright/driver-mobilenext 0.0.49 → 0.0.51
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/dist/driver.d.ts +1 -12
- package/dist/driver.d.ts.map +1 -1
- package/dist/driver.js +9 -86
- package/dist/driver.js.map +1 -1
- package/dist/fleet-api.d.ts +56 -0
- package/dist/fleet-api.d.ts.map +1 -0
- package/dist/fleet-api.js +166 -0
- package/dist/fleet-api.js.map +1 -0
- package/dist/fleet-api.test.d.ts +2 -0
- package/dist/fleet-api.test.d.ts.map +1 -0
- package/dist/fleet-api.test.js +123 -0
- package/dist/fleet-api.test.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/driver.d.ts
CHANGED
|
@@ -1,26 +1,15 @@
|
|
|
1
|
-
import type { AppInfo, ConnectionConfig, DeviceInfo,
|
|
1
|
+
import type { AppInfo, ConnectionConfig, DeviceInfo, GestureSequence, HardwareButton, LaunchOptions, ListDevicesOptions, MobilewrightDriver, Orientation, RecordingOptions, RecordingResult, ScreenSize, ScreenshotOptions, Session, SwipeDirection, SwipeOptions, ViewNode } from '@mobilewright/protocol';
|
|
2
2
|
export declare const DEFAULT_URL = "wss://api.mobilenext.ai/ws";
|
|
3
3
|
export interface MobileNextDriverOptions {
|
|
4
4
|
region?: string;
|
|
5
5
|
apiKey?: string;
|
|
6
|
-
/** Timeout waiting for cloud device allocation in ms. Default: 300000 (5 min). */
|
|
7
|
-
allocationTimeout?: number;
|
|
8
|
-
}
|
|
9
|
-
export interface MobileNextDeviceInfo {
|
|
10
|
-
model?: string;
|
|
11
|
-
osVersion?: string;
|
|
12
|
-
type?: DeviceType;
|
|
13
6
|
}
|
|
14
7
|
export declare class MobileNextDriver implements MobilewrightDriver {
|
|
15
8
|
private session;
|
|
16
9
|
private readonly options;
|
|
17
|
-
private ownsLease;
|
|
18
|
-
get deviceInfo(): MobileNextDeviceInfo | null;
|
|
19
10
|
constructor(options?: MobileNextDriverOptions);
|
|
20
11
|
connect(config: ConnectionConfig): Promise<Session>;
|
|
21
|
-
private waitForAllocation;
|
|
22
12
|
disconnect(): Promise<void>;
|
|
23
|
-
private buildFilters;
|
|
24
13
|
getViewHierarchy(): Promise<ViewNode[]>;
|
|
25
14
|
tap(x: number, y: number): Promise<void>;
|
|
26
15
|
doubleTap(x: number, y: number): Promise<void>;
|
package/dist/driver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,OAAO,EACP,gBAAgB,EAChB,UAAU,
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,OAAO,EACP,gBAAgB,EAChB,UAAU,EAGV,eAAe,EACf,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EAEX,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,QAAQ,EACT,MAAM,wBAAwB,CAAC;AAGhC,eAAO,MAAM,WAAW,+BAA+B,CAAC;AA+DxD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAwED,qBAAa,gBAAiB,YAAW,kBAAkB;IACzD,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;gBAEtC,OAAO,GAAE,uBAA4B;IAS3C,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBnD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,gBAAgB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAOvC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1B,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BpE,OAAO,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD,UAAU,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAarD,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAMpC,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAKtC,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvD,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrD,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC;IAUzC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAW9B,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IASpC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmD3C,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7C,WAAW,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAwB7D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzC,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,cAAc;CAMvB"}
|
package/dist/driver.js
CHANGED
|
@@ -56,112 +56,35 @@ function sanitizeFilename(name) {
|
|
|
56
56
|
}
|
|
57
57
|
const debug = createDebug('mw:driver-mobilenext');
|
|
58
58
|
export class MobileNextDriver {
|
|
59
|
-
get deviceInfo() {
|
|
60
|
-
if (!this.session) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
return { model: this.session.model, osVersion: this.session.osVersion, type: this.session.type };
|
|
64
|
-
}
|
|
65
59
|
constructor(options = {}) {
|
|
66
60
|
this.session = null;
|
|
67
|
-
this.ownsLease = false;
|
|
68
61
|
this.options = options;
|
|
69
62
|
}
|
|
70
63
|
// ─── Connection ──────────────────────────────────────────────
|
|
64
|
+
// The device must already be allocated via the fleet sessions API (see FleetApiClient); this
|
|
65
|
+
// driver only opens the RPC channel to drive it. deviceId is the physical serial the device
|
|
66
|
+
// tools accept.
|
|
71
67
|
async connect(config) {
|
|
68
|
+
if (!config.deviceId) {
|
|
69
|
+
throw new Error('MobileNextDriver.connect requires a deviceId — allocate a device via the fleet sessions API first');
|
|
70
|
+
}
|
|
72
71
|
const baseUrl = config.url ?? DEFAULT_URL;
|
|
73
72
|
const url = this.options.apiKey
|
|
74
73
|
? appendQueryParam(baseUrl, 'token', this.options.apiKey)
|
|
75
74
|
: baseUrl;
|
|
76
|
-
debug('connecting to %s', baseUrl);
|
|
75
|
+
debug('connecting to %s (device=%s)', baseUrl, config.deviceId);
|
|
77
76
|
const rpc = new RpcClient(url, config.timeout);
|
|
78
77
|
await rpc.connect();
|
|
79
78
|
debug('websocket connected');
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
// coordinator. Connect directly without fleet.allocate; this instance
|
|
83
|
-
// does not own the lease and must not call fleet.release on disconnect.
|
|
84
|
-
if (config.deviceId) {
|
|
85
|
-
debug('reusing pre-allocated device %s', config.deviceId);
|
|
86
|
-
this.ownsLease = false;
|
|
87
|
-
this.session = { deviceId: config.deviceId, platform, rpc };
|
|
88
|
-
return { deviceId: config.deviceId, platform };
|
|
89
|
-
}
|
|
90
|
-
this.ownsLease = true;
|
|
91
|
-
const filters = this.buildFilters(config);
|
|
92
|
-
debug('allocating device with filters %o', filters);
|
|
93
|
-
const result = await rpc.call('fleet.allocate', { filters });
|
|
94
|
-
let deviceId;
|
|
95
|
-
let model;
|
|
96
|
-
let osVersion;
|
|
97
|
-
let type;
|
|
98
|
-
if (result?.state === 'allocating' && result.sessionId) {
|
|
99
|
-
debug('device is provisioning, waiting for allocation (session=%s)', result.sessionId);
|
|
100
|
-
const device = await this.waitForAllocation(rpc, result.sessionId);
|
|
101
|
-
debug('allocated device %s (session=%s, model=%s)', device.id, result.sessionId, device.model);
|
|
102
|
-
deviceId = device.id;
|
|
103
|
-
model = device.model;
|
|
104
|
-
osVersion = device.version;
|
|
105
|
-
type = toDeviceType(device.type);
|
|
106
|
-
}
|
|
107
|
-
else if (result?.device?.id) {
|
|
108
|
-
debug('allocated device %s (session=%s, model=%s)', result.device.id, result.sessionId, result.device.model);
|
|
109
|
-
deviceId = result.device.id;
|
|
110
|
-
model = result.device.model;
|
|
111
|
-
osVersion = result.device.version;
|
|
112
|
-
type = toDeviceType(result.device.type);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
throw new Error(`Device allocation failed: ${JSON.stringify(result)}`);
|
|
116
|
-
}
|
|
117
|
-
this.session = { deviceId, platform, rpc, model, osVersion, type };
|
|
118
|
-
return { deviceId, platform };
|
|
119
|
-
}
|
|
120
|
-
async waitForAllocation(rpc, sessionId) {
|
|
121
|
-
const timeout = this.options.allocationTimeout ?? 300_000;
|
|
122
|
-
const pollInterval = 5_000;
|
|
123
|
-
const deadline = Date.now() + timeout;
|
|
124
|
-
while (Date.now() < deadline) {
|
|
125
|
-
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
126
|
-
const elapsed = Math.round((timeout - (deadline - Date.now())) / 1000);
|
|
127
|
-
debug('waiting for device allocation, session=%s (%ds elapsed)', sessionId, elapsed);
|
|
128
|
-
const result = await rpc.call('devices.list', {});
|
|
129
|
-
const device = result.devices.find((d) => d.provider?.sessionId === sessionId);
|
|
130
|
-
if (!device) {
|
|
131
|
-
continue;
|
|
132
|
-
}
|
|
133
|
-
if (device.state !== 'allocating') {
|
|
134
|
-
return device;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
throw new Error(`Timed out waiting for device allocation after ${timeout / 1000}s (session=${sessionId})`);
|
|
79
|
+
this.session = { deviceId: config.deviceId, platform: config.platform, rpc };
|
|
80
|
+
return { deviceId: config.deviceId, platform: config.platform };
|
|
138
81
|
}
|
|
139
82
|
async disconnect() {
|
|
140
83
|
const session = this.requireSession();
|
|
141
|
-
if (this.ownsLease) {
|
|
142
|
-
debug('releasing device %s', session.deviceId);
|
|
143
|
-
await session.rpc.call('fleet.release', { deviceId: session.deviceId });
|
|
144
|
-
}
|
|
145
84
|
await session.rpc.disconnect();
|
|
146
85
|
this.session = null;
|
|
147
|
-
this.ownsLease = false;
|
|
148
86
|
debug('disconnected');
|
|
149
87
|
}
|
|
150
|
-
buildFilters(config) {
|
|
151
|
-
const filters = [
|
|
152
|
-
{ attribute: 'platform', operator: 'EQUALS', value: config.platform },
|
|
153
|
-
];
|
|
154
|
-
if (config.deviceName) {
|
|
155
|
-
const name = typeof config.deviceName === 'string'
|
|
156
|
-
? config.deviceName
|
|
157
|
-
: config.deviceName.source;
|
|
158
|
-
filters.push({ attribute: 'name', operator: 'CONTAINS', value: name });
|
|
159
|
-
}
|
|
160
|
-
if (config.osVersion) {
|
|
161
|
-
filters.push({ attribute: 'version', operator: 'EQUALS', value: config.osVersion });
|
|
162
|
-
}
|
|
163
|
-
return filters;
|
|
164
|
-
}
|
|
165
88
|
// ─── UI hierarchy ───────────────────────────────────────────
|
|
166
89
|
async getViewHierarchy() {
|
|
167
90
|
const result = await this.call('device.dump.ui');
|
package/dist/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export declare const DEFAULT_API_URL = "https://api.mobilenext.ai";
|
|
2
|
+
export type DeviceStatus = 'provisioning' | 'in_use' | 'released';
|
|
3
|
+
export interface DeviceFilter {
|
|
4
|
+
attribute: 'platform' | 'type' | 'name' | 'version';
|
|
5
|
+
operator: 'EQUALS' | 'GREATER_THAN' | 'GREATER_THAN_OR_EQUALS' | 'LESS_THAN' | 'LESS_THAN_OR_EQUALS' | 'STARTS_WITH' | 'CONTAINS';
|
|
6
|
+
value: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SessionDevice {
|
|
9
|
+
/** Allocation id — stable and always present, including while provisioning. Not the physical id. */
|
|
10
|
+
id: string;
|
|
11
|
+
status: DeviceStatus;
|
|
12
|
+
info: {
|
|
13
|
+
platform: string;
|
|
14
|
+
type?: string;
|
|
15
|
+
name: string;
|
|
16
|
+
osVersion: string;
|
|
17
|
+
/** The physical device id (UDID/serial). Absent while provisioning; this is what device tools accept. */
|
|
18
|
+
serial?: string;
|
|
19
|
+
};
|
|
20
|
+
createdAt: string;
|
|
21
|
+
releasedAt?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface FleetApiClientOptions {
|
|
24
|
+
apiKey: string;
|
|
25
|
+
apiUrl?: string;
|
|
26
|
+
/** Timeout waiting for a provisioning device to become in_use, in ms. Default: 300000 (5 min). */
|
|
27
|
+
allocationTimeout?: number;
|
|
28
|
+
/** Timeout for a single HTTP request, in ms. Bounds a stalled fetch. Default: 30000. */
|
|
29
|
+
requestTimeout?: number;
|
|
30
|
+
/** Injected for testing. Defaults to the global fetch. */
|
|
31
|
+
fetchFn?: typeof fetch;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* REST client for the mobilefleet sessions/devices API. A session is created once per test run;
|
|
35
|
+
* each device allocation lives under that session and is addressed by its physical serial.
|
|
36
|
+
*/
|
|
37
|
+
export declare class FleetApiClient {
|
|
38
|
+
private readonly apiKey;
|
|
39
|
+
private readonly apiUrl;
|
|
40
|
+
private readonly allocationTimeout;
|
|
41
|
+
private readonly requestTimeout;
|
|
42
|
+
private readonly fetchFn;
|
|
43
|
+
constructor(options: FleetApiClientOptions);
|
|
44
|
+
createSession(): Promise<string>;
|
|
45
|
+
/**
|
|
46
|
+
* Allocates a device into the session and waits until it is in_use (has a serial). A pre-booted
|
|
47
|
+
* device is ready immediately; an on-demand one provisions for minutes before landing.
|
|
48
|
+
*/
|
|
49
|
+
allocateDevice(sessionId: string, filters: DeviceFilter[], signal?: AbortSignal): Promise<SessionDevice>;
|
|
50
|
+
/** Releases a device back to the pool. Addressed by serial, the same id device tools accept. */
|
|
51
|
+
releaseDevice(sessionId: string, serial: string): Promise<void>;
|
|
52
|
+
private waitForDevice;
|
|
53
|
+
private request;
|
|
54
|
+
private errorDetail;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=fleet-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-api.d.ts","sourceRoot":"","sources":["../src/fleet-api.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAM3D,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,QAAQ,GAAG,UAAU,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpD,QAAQ,EACJ,QAAQ,GACR,cAAc,GACd,wBAAwB,GACxB,WAAW,GACX,qBAAqB,GACrB,aAAa,GACb,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,oGAAoG;IACpG,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,yGAAyG;QACzG,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA6BD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kGAAkG;IAClG,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAsBD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAE3B,OAAO,EAAE,qBAAqB;IAQpC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAMtC;;;OAGG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IA4B9G,gGAAgG;IAC1F,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YASvD,aAAa;YAsBb,OAAO;YAsDP,WAAW;CAW1B"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import createDebug from 'debug';
|
|
2
|
+
const debug = createDebug('mw:driver-mobilenext:fleet-api');
|
|
3
|
+
export const DEFAULT_API_URL = 'https://api.mobilenext.ai';
|
|
4
|
+
const DEFAULT_ALLOCATION_TIMEOUT = 300_000;
|
|
5
|
+
const DEFAULT_REQUEST_TIMEOUT = 30_000;
|
|
6
|
+
const POLL_INTERVAL = 5_000;
|
|
7
|
+
// A setTimeout that rejects when the signal aborts, so a mid-poll shutdown/timeout is not held up
|
|
8
|
+
// for the full interval.
|
|
9
|
+
function delay(ms, signal) {
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
if (signal?.aborted) {
|
|
12
|
+
reject(new Error('aborted'));
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const onAbort = () => {
|
|
16
|
+
clearTimeout(timer);
|
|
17
|
+
reject(new Error('aborted'));
|
|
18
|
+
};
|
|
19
|
+
const timer = setTimeout(() => {
|
|
20
|
+
signal?.removeEventListener('abort', onAbort);
|
|
21
|
+
resolve();
|
|
22
|
+
}, ms);
|
|
23
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* REST client for the mobilefleet sessions/devices API. A session is created once per test run;
|
|
28
|
+
* each device allocation lives under that session and is addressed by its physical serial.
|
|
29
|
+
*/
|
|
30
|
+
export class FleetApiClient {
|
|
31
|
+
constructor(options) {
|
|
32
|
+
this.apiKey = options.apiKey;
|
|
33
|
+
this.apiUrl = options.apiUrl ?? DEFAULT_API_URL;
|
|
34
|
+
this.allocationTimeout = options.allocationTimeout ?? DEFAULT_ALLOCATION_TIMEOUT;
|
|
35
|
+
this.requestTimeout = options.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT;
|
|
36
|
+
this.fetchFn = options.fetchFn ?? fetch;
|
|
37
|
+
}
|
|
38
|
+
async createSession() {
|
|
39
|
+
const session = await this.request('POST', '/api/v1/sessions');
|
|
40
|
+
debug('created session %s', session.id);
|
|
41
|
+
return session.id;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Allocates a device into the session and waits until it is in_use (has a serial). A pre-booted
|
|
45
|
+
* device is ready immediately; an on-demand one provisions for minutes before landing.
|
|
46
|
+
*/
|
|
47
|
+
async allocateDevice(sessionId, filters, signal) {
|
|
48
|
+
const path = `/api/v1/sessions/${encodeURIComponent(sessionId)}/devices`;
|
|
49
|
+
const res = await this.request('POST', path, { filters }, signal);
|
|
50
|
+
debug('allocate accepted (allocationId=%s, state=%s)', res.allocationId, res.state ?? (res.device ? 'ready' : 'unknown'));
|
|
51
|
+
// Pre-booted device: it is ready inline and its `id` is the physical serial.
|
|
52
|
+
if (res.device?.id) {
|
|
53
|
+
return {
|
|
54
|
+
id: res.allocationId,
|
|
55
|
+
status: 'in_use',
|
|
56
|
+
info: {
|
|
57
|
+
platform: res.device.platform,
|
|
58
|
+
type: res.device.type,
|
|
59
|
+
name: res.device.name,
|
|
60
|
+
osVersion: res.device.version ?? '',
|
|
61
|
+
serial: res.device.id,
|
|
62
|
+
},
|
|
63
|
+
createdAt: '',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (!res.allocationId) {
|
|
67
|
+
throw new Error(`Allocate response missing allocationId: ${JSON.stringify(res)}`);
|
|
68
|
+
}
|
|
69
|
+
// On-demand device: poll the session's device list until this allocation lands with a serial.
|
|
70
|
+
return this.waitForDevice(sessionId, res.allocationId, signal);
|
|
71
|
+
}
|
|
72
|
+
/** Releases a device back to the pool. Addressed by serial, the same id device tools accept. */
|
|
73
|
+
async releaseDevice(sessionId, serial) {
|
|
74
|
+
const path = `/api/v1/sessions/${encodeURIComponent(sessionId)}/devices/${encodeURIComponent(serial)}/release`;
|
|
75
|
+
await this.request('POST', path);
|
|
76
|
+
debug('released device %s', serial);
|
|
77
|
+
}
|
|
78
|
+
// A provisioning device has no serial, and GET .../devices/{id} matches on serial — so the only
|
|
79
|
+
// way to watch a still-provisioning allocation is to list the session's devices and match by
|
|
80
|
+
// allocation id until it transitions to in_use.
|
|
81
|
+
async waitForDevice(sessionId, allocationId, signal) {
|
|
82
|
+
const deadline = Date.now() + this.allocationTimeout;
|
|
83
|
+
while (Date.now() < deadline) {
|
|
84
|
+
await delay(POLL_INTERVAL, signal);
|
|
85
|
+
const list = await this.request('GET', `/api/v1/sessions/${encodeURIComponent(sessionId)}/devices`, undefined, signal);
|
|
86
|
+
const device = list.data.find((d) => d.id === allocationId);
|
|
87
|
+
if (!device) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
debug('waiting for device (allocationId=%s, status=%s)', allocationId, device.status);
|
|
91
|
+
if (device.status === 'in_use' && device.info.serial) {
|
|
92
|
+
return device;
|
|
93
|
+
}
|
|
94
|
+
if (device.status === 'released') {
|
|
95
|
+
throw new Error(`Device allocation ${allocationId} was released before becoming ready`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
throw new Error(`Timed out waiting for device allocation after ${this.allocationTimeout / 1000}s (session=${sessionId}, allocation=${allocationId})`);
|
|
99
|
+
}
|
|
100
|
+
async request(method, path, body, signal) {
|
|
101
|
+
const headers = { 'Authorization': `Bearer ${this.apiKey}` };
|
|
102
|
+
if (body !== undefined) {
|
|
103
|
+
headers['Content-Type'] = 'application/json';
|
|
104
|
+
}
|
|
105
|
+
// Bound the call: a private controller fires on requestTimeout, and an external signal (pool
|
|
106
|
+
// shutdown/allocation timeout) is forwarded into it so a stalled fetch aborts either way. The
|
|
107
|
+
// controller covers body reading too, so a response whose body stalls is bounded as well.
|
|
108
|
+
const controller = new AbortController();
|
|
109
|
+
const timer = setTimeout(() => controller.abort(), this.requestTimeout);
|
|
110
|
+
const onExternalAbort = () => controller.abort();
|
|
111
|
+
if (signal) {
|
|
112
|
+
if (signal.aborted) {
|
|
113
|
+
controller.abort();
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
signal.addEventListener('abort', onExternalAbort, { once: true });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
const res = await this.fetchFn(`${this.apiUrl}${path}`, {
|
|
121
|
+
method,
|
|
122
|
+
headers,
|
|
123
|
+
signal: controller.signal,
|
|
124
|
+
...(body !== undefined && { body: JSON.stringify(body) }),
|
|
125
|
+
});
|
|
126
|
+
if (!res.ok) {
|
|
127
|
+
const detail = await this.errorDetail(res);
|
|
128
|
+
throw new Error(`${method} ${path} failed with ${res.status}${detail ? `: ${detail}` : ''}`);
|
|
129
|
+
}
|
|
130
|
+
if (res.status === 204) {
|
|
131
|
+
debug('%s %s -> %d (no content)', method, path, res.status);
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
const result = (await res.json());
|
|
135
|
+
debug('%s %s -> %d %o', method, path, res.status, result);
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
if (signal?.aborted) {
|
|
140
|
+
throw new Error(`${method} ${path} aborted`);
|
|
141
|
+
}
|
|
142
|
+
if (controller.signal.aborted) {
|
|
143
|
+
throw new Error(`${method} ${path} timed out after ${this.requestTimeout}ms`);
|
|
144
|
+
}
|
|
145
|
+
throw err;
|
|
146
|
+
}
|
|
147
|
+
finally {
|
|
148
|
+
clearTimeout(timer);
|
|
149
|
+
signal?.removeEventListener('abort', onExternalAbort);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// The API's error body is {error: {code, message}}; surface both so callers see actionable text.
|
|
153
|
+
async errorDetail(res) {
|
|
154
|
+
try {
|
|
155
|
+
const body = (await res.json());
|
|
156
|
+
if (body?.error?.message) {
|
|
157
|
+
return body.error.code ? `${body.error.code} — ${body.error.message}` : body.error.message;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// non-JSON body — nothing to add
|
|
162
|
+
}
|
|
163
|
+
return '';
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=fleet-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-api.js","sourceRoot":"","sources":["../src/fleet-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-api.test.d.ts","sourceRoot":"","sources":["../src/fleet-api.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { test, expect } from '@playwright/test';
|
|
2
|
+
import { FleetApiClient } from './fleet-api.js';
|
|
3
|
+
// A fetch stub that records every request and replays the given responses in order. The last
|
|
4
|
+
// response repeats once exhausted, so pollers that call the same endpoint N times keep working.
|
|
5
|
+
function stubFetch(responses) {
|
|
6
|
+
const calls = [];
|
|
7
|
+
let index = 0;
|
|
8
|
+
const fetchFn = (async (url, init) => {
|
|
9
|
+
const headers = init.headers;
|
|
10
|
+
calls.push({
|
|
11
|
+
method: init.method ?? 'GET',
|
|
12
|
+
path: new URL(url).pathname,
|
|
13
|
+
body: init.body ? JSON.parse(init.body) : undefined,
|
|
14
|
+
authorization: headers?.['Authorization'] ?? null,
|
|
15
|
+
});
|
|
16
|
+
const chosen = responses[Math.min(index, responses.length - 1)];
|
|
17
|
+
index += 1;
|
|
18
|
+
const status = chosen.status ?? 200;
|
|
19
|
+
return {
|
|
20
|
+
ok: status >= 200 && status < 300,
|
|
21
|
+
status,
|
|
22
|
+
json: async () => chosen.json,
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
return { fetchFn, calls };
|
|
26
|
+
}
|
|
27
|
+
function readyDevice(serial) {
|
|
28
|
+
return {
|
|
29
|
+
id: 'alloc-1',
|
|
30
|
+
status: 'in_use',
|
|
31
|
+
info: { platform: 'ios', type: 'real', name: 'iPhone 15', osVersion: '17.0', serial },
|
|
32
|
+
createdAt: '2026-01-01T00:00:00Z',
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function provisioningDevice() {
|
|
36
|
+
return {
|
|
37
|
+
id: 'alloc-1',
|
|
38
|
+
status: 'provisioning',
|
|
39
|
+
info: { platform: 'ios', type: 'real', name: 'iPhone 15', osVersion: '17.0' },
|
|
40
|
+
createdAt: '2026-01-01T00:00:00Z',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
test('createSession posts to the sessions endpoint with a bearer token', async () => {
|
|
44
|
+
const { fetchFn, calls } = stubFetch([{ status: 201, json: { id: 'sess-1' } }]);
|
|
45
|
+
const client = new FleetApiClient({ apiKey: 'mob_test', fetchFn });
|
|
46
|
+
const sessionId = await client.createSession();
|
|
47
|
+
expect(sessionId).toBe('sess-1');
|
|
48
|
+
expect(calls[0].method).toBe('POST');
|
|
49
|
+
expect(calls[0].path).toBe('/api/v1/sessions');
|
|
50
|
+
expect(calls[0].authorization).toBe('Bearer mob_test');
|
|
51
|
+
});
|
|
52
|
+
test('allocateDevice returns immediately for a pre-booted device (serial is device.id)', async () => {
|
|
53
|
+
// The 201 response is the legacy fleet.allocate shape: the ready device lands inline under
|
|
54
|
+
// `device`, and its `id` is the physical serial the driver drives with.
|
|
55
|
+
const { fetchFn, calls } = stubFetch([
|
|
56
|
+
{
|
|
57
|
+
status: 201,
|
|
58
|
+
json: {
|
|
59
|
+
allocationId: 'alloc-1',
|
|
60
|
+
device: { id: 'SERIAL-A', name: 'iPhone 15', model: 'iPhone15,2', platform: 'ios', type: 'real', version: '17.0', state: 'online' },
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
]);
|
|
64
|
+
const client = new FleetApiClient({ apiKey: 'mob_test', fetchFn });
|
|
65
|
+
const device = await client.allocateDevice('sess-1', [
|
|
66
|
+
{ attribute: 'platform', operator: 'EQUALS', value: 'ios' },
|
|
67
|
+
]);
|
|
68
|
+
expect(device.info.serial).toBe('SERIAL-A');
|
|
69
|
+
expect(device.info.osVersion).toBe('17.0');
|
|
70
|
+
// No polling was needed, so only the allocate POST happened.
|
|
71
|
+
expect(calls).toHaveLength(1);
|
|
72
|
+
expect(calls[0].path).toBe('/api/v1/sessions/sess-1/devices');
|
|
73
|
+
expect(calls[0].body).toEqual({ filters: [{ attribute: 'platform', operator: 'EQUALS', value: 'ios' }] });
|
|
74
|
+
});
|
|
75
|
+
test('allocateDevice polls the device list, matching its allocationId, until the device lands', async () => {
|
|
76
|
+
const readyB = readyDevice('SERIAL-B'); // its `id` is the allocation id the POST returned
|
|
77
|
+
const { fetchFn, calls } = stubFetch([
|
|
78
|
+
{ status: 202, json: { allocationId: 'alloc-1', state: 'allocating' } }, // on-demand POST
|
|
79
|
+
{ status: 200, json: { object: 'list', data: [provisioningDevice()] } }, // first poll — not ready
|
|
80
|
+
{ status: 200, json: { object: 'list', data: [readyB] } }, // second poll — ready
|
|
81
|
+
]);
|
|
82
|
+
const client = new FleetApiClient({ apiKey: 'mob_test', fetchFn });
|
|
83
|
+
const device = await client.allocateDevice('sess-1', [
|
|
84
|
+
{ attribute: 'platform', operator: 'EQUALS', value: 'ios' },
|
|
85
|
+
]);
|
|
86
|
+
expect(device.info.serial).toBe('SERIAL-B');
|
|
87
|
+
expect(calls[1].method).toBe('GET');
|
|
88
|
+
expect(calls[1].path).toBe('/api/v1/sessions/sess-1/devices');
|
|
89
|
+
});
|
|
90
|
+
test('releaseDevice targets the device by serial', async () => {
|
|
91
|
+
const { fetchFn, calls } = stubFetch([{ status: 202, json: readyDevice('SERIAL-A') }]);
|
|
92
|
+
const client = new FleetApiClient({ apiKey: 'mob_test', fetchFn });
|
|
93
|
+
await client.releaseDevice('sess-1', 'SERIAL-A');
|
|
94
|
+
expect(calls[0].method).toBe('POST');
|
|
95
|
+
expect(calls[0].path).toBe('/api/v1/sessions/sess-1/devices/SERIAL-A/release');
|
|
96
|
+
});
|
|
97
|
+
// A fetch that never resolves on its own; it only settles by rejecting when its signal aborts —
|
|
98
|
+
// which is exactly how a real stalled connection behaves once the client's controller fires.
|
|
99
|
+
function stallingFetch() {
|
|
100
|
+
return (async (_url, init) => new Promise((_resolve, reject) => {
|
|
101
|
+
const signal = init.signal;
|
|
102
|
+
signal.addEventListener('abort', () => reject(new Error('aborted')));
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
test('a stalled request aborts and is reported as a timeout', async () => {
|
|
106
|
+
const client = new FleetApiClient({ apiKey: 'mob_test', fetchFn: stallingFetch(), requestTimeout: 20 });
|
|
107
|
+
await expect(client.createSession()).rejects.toThrow(/timed out after 20ms/);
|
|
108
|
+
});
|
|
109
|
+
test('an external abort signal cancels an in-flight allocation', async () => {
|
|
110
|
+
const controller = new AbortController();
|
|
111
|
+
const client = new FleetApiClient({ apiKey: 'mob_test', fetchFn: stallingFetch() });
|
|
112
|
+
const pending = client.allocateDevice('sess-1', [{ attribute: 'platform', operator: 'EQUALS', value: 'ios' }], controller.signal);
|
|
113
|
+
controller.abort();
|
|
114
|
+
await expect(pending).rejects.toThrow(/aborted/);
|
|
115
|
+
});
|
|
116
|
+
test('a failed request surfaces the API error code and message', async () => {
|
|
117
|
+
const { fetchFn } = stubFetch([
|
|
118
|
+
{ status: 402, json: { error: { code: 'insufficient_credits', message: 'Not enough credits' } } },
|
|
119
|
+
]);
|
|
120
|
+
const client = new FleetApiClient({ apiKey: 'mob_test', fetchFn });
|
|
121
|
+
await expect(client.createSession()).rejects.toThrow(/insufficient_credits — Not enough credits/);
|
|
122
|
+
});
|
|
123
|
+
//# sourceMappingURL=fleet-api.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-api.test.js","sourceRoot":"","sources":["../src/fleet-api.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { MobileNextDriver, DEFAULT_URL, type MobileNextDriverOptions
|
|
1
|
+
export { MobileNextDriver, DEFAULT_URL, type MobileNextDriverOptions } from './driver.js';
|
|
2
2
|
export { RpcClient } from './rpc-client.js';
|
|
3
|
+
export { FleetApiClient, DEFAULT_API_URL, type FleetApiClientOptions, type SessionDevice, type DeviceFilter, type DeviceStatus, } from './fleet-api.js';
|
|
3
4
|
export { uploadTestResult, extractGitInfoFromReport, type UploadTestResultParams, type GitInfo } from './upload-client.js';
|
|
4
5
|
export { default as MobileNextUploadReporter, type MobileNextTestResultConfig } from './reporter.js';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,KAAK,sBAAsB,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC3H,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,KAAK,0BAA0B,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { MobileNextDriver, DEFAULT_URL } from './driver.js';
|
|
2
2
|
export { RpcClient } from './rpc-client.js';
|
|
3
|
+
export { FleetApiClient, DEFAULT_API_URL, } from './fleet-api.js';
|
|
3
4
|
export { uploadTestResult, extractGitInfoFromReport } from './upload-client.js';
|
|
4
5
|
export { default as MobileNextUploadReporter } from './reporter.js';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAgC,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,cAAc,EACd,eAAe,GAKhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAA6C,MAAM,oBAAoB,CAAC;AAC3H,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAmC,MAAM,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mobilewright/driver-mobilenext",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.51",
|
|
4
4
|
"description": "MobileNext driver for Mobilewright",
|
|
5
5
|
"homepage": "https://mobilewright.dev",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"dist"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@mobilewright/protocol": "^0.0.
|
|
36
|
+
"@mobilewright/protocol": "^0.0.51",
|
|
37
37
|
"debug": "^4.4.3",
|
|
38
38
|
"ws": "^8.18.0"
|
|
39
39
|
},
|