@testingbot/cli 1.0.7 → 1.0.8

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.
Files changed (45) hide show
  1. package/README.md +25 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +75 -46
  4. package/dist/config/constants.d.ts +15 -0
  5. package/dist/config/constants.d.ts.map +1 -0
  6. package/dist/config/constants.js +17 -0
  7. package/dist/index.js +2 -0
  8. package/dist/models/espresso_options.d.ts +7 -0
  9. package/dist/models/espresso_options.d.ts.map +1 -1
  10. package/dist/models/espresso_options.js +18 -0
  11. package/dist/models/maestro_options.d.ts +12 -2
  12. package/dist/models/maestro_options.d.ts.map +1 -1
  13. package/dist/models/maestro_options.js +24 -1
  14. package/dist/models/xcuitest_options.d.ts +7 -0
  15. package/dist/models/xcuitest_options.d.ts.map +1 -1
  16. package/dist/models/xcuitest_options.js +18 -0
  17. package/dist/providers/base_provider.d.ts +28 -2
  18. package/dist/providers/base_provider.d.ts.map +1 -1
  19. package/dist/providers/base_provider.js +70 -2
  20. package/dist/providers/espresso.d.ts +1 -0
  21. package/dist/providers/espresso.d.ts.map +1 -1
  22. package/dist/providers/espresso.js +82 -35
  23. package/dist/providers/maestro.d.ts +13 -0
  24. package/dist/providers/maestro.d.ts.map +1 -1
  25. package/dist/providers/maestro.js +218 -74
  26. package/dist/providers/xcuitest.d.ts +1 -0
  27. package/dist/providers/xcuitest.d.ts.map +1 -1
  28. package/dist/providers/xcuitest.js +79 -35
  29. package/dist/ui/banner.d.ts +3 -0
  30. package/dist/ui/banner.d.ts.map +1 -0
  31. package/dist/ui/banner.js +82 -0
  32. package/dist/ui/spinner.d.ts +32 -0
  33. package/dist/ui/spinner.d.ts.map +1 -0
  34. package/dist/ui/spinner.js +92 -0
  35. package/dist/ui/terminal-title.d.ts +8 -0
  36. package/dist/ui/terminal-title.d.ts.map +1 -0
  37. package/dist/ui/terminal-title.js +57 -0
  38. package/dist/upload.d.ts +4 -0
  39. package/dist/upload.d.ts.map +1 -1
  40. package/dist/upload.js +70 -12
  41. package/dist/utils/connectivity.js +5 -3
  42. package/dist/utils.d.ts +6 -0
  43. package/dist/utils.d.ts.map +1 -1
  44. package/dist/utils.js +10 -0
  45. package/package.json +5 -3
package/README.md CHANGED
@@ -113,6 +113,7 @@ testingbot maestro <app> <flows...> [options]
113
113
  | `--include-tags <tags>` | Only run flows with these tags (comma-separated) |
114
114
  | `--exclude-tags <tags>` | Exclude flows with these tags (comma-separated) |
115
115
  | `-e, --env <KEY=VALUE>` | Environment variable for flows (can be repeated) |
116
+ | `--config <path>` | Path to a custom Maestro config file (default: config.yaml in project root) |
116
117
  | `--maestro-version <version>` | Maestro version to use (e.g., "2.0.10") |
117
118
 
118
119
  **Network & Location:**
@@ -122,6 +123,13 @@ testingbot maestro <app> <flows...> [options]
122
123
  | `--throttle-network <speed>` | Network throttling: 4G, 3G, Edge, airplane, or disable |
123
124
  | `--geo-country-code <code>` | Geographic IP location (ISO country code, e.g., "US", "DE") |
124
125
 
126
+ **Tunnel:**
127
+
128
+ | Option | Description |
129
+ |--------|-------------|
130
+ | `-t, --tunnel` | Start a TestingBot tunnel for this test run (cannot be combined with `--async`) |
131
+ | `--tunnel-identifier <id>` | Identifier for the tunnel, allowing multiple tunnels in parallel |
132
+
125
133
  **Output Options:**
126
134
 
127
135
  | Option | Description |
@@ -176,6 +184,9 @@ testingbot maestro app.apk ./flows --download-artifacts --build "build-123"
176
184
  # Download artifacts only for failed tests
