@devicecloud.dev/dcd 3.7.11 → 4.0.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.
@@ -47,13 +47,13 @@
47
47
  "hasDynamicHelp": false,
48
48
  "multiple": false,
49
49
  "options": [
50
- "29",
51
50
  "30",
51
+ "35",
52
+ "34",
52
53
  "31",
53
- "32",
54
54
  "33",
55
- "34",
56
- "35"
55
+ "32",
56
+ "29"
57
57
  ],
58
58
  "type": "option"
59
59
  },
@@ -71,18 +71,6 @@
71
71
  ],
72
72
  "type": "option"
73
73
  },
74
- "skip-chrome-onboarding": {
75
- "description": "[Android only] Skip Chrome browser onboarding screens when running tests",
76
- "name": "skip-chrome-onboarding",
77
- "allowNo": false,
78
- "type": "boolean"
79
- },
80
- "show-crosshairs": {
81
- "description": "[Android only] Display crosshairs for screen interactions during test execution",
82
- "name": "show-crosshairs",
83
- "allowNo": false,
84
- "type": "boolean"
85
- },
86
74
  "apiKey": {
87
75
  "aliases": [
88
76
  "api-key"
@@ -126,6 +114,16 @@
126
114
  "multiple": false,
127
115
  "type": "option"
128
116
  },
117
+ "artifacts-path": {
118
+ "dependsOn": [
119
+ "download-artifacts"
120
+ ],
121
+ "description": "Custom file path for downloaded artifacts (default: ./artifacts.zip)",
122
+ "name": "artifacts-path",
123
+ "hasDynamicHelp": false,
124
+ "multiple": false,
125
+ "type": "option"
126
+ },
129
127
  "async": {
130
128
  "description": "Immediately return (exit code 0) from the command without waiting for the results of the run (useful for saving CI minutes)",
131
129
  "name": "async",
@@ -139,6 +137,12 @@
139
137
  "multiple": false,
140
138
  "type": "option"
141
139
  },
140
+ "debug": {
141
+ "description": "Enable detailed debug logging for troubleshooting issues",
142
+ "name": "debug",
143
+ "allowNo": false,
144
+ "type": "boolean"
145
+ },
142
146
  "device-locale": {
143
147
  "description": "Locale that will be set to a device, ISO-639-1 code and uppercase ISO-3166-1 code e.g. \"de_DE\" for Germany",
144
148
  "name": "device-locale",
@@ -157,19 +161,9 @@
157
161
  ],
158
162
  "type": "option"
159
163
  },
160
- "artifacts-path": {
161
- "dependsOn": [
162
- "download-artifacts"
163
- ],
164
- "description": "Custom file path for downloaded artifacts (default: ./artifacts.zip)",
165
- "name": "artifacts-path",
166
- "hasDynamicHelp": false,
167
- "multiple": false,
168
- "type": "option"
169
- },
170
- "debug": {
171
- "description": "Enable detailed debug logging for troubleshooting issues",
172
- "name": "debug",
164
+ "dry-run": {
165
+ "description": "Simulate the run without actually triggering the upload/test, useful for debugging workflow issues.",
166
+ "name": "dry-run",
173
167
  "allowNo": false,
174
168
  "type": "boolean"
175
169
  },
@@ -216,6 +210,12 @@
216
210
  "allowNo": false,
217
211
  "type": "boolean"
218
212
  },
