happo 6.5.2 → 6.6.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.
Files changed (52) hide show
  1. package/dist/cli/cancelJob-HZDX6274.js +10 -0
  2. package/dist/cli/{chunk-IOLNNTKP.js → chunk-AFAI3HL3.js} +2 -2
  3. package/dist/cli/{chunk-DSAGPJIH.js → chunk-DUWOS4XT.js} +3 -3
  4. package/dist/cli/{chunk-DSAGPJIH.js.map → chunk-DUWOS4XT.js.map} +1 -1
  5. package/dist/cli/{chunk-I357LIPJ.js → chunk-LCNHMIOU.js} +2 -2
  6. package/dist/cli/chunk-OXGH6FW4.js +84 -0
  7. package/dist/cli/chunk-OXGH6FW4.js.map +7 -0
  8. package/dist/cli/{chunk-JZDVA76O.js → chunk-PRPDWPU3.js} +3 -3
  9. package/dist/cli/{chunk-SB3TDZLE.js → chunk-QC2HOKDQ.js} +2 -2
  10. package/dist/cli/createAsyncComparison-FQQHINTM.js +10 -0
  11. package/dist/cli/{createAsyncReport-4M7HVIS3.js → createAsyncReport-IQO7YVCA.js} +4 -4
  12. package/dist/cli/{getFlakes-QCVM7BHM.js → getFlakes-HICLTPZC.js} +4 -4
  13. package/dist/cli/index.d.ts.map +1 -1
  14. package/dist/cli/main.js +11 -11
  15. package/dist/cli/main.js.map +2 -2
  16. package/dist/cli/package-RZI6QOJX.js +7 -0
  17. package/dist/cli/{prepareSnapRequests-NQGLK5M6.js → prepareSnapRequests-VFWDWE5X.js} +146 -72
  18. package/dist/cli/prepareSnapRequests-VFWDWE5X.js.map +7 -0
  19. package/dist/cli/startJob-QZA4POSE.js +10 -0
  20. package/dist/cli/{wrapper-AGHA5SGK.js → wrapper-IQJTUXE4.js} +7 -9
  21. package/dist/cli/wrapper-IQJTUXE4.js.map +7 -0
  22. package/dist/config/RemoteBrowserTarget.d.ts.map +1 -1
  23. package/dist/cypress/task.js +178 -78
  24. package/dist/cypress/task.js.map +4 -4
  25. package/dist/e2e/controller.d.ts.map +1 -1
  26. package/dist/e2e/wrapper.d.ts.map +1 -1
  27. package/dist/network/getSignedToken.d.ts +3 -0
  28. package/dist/network/getSignedToken.d.ts.map +1 -0
  29. package/dist/network/makeHappoAPIRequest.d.ts +0 -1
  30. package/dist/network/makeHappoAPIRequest.d.ts.map +1 -1
  31. package/dist/network/uploadAssets.d.ts.map +1 -1
  32. package/dist/playwright/index.js +178 -78
  33. package/dist/playwright/index.js.map +4 -4
  34. package/package.json +2 -2
  35. package/dist/cli/cancelJob-RTDZ3IL3.js +0 -10
  36. package/dist/cli/chunk-JEFG3R6O.js +0 -54
  37. package/dist/cli/chunk-JEFG3R6O.js.map +0 -7
  38. package/dist/cli/createAsyncComparison-3ZFRRUDB.js +0 -10
  39. package/dist/cli/package-OPMNMDIG.js +0 -7
  40. package/dist/cli/prepareSnapRequests-NQGLK5M6.js.map +0 -7
  41. package/dist/cli/startJob-GO6BQDB4.js +0 -10
  42. package/dist/cli/wrapper-AGHA5SGK.js.map +0 -7
  43. /package/dist/cli/{cancelJob-RTDZ3IL3.js.map → cancelJob-HZDX6274.js.map} +0 -0
  44. /package/dist/cli/{chunk-IOLNNTKP.js.map → chunk-AFAI3HL3.js.map} +0 -0
  45. /package/dist/cli/{chunk-I357LIPJ.js.map → chunk-LCNHMIOU.js.map} +0 -0
  46. /package/dist/cli/{chunk-JZDVA76O.js.map → chunk-PRPDWPU3.js.map} +0 -0
  47. /package/dist/cli/{chunk-SB3TDZLE.js.map → chunk-QC2HOKDQ.js.map} +0 -0
  48. /package/dist/cli/{createAsyncComparison-3ZFRRUDB.js.map → createAsyncComparison-FQQHINTM.js.map} +0 -0
  49. /package/dist/cli/{createAsyncReport-4M7HVIS3.js.map → createAsyncReport-IQO7YVCA.js.map} +0 -0
  50. /package/dist/cli/{getFlakes-QCVM7BHM.js.map → getFlakes-HICLTPZC.js.map} +0 -0
  51. /package/dist/cli/{package-OPMNMDIG.js.map → package-RZI6QOJX.js.map} +0 -0
  52. /package/dist/cli/{startJob-GO6BQDB4.js.map → startJob-QZA4POSE.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/e2e/controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/e2e/controller.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../src/e2e/wrapper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAkB,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAwCjE,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;AAE7C,UAAU,kBAAkB;IAC1B,WAAW,EAAE,kBAAkB,CAAC;IAChC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,EAChC,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,MAAM,GACP,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDpC;AAoGD;;;;;;;;;GASG;AACH,wBAA8B,cAAc,CAC1C,oBAAoB,EAAE,KAAK,CAAC,MAAM,CAAC,EACnC,WAAW,EAAE,kBAAkB,EAC/B,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,CA8DjB"}
1
+ {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../src/e2e/wrapper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAkB,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAuCjE,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;AAE7C,UAAU,kBAAkB;IAC1B,WAAW,EAAE,kBAAkB,CAAC;IAChC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,EAChC,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,MAAM,GACP,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDpC;AAoGD;;;;;;;;;GASG;AACH,wBAA8B,cAAc,CAC1C,oBAAoB,EAAE,KAAK,CAAC,MAAM,CAAC,EACnC,WAAW,EAAE,kBAAkB,EAC/B,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,CA8DjB"}
@@ -0,0 +1,3 @@
1
+ export declare function getSignedToken(apiKey: string, apiSecret: string): Promise<string>;
2
+ export declare function clearTokenCache(): void;
3
+ //# sourceMappingURL=getSignedToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSignedToken.d.ts","sourceRoot":"","sources":["../../src/network/getSignedToken.ts"],"names":[],"mappings":"AAgBA,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BvF;AAGD,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
@@ -19,7 +19,6 @@ export interface RequestAttributes {
19
19
  method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
20
20
  formData?: Record<string, FormDataValue>;
21
21
  body?: unknown;
22
- json?: boolean;
23
22
  }
24
23
  export interface MakeHappoAPIRequestOptions {
25
24
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"makeHappoAPIRequest.d.ts","sourceRoot":"","sources":["../../src/network/makeHappoAPIRequest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGrD,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,QAAQ,MAAM,EAAE,CAAC;IAExB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AASD,wBAA8B,mBAAmB,CAC/C,EAAE,GAAG,EAAE,IAAI,EAAE,MAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAChE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,kBAAkB,EACnD,EACE,UAAc,EACd,OAAgB,EAChB,eAAsB,EACtB,eAA0B,GAC3B,EAAE,0BAA0B,EAC7B,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2CxB"}
1
+ {"version":3,"file":"makeHappoAPIRequest.d.ts","sourceRoot":"","sources":["../../src/network/makeHappoAPIRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAIrD,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,QAAQ,MAAM,EAAE,CAAC;IAExB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAA8B,mBAAmB,CAC/C,EAAE,GAAG,EAAE,IAAI,EAAE,MAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAChE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,kBAAkB,EACnD,EACE,UAAc,EACd,OAAgB,EAChB,eAAsB,EACtB,eAA0B,GAC3B,EAAE,0BAA0B,EAC7B,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2CxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"uploadAssets.d.ts","sourceRoot":"","sources":["../../src/network/uploadAssets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAK7D,UAAU,MAAM;IACd,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAA8B,YAAY,CACxC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,EAC3B,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,CAAC,CAgGjB"}
1
+ {"version":3,"file":"uploadAssets.d.ts","sourceRoot":"","sources":["../../src/network/uploadAssets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAK7D,UAAU,MAAM;IACd,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAA8B,YAAY,CACxC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,EAC3B,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,MAAM,CAAC,CA8FjB"}
@@ -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.5.2",
22
+ version: "6.6.0",
23
23
  description: "Catch unexpected visual and accessibility changes and UI bugs",
24
24
  license: "MIT",
25
25
  repository: {
@@ -143,7 +143,7 @@ var package_default = {
143
143
  "eslint-plugin-simple-import-sort": "^12.1.1",
144
144
  "eslint-plugin-unicorn": "^63.0.0",
145
145
  jiti: "^2.6.1",
146
- jsdom: "^28.0.0",
146
+ jsdom: "^29.0.0",
147
147
  multiparty: "^4.2.3",
148
148
  prettier: "^3.6.2",
149
149
  react: "^19.2.0",
@@ -655,12 +655,42 @@ async function loadConfigFile(configFilePath, environment, logger = console) {
655
655
  return configWithDefaults;
656
656
  }
657
657
 
658
- // src/network/makeHappoAPIRequest.ts
658
+ // src/network/getSignedToken.ts
659
659
  import { SignJWT } from "jose";
660
- async function signRequest(apiKey, apiSecret) {
661
- const encodedSecret = new TextEncoder().encode(apiSecret);
662
- return await new SignJWT({ key: apiKey }).setProtectedHeader({ alg: "HS256", kid: apiKey }).sign(encodedSecret);
660
+ var TOKEN_TTL_SECONDS = 5 * 60;
661
+ var TOKEN_REFRESH_BUFFER_SECONDS = 30;
662
+ var cache = /* @__PURE__ */ new Map();
663
+ function getCacheKey(apiKey, apiSecret) {
664
+ return `${apiKey}:${apiSecret}`;
663
665
  }
666
+ async function getSignedToken(apiKey, apiSecret) {
667
+ const cacheKey = getCacheKey(apiKey, apiSecret);
668
+ const cachedPromise = cache.get(cacheKey);
669
+ if (cachedPromise) {
670
+ const cached = await cachedPromise;
671
+ const nowSeconds = Date.now() / 1e3;
672
+ if (cached.expiresAt - nowSeconds > TOKEN_REFRESH_BUFFER_SECONDS) {
673
+ return cached.token;
674
+ }
675
+ }
676
+ const signingPromise = (async () => {
677
+ const nowSeconds = Date.now() / 1e3;
678
+ const expiresAt = Math.floor(nowSeconds) + TOKEN_TTL_SECONDS;
679
+ const encodedSecret = new TextEncoder().encode(apiSecret);
680
+ const token = await new SignJWT({ key: apiKey }).setProtectedHeader({ alg: "HS256", kid: apiKey }).setExpirationTime(expiresAt).sign(encodedSecret);
681
+ return { token, expiresAt };
682
+ })();
683
+ cache.set(cacheKey, signingPromise);
684
+ try {
685
+ const { token } = await signingPromise;
686
+ return token;
687
+ } catch (error) {
688
+ cache.delete(cacheKey);
689
+ throw error;
690
+ }
691
+ }
692
+
693
+ // src/network/makeHappoAPIRequest.ts
664
694
  async function makeHappoAPIRequest({ url, path: path4, method = "GET", formData, body }, { apiKey, apiSecret, endpoint }, {
665
695
  retryCount = 0,
666
696
  timeout = 6e4,
@@ -673,7 +703,7 @@ async function makeHappoAPIRequest({ url, path: path4, method = "GET", formData,
673
703
  "No fetch URL provided. Either `path` (preferred) or `url` must be provided."
674
704
  );
675
705
  }
676
- const signed = await signRequest(apiKey, apiSecret);
706
+ const signed = await getSignedToken(apiKey, apiSecret);
677
707
  const headers = {
678
708
  Authorization: `Bearer ${signed}`
679
709
  };
@@ -709,6 +739,7 @@ function createHash(data) {
709
739
 
710
740
  // src/config/RemoteBrowserTarget.ts
711
741
  var VIEWPORT_PATTERN = /^([0-9]+)x([0-9]+)$/;
742
+ var MAX_BULK_ITEMS_PER_REQUEST = 50;
712
743
  function computeDefaultChunks(estimatedSnapCount) {
713
744
  if (!Number.isFinite(estimatedSnapCount) || estimatedSnapCount <= 0) {
714
745
  return 1;
@@ -729,6 +760,71 @@ function getPageSlices(pages, chunks) {
729
760
  }
730
761
  return result;
731
762
  }
763
+ function buildChunkItem({
764
+ slice,
765
+ chunk,
766
+ pageSlice,
767
+ browserName,
768
+ viewport,
769
+ maxHeight,
770
+ otherOptions,
771
+ globalCSS,
772
+ staticPackage,
773
+ assetsPackage,
774
+ targetName
775
+ }) {
776
+ const payloadString = JSON.stringify({
777
+ viewport,
778
+ maxHeight,
779
+ ...otherOptions,
780
+ globalCSS,
781
+ snapPayloads: slice,
782
+ chunk,
783
+ staticPackage,
784
+ assetsPackage,
785
+ pages: pageSlice,
786
+ extendsSha: pageSlice ? pageSlice.extendsSha : void 0
787
+ });
788
+ const payloadHash = createHash(payloadString + (pageSlice ? Math.random() : ""));
789
+ const type = pageSlice && pageSlice.extendsSha ? "extends-report" : `browser-${browserName}`;
790
+ const item = { type, targetName, payloadString, payloadHash };
791
+ if (pageSlice?.extendsSha) {
792
+ item.extendsSha = pageSlice.extendsSha;
793
+ }
794
+ return item;
795
+ }
796
+ async function sendIndividualSnapRequest(item, config) {
797
+ const formData = {
798
+ type: item.type,
799
+ targetName: item.targetName,
800
+ payloadHash: item.payloadHash,
801
+ payload: new File([item.payloadString], "payload.json", {
802
+ type: "application/json"
803
+ })
804
+ };
805
+ if (item.extendsSha) {
806
+ formData.extendsSha = item.extendsSha;
807
+ }
808
+ const requestResult = await makeHappoAPIRequest(
809
+ {
810
+ path: `/api/snap-requests?payloadHash=${item.payloadHash}`,
811
+ method: "POST",
812
+ formData
813
+ },
814
+ config,
815
+ { retryCount: 5 }
816
+ );
817
+ if (!requestResult) {
818
+ throw new Error("No requestResult");
819
+ }
820
+ if (!("requestId" in requestResult)) {
821
+ throw new Error("No requestId in requestResult");
822
+ }
823
+ if (typeof requestResult.requestId !== "number") {
824
+ throw new TypeError("requestId is not a number");
825
+ }
826
+ return requestResult.requestId;
827
+ }
732
828
  var RemoteBrowserTarget = class {
733
829
  chunks;
734
830
  browserName;
@@ -767,73 +863,30 @@ var RemoteBrowserTarget = class {
767
863
  targetName,
768
864
  estimatedSnapsCount
769
865
  }, config) {
770
- const boundMakeRequest = async ({
771
- slice,
772
- chunk,
773
- pageSlice
774
- }) => {
775
- const payloadString = JSON.stringify({
776
- viewport: this.viewport,
777
- maxHeight: this.maxHeight,
778
- ...this.otherOptions,
779
- globalCSS,
780
- snapPayloads: slice,
781
- chunk,
782
- staticPackage,
783
- assetsPackage,
784
- pages: pageSlice,
785
- extendsSha: pageSlice ? pageSlice.extendsSha : void 0
786
- });
787
- const payloadHash = createHash(
788
- payloadString + (pageSlice ? Math.random() : "")
789
- );
790
- const formData = {
791
- type: pageSlice && pageSlice.extendsSha ? "extends-report" : `browser-${this.browserName}`,
792
- targetName,
793
- payloadHash,
794
- payload: new File([payloadString], "payload.json", {
795
- type: "application/json"
796
- })
797
- };
798
- if (pageSlice && pageSlice.extendsSha) {
799
- formData.extendsSha = pageSlice.extendsSha;
800
- }
801
- const requestResult = await makeHappoAPIRequest(
802
- {
803
- path: `/api/snap-requests?payloadHash=${payloadHash}`,
804
- method: "POST",
805
- json: true,
806
- formData
807
- },
808
- config,
809
- { retryCount: 5 }
810
- );
811
- if (!requestResult) {
812
- throw new Error("No requestResult");
813
- }
814
- if (!("requestId" in requestResult)) {
815
- throw new Error("No requestId in requestResult");
816
- }
817
- if (typeof requestResult.requestId !== "number") {
818
- throw new TypeError("requestId is not a number");
819
- }
820
- return requestResult.requestId;
866
+ const buildItemParams = {
867
+ browserName: this.browserName,
868
+ viewport: this.viewport,
869
+ maxHeight: this.maxHeight,
870
+ otherOptions: this.otherOptions,
871
+ globalCSS,
872
+ staticPackage,
873
+ assetsPackage,
874
+ targetName
821
875
  };
822
- const requestIds = [];
876
+ const items = [];
823
877
  if (staticPackage) {
824
878
  const effectiveChunks = this.chunks ?? Math.max(1, computeDefaultChunks(estimatedSnapsCount ?? 0));
825
879
  for (let i = 0; i < effectiveChunks; i += 1) {
826
- const requestId = await boundMakeRequest({
827
- chunk: effectiveChunks > 1 ? { index: i, total: effectiveChunks } : void 0
828
- });
829
- requestIds.push(requestId);
880
+ items.push(
881
+ buildChunkItem({
882
+ ...buildItemParams,
883
+ chunk: effectiveChunks > 1 ? { index: i, total: effectiveChunks } : void 0
884
+ })
885
+ );
830
886
  }
831
887
  } else if (pages) {
832
888
  for (const pageSlice of getPageSlices(pages, this.chunks ?? 1)) {
833
- const requestId = await boundMakeRequest({
834
- pageSlice
835
- });
836
- requestIds.push(requestId);
889
+ items.push(buildChunkItem({ ...buildItemParams, pageSlice }));
837
890
  }
838
891
  } else {
839
892
  const effectiveChunks = this.chunks ?? 1;
@@ -843,11 +896,62 @@ var RemoteBrowserTarget = class {
843
896
  i * snapsPerChunk,
844
897
  i * snapsPerChunk + snapsPerChunk
845
898
  );
846
- const requestId = await boundMakeRequest({
847
- slice
848
- });
849
- requestIds.push(requestId);
899
+ items.push(buildChunkItem({ ...buildItemParams, slice }));
900
+ }
901
+ }
902
+ if (items.length === 0) {
903
+ return [];
904
+ }
905
+ try {
906
+ const requestIds2 = Array.from({
907
+ length: items.length
908
+ });
909
+ for (let batchStart = 0; batchStart < items.length; batchStart += MAX_BULK_ITEMS_PER_REQUEST) {
910
+ const batch = items.slice(
911
+ batchStart,
912
+ batchStart + MAX_BULK_ITEMS_PER_REQUEST
913
+ );
914
+ const result = await makeHappoAPIRequest(
915
+ {
916
+ path: "/api/snap-requests/bulk",
917
+ method: "POST",
918
+ body: { items: batch }
919
+ },
920
+ config,
921
+ { retryCount: 5 }
922
+ );
923
+ if (result && "results" in result && Array.isArray(result.results) && result.results.length === batch.length) {
924
+ const bulkResults = result.results;
925
+ for (const [i, r] of bulkResults.entries()) {
926
+ requestIds2[batchStart + i] = typeof r.requestId === "number" ? r.requestId : void 0;
927
+ }
928
+ } else {
929
+ throw new Error(
930
+ "Bulk snap-requests endpoint returned an unexpected payload shape; aborting to avoid duplicate snap-requests."
931
+ );
932
+ }
933
+ }
934
+ for (const [i, item] of items.entries()) {
935
+ if (requestIds2[i] === void 0) {
936
+ requestIds2[i] = await sendIndividualSnapRequest(item, config);
937
+ }
850
938
  }
939
+ return requestIds2.map((id, index) => {
940
+ if (id === void 0) {
941
+ throw new Error(
942
+ `Failed to obtain snap request ID for item at index ${index}`
943
+ );
944
+ }
945
+ return id;
946
+ });
947
+ } catch (error) {
948
+ if (!(error instanceof ErrorWithStatusCode && (error.statusCode === 404 || error.statusCode === 501))) {
949
+ throw error;
950
+ }
951
+ }
952
+ const requestIds = [];
953
+ for (const item of items) {
954
+ requestIds.push(await sendIndividualSnapRequest(item, config));
851
955
  }
852
956
  return requestIds;
853
957
  }
@@ -883,8 +987,7 @@ async function uploadAssets(buffer, options, config) {
883
987
  const signedUrlRes = await makeHappoAPIRequest(
884
988
  {
885
989
  path: `/api/snap-requests/assets/${hash}/signed-url`,
886
- method: "GET",
887
- json: true
990
+ method: "GET"
888
991
  },
889
992
  config,
890
993
  { retryCount: 3 }
@@ -936,8 +1039,7 @@ async function uploadAssets(buffer, options, config) {
936
1039
  const finalizeRes = await makeHappoAPIRequest(
937
1040
  {
938
1041
  path: `/api/snap-requests/assets/${hash}/signed-url/finalize`,
939
- method: "POST",
940
- json: true
1042
+ method: "POST"
941
1043
  },
942
1044
  config,
943
1045
  { retryCount: 3 }
@@ -1608,8 +1710,7 @@ var Controller = class {
1608
1710
  const uploadUrlResult = await makeHappoAPIRequest(
1609
1711
  {
1610
1712
  path: `/api/images/${hash}/upload-url`,
1611
- method: "GET",
1612
- json: true
1713
+ method: "GET"
1613
1714
  },
1614
1715
  this.happoConfig,
1615
1716
  { retryCount: 2 }
@@ -1635,7 +1736,6 @@ var Controller = class {
1635
1736
  {
1636
1737
  url: uploadUrl,
1637
1738
  method: "POST",
1638
- json: true,
1639
1739
  formData: {
1640
1740
  file: new File([buffer], "image.png", { type: "image/png" })
1641
1741
  }