@pack/hydrogen 1.0.6-ab-test.0 → 1.0.6-ab-test.3
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.
|
@@ -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,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;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,kBAAkB,GAAG,IAAI,CAAC;KAC/C,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,
|
|
1
|
+
{"version":3,"file":"create-pack-client.d.ts","sourceRoot":"","sources":["../src/create-pack-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -127,12 +127,13 @@ export function createPackClient(options) {
|
|
|
127
127
|
const handleRequest = async (request) => {
|
|
128
128
|
testFromQueryParams = getTestFromQueryParams(request);
|
|
129
129
|
const testTargetAudienceAttributes = getTestTargetingAttributesFromRequest(request);
|
|
130
|
-
if (packClient) {
|
|
130
|
+
if (packClient && token) {
|
|
131
131
|
testInfoForRequest = await getTestInfo({
|
|
132
132
|
request,
|
|
133
133
|
testTargetAudienceAttributes,
|
|
134
134
|
packClient,
|
|
135
135
|
session,
|
|
136
|
+
token,
|
|
136
137
|
});
|
|
137
138
|
}
|
|
138
139
|
return (response) => {
|
package/dist/tests/test.d.ts
CHANGED
|
@@ -29,11 +29,12 @@ export interface GetTestInfoOptions {
|
|
|
29
29
|
testTargetAudienceAttributes: TestTargetAudienceAttributes | null;
|
|
30
30
|
packClient: PackClient;
|
|
31
31
|
session: PackSession | undefined;
|
|
32
|
+
token: string;
|
|
32
33
|
}
|
|
33
34
|
export interface TestInfo extends Test {
|
|
34
35
|
isFirstExposure?: boolean;
|
|
35
36
|
}
|
|
36
|
-
export declare function getTestInfo({ request, testTargetAudienceAttributes, packClient, session, }: GetTestInfoOptions): Promise<TestInfo | undefined>;
|
|
37
|
+
export declare function getTestInfo({ request, testTargetAudienceAttributes, packClient, session, token, }: GetTestInfoOptions): Promise<TestInfo | undefined>;
|
|
37
38
|
export declare function getTestSession(session: PackSession | undefined, testFromQueryParams: TestInput | null, previewEnabled: boolean): Test | null | undefined;
|
|
38
39
|
export declare function getTestTargetingAttributesFromRequest(request: Request): TestTargetAudienceAttributes;
|
|
39
40
|
export declare function getTestFromQueryParams(request: Request): TestInput | null;
|
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;
|
|
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;AAQD,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;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAS,SAAQ,IAAI;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA2FD,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,4BAA4B,EAC5B,UAAU,EACV,OAAO,EACP,KAAK,GACN,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAgGpD;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,OA+BF"}
|
package/dist/tests/test.js
CHANGED
|
@@ -1,48 +1,51 @@
|
|
|
1
1
|
import cookie from "cookie";
|
|
2
|
-
const QUERY_TEST_BY_RULES = `#graphql
|
|
3
|
-
query TestByRules($testTargetAudienceAttributes: JSON!) {
|
|
4
|
-
testByRules(attributes: $testTargetAudienceAttributes) {
|
|
5
|
-
id
|
|
6
|
-
handle
|
|
7
|
-
testVariant {
|
|
8
|
-
id
|
|
9
|
-
handle
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
`;
|
|
14
2
|
const QUERY_TEST_VARIANT_IS_RUNNING = `#graphql
|
|
15
3
|
query TestVariantIsRunning($handle: String!, $testId: ID!) {
|
|
16
4
|
testVariantIsRunning(handle: $handle, testId: $testId)
|
|
17
5
|
}
|
|
18
6
|
`;
|
|
19
|
-
async function packClientFetchTestByRules(packClient, testTargetAudienceAttributes) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const isUsingCdn = packClient.apiUrl === "https://apicdn.packdigital.com/graphql";
|
|
24
|
-
if (isUsingCdn) {
|
|
25
|
-
packClient.apiUrl = "https://app.packdigital.com/graphql";
|
|
7
|
+
async function packClientFetchTestByRules(packClient, testTargetAudienceAttributes, token) {
|
|
8
|
+
if (!packClient.storeId) {
|
|
9
|
+
console.error("Pack error: Store ID is required to fetch a test.");
|
|
10
|
+
return undefined;
|
|
26
11
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
12
|
+
let resp = undefined;
|
|
13
|
+
const URL = "https://tests-service-production.packdigital.workers.dev/tests/assign";
|
|
14
|
+
const assignByRulesResp = await fetch(URL, {
|
|
15
|
+
method: "POST",
|
|
16
|
+
headers: {
|
|
17
|
+
Authorization: `Bearer ${token}`,
|
|
18
|
+
"X-Pack-Storefront-Id": packClient.storeId,
|
|
19
|
+
...(packClient.contentEnvironment
|
|
20
|
+
? { "X-Environment": packClient.contentEnvironment }
|
|
21
|
+
: {}),
|
|
22
|
+
"Content-Type": "application/json",
|
|
23
|
+
},
|
|
24
|
+
body: JSON.stringify({
|
|
25
|
+
attributes: testTargetAudienceAttributes,
|
|
26
|
+
}),
|
|
27
|
+
});
|
|
28
|
+
const { status } = assignByRulesResp;
|
|
29
|
+
if (status !== 200) {
|
|
30
|
+
let message;
|
|
31
|
+
if (status === 401) {
|
|
32
|
+
message =
|
|
33
|
+
"Pack error: Unauthorized request to test assignment service. Please check your token.";
|
|
38
34
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
35
|
+
else {
|
|
36
|
+
message = `Pack error: Request to test assignment service failed with status ${status}`;
|
|
37
|
+
}
|
|
38
|
+
console.error(message);
|
|
39
|
+
return resp;
|
|
40
|
+
}
|
|
41
|
+
const assignByRulesRespJson = await assignByRulesResp.json();
|
|
42
|
+
if (assignByRulesRespJson?.data) {
|
|
43
|
+
resp = {
|
|
44
|
+
...assignByRulesRespJson.data,
|
|
45
|
+
// `isFirstExposure` tells the `<PackTestRoute />` this will be the
|
|
46
|
+
// first exposure on render and will be confirmed next request
|
|
47
|
+
isFirstExposure: true,
|
|
48
|
+
};
|
|
46
49
|
}
|
|
47
50
|
return resp;
|
|
48
51
|
}
|
|
@@ -61,7 +64,12 @@ async function packClientCheckTestIsRunning(packClient, testSession) {
|
|
|
61
64
|
}
|
|
62
65
|
return false;
|
|
63
66
|
}
|
|
64
|
-
|
|
67
|
+
function getExpireAtDate() {
|
|
68
|
+
const expireAt = new Date();
|
|
69
|
+
expireAt.setHours(expireAt.getHours() + 4); // 4 hours
|
|
70
|
+
return expireAt;
|
|
71
|
+
}
|
|
72
|
+
export async function getTestInfo({ request, testTargetAudienceAttributes, packClient, session, token, }) {
|
|
65
73
|
let testInfo = undefined;
|
|
66
74
|
let exposedTest = undefined;
|
|
67
75
|
if (!session) {
|
|
@@ -72,33 +80,61 @@ export async function getTestInfo({ request, testTargetAudienceAttributes, packC
|
|
|
72
80
|
if (exposedTestCookieString) {
|
|
73
81
|
exposedTest = JSON.parse(exposedTestCookieString);
|
|
74
82
|
}
|
|
75
|
-
|
|
76
|
-
if (testSession && testSession.data?.id && testSession.data?.testVariant) {
|
|
77
|
-
const testVariantIsRunning = await packClientCheckTestIsRunning(packClient, testSession.data);
|
|
78
|
-
// If true, set testInfo to the testSession assigned test.
|
|
79
|
-
if (testVariantIsRunning) {
|
|
80
|
-
testInfo = testSession.data;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
else if (exposedTest) {
|
|
83
|
+
if (exposedTest && !testSession) {
|
|
84
84
|
// If there is no assigned test on the session and an exposed test in the
|
|
85
85
|
// incoming request cookie it means that the user was exposed to a test previously.
|
|
86
86
|
// Verify test is still running
|
|
87
87
|
const testVariantIsRunning = await packClientCheckTestIsRunning(packClient, exposedTest);
|
|
88
|
-
// If the test is still running, set testInfo
|
|
88
|
+
// If the test is still running, set testInfo for the client and store in session
|
|
89
89
|
if (testVariantIsRunning) {
|
|
90
|
-
|
|
90
|
+
const { id, handle, testVariant } = exposedTest;
|
|
91
|
+
testInfo = {
|
|
92
|
+
id,
|
|
93
|
+
handle,
|
|
94
|
+
testVariant,
|
|
95
|
+
};
|
|
96
|
+
// Only set the test to the session on exposure
|
|
97
|
+
session.set("test", {
|
|
98
|
+
data: testInfo,
|
|
99
|
+
expireAt: getExpireAtDate(),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// If the test is not running, fetch a new test for the client
|
|
104
|
+
testInfo = await packClientFetchTestByRules(packClient, testTargetAudienceAttributes, token);
|
|
91
105
|
}
|
|
92
106
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
107
|
+
else {
|
|
108
|
+
// If there is no exposed test in the incoming request cookie
|
|
109
|
+
if (testSession && testSession.data?.id && testSession.data?.testVariant) {
|
|
110
|
+
// If there is a test on session, check if the test on session has expired
|
|
111
|
+
if (!testSession.expireAt ||
|
|
112
|
+
new Date(testSession.expireAt) < new Date()) {
|
|
113
|
+
// If there is test on session, check if the test on session is still running
|
|
114
|
+
const testVariantIsRunning = await packClientCheckTestIsRunning(packClient, testSession.data);
|
|
115
|
+
// If true, set testInfo to the testSession assigned test.
|
|
116
|
+
if (testVariantIsRunning) {
|
|
117
|
+
testInfo = testSession.data;
|
|
118
|
+
session.set("test", {
|
|
119
|
+
data: testInfo,
|
|
120
|
+
expireAt: getExpireAtDate(),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// If not running, clear test session and fetch a new test for the client
|
|
125
|
+
session.set("test", undefined);
|
|
126
|
+
testInfo = await packClientFetchTestByRules(packClient, testTargetAudienceAttributes, token);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
testInfo = testSession.data;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// If there is no test on session and no exposed test, check for a new test for client
|
|
135
|
+
testInfo = await packClientFetchTestByRules(packClient, testTargetAudienceAttributes, token);
|
|
136
|
+
}
|
|
97
137
|
}
|
|
98
|
-
// save this test on the session
|
|
99
|
-
session.set("test", {
|
|
100
|
-
data: testInfo,
|
|
101
|
-
});
|
|
102
138
|
return testInfo;
|
|
103
139
|
}
|
|
104
140
|
export function getTestSession(session, testFromQueryParams, previewEnabled) {
|