177
185
  testingbot maestro app.apk ./flows --download-artifacts failed --artifacts-output-dir ./artifacts
178
186
 
187
+ # Use a custom config file
188
+ testingbot maestro app.apk ./flows --config .maestro/ci-config.yaml
189
+
179
190
  # Run in background (async)
180
191
  testingbot maestro app.apk ./flows --async
181
192
 
@@ -246,6 +257,13 @@ testingbot espresso [appFile] [testAppFile] [options]
246
257
  | `--throttle-network <speed>` | Network throttling: 4G, 3G, Edge, or airplane |
247
258
  | `--geo-location <code>` | Geographic IP location (ISO country code, e.g., "US", "DE") |
248
259
 
260
+ **Tunnel:**
261
+
262
+ | Option | Description |
263
+ |--------|-------------|
264
+ | `-t, --tunnel` | Start a TestingBot tunnel for this test run (cannot be combined with `--async`) |
265
+ | `--tunnel-identifier <id>` | Identifier for the tunnel, allowing multiple tunnels in parallel |
266
+
249
267
  **Output Options:**
250
268
 
251
269
  | Option | Description |
@@ -339,6 +357,13 @@ testingbot xcuitest [appFile] [testAppFile] [options]
339
357
  | `--throttle-network <speed>` | Network throttling: 4G, 3G, Edge, or airplane |
340
358
  | `--geo-location <code>` | Geographic IP location (ISO country code, e.g., "US", "DE") |
341
359
 
360
+ **Tunnel:**
361
+
362
+ | Option | Description |
363
+ |--------|-------------|
364
+ | `-t, --tunnel` | Start a TestingBot tunnel for this test run (cannot be combined with `--async`) |
365
+ | `--tunnel-identifier <id>` | Identifier for the tunnel, allowing multiple tunnels in parallel |
366
+
342
367
  **Output Options:**
343
368
 
344
369
  | Option | Description |
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA4lB9B,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA2oB9B,eAAe,OAAO,CAAC"}
package/dist/cli.js CHANGED
@@ -53,7 +53,7 @@ program
53
53
  .name('testingbot')
54
54
  .version(package_json_1.default.version, '-v, --version', 'Show version number')
55
55
  .description('CLI tool to run Espresso, XCUITest and Maestro tests on TestingBot cloud');
56
- const espressoCommand = program
56
+ program
57
57
  .command('espresso')
58
58
  .description('Run Espresso tests on TestingBot.')
59
59
  .argument('[appFile]', 'Path to application APK file')
@@ -91,6 +91,9 @@ const espressoCommand = program
91
91
  .option('-q, --quiet', 'Quieter console output without progress updates.')
92
92
  .option('--async', 'Start tests and exit immediately without waiting for results.')
93
93
  .option('--dry-run', 'Validate and prepare everything but skip HTTP calls. Shows what would be sent.')
94
+ // Tunnel
95
+ .option('-t, --tunnel', 'Start a TestingBot tunnel for this test run.')
96
+ .option('--tunnel-identifier <id>', 'Identifier for the tunnel (allows multiple tunnels).')
94
97
  // Report options
95
98
  .option('--report <format>', 'Download test report after completion: html or junit.', (val) => val.toLowerCase())
96
99
  .option('--report-output-dir <path>', 'Directory to save test reports (required when --report is used).')
@@ -107,9 +110,24 @@ const espressoCommand = program
107
110
  // Positional arguments take precedence, fall back to options
108
111
  const app = appFileArg || args.app;
109
112
  const testApp = testAppFileArg || args.testApp;