213
+ "ignore-sha-check": {
214
+ "description": "Ignore the sha hash check and upload the binary regardless of whether it already exists (not recommended)",
215
+ "name": "ignore-sha-check",
216
+ "allowNo": false,
217
+ "type": "boolean"
218
+ },
219
219
  "include-tags": {
220
220
  "aliases": [
221
221
  "include-tags"
@@ -227,12 +227,6 @@
227
227
  "multiple": true,
228
228
  "type": "option"
229
229
  },
230
- "ignore-sha-check": {
231
- "description": "Ignore the sha hash check and upload the binary regardless of whether it already exists (not recommended)",
232
- "name": "ignore-sha-check",
233
- "allowNo": false,
234
- "type": "boolean"
235
- },
236
230
  "ios-device": {
237
231
  "description": "[iOS only] iOS device to run your flow against",
238
232
  "name": "ios-device",
@@ -257,25 +251,36 @@
257
251
  "hasDynamicHelp": false,
258
252
  "multiple": false,
259
253
  "options": [
260
- "16",
254
+ "18",
261
255
  "17",
262
- "18"
256
+ "16"
263
257
  ],
264
258
  "type": "option"
265
259
  },
266
- "x86-arch": {
267
- "description": "[iOS only, experimental] Run your flow against x86 architecture simulator instead of arm64",
268
- "name": "x86-arch",
260
+ "json-file": {
261
+ "description": "Write JSON output to a file. File be called <upload_id>_dcd.json unless you supply the --json-file-name flag - note: will always exit with code 0",
262
+ "name": "json-file",
263
+ "required": false,
269
264
  "allowNo": false,
270
265
  "type": "boolean"
271
266
  },
267
+ "json-file-name": {
268
+ "dependsOn": [
269
+ "json-file"
270
+ ],
271
+ "description": "A custom name for the JSON file (can also include relative path)",
272
+ "name": "json-file-name",
273
+ "hasDynamicHelp": false,
274
+ "multiple": false,
275
+ "type": "option"
276
+ },
272
277
  "maestro-version": {
273
278
  "aliases": [
274
279
  "maestroVersion"
275
280
  ],
276
281
  "description": "Maestro version to run your flow against",
277
282
  "name": "maestro-version",
278
- "default": "1.39.5",
283
+ "default": "1.41.0",
279
284
  "hasDynamicHelp": false,
280
285
  "multiple": false,
281
286
  "options": [
@@ -290,10 +295,19 @@
290
295
  "1.40.1",
291
296
  "1.40.2",
292
297
  "1.40.3",
293
- "1.41.0"
298
+ "1.41.0",
299
+ "latest"
294
300
  ],
295
301
  "type": "option"
296
302
  },
303
+ "metadata": {
304
+ "char": "m",
305
+ "description": "Arbitrary key-value metadata to include with your test run (format: key=value)",
306
+ "name": "metadata",
307
+ "hasDynamicHelp": false,
308
+ "multiple": true,
309
+ "type": "option"
310
+ },
297
311
  "mitmHost": {
298
312
  "description": "used for mitmproxy support, enterprise only, contact support if interested",
299
313
  "name": "mitmHost",
@@ -311,6 +325,14 @@
311
325
  "multiple": false,
312
326
  "type": "option"
313
327
  },
328
+ "moropo-v1-api-key": {
329
+ "description": "API key for Moropo v1 integration",
330
+ "name": "moropo-v1-api-key",
331
+ "required": false,
332
+ "hasDynamicHelp": false,
333
+ "multiple": false,
334
+ "type": "option"
335
+ },
314
336
  "name": {
315
337
  "description": "A custom name for your upload (useful for tagging commits etc)",
316
338
  "name": "name",
@@ -338,6 +360,20 @@
338
360
  "allowNo": false,
339
361
  "type": "boolean"
340
362
  },
363
+ "report": {
364
+ "aliases": [
365
+ "format"
366
+ ],
367
+ "description": "Runs Maestro with the --format flag, this will generate a report in the specified format",
368
+ "name": "report",
369
+ "hasDynamicHelp": false,
370
+ "multiple": false,
371
+ "options": [
372
+ "junit",
373
+ "html"
374
+ ],
375
+ "type": "option"
376
+ },
341
377
  "retry": {
342
378
  "description": "Automatically retry the run up to the number of times specified (same as pressing retry in the UI) - this is free of charge",
343
379
  "name": "retry",
@@ -358,38 +394,21 @@
358
394
  ],
359
395
  "type": "option"
360
396
  },
361
- "report": {
362
- "aliases": [
363
- "format"
364
- ],
365
- "description": "Runs Maestro with the --format flag, this will generate a report in the specified format",
366
- "name": "report",
367
- "hasDynamicHelp": false,
368
- "multiple": false,
369
- "options": [
370
- "junit",
371
- "html"
372
- ],
373
- "type": "option"
374
- },
375
- "json-file": {
376
- "description": "Write JSON output to a file. If you supply the --name flag, file <name>_dcd.json will be written, otherwise file <upload_id>_dcd.json will be written - note: will always exit with code 0",
377
- "name": "json-file",
378
- "required": false,
397
+ "show-crosshairs": {
398
+ "description": "[Android only] Display crosshairs for screen interactions during test execution",
399
+ "name": "show-crosshairs",
379
400
  "allowNo": false,
380
401
  "type": "boolean"
381
402
  },
382
- "moropo-v1-api-key": {
383
- "description": "API key for Moropo v1 integration",
384
- "name": "moropo-v1-api-key",
385
- "required": false,
386
- "hasDynamicHelp": false,
387
- "multiple": false,
388
- "type": "option"
403
+ "skip-chrome-onboarding": {
404
+ "description": "[Android only] Skip Chrome browser onboarding screens when running tests",
405
+ "name": "skip-chrome-onboarding",
406
+ "allowNo": false,
407
+ "type": "boolean"
389
408
  },
390
- "dry-run": {
391
- "description": "Simulate the run without actually triggering the upload/test, useful for debugging workflow issues.",
392
- "name": "dry-run",
409
+ "x86-arch": {
410
+ "description": "[iOS only, experimental] Run your flow against x86 architecture simulator instead of arm64",
411
+ "name": "x86-arch",
393
412
  "allowNo": false,
394
413
  "type": "boolean"
395
414
  }
@@ -424,26 +443,6 @@
424
443
  "allowNo": false,
425
444
  "type": "boolean"
426
445
  },
427
- "name": {
428
- "description": "Name of the upload to check status for",
429
- "exclusive": [
430
- "upload-id"
431
- ],
432
- "name": "name",
433
- "hasDynamicHelp": false,
434
- "multiple": false,
435
- "type": "option"
436
- },
437
- "upload-id": {
438
- "description": "UUID of the upload to check status for",
439
- "exclusive": [
440
- "name"
441
- ],
442
- "name": "upload-id",
443
- "hasDynamicHelp": false,
444
- "multiple": false,
445
- "type": "option"
446
- },
447
446
  "apiKey": {
448
447
  "aliases": [
449
448
  "api-key"
@@ -466,6 +465,26 @@
466
465
  "hasDynamicHelp": false,
467
466
  "multiple": false,
468
467
  "type": "option"
468
+ },
469
+ "name": {
470
+ "description": "Name of the upload to check status for",
471
+ "exclusive": [
472
+ "upload-id"
473
+ ],
474
+ "name": "name",
475
+ "hasDynamicHelp": false,
476
+ "multiple": false,
477
+ "type": "option"
478
+ },
479
+ "upload-id": {
480
+ "description": "UUID of the upload to check status for",
481
+ "exclusive": [
482
+ "name"
483
+ ],
484
+ "name": "upload-id",
485
+ "hasDynamicHelp": false,
486
+ "multiple": false,
487
+ "type": "option"
469
488
  }
470
489
  },
471
490
  "hasDynamicHelp": false,
@@ -551,5 +570,5 @@
551
570
  ]
552
571
  }
553
572
  },
