@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 ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ "semi": true,
3
+ "singleQuote": false
4
+ }
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 ≥20, TypeScript, Playwright fixtures, Vitest, ESLint (`@empiricalrun`)
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
@@ -32,7 +32,7 @@ Links to help you get started.
32
32
 
33
33
  ### Minimum requirements
34
34
 
35
- - Node 20.19.0 or higher (Appium 3 requirement)
35
+ - Node 24.12.0 or higher (Appium 3 requirement)
36
36
 
37
37
  ### Install
38
38
 
@@ -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;mBA2EnC,iBAAiB;mBA6BjB,wBAAwB;IAwB7C,OAAO,CAAC,MAAM,CAAC,oBAAoB;YAQrB,iBAAiB;CAgBhC"}
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}): ${error.message}`);
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
- logger_1.logger.error("AWS Device Farm: Failed to download video.", error);
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;IAuFlD,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"}
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: ${err.message}`);
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
- logger_1.logger.error(`Failed to rename file: `, err);
202
- reject(err);
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
- logger_1.logger.error(`Failed to write file: ${err.message}`);
207
- reject(err);
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;IA6ElD,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"}
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: ${err.message}`);
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
- logger_1.logger.error(`Failed to rename file: `, err);
178
- reject(err);
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
- logger_1.logger.error(`Failed to write file: ${err.message}`);
183
- reject(err);
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.7.3",
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": ">=20.19.0"
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.932.0",
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.56.1",
45
- "appium": "^3.1.0",
44
+ "@playwright/test": "^1.57.0",
45
+ "appium": "^3.1.2",
46
46
  "appium-uiautomator2-driver": "^5.0.7",
47
- "appium-xcuitest-driver": "^10.2.2",
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.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.27.8",
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.8",
60
- "@types/fluent-ffmpeg": "^2.1.26",
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"