110
- if (!app || !testApp) {
111
- espressoCommand.help();
112
- return;
113
+ const missing = [];
114
+ if (!app)
115
+ missing.push('<appFile> or --app');
116
+ if (!testApp)
117
+ missing.push('<testAppFile> or --test-app');
118
+ if (missing.length > 0) {
119
+ throw new testingbot_error_1.default(`Missing required argument: ${missing.join(', ')}. Run "testingbot espresso --help" for usage.`);
120
+ }
121
+ const credentials = await auth_1.default.getCredentials({
122
+ apiKey: args.apiKey,
123
+ apiSecret: args.apiSecret,
124
+ });
125
+ if (credentials === null) {
126
+ throw new testingbot_error_1.default('No TestingBot credentials found. Please authenticate using one of these methods:\n' +
127
+ ' 1. Run "testingbot login" to authenticate via browser (recommended)\n' +
128
+ ' 2. Use --api-key and --api-secret options\n' +
129
+ ' 3. Set TB_KEY and TB_SECRET environment variables\n' +
130
+ ' 4. Create ~/.testingbot file with content: key:secret');
113
131
  }
114
132
  const metadata = args.commitSha || args.pullRequestId || args.repoName || args.repoOwner
115
133
  ? {
@@ -139,6 +157,8 @@ const espressoCommand = program
139
157
  timeZone: args.timezone,
140
158
  geoCountryCode: args.geoCountryCode,
141
159
  throttleNetwork: args.throttleNetwork,
160
+ tunnel: args.tunnel,
161
+ tunnelIdentifier: args.tunnelIdentifier,
142
162
  quiet: args.quiet,
143
163
  async: args.async,
144
164
  dryRun: args.dryRun,
@@ -146,17 +166,6 @@ const espressoCommand = program
146
166
  reportOutputDir: args.reportOutputDir,
147
167
  metadata,
148
168
  });
149
- const credentials = await auth_1.default.getCredentials({
150
- apiKey: args.apiKey,
151
- apiSecret: args.apiSecret,
152
- });
153
- if (credentials === null) {
154
- throw new testingbot_error_1.default('No TestingBot credentials found. Please authenticate using one of these methods:\n' +
155
- ' 1. Run "testingbot login" to authenticate via browser (recommended)\n' +
156
- ' 2. Use --api-key and --api-secret options\n' +
157
- ' 3. Set TB_KEY and TB_SECRET environment variables\n' +
158
- ' 4. Create ~/.testingbot file with content: key:secret');
159
- }
160
169
  const espresso = new espresso_1.default(credentials, options);
161
170
  const result = await espresso.run();
162
171
  if (!result.success) {
@@ -169,7 +178,7 @@ const espressoCommand = program
169
178
  }
170
179
  })
171
180
  .showHelpAfterError(true);
172
- const maestroCommand = program
181
+ program
173
182
  .command('maestro')
174
183
  .description('Run Maestro flows on TestingBot.')
175
184
  .argument('[appFile]', 'Path to application under test (.apk, .ipa, .app or .zip)')
@@ -198,13 +207,17 @@ const maestroCommand = program
198
207
  return acc;
199
208
  }, [])
200
209
  // Maestro configuration
210
+ .option('--config <path>', 'Path to a custom Maestro config file (default: config.yaml in project root).')
201
211
  .option('--maestro-version <version>', 'Maestro version to use (e.g., "2.0.10").')
202
212
  // Execution mode
203
213
  .option('-q, --quiet', 'Quieter console output without progress updates.')
204
214
  .option('--async', 'Start tests and exit immediately without waiting for results.')
205
215
  .option('--dry-run', 'Validate and prepare everything but skip HTTP calls. Shows what would be sent.')
216
+ // Tunnel
217
+ .option('-t, --tunnel', 'Start a TestingBot tunnel for this test run.')
218
+ .option('--tunnel-identifier <id>', 'Identifier for the tunnel (allows multiple tunnels).')
206
219
  // Report options
207
- .option('--report <format>', 'Download test report after completion: html or junit.', (val) => val.toLowerCase())
220
+ .option('--report <format>', 'Download test report after completion: html, html-detailed, or junit.', (val) => val.toLowerCase())
208
221
  .option('--report-output-dir <path>', 'Directory to save test reports (required when --report is used).')
209
222
  // Artifact download
210
223
  .option('--download-artifacts [mode]', 'Download test artifacts after completion. Mode: all (default) or failed.', (val) => (val === 'failed' ? 'failed' : 'all'))
@@ -236,9 +249,24 @@ const maestroCommand = program
236
249
  app = appFileArg;
237
250
  flows = flowsArgs || [];
238
251
  }
