@focus-reactive/payload-plugin-ab 1.0.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/README.md +1009 -0
- package/dist/adapters/payloadGlobal/index.d.ts +15 -0
- package/dist/adapters/payloadGlobal/index.js +82 -0
- package/dist/adapters/payloadGlobal/index.js.map +1 -0
- package/dist/adapters/vercelEdge/index.d.ts +20 -0
- package/dist/adapters/vercelEdge/index.js +66 -0
- package/dist/adapters/vercelEdge/index.js.map +1 -0
- package/dist/analytics/adapters/googleAnalytics/index.d.ts +30 -0
- package/dist/analytics/adapters/googleAnalytics/index.js +188 -0
- package/dist/analytics/adapters/googleAnalytics/index.js.map +1 -0
- package/dist/analytics/client.d.ts +48 -0
- package/dist/analytics/client.js +102 -0
- package/dist/analytics/client.js.map +1 -0
- package/dist/analytics/index.d.ts +2 -0
- package/dist/analytics/index.js +19 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/config-Bq-Mi7k_.d.ts +49 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +327 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/index.d.ts +52 -0
- package/dist/middleware/index.js +118 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/resolveAbCookieNames-DH8evjWm.d.ts +32 -0
- package/dist/types-OJFBnrUD.d.ts +72 -0
- package/package.json +122 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
type TrackMetadata = Record<string, string | number | boolean>;
|
|
2
|
+
interface TrackImpressionArgs {
|
|
3
|
+
/** The experiment identifier — typically the URL path, e.g. "/en/about" */
|
|
4
|
+
experimentId: string;
|
|
5
|
+
/** The assigned variant bucket, e.g. "a", "b" */
|
|
6
|
+
variantBucket: string;
|
|
7
|
+
visitorId: string;
|
|
8
|
+
locale?: string;
|
|
9
|
+
metadata?: TrackMetadata;
|
|
10
|
+
}
|
|
11
|
+
interface TrackConversionArgs {
|
|
12
|
+
/** The experiment identifier — typically the URL path, e.g. "/en/about" */
|
|
13
|
+
experimentId: string;
|
|
14
|
+
/** The assigned variant bucket, e.g. "a", "b" */
|
|
15
|
+
variantBucket: string;
|
|
16
|
+
visitorId: string;
|
|
17
|
+
/** Identifies what conversion goal was achieved, e.g. "cta_click", "purchase" */
|
|
18
|
+
goalId: string;
|
|
19
|
+
/** Optional numeric value for statistics */
|
|
20
|
+
goalValue?: number;
|
|
21
|
+
locale?: string;
|
|
22
|
+
metadata?: TrackMetadata;
|
|
23
|
+
}
|
|
24
|
+
interface DateRange {
|
|
25
|
+
/** 'NdaysAgo' or 'YYYY-MM-DD' */
|
|
26
|
+
startDate: string;
|
|
27
|
+
/** 'NdaysAgo', 'today', or 'YYYY-MM-DD' */
|
|
28
|
+
endDate: string;
|
|
29
|
+
}
|
|
30
|
+
interface VariantStats {
|
|
31
|
+
bucket: string;
|
|
32
|
+
impressions: number;
|
|
33
|
+
/** Fraction of total impressions (0–1) */
|
|
34
|
+
impressionShare: number;
|
|
35
|
+
conversions: number;
|
|
36
|
+
/** conversions / impressions (0–1), 0 when impressions = 0 */
|
|
37
|
+
conversionRate: number;
|
|
38
|
+
}
|
|
39
|
+
interface ExperimentStats {
|
|
40
|
+
experimentId: string;
|
|
41
|
+
dateRange: DateRange;
|
|
42
|
+
variants: VariantStats[];
|
|
43
|
+
totals: {
|
|
44
|
+
impressions: number;
|
|
45
|
+
conversions: number;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
interface AnalyticsAdapter {
|
|
49
|
+
/**
|
|
50
|
+
* Fire when a user is assigned to and shown a variant.
|
|
51
|
+
* Called client-side from ExperimentTracker.
|
|
52
|
+
*/
|
|
53
|
+
trackImpression(args: TrackImpressionArgs): void;
|
|
54
|
+
/**
|
|
55
|
+
* Fire when a user completes a conversion goal.
|
|
56
|
+
* Called client-side from useABConversion.
|
|
57
|
+
*/
|
|
58
|
+
trackConversion(args: TrackConversionArgs): void;
|
|
59
|
+
/**
|
|
60
|
+
* Optional: fire an impression server-side (RSC / Server Action / middleware).
|
|
61
|
+
* Implemented via GA4 Measurement Protocol when apiSecret is provided.
|
|
62
|
+
*/
|
|
63
|
+
trackImpressionServer?(args: TrackImpressionArgs): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Optional: fetch aggregated stats for an experiment.
|
|
66
|
+
* Powers the ExperimentStatsWidget admin component.
|
|
67
|
+
* Requires propertyId and getAccessToken in the adapter config.
|
|
68
|
+
*/
|
|
69
|
+
getStats?(experimentId: string, dateRange?: DateRange): Promise<ExperimentStats>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export type { AnalyticsAdapter as A, DateRange as D, ExperimentStats as E, TrackConversionArgs as T, VariantStats as V, TrackImpressionArgs as a };
|
package/package.json
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@focus-reactive/payload-plugin-ab",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A/B testing plugin for Payload CMS",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"payload-cms",
|
|
7
|
+
"payload-plugin",
|
|
8
|
+
"ab-testing",
|
|
9
|
+
"split-testing",
|
|
10
|
+
"a-b-testing",
|
|
11
|
+
"page-variants",
|
|
12
|
+
"next.js",
|
|
13
|
+
"vercel-edge",
|
|
14
|
+
"edge-config",
|
|
15
|
+
"middleware",
|
|
16
|
+
"typescript",
|
|
17
|
+
"cms",
|
|
18
|
+
"conversion-optimization"
|
|
19
|
+
],
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "https://github.com/focusreactive/payload-plugin-ab"
|
|
24
|
+
},
|
|
25
|
+
"author": "Kiryl Pekarski <kiryl.pekarski@fr.team>",
|
|
26
|
+
"type": "module",
|
|
27
|
+
"main": "./dist/index.js",
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"files": [
|
|
30
|
+
"dist"
|
|
31
|
+
],
|
|
32
|
+
"typesVersions": {
|
|
33
|
+
"*": {
|
|
34
|
+
"adapters/payload-global": [
|
|
35
|
+
"./dist/adapters/payloadGlobal/index.d.ts"
|
|
36
|
+
],
|
|
37
|
+
"adapters/vercel-edge": [
|
|
38
|
+
"./dist/adapters/vercelEdge/index.d.ts"
|
|
39
|
+
],
|
|
40
|
+
"analytics": [
|
|
41
|
+
"./dist/analytics/index.d.ts"
|
|
42
|
+
],
|
|
43
|
+
"analytics/client": [
|
|
44
|
+
"./dist/analytics/client.d.ts"
|
|
45
|
+
],
|
|
46
|
+
"analytics/adapters/google-analytics": [
|
|
47
|
+
"./dist/analytics/adapters/googleAnalytics/index.d.ts"
|
|
48
|
+
],
|
|
49
|
+
"middleware": [
|
|
50
|
+
"./dist/middleware/index.d.ts"
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"exports": {
|
|
55
|
+
".": {
|
|
56
|
+
"import": "./dist/index.js",
|
|
57
|
+
"types": "./dist/index.d.ts"
|
|
58
|
+
},
|
|
59
|
+
"./adapters/payload-global": {
|
|
60
|
+
"import": "./dist/adapters/payloadGlobal/index.js",
|
|
61
|
+
"types": "./dist/adapters/payloadGlobal/index.d.ts"
|
|
62
|
+
},
|
|
63
|
+
"./adapters/vercel-edge": {
|
|
64
|
+
"import": "./dist/adapters/vercelEdge/index.js",
|
|
65
|
+
"types": "./dist/adapters/vercelEdge/index.d.ts"
|
|
66
|
+
},
|
|
67
|
+
"./analytics": {
|
|
68
|
+
"import": "./dist/analytics/index.js",
|
|
69
|
+
"types": "./dist/analytics/index.d.ts"
|
|
70
|
+
},
|
|
71
|
+
"./analytics/client": {
|
|
72
|
+
"import": "./dist/analytics/client.js",
|
|
73
|
+
"types": "./dist/analytics/client.d.ts"
|
|
74
|
+
},
|
|
75
|
+
"./analytics/adapters/google-analytics": {
|
|
76
|
+
"import": "./dist/analytics/adapters/googleAnalytics/index.js",
|
|
77
|
+
"types": "./dist/analytics/adapters/googleAnalytics/index.d.ts"
|
|
78
|
+
},
|
|
79
|
+
"./middleware": {
|
|
80
|
+
"import": "./dist/middleware/index.js",
|
|
81
|
+
"types": "./dist/middleware/index.d.ts"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"scripts": {
|
|
85
|
+
"build": "tsup",
|
|
86
|
+
"lint": "eslint src/",
|
|
87
|
+
"lint:fix": "eslint src/ --fix",
|
|
88
|
+
"format": "prettier --write src/",
|
|
89
|
+
"format:check": "prettier --check src/"
|
|
90
|
+
},
|
|
91
|
+
"peerDependencies": {
|
|
92
|
+
"next": "^14.0.0 || ^15.0.0",
|
|
93
|
+
"payload": "^3.0.0",
|
|
94
|
+
"react": "^18.0.0 || ^19.0.0"
|
|
95
|
+
},
|
|
96
|
+
"peerDependenciesMeta": {
|
|
97
|
+
"next": {
|
|
98
|
+
"optional": true
|
|
99
|
+
},
|
|
100
|
+
"react": {
|
|
101
|
+
"optional": true
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"optionalDependencies": {
|
|
105
|
+
"@vercel/edge-config": "^1.0.0"
|
|
106
|
+
},
|
|
107
|
+
"publishConfig": {
|
|
108
|
+
"access": "public"
|
|
109
|
+
},
|
|
110
|
+
"devDependencies": {
|
|
111
|
+
"@types/node": "^20.0.0",
|
|
112
|
+
"@types/react": "^19.0.0",
|
|
113
|
+
"eslint": "^9.0.0",
|
|
114
|
+
"eslint-config-prettier": "^9.0.0",
|
|
115
|
+
"next": "15.4.10",
|
|
116
|
+
"payload": "3.73.0",
|
|
117
|
+
"prettier": "^3.0.0",
|
|
118
|
+
"tsup": "^8.0.0",
|
|
119
|
+
"typescript": "^5.0.0",
|
|
120
|
+
"typescript-eslint": "^8.0.0"
|
|
121
|
+
}
|
|
122
|
+
}
|