@pack/hydrogen 1.0.1-ab-test.3 → 1.0.1-ab-test.5
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/create-pack-client.d.ts +10 -0
- package/dist/create-pack-client.d.ts.map +1 -1
- package/dist/create-pack-client.js +60 -1
- package/dist/handle-request.js +1 -1
- package/dist/tests/hooks.js +2 -2
- package/dist/tests/pack-test-route.d.ts.map +1 -1
- package/dist/tests/pack-test-route.js +5 -2
- package/dist/tests/test.d.ts.map +1 -1
- package/dist/tests/test.js +6 -5
- package/package.json +2 -2
|
@@ -45,6 +45,9 @@ interface QueryResponse<T> {
|
|
|
45
45
|
}
|
|
46
46
|
export interface Pack {
|
|
47
47
|
abTest: Test | null | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* @deprecated The method should not be used
|
|
50
|
+
*/
|
|
48
51
|
getPackSessionData(): {
|
|
49
52
|
storeId: string;
|
|
50
53
|
sessionId: string;
|
|
@@ -52,6 +55,13 @@ export interface Pack {
|
|
|
52
55
|
isPreviewModeEnabled: boolean;
|
|
53
56
|
customizerMeta: any;
|
|
54
57
|
};
|
|
58
|
+
getPackContextData(): {
|
|
59
|
+
packStoreId: string;
|
|
60
|
+
packSessionId: string;
|
|
61
|
+
packAbTest: Test | null | undefined;
|
|
62
|
+
packIsPreviewMode: boolean;
|
|
63
|
+
packCustomizerMeta: string | null;
|
|
64
|
+
};
|
|
55
65
|
handleRequest(request: Request): Promise<(response: Response) => void>;
|
|
56
66
|
isPreviewModeEnabled: () => boolean;
|
|
57
67
|
isValidEditToken: PackClient["isValidEditToken"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-pack-client.d.ts","sourceRoot":"","sources":["../src/create-pack-client.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAML,IAAI,EACJ,SAAS,EAGV,MAAM,cAAc,CAAC;AAEtB,uGAAuG;AACvG,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,UAAU,kBAAkB;IAC1B;;;OAGG;IACH,KAAK,EAAE,KAAK,CAAC;IACb;;;OAGG;IACH,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAErC,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,aAAa,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;IAChC,kBAAkB,IAAI;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;QAChC,oBAAoB,EAAE,OAAO,CAAC;QAC9B,cAAc,EAAE,GAAG,CAAC;KACrB,CAAC;IACF,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC;IACvE,oBAAoB,EAAE,MAAM,OAAO,CAAC;IACpC,gBAAgB,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,GAAG,GAAG,EACb,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"create-pack-client.d.ts","sourceRoot":"","sources":["../src/create-pack-client.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAML,IAAI,EACJ,SAAS,EAGV,MAAM,cAAc,CAAC;AAEtB,uGAAuG;AACvG,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,UAAU,kBAAkB;IAC1B;;;OAGG;IACH,KAAK,EAAE,KAAK,CAAC;IACb;;;OAGG;IACH,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAErC,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,aAAa,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;IAChC;;OAEG;IACH,kBAAkB,IAAI;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;QAChC,oBAAoB,EAAE,OAAO,CAAC;QAC9B,cAAc,EAAE,GAAG,CAAC;KACrB,CAAC;IACF,kBAAkB,IAAI;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;QACpC,iBAAiB,EAAE,OAAO,CAAC;QAC3B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;KACnC,CAAC;IACF,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC;IACvE,oBAAoB,EAAE,MAAM,OAAO,CAAC;IACpC,gBAAgB,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,GAAG,GAAG,EACb,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,KACnB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B;AAoJD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAgPvE"}
|
|
@@ -28,6 +28,43 @@ function hashQuery(query, variables, headers) {
|
|
|
28
28
|
hash += JSON.stringify(headers);
|
|
29
29
|
return sha256(hash);
|
|
30
30
|
}
|
|
31
|
+
async function getCacheKey(withCache, query, token, options) {
|
|
32
|
+
let queryHash = await hashQuery(query, options?.variables, options?.headers);
|
|
33
|
+
let publishedAt;
|
|
34
|
+
try {
|
|
35
|
+
const resp = await withCache("pack:content:publishedAt", CacheCustom({
|
|
36
|
+
maxAge: 15,
|
|
37
|
+
staleWhileRevalidate: 15,
|
|
38
|
+
}), async () => {
|
|
39
|
+
const URL = "https://cache-check-production.packdigital.workers.dev/published-at";
|
|
40
|
+
const resp = await fetch(URL, {
|
|
41
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
42
|
+
});
|
|
43
|
+
const { status } = resp;
|
|
44
|
+
if (status !== 200) {
|
|
45
|
+
let message;
|
|
46
|
+
if (status === 401) {
|
|
47
|
+
message =
|
|
48
|
+
"Pack error: Unauthorized request to cache check service. Please check your token.";
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
message = `Pack error: Request to cache check service failed with status ${status}`;
|
|
52
|
+
}
|
|
53
|
+
console.error(message);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return resp.json();
|
|
57
|
+
});
|
|
58
|
+
publishedAt = resp?.publishedAt;
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
console.error(err);
|
|
62
|
+
}
|
|
63
|
+
if (publishedAt) {
|
|
64
|
+
return `${queryHash}:${publishedAt}`;
|
|
65
|
+
}
|
|
66
|
+
return queryHash;
|
|
67
|
+
}
|
|
31
68
|
// Extends the CacheLong strategy with a stale-if-error policy
|
|
32
69
|
const cacheCustom = CacheCustom({
|
|
33
70
|
maxAge: 3600,
|
|
@@ -131,6 +168,15 @@ export function createPackClient(options) {
|
|
|
131
168
|
customizerMeta: session.get("customizerMeta"),
|
|
132
169
|
};
|
|
133
170
|
},
|
|
171
|
+
getPackContextData: () => {
|
|
172
|
+
return {
|
|
173
|
+
packStoreId: storeId,
|
|
174
|
+
packSessionId: session.id,
|
|
175
|
+
packAbTest: getTestSession(session, testFromQueryParams, previewEnabled),
|
|
176
|
+
packIsPreviewMode: previewEnabled,
|
|
177
|
+
packCustomizerMeta: session.get("customizerMeta"),
|
|
178
|
+
};
|
|
179
|
+
},
|
|
134
180
|
isPreviewModeEnabled: () => previewEnabled,
|
|
135
181
|
isValidEditToken: () => new Promise(() => false),
|
|
136
182
|
async query(query, { variables } = {}) {
|
|
@@ -157,6 +203,7 @@ export function createPackClient(options) {
|
|
|
157
203
|
token,
|
|
158
204
|
contentEnvironment: clientContentEnvironment,
|
|
159
205
|
sessionId: session.id,
|
|
206
|
+
clientName: "HydrogenClient",
|
|
160
207
|
});
|
|
161
208
|
return {
|
|
162
209
|
abTest: getTestSession(session, testFromQueryParams, previewEnabled),
|
|
@@ -169,6 +216,15 @@ export function createPackClient(options) {
|
|
|
169
216
|
customizerMeta: session.get("customizerMeta"),
|
|
170
217
|
};
|
|
171
218
|
},
|
|
219
|
+
getPackContextData: () => {
|
|
220
|
+
return {
|
|
221
|
+
packStoreId: storeId,
|
|
222
|
+
packSessionId: session.id,
|
|
223
|
+
packAbTest: getTestSession(session, testFromQueryParams, previewEnabled),
|
|
224
|
+
packIsPreviewMode: previewEnabled,
|
|
225
|
+
packCustomizerMeta: session.get("customizerMeta"),
|
|
226
|
+
};
|
|
227
|
+
},
|
|
172
228
|
handleRequest,
|
|
173
229
|
isPreviewModeEnabled: () => previewEnabled,
|
|
174
230
|
isValidEditToken: (token) => packClient.isValidEditToken(token),
|
|
@@ -183,7 +239,6 @@ export function createPackClient(options) {
|
|
|
183
239
|
testInfoForRequest,
|
|
184
240
|
testFromQueryParams: testFromQueryParams || test,
|
|
185
241
|
});
|
|
186
|
-
const queryHash = await hashQuery(query, variables, headers);
|
|
187
242
|
const queryVariables = variables ? { ...variables } : {};
|
|
188
243
|
if (previewEnabled) {
|
|
189
244
|
queryVariables.version = "CURRENT";
|
|
@@ -207,6 +262,10 @@ export function createPackClient(options) {
|
|
|
207
262
|
return { error, data: {} };
|
|
208
263
|
}
|
|
209
264
|
}
|
|
265
|
+
const queryHash = await getCacheKey(withCache, query, token, {
|
|
266
|
+
variables: queryVariables,
|
|
267
|
+
headers,
|
|
268
|
+
});
|
|
210
269
|
const response = await withCache(queryHash, strategy, async () => {
|
|
211
270
|
try {
|
|
212
271
|
return await packClient.fetch(query, {
|
package/dist/handle-request.js
CHANGED
|
@@ -4,7 +4,7 @@ export async function handleRequest(pack, request, handleRequest) {
|
|
|
4
4
|
const [response] = await Promise.all([
|
|
5
5
|
handleRequest(request),
|
|
6
6
|
packlytics(request, pack.session, {
|
|
7
|
-
|
|
7
|
+
storefrontId: pack.getPackContextData().packStoreId,
|
|
8
8
|
sessionSecret: pack.session.secret,
|
|
9
9
|
}),
|
|
10
10
|
]);
|
package/dist/tests/hooks.js
CHANGED
|
@@ -3,7 +3,7 @@ export function useAbTest() {
|
|
|
3
3
|
// @ts-ignore
|
|
4
4
|
const { abTest: test } = useRouteLoaderData("root");
|
|
5
5
|
if (test === undefined) {
|
|
6
|
-
throw new Error("No A/B test found, are you sure you have call ...pack.
|
|
6
|
+
throw new Error("No A/B test found, are you sure you have call ...pack.getPackContextData() on root loader return?");
|
|
7
7
|
}
|
|
8
8
|
return test;
|
|
9
9
|
}
|
|
@@ -11,7 +11,7 @@ export function useAbTestSessionId() {
|
|
|
11
11
|
// @ts-ignore
|
|
12
12
|
const { sessionId } = useRouteLoaderData("root");
|
|
13
13
|
if (!sessionId) {
|
|
14
|
-
throw new Error("No Session ID found, are you sure you have call ...pack.
|
|
14
|
+
throw new Error("No Session ID found, are you sure you have call ...pack.getPackContextData() on root loader return?");
|
|
15
15
|
}
|
|
16
16
|
return sessionId;
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pack-test-route.d.ts","sourceRoot":"","sources":["../../src/tests/pack-test-route.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pack-test-route.d.ts","sourceRoot":"","sources":["../../src/tests/pack-test-route.ts"],"names":[],"mappings":"AA6CA,eAAO,MAAM,aAAa,YAIzB,CAAC"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { useLoaderData } from "@remix-run/react";
|
|
1
|
+
import { useLoaderData, useMatches } from "@remix-run/react";
|
|
2
2
|
import Cookies from "js-cookie";
|
|
3
3
|
import { useEffect } from "react";
|
|
4
4
|
import { useRevalidator } from "react-router-dom";
|
|
5
5
|
import { usePackTestContext } from "./pack-test-context";
|
|
6
6
|
const usePackLoaderData = () => {
|
|
7
7
|
const { testInfo } = useLoaderData();
|
|
8
|
+
const [root] = useMatches();
|
|
9
|
+
const { isPreviewModeEnabled } = root?.data;
|
|
8
10
|
const { testExposureCallback } = usePackTestContext();
|
|
9
11
|
const revalidator = useRevalidator();
|
|
10
12
|
const exposedTestCookieString = Cookies.get("exposedTest");
|
|
11
13
|
useEffect(() => {
|
|
12
|
-
|
|
14
|
+
console.log;
|
|
15
|
+
if (testInfo && !exposedTestCookieString && !isPreviewModeEnabled) {
|
|
13
16
|
// Set exposedTest cookie used by server to determine if session has been exposed to test
|
|
14
17
|
const expires = new Date();
|
|
15
18
|
expires.setHours(expires.getHours() + 24);
|
package/dist/tests/test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/tests/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAqBD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAClE,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,QAAS,SAAQ,IAAI;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,4BAA4B,EAC5B,UAAU,EACV,OAAO,GACR,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/tests/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAqBD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAClE,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,QAAS,SAAQ,IAAI;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,4BAA4B,EAC5B,UAAU,EACV,OAAO,GACR,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAsHpD;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,mBAAmB,EAAE,SAAS,GAAG,IAAI,EACrC,cAAc,EAAE,OAAO,GACtB,IAAI,GAAG,IAAI,GAAG,SAAS,CA8BzB;AAED,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,OAAO,GACf,4BAA4B,CA0B9B;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CA2CzE;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE;IACP,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,QAAQ,CAAC;IAC9B,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACjC,OAmCF"}
|
package/dist/tests/test.js
CHANGED
|
@@ -30,7 +30,7 @@ export async function getTestInfo({ request, testTargetAudienceAttributes, packC
|
|
|
30
30
|
testTargetAudienceAttributes,
|
|
31
31
|
},
|
|
32
32
|
});
|
|
33
|
-
const
|
|
33
|
+
const fetchTestByRulesSetTestInfoAsFirstExposure = async () => {
|
|
34
34
|
const resp = await packClientFetchTestByRules;
|
|
35
35
|
const responseTest = resp.data?.testByRules;
|
|
36
36
|
if (responseTest) {
|
|
@@ -74,14 +74,15 @@ export async function getTestInfo({ request, testTargetAudienceAttributes, packC
|
|
|
74
74
|
}
|
|
75
75
|
else {
|
|
76
76
|
// If the test is not running anymore, fetch a new test for the user
|
|
77
|
-
await
|
|
77
|
+
await fetchTestByRulesSetTestInfoAsFirstExposure();
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
else {
|
|
81
|
-
if (!testSession
|
|
81
|
+
if (!testSession ||
|
|
82
|
+
!(testSession.data?.id && testSession.data?.testVariant)) {
|
|
82
83
|
// If there is no assigned test on the session, check if there is a test
|
|
83
84
|
// for attributes, then assign to session and return value.
|
|
84
|
-
await
|
|
85
|
+
await fetchTestByRulesSetTestInfoAsFirstExposure();
|
|
85
86
|
}
|
|
86
87
|
else {
|
|
87
88
|
// If there is test on session, check if the test on session is still running.
|
|
@@ -99,7 +100,7 @@ export async function getTestInfo({ request, testTargetAudienceAttributes, packC
|
|
|
99
100
|
else {
|
|
100
101
|
// If not running, clear test session and fetch a new test for the user
|
|
101
102
|
session.set("test", undefined);
|
|
102
|
-
await
|
|
103
|
+
await fetchTestByRulesSetTestInfoAsFirstExposure();
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
106
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pack/hydrogen",
|
|
3
3
|
"description": "Pack Hydrogen",
|
|
4
|
-
"version": "1.0.1-ab-test.
|
|
4
|
+
"version": "1.0.1-ab-test.5",
|
|
5
5
|
"exports": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"engines": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@pack/client": "^1.0.1-ab-test.0",
|
|
26
|
-
"@pack/packlytics": "^1.0.1-ab-test.
|
|
26
|
+
"@pack/packlytics": "^1.0.1-ab-test.1",
|
|
27
27
|
"@shopify/hydrogen": "^2023.10.2",
|
|
28
28
|
"cookie": "^0.6.0",
|
|
29
29
|
"js-cookie": "^3.0.5"
|