239
- if (!app || flows.length === 0) {
240
- maestroCommand.help();
241
- return;
252
+ const missing = [];
253
+ if (!app)
254
+ missing.push('<appFile> or --app');
255
+ if (flows.length === 0)
256
+ missing.push('<flows...> (one or more flow files, directories, or globs)');
257
+ if (missing.length > 0) {
258
+ throw new testingbot_error_1.default(`Missing required argument: ${missing.join(', ')}. Run "testingbot maestro --help" for usage.`);
259
+ }
260
+ const credentials = await auth_1.default.getCredentials({
261
+ apiKey: args.apiKey,
262
+ apiSecret: args.apiSecret,
263
+ });
264
+ if (credentials === null) {
265
+ throw new testingbot_error_1.default('No TestingBot credentials found. Please authenticate using one of these methods:\n' +
266
+ ' 1. Run "testingbot login" to authenticate via browser (recommended)\n' +
267
+ ' 2. Use --api-key and --api-secret options\n' +
268
+ ' 3. Set TB_KEY and TB_SECRET environment variables\n' +
269
+ ' 4. Create ~/.testingbot file with content: key:secret');
242
270
  }
243
271
  // Parse environment variables from -e KEY=VALUE format
244
272
  const env = {};
@@ -271,6 +299,8 @@ const maestroCommand = program
271
299
  geoCountryCode: args.geoCountryCode,
272
300
  env: Object.keys(env).length > 0 ? env : undefined,
273
301
  maestroVersion: args.maestroVersion,
302
+ tunnel: args.tunnel,
303
+ tunnelIdentifier: args.tunnelIdentifier,
274
304
  quiet: args.quiet,
275
305
  async: args.async,
276
306
  dryRun: args.dryRun,
@@ -284,19 +314,9 @@ const maestroCommand = program
284
314
  ignoreChecksumCheck: args.ignoreChecksumCheck,
285
315
  shardSplit: args.shardSplit,
286
316
  debug: args.debug,
317
+ configFile: args.config,
287
318
  metadata,
288
319
  });
289
- const credentials = await auth_1.default.getCredentials({
290
- apiKey: args.apiKey,
291
- apiSecret: args.apiSecret,
292
- });
293
- if (credentials === null) {
294
- throw new testingbot_error_1.default('No TestingBot credentials found. Please authenticate using one of these methods:\n' +
295
- ' 1. Run "testingbot login" to authenticate via browser (recommended)\n' +
296
- ' 2. Use --api-key and --api-secret options\n' +
297
- ' 3. Set TB_KEY and TB_SECRET environment variables\n' +
298
- ' 4. Create ~/.testingbot file with content: key:secret');
299
- }
300
320
  if (args.debug) {
301
321
  (0, logger_1.enableDebugLogging)();
302
322
  }
@@ -312,7 +332,7 @@ const maestroCommand = program
312
332
  }
313
333
  })
314
334
  .showHelpAfterError(true);
315
- const xcuitestCommand = program
335
+ program
316
336
  .command('xcuitest')
317
337
  .description('Run XCUITest tests on TestingBot.')
318
338
  .argument('[appFile]', 'Path to application IPA file')
@@ -342,6 +362,9 @@ const xcuitestCommand = program
342
362
  .option('-q, --quiet', 'Quieter console output without progress updates.')
343
363
  .option('--async', 'Start tests and exit immediately without waiting for results.')
344
364
  .option('--dry-run', 'Validate and prepare everything but skip HTTP calls. Shows what would be sent.')
365
+ // Tunnel
366
+ .option('-t, --tunnel', 'Start a TestingBot tunnel for this test run.')
367
+ .option('--tunnel-identifier <id>', 'Identifier for the tunnel (allows multiple tunnels).')
345
368
  // Report options
346
369
  .option('--report <format>', 'Download test report after completion: html or junit.', (val) => val.toLowerCase())
347
370
  .option('--report-output-dir <path>', 'Directory to save test reports (required when --report is used).')
@@ -358,9 +381,24 @@ const xcuitestCommand = program
358
381
  // Positional arguments take precedence, fall back to options
359
382
  const app = appFileArg || args.app;
360
383
  const testApp = testAppFileArg || args.testApp;
