@samsara-dev/appwright 0.7.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierrc +4 -0
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +12 -0
- package/README.md +1 -1
- package/dist/providers/awsDeviceFarm/index.d.ts.map +1 -1
- package/dist/providers/awsDeviceFarm/index.js +4 -2
- package/dist/providers/browserstack/index.d.ts.map +1 -1
- package/dist/providers/browserstack/index.js +8 -5
- package/dist/providers/lambdatest/index.d.ts.map +1 -1
- package/dist/providers/lambdatest/index.js +8 -5
- package/package.json +11 -10
package/.prettierrc
ADDED
package/AGENTS.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 1. Project Snapshot
|
|
4
4
|
- **Repo type:** Single-package TypeScript library (no workspaces)
|
|
5
|
-
- **Stack:** Node.js ≥
|
|
5
|
+
- **Stack:** Node.js ≥24.12, TypeScript, Playwright fixtures, Vitest, ESLint (`@empiricalrun`)
|
|
6
6
|
- **Docs:** Each major directory ships its own `AGENTS.md`; nearest file wins
|
|
7
7
|
|
|
8
8
|
## 2. Root Setup Commands
|
|
@@ -51,4 +51,4 @@ npm run changeset # prepare release notes when changes ship
|
|
|
51
51
|
- `npm run lint && npm run build && npm test -- --run` must all pass locally
|
|
52
52
|
- Add a Changeset entry for user-facing changes
|
|
53
53
|
- Ensure documentation in relevant `AGENTS.md` files reflects the update
|
|
54
|
-
- Confirm the plan was shared and acknowledged before merging
|
|
54
|
+
- Confirm the plan was shared and acknowledged before merging
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# appwright
|
|
2
2
|
|
|
3
|
+
## 0.8.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 0c833cf: Raise the minimum supported Node.js version to 24.12.0 and align all CI workflows to use it.
|
|
8
|
+
|
|
9
|
+
## 0.7.4
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 802e517: Improve error handling on provider video downloads and update dependencies/formatting config to align lint with CI.
|
|
14
|
+
|
|
3
15
|
## 0.7.3
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/awsDeviceFarm/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,eAAe,EACf,cAAc,EAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA+BtC,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAGhC,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,EACrC,WAAW,EAAE,MAAM,GAAG,SAAS;IAwD3B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B5B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IA4D5B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtC,OAAO,CAAC,iBAAiB;YASX,iBAAiB;YA6CjB,uBAAuB;YAmCvB,mBAAmB;YAgCnB,oBAAoB;IA0ClC,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,iBAAiB;YA8CX,UAAU;WA4CX,aAAa,CACxB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/awsDeviceFarm/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,eAAe,EACf,cAAc,EAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA+BtC,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAGhC,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,EACrC,WAAW,EAAE,MAAM,GAAG,SAAS;IAwD3B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B5B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IA4D5B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtC,OAAO,CAAC,iBAAiB;YASX,iBAAiB;YA6CjB,uBAAuB;YAmCvB,mBAAmB;YAgCnB,oBAAoB;IA0ClC,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,iBAAiB;YA8CX,UAAU;WA4CX,aAAa,CACxB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;mBAiFnC,iBAAiB;mBA6BjB,wBAAwB;IAwB7C,OAAO,CAAC,MAAM,CAAC,oBAAoB;YAQrB,iBAAiB;CAgBhC"}
|
|
@@ -357,15 +357,17 @@ class AWSDeviceFarmProvider {
|
|
|
357
357
|
minTimeout: 5_000,
|
|
358
358
|
maxTimeout: 15_000,
|
|
359
359
|
onRetry: (error, attempt) => {
|
|
360
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
360
361
|
if (attempt > 3) {
|
|
361
|
-
logger_1.logger.warn(`AWS Device Farm: retrying video download (attempt ${attempt}): ${
|
|
362
|
+
logger_1.logger.warn(`AWS Device Farm: retrying video download (attempt ${attempt}): ${message}`);
|
|
362
363
|
}
|
|
363
364
|
},
|
|
364
365
|
});
|
|
365
366
|
return downloadResult;
|
|
366
367
|
}
|
|
367
368
|
catch (error) {
|
|
368
|
-
|
|
369
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
370
|
+
logger_1.logger.error(`AWS Device Farm: Failed to download video. ${message}`, error);
|
|
369
371
|
return null;
|
|
370
372
|
}
|
|
371
373
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/browserstack/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,eAAe,EACf,cAAc,EAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAsDtC,qBAAa,0BAA2B,YAAW,cAAc;IAC/D,OAAO,CAAC,cAAc,CAAC,CAA6B;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,OAAO,CAA+B;gBAG5C,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,EACrC,WAAW,EAAE,MAAM,GAAG,SAAS;IAU3B,WAAW;IA0EX,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAMlC,OAAO,CAAC,cAAc;YASR,YAAY;YAiBZ,iBAAiB;YAKjB,yBAAyB;WAK1B,aAAa,CACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/browserstack/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,eAAe,EACf,cAAc,EAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAsDtC,qBAAa,0BAA2B,YAAW,cAAc;IAC/D,OAAO,CAAC,cAAc,CAAC,CAA6B;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,OAAO,CAA+B;gBAG5C,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,EACrC,WAAW,EAAE,MAAM,GAAG,SAAS;IAU3B,WAAW;IA0EX,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAMlC,OAAO,CAAC,cAAc;YASR,YAAY;YAiBZ,iBAAiB;YAKjB,yBAAyB;WAK1B,aAAa,CACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IA0FlD,eAAe,CAAC,OAAO,EAAE;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IA2BD,OAAO,CAAC,YAAY;CAsJrB"}
|
|
@@ -184,8 +184,9 @@ class BrowserStackDeviceProvider {
|
|
|
184
184
|
retries: 10,
|
|
185
185
|
minTimeout: 3_000,
|
|
186
186
|
onRetry: (err, i) => {
|
|
187
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
187
188
|
if (i > 5) {
|
|
188
|
-
logger_1.logger.warn(`Retry attempt ${i} failed: ${
|
|
189
|
+
logger_1.logger.warn(`Retry attempt ${i} failed: ${message}`);
|
|
189
190
|
}
|
|
190
191
|
},
|
|
191
192
|
});
|
|
@@ -198,13 +199,15 @@ class BrowserStackDeviceProvider {
|
|
|
198
199
|
resolve({ path: pathToTestVideo, contentType: "video/mp4" });
|
|
199
200
|
}
|
|
200
201
|
catch (err) {
|
|
201
|
-
|
|
202
|
-
|
|
202
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
203
|
+
logger_1.logger.error(`Failed to rename file: ${message}`, err);
|
|
204
|
+
reject(err instanceof Error ? err : new Error(message));
|
|
203
205
|
}
|
|
204
206
|
});
|
|
205
207
|
fileStream.on("error", (err) => {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
209
|
+
logger_1.logger.error(`Failed to write file: ${message}`, err);
|
|
210
|
+
reject(err instanceof Error ? err : new Error(message));
|
|
208
211
|
});
|
|
209
212
|
});
|
|
210
213
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/lambdatest/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAoB,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAwDtC,qBAAa,wBAAyB,YAAW,cAAc;IAM3D,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IANrB,OAAO,CAAC,cAAc,CAAC,CAA2B;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,WAAW,CAAgC;gBAGzC,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,EACrC,WAAW,EAAE,MAAM,GAAG,SAAS;IASnC,WAAW;IA8DX,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAMlC,OAAO,CAAC,cAAc;YASR,YAAY;WAgBb,aAAa,CACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/lambdatest/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAoB,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAwDtC,qBAAa,wBAAyB,YAAW,cAAc;IAM3D,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IANrB,OAAO,CAAC,cAAc,CAAC,CAA2B;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,WAAW,CAAgC;gBAGzC,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,EACrC,WAAW,EAAE,MAAM,GAAG,SAAS;IASnC,WAAW;IA8DX,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAMlC,OAAO,CAAC,cAAc;YASR,YAAY;WAgBb,aAAa,CACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAgFlD,eAAe,CAAC,OAAO,EAAE;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IA0BD,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,YAAY;CA8CrB"}
|
|
@@ -160,8 +160,9 @@ class LambdaTestDeviceProvider {
|
|
|
160
160
|
retries: 10,
|
|
161
161
|
minTimeout: 3_000,
|
|
162
162
|
onRetry: (err, i) => {
|
|
163
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
163
164
|
if (i > 5) {
|
|
164
|
-
logger_1.logger.warn(`Retry attempt ${i} failed: ${
|
|
165
|
+
logger_1.logger.warn(`Retry attempt ${i} failed: ${message}`);
|
|
165
166
|
}
|
|
166
167
|
},
|
|
167
168
|
});
|
|
@@ -174,13 +175,15 @@ class LambdaTestDeviceProvider {
|
|
|
174
175
|
resolve({ path: pathToTestVideo, contentType: "video/mp4" });
|
|
175
176
|
}
|
|
176
177
|
catch (err) {
|
|
177
|
-
|
|
178
|
-
|
|
178
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
179
|
+
logger_1.logger.error(`Failed to rename file: ${message}`, err);
|
|
180
|
+
reject(err instanceof Error ? err : new Error(message));
|
|
179
181
|
}
|
|
180
182
|
});
|
|
181
183
|
fileStream.on("error", (err) => {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
185
|
+
logger_1.logger.error(`Failed to write file: ${message}`, err);
|
|
186
|
+
reject(err instanceof Error ? err : new Error(message));
|
|
184
187
|
});
|
|
185
188
|
});
|
|
186
189
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@samsara-dev/appwright",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org/",
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"engines": {
|
|
10
|
-
"node": ">=
|
|
10
|
+
"node": ">=24.12.0"
|
|
11
11
|
},
|
|
12
12
|
"bin": {
|
|
13
13
|
"appwright": "dist/bin/index.js"
|
|
@@ -37,28 +37,29 @@
|
|
|
37
37
|
"description": "E2E mobile app testing done right, with the Playwright test runner",
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@aws-sdk/client-device-farm": "^3.635.0",
|
|
40
|
-
"@aws-sdk/client-s3": "^3.
|
|
40
|
+
"@aws-sdk/client-s3": "^3.958.0",
|
|
41
41
|
"@aws-sdk/client-sts": "^3.635.0",
|
|
42
42
|
"@empiricalrun/llm": "^0.9.25",
|
|
43
43
|
"@ffmpeg-installer/ffmpeg": "^1.1.0",
|
|
44
|
-
"@playwright/test": "^1.
|
|
45
|
-
"appium": "^3.1.
|
|
44
|
+
"@playwright/test": "^1.57.0",
|
|
45
|
+
"appium": "^3.1.2",
|
|
46
46
|
"appium-uiautomator2-driver": "^5.0.7",
|
|
47
|
-
"appium-xcuitest-driver": "^10.
|
|
47
|
+
"appium-xcuitest-driver": "^10.13.2",
|
|
48
48
|
"async-retry": "^1.3.3",
|
|
49
49
|
"fluent-ffmpeg": "^2.1.3",
|
|
50
|
-
"form-data": "4.0.
|
|
50
|
+
"form-data": "4.0.5",
|
|
51
51
|
"node-fetch": "^3.3.2",
|
|
52
52
|
"picocolors": "^1.1.0",
|
|
53
53
|
"webdriver": "^8.36.1"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@changesets/cli": "^2.
|
|
56
|
+
"@changesets/cli": "^2.29.8",
|
|
57
57
|
"@empiricalrun/eslint-config": "^0.4.1",
|
|
58
58
|
"@empiricalrun/typescript-config": "^0.3.0",
|
|
59
|
-
"@types/async-retry": "^1.4.
|
|
60
|
-
"@types/fluent-ffmpeg": "^2.1.
|
|
59
|
+
"@types/async-retry": "^1.4.9",
|
|
60
|
+
"@types/fluent-ffmpeg": "^2.1.28",
|
|
61
61
|
"@types/node": "^22.5.2",
|
|
62
|
+
"@eslint/js": "^8.57.0",
|
|
62
63
|
"eslint": "8.57.0",
|
|
63
64
|
"typedoc": "0.26.7",
|
|
64
65
|
"vitest": "^2.1.3"
|