554
- "version": "3.7.11"
573
+ "version": "4.0.0"
555
574
  }
package/package.json CHANGED
@@ -14,9 +14,9 @@
14
14
  "@supabase/supabase-js": "^2.45.1",
15
15
  "@web-std/file": "^3.0.3",
16
16
  "app-info-parser": "^1.1.6",
17
- "archiver": "^6.0.1",
17
+ "archiver": "^7.0.1",
18
18
  "bplist-parser": "^0.3.2",
19
- "glob": "^10.3.10",
19
+ "glob": "^11.0.0",
20
20
  "js-yaml": "^4.1.0",
21
21
  "node-stream-zip": "^1.15.0",
22
22
  "plist": "^3.1.0"
@@ -24,26 +24,27 @@
24
24
  "description": "Better cloud maestro testing",
25
25
  "devDependencies": {
26
26
  "@oclif/prettier-config": "^0.2.1",
27
- "@oclif/test": "^3",
27
+ "@oclif/test": "^4.1.13",
28
28
  "@types/archiver": "^6.0.2",
29
- "@types/chai": "^4",
29
+ "@types/chai": "^5.2.2",
30
30
  "@types/glob-to-regexp": "^0.4.4",
31
31
  "@types/js-yaml": "^4.0.9",
32
- "@types/mocha": "^9.0.0",
32
+ "@types/mocha": "^10.0.10",
33
+ "@types/node": "^24.1.0",
33
34
  "@types/plist": "^3.0.5",
34
- "chai": "^4",
35
- "eslint": "^8.56.0",
36
- "eslint-config-oclif": "^5",
35
+ "chai": "^5.2.1",
36
+ "eslint": "^8.57.1",
37
+ "eslint-config-oclif": "^5.2.2",
37
38
  "eslint-config-oclif-typescript": "^3",
38
- "eslint-config-prettier": "^9.1.0",
39
- "mocha": "^10",
39
+ "eslint-config-prettier": "^10.1.8",
40
+ "mocha": "^11.7.1",
40
41
  "oclif": "^4",
41
- "shx": "^0.3.3",
42
+ "shx": "^0.4.0",
42
43
  "ts-node": "^10.9.2",
43
- "typescript": "^5"
44
+ "typescript": "^5.9.2"
44
45
  },
