@growthbook/edge-utils 0.2.4 → 0.2.6
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 +7 -3
- package/dist/app.js +60 -26
- package/dist/app.js.map +1 -1
- package/dist/attributes.d.ts +2 -2
- package/dist/attributes.js +20 -13
- package/dist/attributes.js.map +1 -1
- package/dist/config.d.ts +5 -1
- package/dist/config.js +26 -17
- package/dist/config.js.map +1 -1
- package/dist/generated/sdkWrapper.d.ts +1 -1
- package/dist/generated/sdkWrapper.js +1 -1
- package/dist/generated/sdkWrapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/redirect.js +1 -1
- package/dist/redirect.js.map +1 -1
- package/dist/types.d.ts +10 -1
- package/package.json +2 -2
- package/src/app.ts +65 -21
- package/src/attributes.ts +19 -11
- package/src/config.ts +24 -1
- package/src/generated/sdkWrapper.ts +1 -1
- package/src/index.ts +1 -0
- package/src/redirect.ts +1 -1
- package/src/types.ts +21 -1
package/README.md
CHANGED
|
@@ -59,11 +59,13 @@ Set up an edge key-val store and optionally use a GrowthBook SDK Webhook to keep
|
|
|
59
59
|
The GrowthBook Edge App supports a number of configuration options available via environment variables:
|
|
60
60
|
|
|
61
61
|
#### Proxy behavior
|
|
62
|
-
- `PROXY_TARGET` -
|
|
63
|
-
- `FORWARD_PROXY_HEADERS` - "true" or "1" to preserve response headers from your server (default
|
|
64
|
-
- `FOLLOW_REDIRECTS` - "true" or "1" to follow redirects when processing an origin response (default
|
|
62
|
+
- `PROXY_TARGET` - Origin (non-edge) base URL to your website
|
|
63
|
+
- `FORWARD_PROXY_HEADERS` - "true" or "1" to preserve response headers from your server (default `true`)
|
|
64
|
+
- `FOLLOW_REDIRECTS` - "true" or "1" to follow redirects when processing an origin response (default `true`)
|
|
65
65
|
- `USE_DEFAULT_CONTENT_TYPE` - "true" or "1" to assume a content-type of "text-html" if no "Content-Type" header was set (default `false`).
|
|
66
66
|
- `PROCESS_TEXT_HTML_ONLY` - "true" or "1" to only process server responses with the `Content-Type: text/html` header set – others will be proxied through (default `true`).
|
|
67
|
+
- `AUTO_INFLATE` - "true" or "1" to automatically unzip gzipped content. Not needed for most vendors (default: `false`).
|
|
68
|
+
- `NOCACHE_ORIGIN` - "true" or "1" to send "nocache" headers on origin requests. Not needed for most vendors (default: `false`).
|
|
67
69
|
- `NODE_ENV` - default: `production`
|
|
68
70
|
- `ROUTES` - JSON encoded array of Routes, rules for intercepting, proxy passing, or erroring based on request URL pattern matching
|
|
69
71
|
|
|
@@ -74,6 +76,7 @@ The GrowthBook Edge App supports a number of configuration options available via
|
|
|
74
76
|
- `RUN_CROSS_ORIGIN_URL_REDIRECT_EXPERIMENTS` - One of `everywhere`, `edge`, `browser`, or `skip` (default `browser`)
|
|
75
77
|
- `INJECT_REDIRECT_URL_SCRIPT` - "true" or "1" to mutate browser URL via window.history.replaceState() to reflect the redirected URL (default `true`)
|
|
76
78
|
- `MAX_REDIRECTS` - Number of on-edge redirects calculated before bailing out. Only the final redirect is fetched from your origin. (default `5`)
|
|
79
|
+
- `EXPERIMENT_URL_TARGETING` - URL targeting for visual editor and redirect experiments: `request` targets using the edge worker URL; `origin` uses the origin server URL. (default `request`)
|
|
77
80
|
|
|
78
81
|
#### Front-end SDK hydration
|
|
79
82
|
- `SCRIPT_INJECTION_PATTERN` - Inject the GrowthBook SDK before this token (default `</head>`)
|
|
@@ -102,6 +105,7 @@ The GrowthBook Edge App supports a number of configuration options available via
|
|
|
102
105
|
|
|
103
106
|
#### Misc
|
|
104
107
|
- `CONTENT_SECURITY_POLICY` - CSP header value
|
|
108
|
+
- `EMIT_TRACE_HEADERS` - "true" or "1" to set extra headers to detect edge redirect loops and stabilize gbuuid generation (default `true`).
|
|
105
109
|
|
|
106
110
|
|
|
107
111
|
## Lifecycle hooks
|
package/dist/app.js
CHANGED
|
@@ -27,7 +27,7 @@ function edgeApp(context, req, res,
|
|
|
27
27
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
28
|
next) {
|
|
29
29
|
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
|
|
30
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
|
|
31
31
|
/**
|
|
32
32
|
* 1. Init app variables
|
|
33
33
|
*/
|
|
@@ -41,9 +41,18 @@ next) {
|
|
|
41
41
|
const setRespCookie = (key, value) => {
|
|
42
42
|
respCookies[key] = value;
|
|
43
43
|
};
|
|
44
|
+
// Loop check
|
|
45
|
+
const requestCount = parseInt(((_b = (_a = context.helpers) === null || _a === void 0 ? void 0 : _a.getRequestHeader) === null || _b === void 0 ? void 0 : _b.call(_a, req, "x-gb-request-count")) || "0") + 1;
|
|
46
|
+
if (requestCount > 1) {
|
|
47
|
+
console.error("Edge request loop detected. Count: " + requestCount, requestUrl);
|
|
48
|
+
}
|
|
49
|
+
if (requestCount > context.config.maxRedirects) {
|
|
50
|
+
throw new Error("Edge request loop: max requests reached: " + requestCount);
|
|
51
|
+
}
|
|
44
52
|
// Initial hook:
|
|
45
53
|
let hookResp;
|
|
46
|
-
|
|
54
|
+
let onRequestParams = { context, req, res, next, requestUrl, originUrl, requestCount };
|
|
55
|
+
hookResp = yield ((_d = (_c = context === null || context === void 0 ? void 0 : context.hooks) === null || _c === void 0 ? void 0 : _c.onRequest) === null || _d === void 0 ? void 0 : _d.call(_c, onRequestParams));
|
|
47
56
|
if (hookResp)
|
|
48
57
|
return hookResp;
|
|
49
58
|
// DOM mutations
|
|
@@ -68,7 +77,8 @@ next) {
|
|
|
68
77
|
return context.helpers.proxyRequest(context, req, res, next);
|
|
69
78
|
}
|
|
70
79
|
// Custom route behavior via hook:
|
|
71
|
-
|
|
80
|
+
const onRouteParams = Object.assign(Object.assign({}, onRequestParams), { route });
|
|
81
|
+
hookResp = yield ((_f = (_e = context === null || context === void 0 ? void 0 : context.hooks) === null || _e === void 0 ? void 0 : _e.onRoute) === null || _f === void 0 ? void 0 : _f.call(_e, onRouteParams));
|
|
72
82
|
if (hookResp)
|
|
73
83
|
return hookResp;
|
|
74
84
|
/**
|
|
@@ -76,15 +86,16 @@ next) {
|
|
|
76
86
|
*/
|
|
77
87
|
const attributes = (0, attributes_1.getUserAttributes)(context, req, requestUrl, setRespCookie);
|
|
78
88
|
// Hook to allow enriching user attributes, etc
|
|
79
|
-
|
|
89
|
+
const onUserAttributesParams = Object.assign(Object.assign({}, onRouteParams), { attributes });
|
|
90
|
+
hookResp = yield ((_h = (_g = context === null || context === void 0 ? void 0 : context.hooks) === null || _g === void 0 ? void 0 : _g.onUserAttributes) === null || _h === void 0 ? void 0 : _h.call(_g, onUserAttributesParams));
|
|
80
91
|
if (hookResp)
|
|
81
92
|
return hookResp;
|
|
82
93
|
/**
|
|
83
94
|
* 4. Init GrowthBook SDK
|
|
84
95
|
*/
|
|
85
96
|
(0, growthbook_1.setPolyfills)({
|
|
86
|
-
localStorage: (
|
|
87
|
-
SubtleCrypto: (
|
|
97
|
+
localStorage: (_j = context.config) === null || _j === void 0 ? void 0 : _j.localStorage,
|
|
98
|
+
SubtleCrypto: (_k = context.config) === null || _k === void 0 ? void 0 : _k.crypto,
|
|
88
99
|
});
|
|
89
100
|
if (context.config.staleTTL !== undefined)
|
|
90
101
|
(0, growthbook_1.configureCache)({ staleTTL: context.config.staleTTL });
|
|
@@ -93,7 +104,7 @@ next) {
|
|
|
93
104
|
let stickyBucketService;
|
|
94
105
|
if (context.config.enableStickyBucketing) {
|
|
95
106
|
stickyBucketService =
|
|
96
|
-
(
|
|
107
|
+
(_l = context.config.edgeStickyBucketService) !== null && _l !== void 0 ? _l : new stickyBucketService_1.EdgeStickyBucketService({
|
|
97
108
|
context,
|
|
98
109
|
prefix: context.config.stickyBucketPrefix,
|
|
99
110
|
req,
|
|
@@ -109,7 +120,7 @@ next) {
|
|
|
109
120
|
return () => {
|
|
110
121
|
};
|
|
111
122
|
},
|
|
112
|
-
url: requestUrl,
|
|
123
|
+
url: context.config.experimentUrlTargeting === "origin" ? originUrl : requestUrl,
|
|
113
124
|
disableVisualExperiments: ["skip", "browser"].includes(context.config.runVisualEditorExperiments),
|
|
114
125
|
disableJsInjection: context.config.disableJsInjection,
|
|
115
126
|
disableUrlRedirectExperiments: ["skip", "browser"].includes(context.config.runUrlRedirectExperiments),
|
|
@@ -121,7 +132,8 @@ next) {
|
|
|
121
132
|
payload: context.config.payload,
|
|
122
133
|
});
|
|
123
134
|
// Hook to perform any custom logic given the initialized SDK
|
|
124
|
-
|
|
135
|
+
const onGrowthbookInitParams = Object.assign(Object.assign({}, onUserAttributesParams), { growthbook });
|
|
136
|
+
hookResp = yield ((_o = (_m = context === null || context === void 0 ? void 0 : context.hooks) === null || _m === void 0 ? void 0 : _m.onGrowthbookInit) === null || _o === void 0 ? void 0 : _o.call(_m, onGrowthbookInitParams));
|
|
125
137
|
if (hookResp)
|
|
126
138
|
return hookResp;
|
|
127
139
|
/**
|
|
@@ -132,32 +144,38 @@ next) {
|
|
|
132
144
|
req,
|
|
133
145
|
setRespCookie,
|
|
134
146
|
growthbook,
|
|
135
|
-
previousUrl: requestUrl,
|
|
147
|
+
previousUrl: context.config.experimentUrlTargeting === "origin" ? originUrl : requestUrl,
|
|
136
148
|
resetDomChanges,
|
|
137
149
|
setPreRedirectChangeIds: setPreRedirectChangeIds,
|
|
138
150
|
});
|
|
139
151
|
originUrl = getOriginUrl(context, redirectRequestUrl, redirectRequestUrl !== requestUrl);
|
|
140
152
|
// Pre-origin-fetch hook (after redirect logic):
|
|
141
|
-
|
|
153
|
+
const onBeforeOriginFetchParams = Object.assign(Object.assign({}, onGrowthbookInitParams), { redirectRequestUrl, originUrl });
|
|
154
|
+
hookResp = yield ((_q = (_p = context === null || context === void 0 ? void 0 : context.hooks) === null || _p === void 0 ? void 0 : _p.onBeforeOriginFetch) === null || _q === void 0 ? void 0 : _q.call(_p, onBeforeOriginFetchParams));
|
|
142
155
|
if (hookResp)
|
|
143
156
|
return hookResp;
|
|
144
157
|
/**
|
|
145
158
|
* 6. Fetch from origin, parse body / DOM
|
|
146
159
|
*/
|
|
147
160
|
try {
|
|
148
|
-
originResponse = (yield context.helpers.fetch(context, originUrl, req
|
|
161
|
+
originResponse = (yield context.helpers.fetch(context, originUrl, req, context.config.emitTraceHeaders ? {
|
|
162
|
+
additionalHeaders: {
|
|
163
|
+
"x-gb-request-count": ("" + requestCount),
|
|
164
|
+
"x-gbuuid": (_r = growthbook.getAttributes()) === null || _r === void 0 ? void 0 : _r[context.config.uuidKey],
|
|
165
|
+
}
|
|
166
|
+
} : undefined));
|
|
149
167
|
}
|
|
150
168
|
catch (e) {
|
|
151
169
|
console.error(e);
|
|
152
170
|
}
|
|
153
171
|
const originStatus = originResponse ? parseInt(originResponse.status ? originResponse.status + "" : "400") : 500;
|
|
154
172
|
// On fetch hook (for custom response processing, etc)
|
|
155
|
-
|
|
173
|
+
const onOriginFetchParams = Object.assign(Object.assign({}, onBeforeOriginFetchParams), { originResponse, originStatus });
|
|
174
|
+
hookResp = yield ((_t = (_s = context === null || context === void 0 ? void 0 : context.hooks) === null || _s === void 0 ? void 0 : _s.onOriginFetch) === null || _t === void 0 ? void 0 : _t.call(_s, onOriginFetchParams));
|
|
156
175
|
if (hookResp)
|
|
157
176
|
return hookResp;
|
|
158
177
|
// Standard error response handling
|
|
159
178
|
if (originStatus >= 500 || !originResponse) {
|
|
160
|
-
console.error("Fetch: 5xx status returned");
|
|
161
179
|
return context.helpers.sendResponse(context, res, {}, "Error fetching page", {}, 500);
|
|
162
180
|
}
|
|
163
181
|
if (originStatus >= 400) {
|
|
@@ -173,26 +191,40 @@ next) {
|
|
|
173
191
|
if (context.config.useDefaultContentType && !resHeaders["content-type"]) {
|
|
174
192
|
resHeaders["content-type"] = "text/html";
|
|
175
193
|
}
|
|
176
|
-
if (context.config.processTextHtmlOnly && !((
|
|
194
|
+
if (context.config.processTextHtmlOnly && !((_u = resHeaders["content-type"]) !== null && _u !== void 0 ? _u : "").includes("text/html")) {
|
|
177
195
|
return context.helpers.proxyRequest(context, req, res, next);
|
|
178
196
|
}
|
|
179
197
|
const { csp, nonce } = (0, inject_1.getCspInfo)(context);
|
|
180
198
|
if (csp) {
|
|
181
199
|
resHeaders["content-security-policy"] = csp;
|
|
182
200
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
201
|
+
const autoInflate = context.config.autoInflate; // fastly only!!!
|
|
202
|
+
let body = "";
|
|
203
|
+
const isGzipped = originHeaders["content-encoding"] === "gzip";
|
|
204
|
+
try {
|
|
205
|
+
const buffer = yield originResponse.arrayBuffer();
|
|
206
|
+
try {
|
|
207
|
+
if (isGzipped && autoInflate) {
|
|
190
208
|
body = pako_1.default.inflate(new Uint8Array(buffer), { to: "string" });
|
|
191
209
|
}
|
|
192
|
-
|
|
193
|
-
|
|
210
|
+
else {
|
|
211
|
+
body = new TextDecoder().decode(buffer);
|
|
194
212
|
}
|
|
195
213
|
}
|
|
214
|
+
catch (_z) {
|
|
215
|
+
if (isGzipped) {
|
|
216
|
+
body = pako_1.default.inflate(new Uint8Array(buffer), { to: "string" });
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
throw new Error("Failed to decode response as text.");
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
if (isGzipped) {
|
|
223
|
+
delete resHeaders["content-encoding"]; // Remove to prevent double decompression
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch (e) {
|
|
227
|
+
console.error("Response decoding error", e);
|
|
196
228
|
}
|
|
197
229
|
let setBody = (s) => {
|
|
198
230
|
body = s;
|
|
@@ -202,7 +234,8 @@ next) {
|
|
|
202
234
|
root = (0, node_html_parser_1.parse)(body);
|
|
203
235
|
}
|
|
204
236
|
// Body ready hook (pre-DOM-mutations):
|
|
205
|
-
|
|
237
|
+
const onBodyReadyParams = Object.assign(Object.assign({}, onOriginFetchParams), { originHeaders, resHeaders, body, setBody, root });
|
|
238
|
+
hookResp = yield ((_w = (_v = context === null || context === void 0 ? void 0 : context.hooks) === null || _v === void 0 ? void 0 : _v.onBodyReady) === null || _w === void 0 ? void 0 : _w.call(_v, onBodyReadyParams));
|
|
206
239
|
if (hookResp)
|
|
207
240
|
return hookResp;
|
|
208
241
|
/**
|
|
@@ -230,7 +263,8 @@ next) {
|
|
|
230
263
|
oldUrl: requestUrl,
|
|
231
264
|
});
|
|
232
265
|
// Final hook (post-mutations) before sending back
|
|
233
|
-
|
|
266
|
+
const onBeforeResponseParams = Object.assign(Object.assign({}, onOriginFetchParams), { originHeaders, resHeaders, body, setBody });
|
|
267
|
+
hookResp = yield ((_y = (_x = context === null || context === void 0 ? void 0 : context.hooks) === null || _x === void 0 ? void 0 : _x.onBeforeResponse) === null || _y === void 0 ? void 0 : _y.call(_x, onBeforeResponseParams));
|
|
234
268
|
if (hookResp)
|
|
235
269
|
return hookResp;
|
|
236
270
|
/**
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/attributes.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Attributes } from "@growthbook/growthbook";
|
|
2
2
|
import { Context } from "./types";
|
|
3
|
-
export declare function getUserAttributes<Req, Res>(ctx: Context<Req, Res>, req: Req, url: string, setRespCookie: (key: string, value: string) => void): Attributes;
|
|
3
|
+
export declare function getUserAttributes<Req, Res>(ctx: Context<Req, Res>, req: Req, url: string, setRespCookie: (key: string, value: string) => void, skipUuid?: boolean): Attributes;
|
|
4
4
|
export declare function getUUID<Req, Res>(ctx: Context<Req, Res>, req: Req): any;
|
|
5
|
-
export declare function getAutoAttributes<Req, Res>(ctx: Context<Req, Res>, req: Req, url: string): Attributes;
|
|
5
|
+
export declare function getAutoAttributes<Req, Res>(ctx: Context<Req, Res>, req: Req, url: string, skipUuid?: boolean): Attributes;
|
package/dist/attributes.js
CHANGED
|
@@ -4,27 +4,30 @@ exports.getUserAttributes = getUserAttributes;
|
|
|
4
4
|
exports.getUUID = getUUID;
|
|
5
5
|
exports.getAutoAttributes = getAutoAttributes;
|
|
6
6
|
// Get the user's attributes by merging the UUID cookie with any auto-attributes
|
|
7
|
-
function getUserAttributes(ctx, req, url, setRespCookie) {
|
|
7
|
+
function getUserAttributes(ctx, req, url, setRespCookie, skipUuid = false) {
|
|
8
8
|
const { config, helpers } = ctx;
|
|
9
9
|
const providedAttributes = config.attributes || {};
|
|
10
10
|
if (config.skipAutoAttributes) {
|
|
11
11
|
return providedAttributes;
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
if (
|
|
17
|
-
|
|
13
|
+
if (!skipUuid) {
|
|
14
|
+
// get any saved attributes from the cookie
|
|
15
|
+
const uuid = getUUID(ctx, req);
|
|
16
|
+
if (config.persistUuid && !config.noAutoCookies) {
|
|
17
|
+
if (!(helpers === null || helpers === void 0 ? void 0 : helpers.setCookie)) {
|
|
18
|
+
throw new Error("Missing required dependencies");
|
|
19
|
+
}
|
|
20
|
+
setRespCookie(config.uuidCookieName, uuid);
|
|
18
21
|
}
|
|
19
|
-
setRespCookie(config.uuidCookieName, uuid);
|
|
20
22
|
}
|
|
21
|
-
const autoAttributes = getAutoAttributes(ctx, req, url);
|
|
23
|
+
const autoAttributes = getAutoAttributes(ctx, req, url, skipUuid);
|
|
22
24
|
return Object.assign(Object.assign({}, autoAttributes), providedAttributes);
|
|
23
25
|
}
|
|
24
26
|
// Get or create a UUID for the user:
|
|
25
27
|
// - Try to get the UUID from the cookie
|
|
26
28
|
// - Or create a new one and store in the cookie
|
|
27
29
|
function getUUID(ctx, req) {
|
|
30
|
+
var _a;
|
|
28
31
|
const { config, helpers } = ctx;
|
|
29
32
|
const crypto = (config === null || config === void 0 ? void 0 : config.crypto) || (globalThis === null || globalThis === void 0 ? void 0 : globalThis.crypto);
|
|
30
33
|
if (!crypto || !(helpers === null || helpers === void 0 ? void 0 : helpers.getCookie)) {
|
|
@@ -38,17 +41,21 @@ function getUUID(ctx, req) {
|
|
|
38
41
|
(15 >> (c / 4)))).toString(16));
|
|
39
42
|
};
|
|
40
43
|
// get the existing UUID from cookie if set, otherwise create one
|
|
41
|
-
return helpers.getCookie(req, config.uuidCookieName)
|
|
44
|
+
return helpers.getCookie(req, config.uuidCookieName)
|
|
45
|
+
|| ((_a = helpers === null || helpers === void 0 ? void 0 : helpers.getRequestHeader) === null || _a === void 0 ? void 0 : _a.call(helpers, req, "x-gbuuid"))
|
|
46
|
+
|| genUUID();
|
|
42
47
|
}
|
|
43
48
|
// Infer attributes from the request
|
|
44
49
|
// - UUID will come from the cookie or be generated
|
|
45
50
|
// - Other attributes come from the request headers and URL
|
|
46
|
-
function getAutoAttributes(ctx, req, url) {
|
|
51
|
+
function getAutoAttributes(ctx, req, url, skipUuid = false) {
|
|
47
52
|
const { config, helpers } = ctx;
|
|
48
53
|
const getHeader = helpers === null || helpers === void 0 ? void 0 : helpers.getRequestHeader;
|
|
49
|
-
let autoAttributes =
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
let autoAttributes = skipUuid
|
|
55
|
+
? {}
|
|
56
|
+
: {
|
|
57
|
+
[config.uuidKey]: getUUID(ctx, req),
|
|
58
|
+
};
|
|
52
59
|
const ua = (getHeader === null || getHeader === void 0 ? void 0 : getHeader(req, "user-agent")) || "";
|
|
53
60
|
autoAttributes.browser = ua.match(/Edg/)
|
|
54
61
|
? "edge"
|
package/dist/attributes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.js","sourceRoot":"","sources":["../src/attributes.ts"],"names":[],"mappings":";;AAIA,
|
|
1
|
+
{"version":3,"file":"attributes.js","sourceRoot":"","sources":["../src/attributes.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Config, Context, ExperimentRunEnvironment } from "./types";
|
|
1
|
+
import { Config, Context, ExperimentRunEnvironment, ExperimentUrlTargeting } from "./types";
|
|
2
2
|
type Req = any;
|
|
3
3
|
type Res = any;
|
|
4
4
|
export declare const defaultContext: Context<Req, Res>;
|
|
@@ -8,6 +8,8 @@ export interface ConfigEnv {
|
|
|
8
8
|
FOLLOW_REDIRECTS?: string;
|
|
9
9
|
USE_DEFAULT_CONTENT_TYPE?: string;
|
|
10
10
|
PROCESS_TEXT_HTML_ONLY?: string;
|
|
11
|
+
AUTO_INFLATE?: string;
|
|
12
|
+
NOCACHE_ORIGIN?: string;
|
|
11
13
|
NODE_ENV?: string;
|
|
12
14
|
MAX_PAYLOAD_SIZE?: string;
|
|
13
15
|
ROUTES?: string;
|
|
@@ -18,6 +20,7 @@ export interface ConfigEnv {
|
|
|
18
20
|
RUN_CROSS_ORIGIN_URL_REDIRECT_EXPERIMENTS?: ExperimentRunEnvironment;
|
|
19
21
|
INJECT_REDIRECT_URL_SCRIPT?: string;
|
|
20
22
|
MAX_REDIRECTS?: string;
|
|
23
|
+
EXPERIMENT_URL_TARGETING?: ExperimentUrlTargeting;
|
|
21
24
|
SCRIPT_INJECTION_PATTERN?: string;
|
|
22
25
|
DISABLE_INJECTIONS?: string;
|
|
23
26
|
ENABLE_STREAMING?: string;
|
|
@@ -25,6 +28,7 @@ export interface ConfigEnv {
|
|
|
25
28
|
STICKY_BUCKET_PREFIX?: string;
|
|
26
29
|
CONTENT_SECURITY_POLICY?: string;
|
|
27
30
|
NONCE?: string;
|
|
31
|
+
EMIT_TRACE_HEADERS?: string;
|
|
28
32
|
GROWTHBOOK_API_HOST?: string;
|
|
29
33
|
GROWTHBOOK_CLIENT_KEY?: string;
|
|
30
34
|
GROWTHBOOK_DECRYPTION_KEY?: string;
|
package/dist/config.js
CHANGED
|
@@ -9,6 +9,8 @@ exports.defaultContext = {
|
|
|
9
9
|
followRedirects: true,
|
|
10
10
|
useDefaultContentType: false,
|
|
11
11
|
processTextHtmlOnly: true,
|
|
12
|
+
autoInflate: false,
|
|
13
|
+
nocacheOrigin: false,
|
|
12
14
|
environment: "production",
|
|
13
15
|
maxPayloadSize: "2mb",
|
|
14
16
|
runVisualEditorExperiments: "everywhere",
|
|
@@ -18,10 +20,12 @@ exports.defaultContext = {
|
|
|
18
20
|
runCrossOriginUrlRedirectExperiments: "browser",
|
|
19
21
|
injectRedirectUrlScript: true,
|
|
20
22
|
maxRedirects: 5,
|
|
23
|
+
experimentUrlTargeting: "request",
|
|
21
24
|
scriptInjectionPattern: "</head>",
|
|
22
25
|
disableInjections: false,
|
|
23
26
|
enableStreaming: false,
|
|
24
27
|
enableStickyBucketing: false,
|
|
28
|
+
emitTraceHeaders: true,
|
|
25
29
|
apiHost: "",
|
|
26
30
|
clientKey: "",
|
|
27
31
|
persistUuid: false,
|
|
@@ -51,16 +55,18 @@ exports.defaultContext = {
|
|
|
51
55
|
};
|
|
52
56
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
57
|
function getConfig(env) {
|
|
54
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
|
|
58
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;
|
|
55
59
|
const config = exports.defaultContext.config;
|
|
56
60
|
config.proxyTarget = (_a = env.PROXY_TARGET) !== null && _a !== void 0 ? _a : exports.defaultContext.config.proxyTarget;
|
|
57
61
|
config.forwardProxyHeaders = ["true", "1"].includes((_b = env.FORWARD_PROXY_HEADERS) !== null && _b !== void 0 ? _b : "" + exports.defaultContext.config.forwardProxyHeaders);
|
|
58
62
|
config.followRedirects = ["true", "1"].includes((_c = env.FOLLOW_REDIRECTS) !== null && _c !== void 0 ? _c : "" + exports.defaultContext.config.followRedirects);
|
|
59
63
|
config.useDefaultContentType = ["true", "1"].includes((_d = env.USE_DEFAULT_CONTENT_TYPE) !== null && _d !== void 0 ? _d : "" + exports.defaultContext.config.useDefaultContentType);
|
|
60
64
|
config.processTextHtmlOnly = ["true", "1"].includes((_e = env.PROCESS_TEXT_HTML_ONLY) !== null && _e !== void 0 ? _e : "" + exports.defaultContext.config.processTextHtmlOnly);
|
|
61
|
-
config.
|
|
65
|
+
config.autoInflate = ["true", "1"].includes((_f = env.AUTO_INFLATE) !== null && _f !== void 0 ? _f : "" + exports.defaultContext.config.autoInflate);
|
|
66
|
+
config.nocacheOrigin = ["true", "1"].includes((_g = env.NOCACHE_ORIGIN) !== null && _g !== void 0 ? _g : "" + exports.defaultContext.config.nocacheOrigin);
|
|
67
|
+
config.environment = (_h = env.NODE_ENV) !== null && _h !== void 0 ? _h : exports.defaultContext.config.environment;
|
|
62
68
|
config.maxPayloadSize =
|
|
63
|
-
(
|
|
69
|
+
(_j = env.MAX_PAYLOAD_SIZE) !== null && _j !== void 0 ? _j : exports.defaultContext.config.maxPayloadSize;
|
|
64
70
|
try {
|
|
65
71
|
config.routes = JSON.parse(env.ROUTES || "[]");
|
|
66
72
|
}
|
|
@@ -68,32 +74,35 @@ function getConfig(env) {
|
|
|
68
74
|
console.error("Error parsing ROUTES", e);
|
|
69
75
|
config.routes = [];
|
|
70
76
|
}
|
|
71
|
-
config.runVisualEditorExperiments = ((
|
|
77
|
+
config.runVisualEditorExperiments = ((_k = env.RUN_VISUAL_EDITOR_EXPERIMENTS) !== null && _k !== void 0 ? _k : exports.defaultContext.config
|
|
72
78
|
.runVisualEditorExperiments);
|
|
73
|
-
config.disableJsInjection = ["true", "1"].includes((
|
|
74
|
-
config.alwaysParseDOM = ["true", "1"].includes((
|
|
75
|
-
config.runUrlRedirectExperiments = ((
|
|
79
|
+
config.disableJsInjection = ["true", "1"].includes((_l = env.DISABLE_JS_INJECTION) !== null && _l !== void 0 ? _l : "" + exports.defaultContext.config.disableJsInjection);
|
|
80
|
+
config.alwaysParseDOM = ["true", "1"].includes((_m = env.ALWAYS_PARSE_DOM) !== null && _m !== void 0 ? _m : "" + exports.defaultContext.config.alwaysParseDOM);
|
|
81
|
+
config.runUrlRedirectExperiments = ((_o = env.RUN_URL_REDIRECT_EXPERIMENTS) !== null && _o !== void 0 ? _o : exports.defaultContext.config
|
|
76
82
|
.runUrlRedirectExperiments);
|
|
77
83
|
config.runCrossOriginUrlRedirectExperiments =
|
|
78
|
-
((
|
|
84
|
+
((_p = env.RUN_CROSS_ORIGIN_URL_REDIRECT_EXPERIMENTS) !== null && _p !== void 0 ? _p : exports.defaultContext.config
|
|
79
85
|
.runCrossOriginUrlRedirectExperiments);
|
|
80
|
-
config.injectRedirectUrlScript = ["true", "1"].includes((
|
|
86
|
+
config.injectRedirectUrlScript = ["true", "1"].includes((_q = env.INJECT_REDIRECT_URL_SCRIPT) !== null && _q !== void 0 ? _q : "" + exports.defaultContext.config.injectRedirectUrlScript);
|
|
81
87
|
config.maxRedirects = parseInt(env.MAX_REDIRECTS || "" + exports.defaultContext.config.maxRedirects);
|
|
88
|
+
config.experimentUrlTargeting = ((_r = env.EXPERIMENT_URL_TARGETING) !== null && _r !== void 0 ? _r : exports.defaultContext.config
|
|
89
|
+
.experimentUrlTargeting);
|
|
82
90
|
config.scriptInjectionPattern =
|
|
83
91
|
env.SCRIPT_INJECTION_PATTERN ||
|
|
84
92
|
exports.defaultContext.config.scriptInjectionPattern;
|
|
85
|
-
config.disableInjections = ["true", "1"].includes((
|
|
86
|
-
config.enableStreaming = ["true", "1"].includes((
|
|
87
|
-
config.enableStickyBucketing = ["true", "1"].includes((
|
|
93
|
+
config.disableInjections = ["true", "1"].includes((_s = env.DISABLE_INJECTIONS) !== null && _s !== void 0 ? _s : "" + exports.defaultContext.config.disableInjections);
|
|
94
|
+
config.enableStreaming = ["true", "1"].includes((_t = env.ENABLE_STREAMING) !== null && _t !== void 0 ? _t : "" + exports.defaultContext.config.enableStreaming);
|
|
95
|
+
config.enableStickyBucketing = ["true", "1"].includes((_u = env.ENABLE_STICKY_BUCKETING) !== null && _u !== void 0 ? _u : "" + exports.defaultContext.config.enableStickyBucketing);
|
|
88
96
|
"STICKY_BUCKET_PREFIX" in env &&
|
|
89
97
|
(config.stickyBucketPrefix = env.STICKY_BUCKET_PREFIX);
|
|
90
98
|
config.contentSecurityPolicy = env.CONTENT_SECURITY_POLICY || "";
|
|
91
99
|
// warning: for testing only; nonce should be unique per request
|
|
92
100
|
config.nonce = env.NONCE || undefined;
|
|
93
101
|
config.crypto = crypto;
|
|
102
|
+
config.emitTraceHeaders = ["true", "1"].includes((_v = env.EMIT_TRACE_HEADERS) !== null && _v !== void 0 ? _v : "" + exports.defaultContext.config.emitTraceHeaders);
|
|
94
103
|
// growthbook
|
|
95
|
-
config.apiHost = ((
|
|
96
|
-
config.clientKey = (
|
|
104
|
+
config.apiHost = ((_w = env.GROWTHBOOK_API_HOST) !== null && _w !== void 0 ? _w : "").replace(/\/*$/, "");
|
|
105
|
+
config.clientKey = (_x = env.GROWTHBOOK_CLIENT_KEY) !== null && _x !== void 0 ? _x : "";
|
|
97
106
|
"GROWTHBOOK_DECRYPTION_KEY" in env &&
|
|
98
107
|
(config.decryptionKey = env.GROWTHBOOK_DECRYPTION_KEY);
|
|
99
108
|
"GROWTHBOOK_TRACKING_CALLBACK" in env &&
|
|
@@ -106,12 +115,12 @@ function getConfig(env) {
|
|
|
106
115
|
console.error("Error parsing GROWTHBOOK_PAYLOAD", e);
|
|
107
116
|
}
|
|
108
117
|
"STALE_TTL" in env && (config.staleTTL = parseInt(env.STALE_TTL || (1000 * 60) + ""));
|
|
109
|
-
config.persistUuid = ["true", "1"].includes((
|
|
110
|
-
config.noAutoCookies = ["true", "1"].includes((
|
|
118
|
+
config.persistUuid = ["true", "1"].includes((_y = env.PERSIST_UUID) !== null && _y !== void 0 ? _y : "" + exports.defaultContext.config.persistUuid);
|
|
119
|
+
config.noAutoCookies = ["true", "1"].includes((_z = env.NO_AUTO_COOKIES) !== null && _z !== void 0 ? _z : "" + exports.defaultContext.config.noAutoCookies);
|
|
111
120
|
config.uuidCookieName =
|
|
112
121
|
env.UUID_COOKIE_NAME || exports.defaultContext.config.uuidCookieName;
|
|
113
122
|
config.uuidKey = env.UUID_KEY || exports.defaultContext.config.uuidKey;
|
|
114
|
-
config.skipAutoAttributes = ["true", "1"].includes((
|
|
123
|
+
config.skipAutoAttributes = ["true", "1"].includes((_0 = env.SKIP_AUTO_ATTRIBUTES) !== null && _0 !== void 0 ? _0 : "" + exports.defaultContext.config.skipAutoAttributes);
|
|
115
124
|
return config;
|
|
116
125
|
}
|
|
117
126
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|