happo 6.6.0 → 6.6.1

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 (40) hide show
  1. package/dist/cli/cancelJob-DETLA3XZ.js +10 -0
  2. package/dist/cli/{chunk-OXGH6FW4.js → chunk-2LNQIG6R.js} +2 -2
  3. package/dist/cli/{chunk-PRPDWPU3.js → chunk-JMN6VM22.js} +3 -3
  4. package/dist/cli/{chunk-QC2HOKDQ.js → chunk-MCYQSPED.js} +2 -2
  5. package/dist/cli/{chunk-LCNHMIOU.js → chunk-MGNFR3W2.js} +2 -2
  6. package/dist/cli/{chunk-DUWOS4XT.js → chunk-OJHKEE3W.js} +3 -2
  7. package/dist/cli/chunk-OJHKEE3W.js.map +7 -0
  8. package/dist/cli/{chunk-AFAI3HL3.js → chunk-SE7XKHF6.js} +2 -2
  9. package/dist/cli/createAsyncComparison-B3USWOAI.js +10 -0
  10. package/dist/cli/{createAsyncReport-IQO7YVCA.js → createAsyncReport-3FKLGSYD.js} +4 -4
  11. package/dist/cli/{getFlakes-HICLTPZC.js → getFlakes-5DA34KWE.js} +4 -4
  12. package/dist/cli/main.js +11 -11
  13. package/dist/cli/package-CY7G2FGG.js +7 -0
  14. package/dist/cli/{prepareSnapRequests-VFWDWE5X.js → prepareSnapRequests-RSZU5TQG.js} +16 -5
  15. package/dist/cli/{prepareSnapRequests-VFWDWE5X.js.map → prepareSnapRequests-RSZU5TQG.js.map} +3 -3
  16. package/dist/cli/startJob-OPTUE4PO.js +10 -0
  17. package/dist/cli/{wrapper-IQJTUXE4.js → wrapper-QAPBXQCV.js} +7 -7
  18. package/dist/cypress/task.js +14 -2
  19. package/dist/cypress/task.js.map +3 -3
  20. package/dist/network/uploadAssets.d.ts.map +1 -1
  21. package/dist/playwright/index.js +14 -2
  22. package/dist/playwright/index.js.map +3 -3
  23. package/package.json +2 -1
  24. package/dist/cli/cancelJob-HZDX6274.js +0 -10
  25. package/dist/cli/chunk-DUWOS4XT.js.map +0 -7
  26. package/dist/cli/createAsyncComparison-FQQHINTM.js +0 -10
  27. package/dist/cli/package-RZI6QOJX.js +0 -7
  28. package/dist/cli/startJob-QZA4POSE.js +0 -10
  29. /package/dist/cli/{cancelJob-HZDX6274.js.map → cancelJob-DETLA3XZ.js.map} +0 -0
  30. /package/dist/cli/{chunk-OXGH6FW4.js.map → chunk-2LNQIG6R.js.map} +0 -0
  31. /package/dist/cli/{chunk-PRPDWPU3.js.map → chunk-JMN6VM22.js.map} +0 -0
  32. /package/dist/cli/{chunk-QC2HOKDQ.js.map → chunk-MCYQSPED.js.map} +0 -0
  33. /package/dist/cli/{chunk-LCNHMIOU.js.map → chunk-MGNFR3W2.js.map} +0 -0
  34. /package/dist/cli/{chunk-AFAI3HL3.js.map → chunk-SE7XKHF6.js.map} +0 -0
  35. /package/dist/cli/{createAsyncComparison-FQQHINTM.js.map → createAsyncComparison-B3USWOAI.js.map} +0 -0
  36. /package/dist/cli/{createAsyncReport-IQO7YVCA.js.map → createAsyncReport-3FKLGSYD.js.map} +0 -0
  37. /package/dist/cli/{getFlakes-HICLTPZC.js.map → getFlakes-5DA34KWE.js.map} +0 -0
  38. /package/dist/cli/{package-RZI6QOJX.js.map → package-CY7G2FGG.js.map} +0 -0
  39. /package/dist/cli/{startJob-QZA4POSE.js.map → startJob-OPTUE4PO.js.map} +0 -0
  40. /package/dist/cli/{wrapper-IQJTUXE4.js.map → wrapper-QAPBXQCV.js.map} +0 -0