361
- if (!app || !testApp) {
362
- xcuitestCommand.help();
363
- return;
384
+ const missing = [];
385
+ if (!app)
386
+ missing.push('<appFile> or --app');
387
+ if (!testApp)
388
+ missing.push('<testAppFile> or --test-app');
389
+ if (missing.length > 0) {
390
+ throw new testingbot_error_1.default(`Missing required argument: ${missing.join(', ')}. Run "testingbot xcuitest --help" for usage.`);
391
+ }
392
+ const credentials = await auth_1.default.getCredentials({
393
+ apiKey: args.apiKey,
394
+ apiSecret: args.apiSecret,
395
+ });
396
+ if (credentials === null) {
397
+ throw new testingbot_error_1.default('No TestingBot credentials found. Please authenticate using one of these methods:\n' +
398
+ ' 1. Run "testingbot login" to authenticate via browser (recommended)\n' +
399
+ ' 2. Use --api-key and --api-secret options\n' +
400
+ ' 3. Set TB_KEY and TB_SECRET environment variables\n' +
401
+ ' 4. Create ~/.testingbot file with content: key:secret');
364
402
  }
365
403
  const metadata = args.commitSha || args.pullRequestId || args.repoName || args.repoOwner
366
404
  ? {
@@ -383,6 +421,8 @@ const xcuitestCommand = program
383
421
  timeZone: args.timezone,
384
422
  geoCountryCode: args.geoCountryCode,
385
423
  throttleNetwork: args.throttleNetwork,
424
+ tunnel: args.tunnel,
425
+ tunnelIdentifier: args.tunnelIdentifier,
386
426
  quiet: args.quiet,
387
427
  async: args.async,
388
428
  dryRun: args.dryRun,
@@ -390,17 +430,6 @@ const xcuitestCommand = program
390
430
  reportOutputDir: args.reportOutputDir,
391
431
  metadata,
392
432
  });
393
- const credentials = await auth_1.default.getCredentials({
394
- apiKey: args.apiKey,
395
- apiSecret: args.apiSecret,
396
- });
397
- if (credentials === null) {
398
- throw new testingbot_error_1.default('No TestingBot credentials found. Please authenticate using one of these methods:\n' +
399
- ' 1. Run "testingbot login" to authenticate via browser (recommended)\n' +
400
- ' 2. Use --api-key and --api-secret options\n' +
401
- ' 3. Set TB_KEY and TB_SECRET environment variables\n' +
402
- ' 4. Create ~/.testingbot file with content: key:secret');
403
- }
404
433
  const xcuitest = new xcuitest_1.default(credentials, options);
405
434
  const result = await xcuitest.run();
