happo 6.5.1 → 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.
- package/dist/cli/cancelJob-HZDX6274.js +10 -0
- package/dist/cli/{chunk-SCQIFNJG.js → chunk-AFAI3HL3.js} +2 -2
- package/dist/cli/{chunk-7LVB6VSD.js → chunk-DUWOS4XT.js} +5 -5
- package/dist/cli/{chunk-7LVB6VSD.js.map → chunk-DUWOS4XT.js.map} +1 -1
- package/dist/cli/{chunk-4DIEFVB6.js → chunk-LCNHMIOU.js} +2 -2
- package/dist/cli/chunk-OXGH6FW4.js +84 -0
- package/dist/cli/chunk-OXGH6FW4.js.map +7 -0
- package/dist/cli/{chunk-Z3ISMK3L.js → chunk-PRPDWPU3.js} +3 -3
- package/dist/cli/{chunk-SVXHNTZV.js → chunk-QC2HOKDQ.js} +2 -2
- package/dist/cli/createAsyncComparison-FQQHINTM.js +10 -0
- package/dist/cli/{createAsyncReport-YYPR6QMH.js → createAsyncReport-IQO7YVCA.js} +4 -4
- package/dist/cli/{getFlakes-2IDWWM6K.js → getFlakes-HICLTPZC.js} +4 -4
- package/dist/cli/main.js +11 -11
- package/dist/cli/main.js.map +2 -2
- package/dist/cli/package-RZI6QOJX.js +7 -0
- package/dist/cli/{prepareSnapRequests-YRX3FLO3.js → prepareSnapRequests-VFWDWE5X.js} +156 -78
- package/dist/cli/prepareSnapRequests-VFWDWE5X.js.map +7 -0
- package/dist/cli/startJob-QZA4POSE.js +10 -0
- package/dist/cli/{wrapper-YSLGURLA.js → wrapper-IQJTUXE4.js} +7 -9
- package/dist/cli/wrapper-IQJTUXE4.js.map +7 -0
- package/dist/config/RemoteBrowserTarget.d.ts.map +1 -1
- package/dist/cypress/task.js +190 -86
- package/dist/cypress/task.js.map +4 -4
- package/dist/e2e/controller.d.ts.map +1 -1
- package/dist/e2e/wrapper.d.ts.map +1 -1
- package/dist/network/getSignedToken.d.ts +3 -0
- package/dist/network/getSignedToken.d.ts.map +1 -0
- package/dist/network/makeHappoAPIRequest.d.ts +0 -1
- package/dist/network/makeHappoAPIRequest.d.ts.map +1 -1
- package/dist/network/uploadAssets.d.ts.map +1 -1
- package/dist/playwright/index.js +190 -86
- package/dist/playwright/index.js.map +4 -4
- package/dist/utils/deterministicArchive.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/cli/cancelJob-RNJNTEO6.js +0 -10
- package/dist/cli/chunk-ZFINBURL.js +0 -54
- package/dist/cli/chunk-ZFINBURL.js.map +0 -7
- package/dist/cli/createAsyncComparison-7TQ6WCAL.js +0 -10
- package/dist/cli/package-XNDR47YX.js +0 -7
- package/dist/cli/prepareSnapRequests-YRX3FLO3.js.map +0 -7
- package/dist/cli/startJob-6UNQDHQ6.js +0 -10
- package/dist/cli/wrapper-YSLGURLA.js.map +0 -7
- /package/dist/cli/{cancelJob-RNJNTEO6.js.map → cancelJob-HZDX6274.js.map} +0 -0
- /package/dist/cli/{chunk-SCQIFNJG.js.map → chunk-AFAI3HL3.js.map} +0 -0
- /package/dist/cli/{chunk-4DIEFVB6.js.map → chunk-LCNHMIOU.js.map} +0 -0
- /package/dist/cli/{chunk-Z3ISMK3L.js.map → chunk-PRPDWPU3.js.map} +0 -0
- /package/dist/cli/{chunk-SVXHNTZV.js.map → chunk-QC2HOKDQ.js.map} +0 -0
- /package/dist/cli/{createAsyncComparison-7TQ6WCAL.js.map → createAsyncComparison-FQQHINTM.js.map} +0 -0
- /package/dist/cli/{createAsyncReport-YYPR6QMH.js.map → createAsyncReport-IQO7YVCA.js.map} +0 -0
- /package/dist/cli/{getFlakes-2IDWWM6K.js.map → getFlakes-HICLTPZC.js.map} +0 -0
- /package/dist/cli/{package-XNDR47YX.js.map → package-RZI6QOJX.js.map} +0 -0
- /package/dist/cli/{startJob-6UNQDHQ6.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;
|
|
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 @@
|
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeHappoAPIRequest.d.ts","sourceRoot":"","sources":["../../src/network/makeHappoAPIRequest.ts"],"names":[],"mappings":"
|
|
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,
|
|
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"}
|
package/dist/playwright/index.js
CHANGED
|
@@ -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.
|
|
22
|
+
version: "6.6.0",
|
|
23
23
|
description: "Catch unexpected visual and accessibility changes and UI bugs",
|
|
24
24
|
license: "MIT",
|
|
25
25
|
repository: {
|
|
@@ -80,10 +80,10 @@ var package_default = {
|
|
|
80
80
|
all: "node ./scripts/allchecks.ts",
|
|
81
81
|
build: "pnpm build:types && pnpm build:dist",
|
|
82
82
|
"build:custom": "esbuild src/custom/__happo__/index.ts --bundle --format=iife --global-name=happoCustom --outfile=tmp/happo-custom/bundle.js --platform=browser --target=esnext",
|
|
83
|
-
"build:dist": "./scripts/build.ts",
|
|
83
|
+
"build:dist": "node ./scripts/build.ts",
|
|
84
84
|
"build:types": "pnpm tsc --pretty",
|
|
85
85
|
"build:watch": "tsc --build --watch",
|
|
86
|
-
clean: "
|
|
86
|
+
clean: "node ./scripts/clean.ts",
|
|
87
87
|
lint: "eslint .",
|
|
88
88
|
prepublishOnly: "pnpm clean && pnpm build",
|
|
89
89
|
"storybook:dev": "storybook dev --config-dir src/storybook/__tests__/storybook-app -p ${PORT:-6007}",
|
|
@@ -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: "^
|
|
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/
|
|
658
|
+
// src/network/getSignedToken.ts
|
|
659
659
|
import { SignJWT } from "jose";
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
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
|
|
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
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
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
|
|
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
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
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
|
-
|
|
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,12 +896,63 @@ var RemoteBrowserTarget = class {
|
|
|
843
896
|
i * snapsPerChunk,
|
|
844
897
|
i * snapsPerChunk + snapsPerChunk
|
|
845
898
|
);
|
|
846
|
-
|
|
847
|
-
slice
|
|
848
|
-
});
|
|
849
|
-
requestIds.push(requestId);
|
|
899
|
+
items.push(buildChunkItem({ ...buildItemParams, slice }));
|
|
850
900
|
}
|
|
851
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
|
+
}
|
|
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));
|
|
955
|
+
}
|
|
852
956
|
return requestIds;
|
|
853
957
|
}
|
|
854
958
|
};
|
|
@@ -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 }
|
|
@@ -1003,6 +1105,9 @@ function validateArchive(totalBytes, entries) {
|
|
|
1003
1105
|
}
|
|
1004
1106
|
|
|
1005
1107
|
// src/utils/deterministicArchive.ts
|
|
1108
|
+
function normalizeEntryName(name) {
|
|
1109
|
+
return name.replaceAll("\\", "/");
|
|
1110
|
+
}
|
|
1006
1111
|
var FILE_CREATION_DATE = new Date(2019, 1, 8, 13, 31, 55);
|
|
1007
1112
|
async function resolveFilesRecursiveForDir(dirOrFile) {
|
|
1008
1113
|
const resolvedDirOrFile = path2.resolve(dirOrFile);
|
|
@@ -1016,7 +1121,7 @@ async function resolveFilesRecursiveForDir(dirOrFile) {
|
|
|
1016
1121
|
if (fileType.isFile()) {
|
|
1017
1122
|
const fullPath = `${fileType.parentPath}/${fileType.name}`;
|
|
1018
1123
|
fileEntries.push({
|
|
1019
|
-
name: path2.relative(resolvedDirOrFile, fullPath),
|
|
1124
|
+
name: normalizeEntryName(path2.relative(resolvedDirOrFile, fullPath)),
|
|
1020
1125
|
stream: fs3.createReadStream(fullPath)
|
|
1021
1126
|
});
|
|
1022
1127
|
}
|
|
@@ -1025,7 +1130,7 @@ async function resolveFilesRecursiveForDir(dirOrFile) {
|
|
|
1025
1130
|
}
|
|
1026
1131
|
return [
|
|
1027
1132
|
{
|
|
1028
|
-
name: path2.relative(process.cwd(), resolvedDirOrFile),
|
|
1133
|
+
name: normalizeEntryName(path2.relative(process.cwd(), resolvedDirOrFile)),
|
|
1029
1134
|
stream: fs3.createReadStream(resolvedDirOrFile)
|
|
1030
1135
|
}
|
|
1031
1136
|
];
|
|
@@ -1077,11 +1182,12 @@ async function deterministicArchive(dirsAndFiles, contentToArchive = []) {
|
|
|
1077
1182
|
}
|
|
1078
1183
|
}
|
|
1079
1184
|
for (const file of contentToArchiveSorted) {
|
|
1080
|
-
|
|
1185
|
+
const normalizedName = normalizeEntryName(file.name);
|
|
1186
|
+
if (!seenFiles.has(normalizedName)) {
|
|
1081
1187
|
const data = await contentToUint8Array(file.content);
|
|
1082
|
-
entryDataList.push({ name:
|
|
1083
|
-
entries.push({ name:
|
|
1084
|
-
seenFiles.add(
|
|
1188
|
+
entryDataList.push({ name: normalizedName, data });
|
|
1189
|
+
entries.push({ name: normalizedName, size: data.length });
|
|
1190
|
+
seenFiles.add(normalizedName);
|
|
1085
1191
|
}
|
|
1086
1192
|
}
|
|
1087
1193
|
entryDataList.sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);
|
|
@@ -1604,8 +1710,7 @@ var Controller = class {
|
|
|
1604
1710
|
const uploadUrlResult = await makeHappoAPIRequest(
|
|
1605
1711
|
{
|
|
1606
1712
|
path: `/api/images/${hash}/upload-url`,
|
|
1607
|
-
method: "GET"
|
|
1608
|
-
json: true
|
|
1713
|
+
method: "GET"
|
|
1609
1714
|
},
|
|
1610
1715
|
this.happoConfig,
|
|
1611
1716
|
{ retryCount: 2 }
|
|
@@ -1631,7 +1736,6 @@ var Controller = class {
|
|
|
1631
1736
|
{
|
|
1632
1737
|
url: uploadUrl,
|
|
1633
1738
|
method: "POST",
|
|
1634
|
-
json: true,
|
|
1635
1739
|
formData: {
|
|
1636
1740
|
file: new File([buffer], "image.png", { type: "image/png" })
|
|
1637
1741
|
}
|