@@ -0,0 +1,10 @@
1
+ import {
2
+ startJob
3
+ } from "./chunk-MGNFR3W2.js";
4
+ import "./chunk-2LNQIG6R.js";
5
+ import "./chunk-SE7XKHF6.js";
6
+ import "./chunk-OJHKEE3W.js";
7
+ export {
8
+ startJob as default
9
+ };
10
+ //# sourceMappingURL=startJob-OPTUE4PO.js.map
@@ -3,21 +3,21 @@ import {
3
3
  } from "./chunk-JTRP4JVC.js";
4
4
  import {
5
5
  startJob
6
- } from "./chunk-LCNHMIOU.js";
6
+ } from "./chunk-MGNFR3W2.js";
7
7
  import {
8
8
  createAsyncComparison
9
- } from "./chunk-QC2HOKDQ.js";
9
+ } from "./chunk-MCYQSPED.js";
10
10
  import {
11
11
  postGitHubComment
12
12
  } from "./chunk-X4TE2VNY.js";
13
13
  import {
14
14
  cancelJob
15
- } from "./chunk-PRPDWPU3.js";
15
+ } from "./chunk-JMN6VM22.js";
16
16
  import {
17
17
  makeHappoAPIRequest
18
- } from "./chunk-OXGH6FW4.js";
19
- import "./chunk-AFAI3HL3.js";
20
- import "./chunk-DUWOS4XT.js";
18
+ } from "./chunk-2LNQIG6R.js";
19
+ import "./chunk-SE7XKHF6.js";
20
+ import "./chunk-OJHKEE3W.js";
21
21
 
22
22
  // src/e2e/wrapper.ts
23
23
  import { spawn } from "node:child_process";
@@ -217,4 +217,4 @@ export {
217
217
  runWithWrapper as default,
218
218
  finalizeAll
219
219
  };
220
- //# sourceMappingURL=wrapper-IQJTUXE4.js.map
220
+ //# sourceMappingURL=wrapper-QAPBXQCV.js.map
@@ -19,7 +19,7 @@ import asyncRetry from "async-retry";
19
19
  // package.json
20
20
  var package_default = {
21
21
  name: "happo",
22
- version: "6.6.0",
22
+ version: "6.6.1",
23
23
  description: "Catch unexpected visual and accessibility changes and UI bugs",
24
24
  license: "MIT",
25
25
  repository: {
@@ -92,6 +92,7 @@ var package_default = {
92
92
  "test:cypress": "pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.cypress.config.ts e2e -- cypress run -C src/cypress/__cypress__/cypress.config.ts",
93
93
  "test:cypress:open": "cypress open -C src/cypress/__cypress__/cypress.config.ts",
94
94
  "test:playwright": "pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.playwright.config.ts e2e -- playwright test",
95
+ "test:playwright:nonce": "pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.playwright-nonce.config.ts --nonce $HAPPO_NONCE e2e -- playwright test && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.playwright-nonce.config.ts --nonce $HAPPO_NONCE finalize",
95
96
  "test:storybook": "pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.storybook.config.ts",
96
97
  "test:pages": "pnpm build:dist && node --env-file-if-exists=.env.local dist/cli/main.js -c ./happoconfigs/happo.pages.config.ts",
97
98
  tsc: "tsc --build tsconfig.json"
@@ -958,6 +959,7 @@ var RemoteBrowserTarget = class {
958
959
  };
959
960
 
960
961
  // src/network/uploadAssets.ts
962
+ import { createHash as createHash2 } from "node:crypto";
961
963
  import retry from "async-retry";
962
964
 
963
965
  // src/utils/Logger.ts
@@ -998,7 +1000,8 @@ async function uploadAssets(buffer, options, config) {
998
1000
  body: buffer,
999
1001
  headers: {
1000
1002
  "Content-Type": "application/zip"
1001
- }
1003
+ },
1004
+ signal: AbortSignal.timeout(6e4)
1002
1005
  });
1003
1006
  if (!res.ok) {
1004
1007
  const error = new Error(
@@ -1010,6 +1013,15 @@ async function uploadAssets(buffer, options, config) {
1010
1013
  }
1011
1014
  throw error;
1012
1015
  }
1016
+ const etag = res.headers.get("etag");
1017
+ const expectedEtag = createHash2("md5").update(buffer).digest("hex");
1018
+ if (!etag || !etag.includes(expectedEtag)) {
1019
+ const error = new Error(
1020
+ `S3 upload verification failed: expected ETag to include ${expectedEtag}, got ${etag ?? "(none)"}. A firewall may be intercepting the upload.`
1021
+ );
1022
+ bail(error);
1023
+ return;
1024
+ }
1013
1025
  return res;
1014
1026
  },
1015
1027
  {