45
46
  "engines": {
46
- "node": ">=20.0.0"
47
+ "node": ">=22.0.0"
47
48
  },
48
49
  "files": [
49
50
  "/bin",
@@ -72,14 +73,14 @@
72
73
  "dcd": "./bin/dev.js",
73
74
  "prod": "./bin/run.js",
74
75
  "build": "shx rm -rf dist && tsc -b",
75
- "lint": "eslint . --ext .ts",
76
+ "lint": "NODE_OPTIONS='--no-deprecation' eslint . --ext .ts",
76
77
  "postpack": "shx rm -f oclif.manifest.json",
77
- "posttest": "yarn lint",
78
78
  "prepack": "yarn build && oclif manifest",
79
79
  "prepare": "yarn build",
80
- "version": "oclif readme && git add README.md"
80
+ "version": "oclif readme && git add README.md",
81
+ "test": "node scripts/test-runner.mjs"
81
82
  },
82
- "version": "3.7.11",
83
+ "version": "4.0.0",
83
84
  "bugs": {
84
85
  "url": "https://discord.gg/gm3mJwcNw8"
85
86
  },
@@ -1,35 +0,0 @@
1
- import { TAppMetadata } from '../types';
2
- export declare class ApiGateway {
3
- static getResultsForUpload: (baseUrl: string, apiKey: string, uploadId: string) => Promise<{
4
- statusCode?: number;
5
- results?: import("../../../api/schema.types").components["schemas"]["TResultResponse"][];
6
- }>;
7
- static getUploadStatus: (baseUrl: string, apiKey: string, options: {
8
- uploadId?: string;
9
- name?: string;
10
- }) => Promise<{
11
- status: "PASSED" | "FAILED" | "CANCELLED" | "PENDING";
12
- tests: Array<{
13
- name: string;
14
- status: "PASSED" | "FAILED" | "CANCELLED" | "PENDING";
15
- durationSeconds?: number;
16
- failReason?: string;
17
- }>;
18
- }>;
19
- static downloadArtifactsZip: (baseUrl: string, apiKey: string, uploadId: string, results: "ALL" | "FAILED", artifactsPath?: string) => Promise<void>;
20
- static uploadFlow: (baseUrl: string, apiKey: string, testFormData: FormData) => Promise<{
21
- message?: string;
22
- results?: import("../../../api/schema.types").components["schemas"]["IDBResult"][];
23
- }>;
24
- static finaliseUpload: (baseUrl: string, apiKey: string, id: string, metadata: TAppMetadata, path: string, sha: string) => Promise<Record<string, never>>;
25
- static getBinaryUploadUrl: (baseUrl: string, apiKey: string, platform: "android" | "ios") => Promise<{
26
- message: string;
27
- path: string;
28
- token: string;
29
- id: string;
30
- }>;
31
- static checkForExistingUpload: (baseUrl: string, apiKey: string, sha: string) => Promise<{
32
- appBinaryId: string;
33
- exists: boolean;
34
- }>;
35
- }