406
435
  if (!result.success) {
@@ -0,0 +1,15 @@
1
+ export declare const POLLING: {
2
+ readonly MIN_INTERVAL_MS: 5000;
3
+ readonly MAX_INTERVAL_MS: 15000;
4
+ readonly BACKOFF_MULTIPLIER: 1.3;
5
+ readonly MAX_DURATION_MS: number;
6
+ };
7
+ export declare const HTTP: {
8
+ readonly TIMEOUT_MS: 30000;
9
+ };
10
+ export declare const SOCKET: {
11
+ readonly RECONNECTION_ATTEMPTS: 3;
12
+ readonly RECONNECTION_DELAY_MS: 1000;
13
+ readonly TIMEOUT_MS: 10000;
14
+ };
15
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO;;;;;CAKV,CAAC;AAEX,eAAO,MAAM,IAAI;;CAEP,CAAC;AAEX,eAAO,MAAM,MAAM;;;;CAIT,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SOCKET = exports.HTTP = exports.POLLING = void 0;
4
+ exports.POLLING = {
5
+ MIN_INTERVAL_MS: 5000,
6
+ MAX_INTERVAL_MS: 15000,
7
+ BACKOFF_MULTIPLIER: 1.3,
8
+ MAX_DURATION_MS: 60 * 60 * 1000,
9
+ };
10
+ exports.HTTP = {
11
+ TIMEOUT_MS: 30000,
12
+ };
13
+ exports.SOCKET = {
14
+ RECONNECTION_ATTEMPTS: 3,
15
+ RECONNECTION_DELAY_MS: 1000,
16
+ TIMEOUT_MS: 10000,
17
+ };
package/dist/index.js CHANGED
@@ -5,4 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const cli_1 = __importDefault(require("./cli"));
8
+ const banner_1 = require("./ui/banner");
9
+ (0, banner_1.printBanner)();
8
10
  cli_1.default.parse(process.argv);
@@ -23,6 +23,7 @@ export interface EspressoCapabilities {
23
23
  name?: string;
24
24
  build?: string;
25
25
  'testingbot.geoCountryCode'?: string;
26
+ tunnelIdentifier?: string;
26
27
  }
27
28
  export interface EspressoRunOptions {
28
29
  testRunner?: string;
@@ -61,6 +62,8 @@ export default class EspressoOptions {
61
62
  private _timeZone?;
62
63
  private _geoCountryCode?;
63
64
  private _throttleNetwork?;
65
+ private _tunnel;
66
+ private _tunnelIdentifier?;
64
67
  private _quiet;
65
68
  private _async;
66
69
  private _dryRun;
@@ -87,6 +90,8 @@ export default class EspressoOptions {
87
90
  timeZone?: string;
88
91
  geoCountryCode?: string;
89
92
  throttleNetwork?: ThrottleNetwork | CustomNetworkProfile;
93
+ tunnel?: boolean;
94
+ tunnelIdentifier?: string;
90
95
  quiet?: boolean;
91
96
  async?: boolean;
92
97
  dryRun?: boolean;
@@ -116,6 +121,8 @@ export default class EspressoOptions {
116
121
  get timeZone(): string | undefined;
117
122
  get geoCountryCode(): string | undefined;
118
123
  get throttleNetwork(): ThrottleNetwork | CustomNetworkProfile | undefined;
124
+ get tunnel(): boolean;
125
+ get tunnelIdentifier(): string | undefined;
119
126
  get quiet(): boolean;
120
127
  get async(): boolean;
121
128
  get dryRun(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"espresso_options.d.ts","sourceRoot":"","sources":["../../src/models/espresso_options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"espresso_options.d.ts","sourceRoot":"","sources":["../../src/models/espresso_options.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_crypto_1 = require("node:crypto");
6
7
  const testingbot_error_1 = __importDefault(require("./testingbot_error"));
7
8
  class EspressoOptions {
8
9
  _app;
@@ -31,6 +32,9 @@ class EspressoOptions {
31
32
  _geoCountryCode;
32
33
  // Network throttling
33
34
  _throttleNetwork;
35
+ // Tunnel
36
+ _tunnel;
37
+ _tunnelIdentifier;
34
38
  // Execution mode
35
39
  _quiet;
36
40
  _async;
@@ -66,6 +70,12 @@ class EspressoOptions {
66
70
  this._timeZone = options?.timeZone;
67
71
  this._geoCountryCode = options?.geoCountryCode;
68
72
  this._throttleNetwork = options?.throttleNetwork;
73
+ this._tunnel = options?.tunnel ?? false;
74
+ this._tunnelIdentifier =
75
+ options?.tunnelIdentifier ??
76
+ (this._tunnel
77
+ ? `espresso-testing-${(0, node_crypto_1.randomUUID)().slice(0, 8)}`
78
+ : undefined);
69
79
  this._quiet = options?.quiet ?? false;
70
80
  this._async = options?.async ?? false;
71
81
  this._dryRun = options?.dryRun ?? false;
@@ -139,6 +149,12 @@ class EspressoOptions {
139
149
  get throttleNetwork() {
140
150
  return this._throttleNetwork;
141
151
  }
152
+ get tunnel() {
153
+ return this._tunnel;
154
+ }
155
+ get tunnelIdentifier() {
156
+ return this._tunnelIdentifier;
157
+ }
142
158
  get quiet() {
143
159
  return this._quiet;
144
160
  }
@@ -176,6 +192,8 @@ class EspressoOptions {
176
192
  caps.build = this._build;
177
193
  if (this._geoCountryCode)
178
194
  caps['testingbot.geoCountryCode'] = this._geoCountryCode;
195
+ if (this._tunnelIdentifier)
196
+ caps.tunnelIdentifier = this._tunnelIdentifier;
179
197
  return caps;
180
198
  }
181
199
  getEspressoOptions() {
@@ -6,7 +6,7 @@ export interface MaestroConfig {
6
6
  }
7
7
  export type Orientation = 'PORTRAIT' | 'LANDSCAPE';
8
8
  export type ThrottleNetwork = '4G' | '3G' | 'Edge' | 'airplane' | 'disable';
9
- export type ReportFormat = 'html' | 'junit';
9
+ export type ReportFormat = 'html' | 'html-detailed' | 'junit';
10
10
  export type ArtifactDownloadMode = 'all' | 'failed';
11
11
  export interface RunMetadata {
12
12
  commitSha?: string;
@@ -22,8 +22,9 @@ export interface MaestroCapabilities {
22
22
  orientation?: Orientation;
23
23
  locale?: string;
24
24
  timeZone?: string;
25
- throttleNetwork?: ThrottleNetwork;
25
+ throttle_network?: ThrottleNetwork;
26
26
  'testingbot.geoCountryCode'?: string;
27
+ tunnelIdentifier?: string;
27
28
  realDevice?: string;
28
29
  }
29
30
  export interface MaestroRunOptions {
@@ -49,6 +50,8 @@ export default class MaestroOptions {
49
50
  private _geoCountryCode?;
50
51
  private _env?;
51
52
  private _maestroVersion?;
53
+ private _tunnel;
54
+ private _tunnelIdentifier?;
52
55
  private _quiet;
53
56
  private _async;
54
57
  private _dryRun;
@@ -60,6 +63,7 @@ export default class MaestroOptions {
60
63
  private _ignoreChecksumCheck;
61
64
  private _shardSplit?;
62
65
  private _debug;
66
+ private _configFile?;
63
67
  private _metadata?;
64
68
  constructor(app: string, flows: string | string[], device?: string, options?: {
65
69
  includeTags?: string[];
@@ -74,6 +78,8 @@ export default class MaestroOptions {
74
78
  geoCountryCode?: string;
75
79
  env?: Record<string, string>;
76
80
  maestroVersion?: string;
81
+ tunnel?: boolean;
82
+ tunnelIdentifier?: string;
77
83
  quiet?: boolean;
78
84
  async?: boolean;
79
85
  dryRun?: boolean;
@@ -85,6 +91,7 @@ export default class MaestroOptions {
85
91
  ignoreChecksumCheck?: boolean;
86
92
  shardSplit?: number;
87
93
  debug?: boolean;
94
+ configFile?: string;
88
95
  metadata?: RunMetadata;
89
96
  });
90
97
  get app(): string;
@@ -102,6 +109,8 @@ export default class MaestroOptions {
102
109
  get geoCountryCode(): string | undefined;
103
110
  get env(): Record<string, string> | undefined;
104
111
  get maestroVersion(): string | undefined;
112
+ get tunnel(): boolean;
113
+ get tunnelIdentifier(): string | undefined;
105
114
  get quiet(): boolean;
106
115
  get async(): boolean;
107
116
  get dryRun(): boolean;
@@ -113,6 +122,7 @@ export default class MaestroOptions {
113
122
  get ignoreChecksumCheck(): boolean;
114
123
  get shardSplit(): number | undefined;
115
124
  get debug(): boolean;
125
+ get configFile(): string | undefined;
116
126
  get metadata(): RunMetadata | undefined;
117
127
  getMaestroOptions(): MaestroRunOptions | undefined;
118
128
  getCapabilities(detectedPlatform?: 'Android' | 'iOS'): MaestroCapabilities;
@@ -1 +1 @@
1
- {"version":3,"file":"maestro_options.d.ts","sourceRoot":"","sources":["../../src/models/maestro_options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"maestro_options.d.ts","sourceRoot":"","sources":["../../src/models/maestro_options.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const node_crypto_1 = require("node:crypto");
3
4
  class MaestroOptions {
4
5
  static isIpaFile(app) {
5
6
  return app?.toLowerCase().endsWith('.ipa') ?? false;
@@ -19,6 +20,9 @@ class MaestroOptions {
19
20
  _geoCountryCode;
20
21
  _env;
21
22
  _maestroVersion;
23
+ // Tunnel
24
+ _tunnel;
25
+ _tunnelIdentifier;
22
26
  _quiet;
23
27
  _async;
24
28
  _dryRun;
@@ -30,6 +34,7 @@ class MaestroOptions {
30
34
  _ignoreChecksumCheck;
31
35
  _shardSplit;
32
36
  _debug;
37
+ _configFile;
33
38
  // Metadata
34
39
  _metadata;
35
40
  constructor(app, flows, device, options) {
@@ -48,6 +53,12 @@ class MaestroOptions {
48
53
  this._geoCountryCode = options?.geoCountryCode;
49
54
  this._env = options?.env;
50
55
  this._maestroVersion = options?.maestroVersion;
56
+ this._tunnel = options?.tunnel ?? false;
57
+ this._tunnelIdentifier =
58
+ options?.tunnelIdentifier ??
59
+ (this._tunnel
60
+ ? `maestro-testing-${(0, node_crypto_1.randomUUID)().slice(0, 8)}`
61
+ : undefined);
51
62
  this._quiet = options?.quiet ?? false;
52
63
  this._async = options?.async ?? false;
53
64
  this._dryRun = options?.dryRun ?? false;
@@ -61,6 +72,7 @@ class MaestroOptions {
61
72
  this._ignoreChecksumCheck = options?.ignoreChecksumCheck ?? false;
62
73
  this._shardSplit = options?.shardSplit;
63
74
  this._debug = options?.debug ?? false;
75
+ this._configFile = options?.configFile;
64
76
  this._metadata = options?.metadata;
65
77
  }
66
78
  get app() {
@@ -108,6 +120,12 @@ class MaestroOptions {
108
120
  get maestroVersion() {
109
121
  return this._maestroVersion;
110
122
  }
123
+ get tunnel() {
124
+ return this._tunnel;
125
+ }
126
+ get tunnelIdentifier() {
127
+ return this._tunnelIdentifier;
128
+ }
111
129
  get quiet() {
112
130
  return this._quiet;
113
131
  }
@@ -141,6 +159,9 @@ class MaestroOptions {
141
159
  get debug() {
142
160
  return this._debug;
143
161
  }
162
+ get configFile() {
163
+ return this._configFile;
164
+ }
144
165
  get metadata() {
145
166
  return this._metadata;
146
167
  }
@@ -189,9 +210,11 @@ class MaestroOptions {
189
210
  if (this._timeZone)
190
211
  caps.timeZone = this._timeZone;
191
212
  if (this._throttleNetwork)
192
- caps.throttleNetwork = this._throttleNetwork;
213
+ caps.throttle_network = this._throttleNetwork;
193
214
  if (this._geoCountryCode)
194
215
  caps['testingbot.geoCountryCode'] = this._geoCountryCode;
216
+ if (this._tunnelIdentifier)
217
+ caps.tunnelIdentifier = this._tunnelIdentifier;
195
218
  if (this._realDevice)
196
219
  caps.realDevice = 'true';
197
220
  return caps;
@@ -23,6 +23,7 @@ export interface XCUITestCapabilities {
23
23
  name?: string;
24
24
  build?: string;
25
25
  'testingbot.geoCountryCode'?: string;
26
+ tunnelIdentifier?: string;
26
27
  }
27
28
  export interface XCUITestRunOptions {
28
29
  orientation?: Orientation;
@@ -47,6 +48,8 @@ export default class XCUITestOptions {
47
48
  private _timeZone?;
48
49
  private _geoCountryCode?;
49
50
  private _throttleNetwork?;
51
+ private _tunnel;
52
+ private _tunnelIdentifier?;
50
53
  private _quiet;
51
54
  private _async;
52
55
  private _dryRun;
@@ -66,6 +69,8 @@ export default class XCUITestOptions {
66
69
  timeZone?: string;
67
70
  geoCountryCode?: string;
68
71
  throttleNetwork?: ThrottleNetwork | CustomNetworkProfile;
72
+ tunnel?: boolean;
73
+ tunnelIdentifier?: string;
69
74
  quiet?: boolean;
70
75
  async?: boolean;
71
76
  dryRun?: boolean;
@@ -88,6 +93,8 @@ export default class XCUITestOptions {
88
93
  get timeZone(): string | undefined;
89
94
  get geoCountryCode(): string | undefined;
90
95
  get throttleNetwork(): ThrottleNetwork | CustomNetworkProfile | undefined;
96
+ get tunnel(): boolean;
97
+ get tunnelIdentifier(): string | undefined;
91
98
  get quiet(): boolean;
92
99
  get async(): boolean;
93
100
  get dryRun(): boolean;