@devicecloud.dev/dcd 4.1.2 → 4.1.3

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 (46) hide show
  1. package/dist/commands/cloud.d.ts +26 -34
  2. package/dist/commands/cloud.js +117 -513
  3. package/dist/config/flags/api.flags.d.ts +7 -0
  4. package/dist/config/flags/api.flags.js +19 -0
  5. package/dist/config/flags/binary.flags.d.ts +8 -0
  6. package/dist/config/flags/binary.flags.js +20 -0
  7. package/dist/config/flags/device.flags.d.ts +14 -0
  8. package/dist/config/flags/device.flags.js +46 -0
  9. package/dist/config/flags/environment.flags.d.ts +11 -0
  10. package/dist/config/flags/environment.flags.js +37 -0
  11. package/dist/config/flags/execution.flags.d.ts +13 -0
  12. package/dist/config/flags/execution.flags.js +50 -0
  13. package/dist/config/flags/output.flags.d.ts +18 -0
  14. package/dist/config/flags/output.flags.js +61 -0
  15. package/dist/constants.d.ts +28 -24
  16. package/dist/constants.js +21 -206
  17. package/dist/gateways/api-gateway.d.ts +3 -3
  18. package/dist/methods.d.ts +0 -4
  19. package/dist/methods.js +15 -80
  20. package/dist/services/device-validation.service.d.ts +29 -0
  21. package/dist/services/device-validation.service.js +72 -0
  22. package/dist/{plan.d.ts → services/execution-plan.service.d.ts} +1 -1
  23. package/dist/{plan.js → services/execution-plan.service.js} +10 -10
  24. package/dist/{planMethods.js → services/execution-plan.utils.js} +0 -1
  25. package/dist/services/metadata-extractor.service.d.ts +46 -0
  26. package/dist/services/metadata-extractor.service.js +138 -0
  27. package/dist/services/moropo.service.d.ts +20 -0
  28. package/dist/services/moropo.service.js +113 -0
  29. package/dist/services/report-download.service.d.ts +40 -0
  30. package/dist/services/report-download.service.js +110 -0
  31. package/dist/services/results-polling.service.d.ts +45 -0
  32. package/dist/services/results-polling.service.js +210 -0
  33. package/dist/services/test-submission.service.d.ts +41 -0
  34. package/dist/services/test-submission.service.js +116 -0
  35. package/dist/services/version.service.d.ts +31 -0
  36. package/dist/services/version.service.js +81 -0
  37. package/dist/types/{schema.types.d.ts → generated/schema.types.d.ts} +349 -349
  38. package/dist/types/index.d.ts +6 -0
  39. package/dist/types/index.js +24 -0
  40. package/dist/utils/compatibility.d.ts +5 -0
  41. package/oclif.manifest.json +195 -209
  42. package/package.json +2 -9
  43. /package/dist/{planMethods.d.ts → services/execution-plan.utils.d.ts} +0 -0
  44. /package/dist/types/{device.types.d.ts → domain/device.types.d.ts} +0 -0
  45. /package/dist/types/{device.types.js → domain/device.types.js} +0 -0
  46. /package/dist/types/{schema.types.js → generated/schema.types.js} +0 -0
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Centralized type exports.
3
+ * Types are organized by domain in subdirectories.
4
+ */
5
+ export * from './domain/device.types';
6
+ export * from './generated/schema.types';
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ /**
3
+ * Centralized type exports.
4
+ * Types are organized by domain in subdirectories.
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ // Domain-specific types
22
+ __exportStar(require("./domain/device.types"), exports);
23
+ // Generated types from OpenAPI schema
24
+ __exportStar(require("./generated/schema.types"), exports);
@@ -2,6 +2,11 @@ export interface CompatibilityData {
2
2
  android: Record<string, string[]>;
3
3
  androidPlay: Record<string, string[]>;
4
4
  ios: Record<string, string[]>;
5
+ maestro: {
6
+ defaultVersion: string;
7
+ latestVersion: string;
8
+ supportedVersions: string[];
9
+ };
5
10
  }
6
11
  export declare function fetchCompatibilityData(apiUrl: string, apiKey: string): Promise<CompatibilityData>;
7
12
  export declare function clearCompatibilityCache(): void;
@@ -25,36 +25,6 @@
25
25
  "allowNo": false,
26
26
  "type": "boolean"
27
27
  },
28
- "android-api-level": {
29
- "description": "[Android only] Android API level to run your flow against",
30
- "name": "android-api-level",
31
- "hasDynamicHelp": false,
32
- "multiple": false,
33
- "options": [
34
- "30",
35
- "35",
36
- "34",
37
- "31",
38
- "33",
39
- "32",
40
- "29"
41
- ],
42
- "type": "option"
43
- },
44
- "android-device": {
45
- "description": "[Android only] Android device to run your flow against",
46
- "name": "android-device",
47
- "hasDynamicHelp": false,
48
- "multiple": false,
49
- "options": [
50
- "generic-tablet",
51
- "pixel-6",
52
- "pixel-6-pro",
53
- "pixel-7",
54
- "pixel-7-pro"
55
- ],
56
- "type": "option"
57
- },
58
28
  "apiKey": {
59
29
  "aliases": [
60
30
  "api-key"
@@ -98,119 +68,45 @@
98
68
  "multiple": false,
99
69
  "type": "option"
100
70
  },
101
- "artifacts-path": {
102
- "dependsOn": [
103
- "download-artifacts"
104
- ],
105
- "description": "Custom file path for downloaded artifacts (default: ./artifacts.zip)",
106
- "name": "artifacts-path",
107
- "hasDynamicHelp": false,
108
- "multiple": false,
109
- "type": "option"
110
- },
111
- "junit-path": {
112
- "dependsOn": [
113
- "report"
114
- ],
115
- "description": "Custom file path for downloaded JUnit report (default: ./report.xml)",
116
- "name": "junit-path",
117
- "hasDynamicHelp": false,
118
- "multiple": false,
119
- "type": "option"
120
- },
121
- "allure-path": {
122
- "dependsOn": [
123
- "report"
124
- ],
125
- "description": "Custom file path for downloaded Allure report (default: ./report.html)",
126
- "name": "allure-path",
127
- "hasDynamicHelp": false,
128
- "multiple": false,
129
- "type": "option"
130
- },
131
- "html-path": {
132
- "dependsOn": [
133
- "report"
134
- ],
135
- "description": "Custom file path for downloaded HTML report (default: ./report.html)",
136
- "name": "html-path",
137
- "hasDynamicHelp": false,
138
- "multiple": false,
139
- "type": "option"
140
- },
141
- "async": {
142
- "description": "Immediately return (exit code 0) from the command without waiting for the results of the run (useful for saving CI minutes)",
143
- "name": "async",
144
- "allowNo": false,
145
- "type": "boolean"
146
- },
147
- "config": {
148
- "description": "Path to custom config.yaml file. If not provided, defaults to config.yaml in root flows folders.",
149
- "name": "config",
150
- "hasDynamicHelp": false,
151
- "multiple": false,
152
- "type": "option"
153
- },
154
- "debug": {
155
- "description": "Enable detailed debug logging for troubleshooting issues",
156
- "name": "debug",
71
+ "ignore-sha-check": {
72
+ "description": "Ignore the sha hash check and upload the binary regardless of whether it already exists (not recommended)",
73
+ "name": "ignore-sha-check",
157
74
  "allowNo": false,
158
75
  "type": "boolean"
159
76
  },
160
- "device-locale": {
161
- "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",
162
- "name": "device-locale",
163
- "hasDynamicHelp": false,
164
- "multiple": false,
165
- "type": "option"
166
- },
167
- "download-artifacts": {
168
- "description": "Download a zip containing the logs, screenshots and videos for each result in this run. You will be debited a $0.01 egress fee for each result. Options: ALL (everything), FAILED (failures only).",
169
- "name": "download-artifacts",
77
+ "android-api-level": {
78
+ "description": "[Android only] Android API level to run your flow against",
79
+ "name": "android-api-level",
170
80
  "hasDynamicHelp": false,
171
81
  "multiple": false,
172
82
  "options": [
173
- "ALL",
174
- "FAILED"
83
+ "30",
84
+ "35",
85
+ "34",
86
+ "31",
87
+ "33",
88
+ "32",
89
+ "29"
175
90
  ],
176
91
  "type": "option"
177
92
  },
178
- "dry-run": {
179
- "description": "Simulate the run without actually triggering the upload/test, useful for debugging workflow issues.",
180
- "name": "dry-run",
181
- "allowNo": false,
182
- "type": "boolean"
183
- },
184
- "env": {
185
- "char": "e",
186
- "description": "One or more environment variables to inject into your flows",
187
- "name": "env",
188
- "hasDynamicHelp": false,
189
- "multiple": true,
190
- "type": "option"
191
- },
192
- "exclude-flows": {
193
- "description": "Sub directories to ignore when building the flow file list",
194
- "name": "exclude-flows",
195
- "default": [],
93
+ "android-device": {
94
+ "description": "[Android only] Android device to run your flow against",
95
+ "name": "android-device",
196
96
  "hasDynamicHelp": false,
197
- "multiple": true,
198
- "type": "option"
199
- },
200
- "exclude-tags": {
201
- "aliases": [
202
- "exclude-tags"
97
+ "multiple": false,
98
+ "options": [
99
+ "generic-tablet",
100
+ "pixel-6",
101
+ "pixel-6-pro",
102
+ "pixel-7",
103
+ "pixel-7-pro"
203
104
  ],
204
- "description": "Flows which have these tags will be excluded from the run",
205
- "name": "exclude-tags",
206
- "default": [],
207
- "hasDynamicHelp": false,
208
- "multiple": true,
209
105
  "type": "option"
210
106
  },
211
- "flows": {
212
- "description": "The path to the flow file or folder containing your flows",
213
- "name": "flows",
107
+ "device-locale": {
108
+ "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",
109
+ "name": "device-locale",
214
110
  "hasDynamicHelp": false,
215
111
  "multiple": false,
216
112
  "type": "option"
@@ -224,23 +120,6 @@
224
120
  "allowNo": false,
225
121
  "type": "boolean"
226
122
  },
227
- "ignore-sha-check": {
228
- "description": "Ignore the sha hash check and upload the binary regardless of whether it already exists (not recommended)",
229
- "name": "ignore-sha-check",
230
- "allowNo": false,
231
- "type": "boolean"
232
- },
233
- "include-tags": {
234
- "aliases": [
235
- "include-tags"
236
- ],
237
- "description": "Only flows which have these tags will be included in the run",
238
- "name": "include-tags",
239
- "default": [],
240
- "hasDynamicHelp": false,
241
- "multiple": true,
242
- "type": "option"
243
- },
244
123
  "ios-device": {
245
124
  "description": "[iOS only] iOS device to run your flow against",
246
125
  "name": "ios-device",
@@ -272,45 +151,35 @@
272
151
  ],
273
152
  "type": "option"
274
153
  },
275
- "json-file": {
276
- "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",
277
- "name": "json-file",
278
- "required": false,
279
- "allowNo": false,
280
- "type": "boolean"
281
- },
282
- "json-file-name": {
283
- "dependsOn": [
284
- "json-file"
285
- ],
286
- "description": "A custom name for the JSON file (can also include relative path)",
287
- "name": "json-file-name",
154
+ "orientation": {
155
+ "description": "[Android only] The orientation of the device to run your flow against in degrees",
156
+ "name": "orientation",
288
157
  "hasDynamicHelp": false,
289
158
  "multiple": false,
159
+ "options": [
160
+ "0",
161
+ "90"
162
+ ],
290
163
  "type": "option"
291
164
  },
292
- "maestro-version": {
293
- "aliases": [
294
- "maestroVersion"
295
- ],
296
- "description": "Maestro version to run your flow against",
297
- "name": "maestro-version",
298
- "default": "1.41.0",
165
+ "show-crosshairs": {
166
+ "description": "[Android only] Display crosshairs for screen interactions during test execution",
167
+ "name": "show-crosshairs",
168
+ "allowNo": false,
169
+ "type": "boolean"
170
+ },
171
+ "skip-chrome-onboarding": {
172
+ "description": "[Android only] Skip Chrome browser onboarding screens when running tests",
173
+ "name": "skip-chrome-onboarding",
174
+ "allowNo": false,
175
+ "type": "boolean"
176
+ },
177
+ "env": {
178
+ "char": "e",
179
+ "description": "One or more environment variables to inject into your flows",
180
+ "name": "env",
299
181
  "hasDynamicHelp": false,
300
- "multiple": false,
301
- "options": [
302
- "1.39.0",
303
- "1.39.1",
304
- "1.39.2",
305
- "1.39.5",
306
- "1.39.7",
307
- "1.40.3",
308
- "1.41.0",
309
- "2.0.2",
310
- "2.0.3",
311
- "2.0.4",
312
- "latest"
313
- ],
182
+ "multiple": true,
314
183
  "type": "option"
315
184
  },
316
185
  "metadata": {
@@ -355,37 +224,58 @@
355
224
  "multiple": false,
356
225
  "type": "option"
357
226
  },
358
- "orientation": {
359
- "description": "[Android only] The orientation of the device to run your flow against in degrees",
360
- "name": "orientation",
227
+ "config": {
228
+ "description": "Path to custom config.yaml file. If not provided, defaults to config.yaml in root flows folders.",
229
+ "name": "config",
361
230
  "hasDynamicHelp": false,
362
231
  "multiple": false,
363
- "options": [
364
- "0",
365
- "90"
366
- ],
367
232
  "type": "option"
368
233
  },
369
- "quiet": {
370
- "char": "q",
371
- "description": "Quieter console output that wont provide progress updates",
372
- "name": "quiet",
373
- "allowNo": false,
374
- "type": "boolean"
234
+ "exclude-flows": {
235
+ "description": "Sub directories to ignore when building the flow file list",
236
+ "name": "exclude-flows",
237
+ "default": [],
238
+ "hasDynamicHelp": false,
239
+ "multiple": true,
240
+ "type": "option"
375
241
  },
376
- "report": {
242
+ "exclude-tags": {
377
243
  "aliases": [
378
- "format"
244
+ "exclude-tags"
379
245
  ],
380
- "description": "Generate and download test reports in the specified format. Use \"allure\" for a complete HTML report.",
381
- "name": "report",
246
+ "description": "Flows which have these tags will be excluded from the run",
247
+ "name": "exclude-tags",
248
+ "default": [],
249
+ "hasDynamicHelp": false,
250
+ "multiple": true,
251
+ "type": "option"
252
+ },
253
+ "flows": {
254
+ "description": "The path to the flow file or folder containing your flows",
255
+ "name": "flows",
382
256
  "hasDynamicHelp": false,
383
257
  "multiple": false,
384
- "options": [
385
- "allure",
386
- "junit",
387
- "html"
258
+ "type": "option"
259
+ },
260
+ "include-tags": {
261
+ "aliases": [
262
+ "include-tags"
263
+ ],
264
+ "description": "Only flows which have these tags will be included in the run",
265
+ "name": "include-tags",
266
+ "default": [],
267
+ "hasDynamicHelp": false,
268
+ "multiple": true,
269
+ "type": "option"
270
+ },
271
+ "maestro-version": {
272
+ "aliases": [
273
+ "maestroVersion"
388
274
  ],
275
+ "description": "Maestro version to run your flow against. Use \"latest\" for the most recent version. Supported versions are fetched from the API.",
276
+ "name": "maestro-version",
277
+ "hasDynamicHelp": false,
278
+ "multiple": false,
389
279
  "type": "option"
390
280
  },
391
281
  "retry": {
@@ -409,17 +299,113 @@
409
299
  ],
410
300
  "type": "option"
411
301
  },
412
- "show-crosshairs": {
413
- "description": "[Android only] Display crosshairs for screen interactions during test execution",
414
- "name": "show-crosshairs",
302
+ "artifacts-path": {
303
+ "dependsOn": [
304
+ "download-artifacts"
305
+ ],
306
+ "description": "Custom file path for downloaded artifacts (default: ./artifacts.zip)",
307
+ "name": "artifacts-path",
308
+ "hasDynamicHelp": false,
309
+ "multiple": false,
310
+ "type": "option"
311
+ },
312
+ "junit-path": {
313
+ "dependsOn": [
314
+ "report"
315
+ ],
316
+ "description": "Custom file path for downloaded JUnit report (default: ./report.xml)",
317
+ "name": "junit-path",
318
+ "hasDynamicHelp": false,
319
+ "multiple": false,
320
+ "type": "option"
321
+ },
322
+ "allure-path": {
323
+ "dependsOn": [
324
+ "report"
325
+ ],
326
+ "description": "Custom file path for downloaded Allure report (default: ./report.html)",
327
+ "name": "allure-path",
328
+ "hasDynamicHelp": false,
329
+ "multiple": false,
330
+ "type": "option"
331
+ },
332
+ "html-path": {
333
+ "dependsOn": [
334
+ "report"
335
+ ],
336
+ "description": "Custom file path for downloaded HTML report (default: ./report.html)",
337
+ "name": "html-path",
338
+ "hasDynamicHelp": false,
339
+ "multiple": false,
340
+ "type": "option"
341
+ },
342
+ "async": {
343
+ "description": "Immediately return (exit code 0) from the command without waiting for the results of the run (useful for saving CI minutes)",
344
+ "name": "async",
415
345
  "allowNo": false,
416
346
  "type": "boolean"
417
347
  },
418
- "skip-chrome-onboarding": {
419
- "description": "[Android only] Skip Chrome browser onboarding screens when running tests",
420
- "name": "skip-chrome-onboarding",
348
+ "debug": {
349
+ "description": "Enable detailed debug logging for troubleshooting issues",
350
+ "name": "debug",
421
351
  "allowNo": false,
422
352
  "type": "boolean"
353
+ },
354
+ "download-artifacts": {
355
+ "description": "Download a zip containing the logs, screenshots and videos for each result in this run. You will be debited a $0.01 egress fee for each result. Options: ALL (everything), FAILED (failures only).",
356
+ "name": "download-artifacts",
357
+ "hasDynamicHelp": false,
358
+ "multiple": false,
359
+ "options": [
360
+ "ALL",
361
+ "FAILED"
362
+ ],
363
+ "type": "option"
364
+ },
365
+ "dry-run": {
366
+ "description": "Simulate the run without actually triggering the upload/test, useful for debugging workflow issues.",
367
+ "name": "dry-run",
368
+ "allowNo": false,
369
+ "type": "boolean"
370
+ },
371
+ "json-file": {
372
+ "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",
373
+ "name": "json-file",
374
+ "required": false,
375
+ "allowNo": false,
376
+ "type": "boolean"
377
+ },
378
+ "json-file-name": {
379
+ "dependsOn": [
380
+ "json-file"
381
+ ],
382
+ "description": "A custom name for the JSON file (can also include relative path)",
383
+ "name": "json-file-name",
384
+ "hasDynamicHelp": false,
385
+ "multiple": false,
386
+ "type": "option"
387
+ },
388
+ "quiet": {
389
+ "char": "q",
390
+ "description": "Quieter console output that wont provide progress updates",
391
+ "name": "quiet",
392
+ "allowNo": false,
393
+ "type": "boolean"
394
+ },
395
+ "report": {
396
+ "aliases": [
397
+ "format"
398
+ ],
399
+ "description": "Generate and download test reports in the specified format. Use \"allure\" for a complete HTML report.",
400
+ "name": "report",
401
+ "hasDynamicHelp": false,
402
+ "multiple": false,
403
+ "options": [
404
+ "allure",
405
+ "junit",
406
+ "html"
407
+ ],
408
+ "type": "option"
423
409
  }
424
410
  },
425
411
  "hasDynamicHelp": false,
@@ -579,5 +565,5 @@
579
565
  ]
580
566
  }
581
567
  },
582
- "version": "4.1.2"
568
+ "version": "4.1.3"
583
569
  }
package/package.json CHANGED
@@ -5,14 +5,8 @@
5
5
  },
6
6
  "dependencies": {
7
7
  "@oclif/core": "^3",
8
- "@oclif/plugin-autocomplete": "^3.0.8",
9
8
  "@oclif/plugin-help": "^6",
10
- "@oclif/plugin-not-found": "^3.2.65",
11
- "@oclif/plugin-plugins": "^4",
12
- "@oclif/plugin-update": "^4.1.11",
13
- "@oclif/plugin-warn-if-update-available": "^3.0.10",
14
9
  "@supabase/supabase-js": "^2.45.1",
15
- "@web-std/file": "^3.0.3",
16
10
  "app-info-parser": "^1.1.6",
17
11
  "archiver": "^7.0.1",
18
12
  "bplist-parser": "^0.3.2",
@@ -60,8 +54,7 @@
60
54
  "dirname": "dcd",
61
55
  "commands": "./dist/commands",
62
56
  "plugins": [
63
- "@oclif/plugin-help",
64
- "@oclif/plugin-not-found"
57
+ "@oclif/plugin-help"
65
58
  ]
66
59
  },
67
60
  "private": false,
@@ -72,7 +65,7 @@
72
65
  "type": "git",
73
66
  "url": "https://devicecloud.dev"
74
67
  },
75
- "version": "4.1.2",
68
+ "version": "4.1.3",
76
69
  "bugs": {
77
70
  "url": "https://discord.gg/gm3mJwcNw8"
78
71
  },