posthog-node 5.30.8 → 5.32.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/extensions/express.d.ts +3 -0
- package/dist/extensions/express.d.ts.map +1 -1
- package/dist/extensions/express.js +48 -12
- package/dist/extensions/express.mjs +45 -12
- package/dist/extensions/feature-flags/feature-flags.d.ts.map +1 -1
- package/dist/extensions/feature-flags/feature-flags.js +22 -2
- package/dist/extensions/feature-flags/feature-flags.mjs +22 -2
- package/dist/extensions/nestjs.d.ts.map +1 -1
- package/dist/extensions/nestjs.js +17 -15
- package/dist/extensions/nestjs.mjs +17 -15
- package/dist/extensions/tracing-headers.d.ts +16 -0
- package/dist/extensions/tracing-headers.d.ts.map +1 -0
- package/dist/extensions/tracing-headers.js +85 -0
- package/dist/extensions/tracing-headers.mjs +39 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +1 -1
- package/src/extensions/express.ts +50 -11
- package/src/extensions/feature-flags/feature-flags.ts +39 -2
- package/src/extensions/nestjs.ts +17 -17
- package/src/extensions/tracing-headers.ts +65 -0
- package/src/types.ts +1 -0
- package/src/version.ts +1 -1
|
@@ -10,6 +10,9 @@ interface MiddlewareError extends Error {
|
|
|
10
10
|
statusCode?: number | string;
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
|
+
export declare function setupExpressRequestContext(_posthog: PostHogBackendClient, app: {
|
|
14
|
+
use: (middleware: ExpressMiddleware) => unknown;
|
|
15
|
+
}): void;
|
|
13
16
|
export declare function setupExpressErrorHandler(_posthog: PostHogBackendClient, app: {
|
|
14
17
|
use: (middleware: ExpressMiddleware | ExpressErrorMiddleware) => unknown;
|
|
15
18
|
}): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/extensions/express.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/extensions/express.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAGhD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGhD,KAAK,iBAAiB,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;AAEhF,KAAK,sBAAsB,GAAG,CAC5B,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,KACnC,IAAI,CAAA;AAET,UAAU,eAAgB,SAAQ,KAAK;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAC7B,CAAA;CACF;AA4BD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,oBAAoB,EAC9B,GAAG,EAAE;IACH,GAAG,EAAE,CAAC,UAAU,EAAE,iBAAiB,KAAK,OAAO,CAAA;CAChD,GACA,IAAI,CAEN;AAQD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,oBAAoB,EAC9B,GAAG,EAAE;IACH,GAAG,EAAE,CAAC,UAAU,EAAE,iBAAiB,GAAG,sBAAsB,KAAK,OAAO,CAAA;CACzE,GACA,IAAI,CAEN"}
|
|
@@ -33,18 +33,53 @@ var __webpack_require__ = {};
|
|
|
33
33
|
var __webpack_exports__ = {};
|
|
34
34
|
__webpack_require__.r(__webpack_exports__);
|
|
35
35
|
__webpack_require__.d(__webpack_exports__, {
|
|
36
|
+
setupExpressRequestContext: ()=>setupExpressRequestContext,
|
|
36
37
|
setupExpressErrorHandler: ()=>setupExpressErrorHandler
|
|
37
38
|
});
|
|
38
39
|
const index_js_namespaceObject = require("./error-tracking/index.js");
|
|
39
40
|
var index_js_default = /*#__PURE__*/ __webpack_require__.n(index_js_namespaceObject);
|
|
41
|
+
const external_tracing_headers_js_namespaceObject = require("./tracing-headers.js");
|
|
42
|
+
function getClientIp(req) {
|
|
43
|
+
const forwarded = (0, external_tracing_headers_js_namespaceObject.getFirstHeaderValue)(req.headers['x-forwarded-for']);
|
|
44
|
+
if (forwarded) {
|
|
45
|
+
const ip = forwarded.split(',')[0].trim();
|
|
46
|
+
if (ip) return ip;
|
|
47
|
+
}
|
|
48
|
+
return req.socket?.remoteAddress;
|
|
49
|
+
}
|
|
50
|
+
function buildRequestContextData(req) {
|
|
51
|
+
const { sessionId, distinctId } = (0, external_tracing_headers_js_namespaceObject.getPostHogTracingHeaderValues)(req.headers);
|
|
52
|
+
const properties = {};
|
|
53
|
+
(0, external_tracing_headers_js_namespaceObject.addProperty)(properties, '$current_url', req.originalUrl || req.url);
|
|
54
|
+
(0, external_tracing_headers_js_namespaceObject.addProperty)(properties, '$request_method', req.method);
|
|
55
|
+
(0, external_tracing_headers_js_namespaceObject.addProperty)(properties, '$request_path', req.path);
|
|
56
|
+
(0, external_tracing_headers_js_namespaceObject.addProperty)(properties, '$user_agent', (0, external_tracing_headers_js_namespaceObject.getFirstHeaderValue)(req.headers['user-agent']));
|
|
57
|
+
(0, external_tracing_headers_js_namespaceObject.addProperty)(properties, '$ip', getClientIp(req));
|
|
58
|
+
return {
|
|
59
|
+
...void 0 !== sessionId ? {
|
|
60
|
+
sessionId
|
|
61
|
+
} : {},
|
|
62
|
+
...void 0 !== distinctId ? {
|
|
63
|
+
distinctId
|
|
64
|
+
} : {},
|
|
65
|
+
properties
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function setupExpressRequestContext(_posthog, app) {
|
|
69
|
+
app.use(posthogRequestContext(_posthog));
|
|
70
|
+
}
|
|
71
|
+
function posthogRequestContext(posthog) {
|
|
72
|
+
return (req, _res, next)=>{
|
|
73
|
+
posthog.withContext(buildRequestContextData(req), ()=>next());
|
|
74
|
+
};
|
|
75
|
+
}
|
|
40
76
|
function setupExpressErrorHandler(_posthog, app) {
|
|
41
77
|
app.use(posthogErrorHandler(_posthog));
|
|
42
78
|
}
|
|
43
79
|
function posthogErrorHandler(posthog) {
|
|
44
80
|
return (error, req, res, next)=>{
|
|
45
81
|
if (index_js_default().isPreviouslyCapturedError(error)) return void next(error);
|
|
46
|
-
const
|
|
47
|
-
const distinctId = req.headers['x-posthog-distinct-id'];
|
|
82
|
+
const contextData = buildRequestContextData(req);
|
|
48
83
|
const syntheticException = new Error('Synthetic exception');
|
|
49
84
|
const hint = {
|
|
50
85
|
mechanism: {
|
|
@@ -53,23 +88,24 @@ function posthogErrorHandler(posthog) {
|
|
|
53
88
|
},
|
|
54
89
|
syntheticException
|
|
55
90
|
};
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
$
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}).then((msg)=>{
|
|
91
|
+
const additionalProperties = {
|
|
92
|
+
...void 0 !== contextData.sessionId ? {
|
|
93
|
+
$session_id: contextData.sessionId
|
|
94
|
+
} : {},
|
|
95
|
+
...contextData.properties || {},
|
|
96
|
+
$response_status_code: res.statusCode
|
|
97
|
+
};
|
|
98
|
+
posthog.addPendingPromise(index_js_default().buildEventMessage(error, hint, contextData.distinctId, additionalProperties).then((msg)=>{
|
|
65
99
|
posthog.capture(msg);
|
|
66
100
|
}));
|
|
67
101
|
next(error);
|
|
68
102
|
};
|
|
69
103
|
}
|
|
70
104
|
exports.setupExpressErrorHandler = __webpack_exports__.setupExpressErrorHandler;
|
|
105
|
+
exports.setupExpressRequestContext = __webpack_exports__.setupExpressRequestContext;
|
|
71
106
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
72
|
-
"setupExpressErrorHandler"
|
|
107
|
+
"setupExpressErrorHandler",
|
|
108
|
+
"setupExpressRequestContext"
|
|
73
109
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
74
110
|
Object.defineProperty(exports, '__esModule', {
|
|
75
111
|
value: true
|
|
@@ -1,12 +1,46 @@
|
|
|
1
1
|
import error_tracking from "./error-tracking/index.mjs";
|
|
2
|
+
import { addProperty, getFirstHeaderValue, getPostHogTracingHeaderValues } from "./tracing-headers.mjs";
|
|
3
|
+
function getClientIp(req) {
|
|
4
|
+
const forwarded = getFirstHeaderValue(req.headers['x-forwarded-for']);
|
|
5
|
+
if (forwarded) {
|
|
6
|
+
const ip = forwarded.split(',')[0].trim();
|
|
7
|
+
if (ip) return ip;
|
|
8
|
+
}
|
|
9
|
+
return req.socket?.remoteAddress;
|
|
10
|
+
}
|
|
11
|
+
function buildRequestContextData(req) {
|
|
12
|
+
const { sessionId, distinctId } = getPostHogTracingHeaderValues(req.headers);
|
|
13
|
+
const properties = {};
|
|
14
|
+
addProperty(properties, '$current_url', req.originalUrl || req.url);
|
|
15
|
+
addProperty(properties, '$request_method', req.method);
|
|
16
|
+
addProperty(properties, '$request_path', req.path);
|
|
17
|
+
addProperty(properties, '$user_agent', getFirstHeaderValue(req.headers['user-agent']));
|
|
18
|
+
addProperty(properties, '$ip', getClientIp(req));
|
|
19
|
+
return {
|
|
20
|
+
...void 0 !== sessionId ? {
|
|
21
|
+
sessionId
|
|
22
|
+
} : {},
|
|
23
|
+
...void 0 !== distinctId ? {
|
|
24
|
+
distinctId
|
|
25
|
+
} : {},
|
|
26
|
+
properties
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function setupExpressRequestContext(_posthog, app) {
|
|
30
|
+
app.use(posthogRequestContext(_posthog));
|
|
31
|
+
}
|
|
32
|
+
function posthogRequestContext(posthog) {
|
|
33
|
+
return (req, _res, next)=>{
|
|
34
|
+
posthog.withContext(buildRequestContextData(req), ()=>next());
|
|
35
|
+
};
|
|
36
|
+
}
|
|
2
37
|
function setupExpressErrorHandler(_posthog, app) {
|
|
3
38
|
app.use(posthogErrorHandler(_posthog));
|
|
4
39
|
}
|
|
5
40
|
function posthogErrorHandler(posthog) {
|
|
6
41
|
return (error, req, res, next)=>{
|
|
7
42
|
if (error_tracking.isPreviouslyCapturedError(error)) return void next(error);
|
|
8
|
-
const
|
|
9
|
-
const distinctId = req.headers['x-posthog-distinct-id'];
|
|
43
|
+
const contextData = buildRequestContextData(req);
|
|
10
44
|
const syntheticException = new Error('Synthetic exception');
|
|
11
45
|
const hint = {
|
|
12
46
|
mechanism: {
|
|
@@ -15,18 +49,17 @@ function posthogErrorHandler(posthog) {
|
|
|
15
49
|
},
|
|
16
50
|
syntheticException
|
|
17
51
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
$
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}).then((msg)=>{
|
|
52
|
+
const additionalProperties = {
|
|
53
|
+
...void 0 !== contextData.sessionId ? {
|
|
54
|
+
$session_id: contextData.sessionId
|
|
55
|
+
} : {},
|
|
56
|
+
...contextData.properties || {},
|
|
57
|
+
$response_status_code: res.statusCode
|
|
58
|
+
};
|
|
59
|
+
posthog.addPendingPromise(error_tracking.buildEventMessage(error, hint, contextData.distinctId, additionalProperties).then((msg)=>{
|
|
27
60
|
posthog.capture(msg);
|
|
28
61
|
}));
|
|
29
62
|
next(error);
|
|
30
63
|
};
|
|
31
64
|
}
|
|
32
|
-
export { setupExpressErrorHandler };
|
|
65
|
+
export { setupExpressErrorHandler, setupExpressRequestContext };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../src/extensions/feature-flags/feature-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAmC,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACtH,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAG1G,OAAO,EAAE,2BAA2B,EAA2B,MAAM,SAAS,CAAA;AAQ9E,cAAM,WAAY,SAAQ,KAAK;gBACjB,OAAO,EAAE,MAAM;CAO5B;AAED,cAAM,sBAAuB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAS5B;AAED,cAAM,wBAAyB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAS5B;AAED,KAAK,yBAAyB,GAAG;IAC/B,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACpF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,aAAa,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IACzC,aAAa,CAAC,EAAE,2BAA2B,CAAA;IAC3C,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;IACpD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CAClD,CAAA;AAED,KAAK,4BAA4B,GAAG;IAClC,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,cAAM,kBAAkB;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACvC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IACrD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACtC,sBAAsB,EAAE,OAAO,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;IACvB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACnF,SAAS,EAAE,OAAO,CAAQ;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,aAAa,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IACzC,6BAA6B,EAAE,OAAO,CAAQ;IAC9C,YAAY,EAAE,MAAM,CAAI;IACxB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,OAAO,CAAC,aAAa,CAAC,CAA6B;IACnD,OAAO,CAAC,cAAc,CAAC,CAAe;IACtC,OAAO,CAAC,SAAS,CAAC,CAAQ;IAC1B,OAAO,CAAC,kBAAkB,CAAC,CAAQ;IACnC,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,uBAAuB,CAAC,CAAQ;gBAE5B,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,OAAO,EACP,IAAI,EACJ,aAAa,EACb,GAAG,OAAO,EACX,EAAE,yBAAyB;IAqB5B,KAAK,CAAC,OAAO,GAAE,OAAc,GAAG,IAAI;IAIpC,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,uBAAuB;IAgBzB,cAAc,CAClB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACnC,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAC1C,eAAe,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM,GACxD,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IA8BlC,sBAAsB,CAC1B,iBAAiB,EAAE,4BAA4B,EAC/C,4BAA4B,CAAC,EAAE,MAAM,EAAE,GACtC,OAAO,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;QAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAClC,eAAe,EAAE,OAAO,CAAA;KACzB,CAAC;IAyCI,4BAA4B,CAChC,IAAI,EAAE,kBAAkB,EACxB,iBAAiB,EAAE,4BAA4B,EAC/C,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC;QACT,KAAK,EAAE,gBAAgB,CAAA;QACvB,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAA;KACzB,CAAC;YA2BY,uBAAuB;IA+DrC,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,qBAAqB;YA+Bf,sBAAsB;IAwEpC,OAAO,CAAC,4BAA4B;IAkB9B,0BAA0B,CAC9B,IAAI,EAAE,kBAAkB,EACxB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/B,iBAAiB,EAAE,4BAA4B,GAC9C,OAAO,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../src/extensions/feature-flags/feature-flags.ts"],"names":[],"mappings":"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"}
|
|
@@ -251,13 +251,33 @@ class FeatureFlagsPoller {
|
|
|
251
251
|
async matchFeatureFlagProperties(flag, bucketingValue, properties, evaluationContext) {
|
|
252
252
|
const flagFilters = flag.filters || {};
|
|
253
253
|
const flagConditions = flagFilters.groups || [];
|
|
254
|
+
const flagAggregation = flagFilters.aggregation_group_type_index;
|
|
255
|
+
const { groups, groupProperties } = evaluationContext;
|
|
254
256
|
let isInconclusive = false;
|
|
255
257
|
let result;
|
|
256
258
|
for (const condition of flagConditions)try {
|
|
257
|
-
|
|
259
|
+
const conditionAggregation = void 0 !== condition.aggregation_group_type_index ? condition.aggregation_group_type_index : flagAggregation;
|
|
260
|
+
let effectiveProperties = properties;
|
|
261
|
+
let effectiveBucketingValue = bucketingValue;
|
|
262
|
+
if (conditionAggregation !== flagAggregation) {
|
|
263
|
+
if (null != conditionAggregation) {
|
|
264
|
+
const groupName = this.groupTypeMapping[String(conditionAggregation)];
|
|
265
|
+
if (!groupName || !(groupName in groups)) {
|
|
266
|
+
this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${flag.key}': group type index ${conditionAggregation} not available`));
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
if (!(groupName in groupProperties)) {
|
|
270
|
+
isInconclusive = true;
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
effectiveProperties = groupProperties[groupName];
|
|
274
|
+
effectiveBucketingValue = groups[groupName];
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (await this.isConditionMatch(flag, effectiveBucketingValue, condition, effectiveProperties, evaluationContext)) {
|
|
258
278
|
const variantOverride = condition.variant;
|
|
259
279
|
const flagVariants = flagFilters.multivariate?.variants || [];
|
|
260
|
-
result = variantOverride && flagVariants.some((variant)=>variant.key === variantOverride) ? variantOverride : await this.getMatchingVariant(flag,
|
|
280
|
+
result = variantOverride && flagVariants.some((variant)=>variant.key === variantOverride) ? variantOverride : await this.getMatchingVariant(flag, effectiveBucketingValue) || true;
|
|
261
281
|
break;
|
|
262
282
|
}
|
|
263
283
|
} catch (e) {
|
|
@@ -217,13 +217,33 @@ class FeatureFlagsPoller {
|
|
|
217
217
|
async matchFeatureFlagProperties(flag, bucketingValue, properties, evaluationContext) {
|
|
218
218
|
const flagFilters = flag.filters || {};
|
|
219
219
|
const flagConditions = flagFilters.groups || [];
|
|
220
|
+
const flagAggregation = flagFilters.aggregation_group_type_index;
|
|
221
|
+
const { groups, groupProperties } = evaluationContext;
|
|
220
222
|
let isInconclusive = false;
|
|
221
223
|
let result;
|
|
222
224
|
for (const condition of flagConditions)try {
|
|
223
|
-
|
|
225
|
+
const conditionAggregation = void 0 !== condition.aggregation_group_type_index ? condition.aggregation_group_type_index : flagAggregation;
|
|
226
|
+
let effectiveProperties = properties;
|
|
227
|
+
let effectiveBucketingValue = bucketingValue;
|
|
228
|
+
if (conditionAggregation !== flagAggregation) {
|
|
229
|
+
if (null != conditionAggregation) {
|
|
230
|
+
const groupName = this.groupTypeMapping[String(conditionAggregation)];
|
|
231
|
+
if (!groupName || !(groupName in groups)) {
|
|
232
|
+
this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${flag.key}': group type index ${conditionAggregation} not available`));
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
if (!(groupName in groupProperties)) {
|
|
236
|
+
isInconclusive = true;
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
effectiveProperties = groupProperties[groupName];
|
|
240
|
+
effectiveBucketingValue = groups[groupName];
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (await this.isConditionMatch(flag, effectiveBucketingValue, condition, effectiveProperties, evaluationContext)) {
|
|
224
244
|
const variantOverride = condition.variant;
|
|
225
245
|
const flagVariants = flagFilters.multivariate?.variants || [];
|
|
226
|
-
result = variantOverride && flagVariants.some((variant)=>variant.key === variantOverride) ? variantOverride : await this.getMatchingVariant(flag,
|
|
246
|
+
result = variantOverride && flagVariants.some((variant)=>variant.key === variantOverride) ? variantOverride : await this.getMatchingVariant(flag, effectiveBucketingValue) || true;
|
|
227
247
|
break;
|
|
228
248
|
}
|
|
229
249
|
} catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nestjs.d.ts","sourceRoot":"","sources":["../../src/extensions/nestjs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"nestjs.d.ts","sourceRoot":"","sources":["../../src/extensions/nestjs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAc,MAAM,MAAM,CAAA;AAK7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAGhD,UAAU,iBAAiB;IACzB,UAAU,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAA;IACxB,WAAW,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAA;CAC1B;AAED,UAAU,gBAAgB;IACxB,YAAY,IAAI,iBAAiB,CAAA;CAClC;AAED,UAAU,WAAW,CAAC,CAAC,GAAG,GAAG;IAC3B,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;CACxB;AAED,UAAU,eAAe,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;IACxC,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;CAC1E;AAED,MAAM,WAAW,uBAAuB;IACtC,+GAA+G;IAC/G,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,yBAAyB;IACxC,mGAAmG;IACnG,iBAAiB,CAAC,EAAE,OAAO,GAAG,uBAAuB,CAAA;CACtD;AAwBD,qBAAa,kBAAmB,YAAW,eAAe;IACxD,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,kBAAkB,CAAQ;gBAEtB,OAAO,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAE,yBAAyB;IAO9E,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC;CA+CzE"}
|
|
@@ -39,10 +39,11 @@ const external_rxjs_namespaceObject = require("rxjs");
|
|
|
39
39
|
const operators_namespaceObject = require("rxjs/operators");
|
|
40
40
|
const index_js_namespaceObject = require("./error-tracking/index.js");
|
|
41
41
|
var index_js_default = /*#__PURE__*/ __webpack_require__.n(index_js_namespaceObject);
|
|
42
|
+
const external_tracing_headers_js_namespaceObject = require("./tracing-headers.js");
|
|
42
43
|
function getClientIp(headers, request) {
|
|
43
|
-
const forwarded = headers['x-forwarded-for'];
|
|
44
|
+
const forwarded = (0, external_tracing_headers_js_namespaceObject.getFirstHeaderValue)(headers['x-forwarded-for']);
|
|
44
45
|
if (forwarded) {
|
|
45
|
-
const ip =
|
|
46
|
+
const ip = forwarded.split(',')[0].trim();
|
|
46
47
|
if (ip) return ip;
|
|
47
48
|
}
|
|
48
49
|
return request?.socket?.remoteAddress;
|
|
@@ -65,20 +66,21 @@ class PostHogInterceptor {
|
|
|
65
66
|
const request = httpHost.getRequest();
|
|
66
67
|
const response = httpHost.getResponse();
|
|
67
68
|
const headers = request?.headers ?? {};
|
|
68
|
-
const sessionId = headers
|
|
69
|
-
const
|
|
70
|
-
|
|
69
|
+
const { sessionId, distinctId } = (0, external_tracing_headers_js_namespaceObject.getPostHogTracingHeaderValues)(headers);
|
|
70
|
+
const properties = {};
|
|
71
|
+
(0, external_tracing_headers_js_namespaceObject.addProperty)(properties, '$current_url', request?.url);
|
|
72
|
+
(0, external_tracing_headers_js_namespaceObject.addProperty)(properties, '$request_method', request?.method);
|
|
73
|
+
(0, external_tracing_headers_js_namespaceObject.addProperty)(properties, '$request_path', request?.path ?? request?.url);
|
|
74
|
+
(0, external_tracing_headers_js_namespaceObject.addProperty)(properties, '$user_agent', (0, external_tracing_headers_js_namespaceObject.getFirstHeaderValue)(headers['user-agent']));
|
|
75
|
+
(0, external_tracing_headers_js_namespaceObject.addProperty)(properties, '$ip', getClientIp(headers, request));
|
|
71
76
|
const contextData = {
|
|
72
|
-
sessionId
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
$user_agent: headers['user-agent'],
|
|
80
|
-
$ip: getClientIp(headers, request)
|
|
81
|
-
}
|
|
77
|
+
...void 0 !== sessionId ? {
|
|
78
|
+
sessionId
|
|
79
|
+
} : {},
|
|
80
|
+
...void 0 !== distinctId ? {
|
|
81
|
+
distinctId
|
|
82
|
+
} : {},
|
|
83
|
+
properties
|
|
82
84
|
};
|
|
83
85
|
this.posthog.enterContext(contextData);
|
|
84
86
|
let source = next.handle();
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { throwError } from "rxjs";
|
|
2
2
|
import { catchError } from "rxjs/operators";
|
|
3
3
|
import error_tracking from "./error-tracking/index.mjs";
|
|
4
|
+
import { addProperty, getFirstHeaderValue, getPostHogTracingHeaderValues } from "./tracing-headers.mjs";
|
|
4
5
|
function getClientIp(headers, request) {
|
|
5
|
-
const forwarded = headers['x-forwarded-for'];
|
|
6
|
+
const forwarded = getFirstHeaderValue(headers['x-forwarded-for']);
|
|
6
7
|
if (forwarded) {
|
|
7
|
-
const ip =
|
|
8
|
+
const ip = forwarded.split(',')[0].trim();
|
|
8
9
|
if (ip) return ip;
|
|
9
10
|
}
|
|
10
11
|
return request?.socket?.remoteAddress;
|
|
@@ -27,20 +28,21 @@ class PostHogInterceptor {
|
|
|
27
28
|
const request = httpHost.getRequest();
|
|
28
29
|
const response = httpHost.getResponse();
|
|
29
30
|
const headers = request?.headers ?? {};
|
|
30
|
-
const sessionId = headers
|
|
31
|
-
const
|
|
32
|
-
|
|
31
|
+
const { sessionId, distinctId } = getPostHogTracingHeaderValues(headers);
|
|
32
|
+
const properties = {};
|
|
33
|
+
addProperty(properties, '$current_url', request?.url);
|
|
34
|
+
addProperty(properties, '$request_method', request?.method);
|
|
35
|
+
addProperty(properties, '$request_path', request?.path ?? request?.url);
|
|
36
|
+
addProperty(properties, '$user_agent', getFirstHeaderValue(headers['user-agent']));
|
|
37
|
+
addProperty(properties, '$ip', getClientIp(headers, request));
|
|
33
38
|
const contextData = {
|
|
34
|
-
sessionId
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
$user_agent: headers['user-agent'],
|
|
42
|
-
$ip: getClientIp(headers, request)
|
|
43
|
-
}
|
|
39
|
+
...void 0 !== sessionId ? {
|
|
40
|
+
sessionId
|
|
41
|
+
} : {},
|
|
42
|
+
...void 0 !== distinctId ? {
|
|
43
|
+
distinctId
|
|
44
|
+
} : {},
|
|
45
|
+
properties
|
|
44
46
|
};
|
|
45
47
|
this.posthog.enterContext(contextData);
|
|
46
48
|
let source = next.handle();
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IncomingHttpHeaders } from 'node:http';
|
|
2
|
+
type HeaderValue = IncomingHttpHeaders[string];
|
|
3
|
+
export declare const POSTHOG_TRACING_HEADERS: {
|
|
4
|
+
readonly sessionId: "x-posthog-session-id";
|
|
5
|
+
readonly distinctId: "x-posthog-distinct-id";
|
|
6
|
+
};
|
|
7
|
+
export interface PostHogTracingHeaderValues {
|
|
8
|
+
sessionId?: string;
|
|
9
|
+
distinctId?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function addProperty(properties: Record<string, any>, key: string, value: unknown): void;
|
|
12
|
+
export declare function getFirstHeaderValue(value: HeaderValue): string | undefined;
|
|
13
|
+
export declare function sanitizeTracingHeaderValue(value: HeaderValue): string | undefined;
|
|
14
|
+
export declare function getPostHogTracingHeaderValues(headers?: IncomingHttpHeaders): PostHogTracingHeaderValues;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=tracing-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracing-headers.d.ts","sourceRoot":"","sources":["../../src/extensions/tracing-headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAOpD,KAAK,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;AAE9C,eAAO,MAAM,uBAAuB;;;CAG1B,CAAA;AAEV,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAI9F;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAqBjF;AAED,wBAAgB,6BAA6B,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,0BAA0B,CAYvG"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
POSTHOG_TRACING_HEADERS: ()=>POSTHOG_TRACING_HEADERS,
|
|
28
|
+
addProperty: ()=>addProperty,
|
|
29
|
+
getFirstHeaderValue: ()=>getFirstHeaderValue,
|
|
30
|
+
getPostHogTracingHeaderValues: ()=>getPostHogTracingHeaderValues,
|
|
31
|
+
sanitizeTracingHeaderValue: ()=>sanitizeTracingHeaderValue
|
|
32
|
+
});
|
|
33
|
+
const TRACING_HEADER_MAX_LENGTH = 1000;
|
|
34
|
+
const TRACING_HEADER_CONTROL_CHARS_REGEX = /[\x00-\x1f\x7f-\x9f]/g;
|
|
35
|
+
const POSTHOG_TRACING_HEADERS = {
|
|
36
|
+
sessionId: 'x-posthog-session-id',
|
|
37
|
+
distinctId: 'x-posthog-distinct-id'
|
|
38
|
+
};
|
|
39
|
+
function addProperty(properties, key, value) {
|
|
40
|
+
if (null != value && '' !== value) properties[key] = value;
|
|
41
|
+
}
|
|
42
|
+
function getFirstHeaderValue(value) {
|
|
43
|
+
return Array.isArray(value) ? value[0] : value;
|
|
44
|
+
}
|
|
45
|
+
function sanitizeTracingHeaderValue(value) {
|
|
46
|
+
if (Array.isArray(value)) {
|
|
47
|
+
for (const item of value){
|
|
48
|
+
const sanitized = sanitizeTracingHeaderValue(item);
|
|
49
|
+
if (void 0 !== sanitized) return sanitized;
|
|
50
|
+
}
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if ('string' != typeof value) return;
|
|
54
|
+
const sanitized = value.replace(TRACING_HEADER_CONTROL_CHARS_REGEX, '').trim();
|
|
55
|
+
if (!sanitized) return;
|
|
56
|
+
return sanitized.length > TRACING_HEADER_MAX_LENGTH ? sanitized.slice(0, TRACING_HEADER_MAX_LENGTH) : sanitized;
|
|
57
|
+
}
|
|
58
|
+
function getPostHogTracingHeaderValues(headers) {
|
|
59
|
+
if (!headers) return {};
|
|
60
|
+
const sessionId = sanitizeTracingHeaderValue(headers[POSTHOG_TRACING_HEADERS.sessionId]);
|
|
61
|
+
const distinctId = sanitizeTracingHeaderValue(headers[POSTHOG_TRACING_HEADERS.distinctId]);
|
|
62
|
+
return {
|
|
63
|
+
...void 0 !== sessionId ? {
|
|
64
|
+
sessionId
|
|
65
|
+
} : {},
|
|
66
|
+
...void 0 !== distinctId ? {
|
|
67
|
+
distinctId
|
|
68
|
+
} : {}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
exports.POSTHOG_TRACING_HEADERS = __webpack_exports__.POSTHOG_TRACING_HEADERS;
|
|
72
|
+
exports.addProperty = __webpack_exports__.addProperty;
|
|
73
|
+
exports.getFirstHeaderValue = __webpack_exports__.getFirstHeaderValue;
|
|
74
|
+
exports.getPostHogTracingHeaderValues = __webpack_exports__.getPostHogTracingHeaderValues;
|
|
75
|
+
exports.sanitizeTracingHeaderValue = __webpack_exports__.sanitizeTracingHeaderValue;
|
|
76
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
77
|
+
"POSTHOG_TRACING_HEADERS",
|
|
78
|
+
"addProperty",
|
|
79
|
+
"getFirstHeaderValue",
|
|
80
|
+
"getPostHogTracingHeaderValues",
|
|
81
|
+
"sanitizeTracingHeaderValue"
|
|
82
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
83
|
+
Object.defineProperty(exports, '__esModule', {
|
|
84
|
+
value: true
|
|
85
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const TRACING_HEADER_MAX_LENGTH = 1000;
|
|
2
|
+
const TRACING_HEADER_CONTROL_CHARS_REGEX = /[\x00-\x1f\x7f-\x9f]/g;
|
|
3
|
+
const POSTHOG_TRACING_HEADERS = {
|
|
4
|
+
sessionId: 'x-posthog-session-id',
|
|
5
|
+
distinctId: 'x-posthog-distinct-id'
|
|
6
|
+
};
|
|
7
|
+
function addProperty(properties, key, value) {
|
|
8
|
+
if (null != value && '' !== value) properties[key] = value;
|
|
9
|
+
}
|
|
10
|
+
function getFirstHeaderValue(value) {
|
|
11
|
+
return Array.isArray(value) ? value[0] : value;
|
|
12
|
+
}
|
|
13
|
+
function sanitizeTracingHeaderValue(value) {
|
|
14
|
+
if (Array.isArray(value)) {
|
|
15
|
+
for (const item of value){
|
|
16
|
+
const sanitized = sanitizeTracingHeaderValue(item);
|
|
17
|
+
if (void 0 !== sanitized) return sanitized;
|
|
18
|
+
}
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if ('string' != typeof value) return;
|
|
22
|
+
const sanitized = value.replace(TRACING_HEADER_CONTROL_CHARS_REGEX, '').trim();
|
|
23
|
+
if (!sanitized) return;
|
|
24
|
+
return sanitized.length > TRACING_HEADER_MAX_LENGTH ? sanitized.slice(0, TRACING_HEADER_MAX_LENGTH) : sanitized;
|
|
25
|
+
}
|
|
26
|
+
function getPostHogTracingHeaderValues(headers) {
|
|
27
|
+
if (!headers) return {};
|
|
28
|
+
const sessionId = sanitizeTracingHeaderValue(headers[POSTHOG_TRACING_HEADERS.sessionId]);
|
|
29
|
+
const distinctId = sanitizeTracingHeaderValue(headers[POSTHOG_TRACING_HEADERS.distinctId]);
|
|
30
|
+
return {
|
|
31
|
+
...void 0 !== sessionId ? {
|
|
32
|
+
sessionId
|
|
33
|
+
} : {},
|
|
34
|
+
...void 0 !== distinctId ? {
|
|
35
|
+
distinctId
|
|
36
|
+
} : {}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export { POSTHOG_TRACING_HEADERS, addProperty, getFirstHeaderValue, getPostHogTracingHeaderValues, sanitizeTracingHeaderValue };
|
package/dist/types.d.ts
CHANGED
|
@@ -88,6 +88,7 @@ export type FeatureFlagCondition = {
|
|
|
88
88
|
properties: FlagProperty[];
|
|
89
89
|
rollout_percentage?: number;
|
|
90
90
|
variant?: string;
|
|
91
|
+
aggregation_group_type_index?: number | null;
|
|
91
92
|
};
|
|
92
93
|
export type FeatureFlagBucketingIdentifier = 'distinct_id' | 'device_id' | '' | null;
|
|
93
94
|
export type BeforeSendFn = (event: EventMessage | null) => EventMessage | null;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "5.
|
|
1
|
+
export declare const version = "5.32.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -26,7 +26,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
27
|
version: ()=>version
|
|
28
28
|
});
|
|
29
|
-
const version = '5.
|
|
29
|
+
const version = '5.32.0';
|
|
30
30
|
exports.version = __webpack_exports__.version;
|
|
31
31
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
32
32
|
"version"
|
package/dist/version.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const version = '5.
|
|
1
|
+
const version = '5.32.0';
|
|
2
2
|
export { version };
|
package/package.json
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import ErrorTracking from './error-tracking'
|
|
2
2
|
import { PostHogBackendClient } from '../client'
|
|
3
3
|
import { ErrorTracking as CoreErrorTracking } from '@posthog/core'
|
|
4
|
+
import { addProperty, getFirstHeaderValue, getPostHogTracingHeaderValues } from './tracing-headers'
|
|
4
5
|
import type { Request, Response } from 'express'
|
|
6
|
+
import type { ContextData } from './context/types'
|
|
5
7
|
|
|
6
8
|
type ExpressMiddleware = (req: Request, res: Response, next: () => void) => void
|
|
7
9
|
|
|
@@ -21,6 +23,47 @@ interface MiddlewareError extends Error {
|
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
25
|
|
|
26
|
+
function getClientIp(req: Request): string | undefined {
|
|
27
|
+
const forwarded = getFirstHeaderValue(req.headers['x-forwarded-for'])
|
|
28
|
+
if (forwarded) {
|
|
29
|
+
const ip = forwarded.split(',')[0].trim()
|
|
30
|
+
if (ip) return ip
|
|
31
|
+
}
|
|
32
|
+
return req.socket?.remoteAddress
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function buildRequestContextData(req: Request): Partial<ContextData> {
|
|
36
|
+
const { sessionId, distinctId } = getPostHogTracingHeaderValues(req.headers)
|
|
37
|
+
const properties: Record<string, any> = {}
|
|
38
|
+
|
|
39
|
+
addProperty(properties, '$current_url', req.originalUrl || req.url)
|
|
40
|
+
addProperty(properties, '$request_method', req.method)
|
|
41
|
+
addProperty(properties, '$request_path', req.path)
|
|
42
|
+
addProperty(properties, '$user_agent', getFirstHeaderValue(req.headers['user-agent']))
|
|
43
|
+
addProperty(properties, '$ip', getClientIp(req))
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
...(sessionId !== undefined ? { sessionId } : {}),
|
|
47
|
+
...(distinctId !== undefined ? { distinctId } : {}),
|
|
48
|
+
properties,
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function setupExpressRequestContext(
|
|
53
|
+
_posthog: PostHogBackendClient,
|
|
54
|
+
app: {
|
|
55
|
+
use: (middleware: ExpressMiddleware) => unknown
|
|
56
|
+
}
|
|
57
|
+
): void {
|
|
58
|
+
app.use(posthogRequestContext(_posthog))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function posthogRequestContext(posthog: PostHogBackendClient): ExpressMiddleware {
|
|
62
|
+
return (req, _res, next): void => {
|
|
63
|
+
posthog.withContext(buildRequestContextData(req), () => next())
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
24
67
|
export function setupExpressErrorHandler(
|
|
25
68
|
_posthog: PostHogBackendClient,
|
|
26
69
|
app: {
|
|
@@ -37,21 +80,17 @@ function posthogErrorHandler(posthog: PostHogBackendClient): ExpressErrorMiddlew
|
|
|
37
80
|
return
|
|
38
81
|
}
|
|
39
82
|
|
|
40
|
-
const
|
|
41
|
-
const distinctId: string | undefined = req.headers['x-posthog-distinct-id'] as string | undefined
|
|
83
|
+
const contextData = buildRequestContextData(req)
|
|
42
84
|
const syntheticException = new Error('Synthetic exception')
|
|
43
85
|
const hint: CoreErrorTracking.EventHint = { mechanism: { type: 'middleware', handled: false }, syntheticException }
|
|
86
|
+
const additionalProperties: Record<string, any> = {
|
|
87
|
+
...(contextData.sessionId !== undefined ? { $session_id: contextData.sessionId } : {}),
|
|
88
|
+
...(contextData.properties || {}),
|
|
89
|
+
$response_status_code: res.statusCode,
|
|
90
|
+
}
|
|
44
91
|
|
|
45
92
|
posthog.addPendingPromise(
|
|
46
|
-
ErrorTracking.buildEventMessage(error, hint, distinctId, {
|
|
47
|
-
$session_id: sessionId,
|
|
48
|
-
$current_url: req.url,
|
|
49
|
-
$request_method: req.method,
|
|
50
|
-
$request_path: req.path,
|
|
51
|
-
$user_agent: req.headers['user-agent'],
|
|
52
|
-
$response_status_code: res.statusCode,
|
|
53
|
-
$ip: req.headers['x-forwarded-for'] || req?.socket?.remoteAddress,
|
|
54
|
-
}).then((msg) => {
|
|
93
|
+
ErrorTracking.buildEventMessage(error, hint, contextData.distinctId, additionalProperties).then((msg) => {
|
|
55
94
|
posthog.capture(msg)
|
|
56
95
|
})
|
|
57
96
|
)
|
|
@@ -485,18 +485,55 @@ class FeatureFlagsPoller {
|
|
|
485
485
|
): Promise<FeatureFlagValue> {
|
|
486
486
|
const flagFilters = flag.filters || {}
|
|
487
487
|
const flagConditions = flagFilters.groups || []
|
|
488
|
+
const flagAggregation = flagFilters.aggregation_group_type_index
|
|
489
|
+
const { groups, groupProperties } = evaluationContext
|
|
488
490
|
let isInconclusive = false
|
|
489
491
|
let result = undefined
|
|
490
492
|
|
|
491
493
|
for (const condition of flagConditions) {
|
|
492
494
|
try {
|
|
493
|
-
|
|
495
|
+
// Per-condition aggregation overrides only when the condition explicitly
|
|
496
|
+
// sets its own aggregation_group_type_index (mixed targeting).
|
|
497
|
+
// When absent, use the properties/bucketing already resolved by the caller.
|
|
498
|
+
const conditionAggregation =
|
|
499
|
+
condition.aggregation_group_type_index !== undefined
|
|
500
|
+
? condition.aggregation_group_type_index
|
|
501
|
+
: flagAggregation
|
|
502
|
+
|
|
503
|
+
let effectiveProperties = properties
|
|
504
|
+
let effectiveBucketingValue = bucketingValue
|
|
505
|
+
|
|
506
|
+
// Mixed-override path: condition-level aggregation differs from flag-level.
|
|
507
|
+
// This assumes flag-level aggregation is null/undefined for mixed flags.
|
|
508
|
+
if (conditionAggregation !== flagAggregation) {
|
|
509
|
+
if (conditionAggregation !== null && conditionAggregation !== undefined) {
|
|
510
|
+
const groupName = this.groupTypeMapping[String(conditionAggregation)]
|
|
511
|
+
if (!groupName || !(groupName in groups)) {
|
|
512
|
+
this.logMsgIfDebug(() =>
|
|
513
|
+
console.debug(
|
|
514
|
+
`[FEATURE FLAGS] Skipping group condition for flag '${flag.key}': group type index ${conditionAggregation} not available`
|
|
515
|
+
)
|
|
516
|
+
)
|
|
517
|
+
continue
|
|
518
|
+
}
|
|
519
|
+
if (!(groupName in groupProperties)) {
|
|
520
|
+
isInconclusive = true
|
|
521
|
+
continue
|
|
522
|
+
}
|
|
523
|
+
effectiveProperties = groupProperties[groupName]
|
|
524
|
+
effectiveBucketingValue = groups[groupName]
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
if (
|
|
529
|
+
await this.isConditionMatch(flag, effectiveBucketingValue, condition, effectiveProperties, evaluationContext)
|
|
530
|
+
) {
|
|
494
531
|
const variantOverride = condition.variant
|
|
495
532
|
const flagVariants = flagFilters.multivariate?.variants || []
|
|
496
533
|
if (variantOverride && flagVariants.some((variant) => variant.key === variantOverride)) {
|
|
497
534
|
result = variantOverride
|
|
498
535
|
} else {
|
|
499
|
-
result = (await this.getMatchingVariant(flag,
|
|
536
|
+
result = (await this.getMatchingVariant(flag, effectiveBucketingValue)) || true
|
|
500
537
|
}
|
|
501
538
|
break
|
|
502
539
|
}
|
package/src/extensions/nestjs.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import type { IncomingHttpHeaders } from 'node:http'
|
|
1
2
|
import { Observable, throwError } from 'rxjs'
|
|
2
3
|
import { catchError } from 'rxjs/operators'
|
|
3
4
|
|
|
4
5
|
import ErrorTracking from './error-tracking'
|
|
6
|
+
import { addProperty, getFirstHeaderValue, getPostHogTracingHeaderValues } from './tracing-headers'
|
|
5
7
|
import { PostHogBackendClient } from '../client'
|
|
6
8
|
|
|
7
9
|
// Local interfaces to avoid runtime dependency on @nestjs/common
|
|
@@ -32,10 +34,10 @@ export interface PostHogInterceptorOptions {
|
|
|
32
34
|
captureExceptions?: boolean | ExceptionCaptureOptions
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
function getClientIp(headers:
|
|
36
|
-
const forwarded = headers['x-forwarded-for']
|
|
37
|
+
function getClientIp(headers: IncomingHttpHeaders, request: any): string | undefined {
|
|
38
|
+
const forwarded = getFirstHeaderValue(headers['x-forwarded-for'])
|
|
37
39
|
if (forwarded) {
|
|
38
|
-
const ip =
|
|
40
|
+
const ip = forwarded.split(',')[0].trim()
|
|
39
41
|
if (ip) return ip
|
|
40
42
|
}
|
|
41
43
|
return request?.socket?.remoteAddress
|
|
@@ -71,22 +73,20 @@ export class PostHogInterceptor implements NestInterceptor {
|
|
|
71
73
|
const request = httpHost.getRequest()
|
|
72
74
|
const response = httpHost.getResponse()
|
|
73
75
|
|
|
74
|
-
const headers = request?.headers ?? {}
|
|
75
|
-
const sessionId
|
|
76
|
-
|
|
77
|
-
const
|
|
76
|
+
const headers = (request?.headers ?? {}) as IncomingHttpHeaders
|
|
77
|
+
const { sessionId, distinctId } = getPostHogTracingHeaderValues(headers)
|
|
78
|
+
|
|
79
|
+
const properties: Record<string, any> = {}
|
|
80
|
+
addProperty(properties, '$current_url', request?.url)
|
|
81
|
+
addProperty(properties, '$request_method', request?.method)
|
|
82
|
+
addProperty(properties, '$request_path', request?.path ?? request?.url)
|
|
83
|
+
addProperty(properties, '$user_agent', getFirstHeaderValue(headers['user-agent']))
|
|
84
|
+
addProperty(properties, '$ip', getClientIp(headers, request))
|
|
78
85
|
|
|
79
86
|
const contextData = {
|
|
80
|
-
sessionId,
|
|
81
|
-
distinctId,
|
|
82
|
-
properties
|
|
83
|
-
$current_url: request?.url,
|
|
84
|
-
$request_method: request?.method,
|
|
85
|
-
$request_path: request?.path ?? request?.url,
|
|
86
|
-
$window_id: windowId,
|
|
87
|
-
$user_agent: headers['user-agent'],
|
|
88
|
-
$ip: getClientIp(headers, request),
|
|
89
|
-
},
|
|
87
|
+
...(sessionId !== undefined ? { sessionId } : {}),
|
|
88
|
+
...(distinctId !== undefined ? { distinctId } : {}),
|
|
89
|
+
properties,
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
// Use enterContext so the context propagates through RxJS Observable
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { IncomingHttpHeaders } from 'node:http'
|
|
2
|
+
|
|
3
|
+
const TRACING_HEADER_MAX_LENGTH = 1000
|
|
4
|
+
// Remove C0 controls, DEL, and C1 controls from PostHog tracing IDs only.
|
|
5
|
+
// eslint-disable-next-line no-control-regex
|
|
6
|
+
const TRACING_HEADER_CONTROL_CHARS_REGEX = /[\x00-\x1f\x7f-\x9f]/g
|
|
7
|
+
|
|
8
|
+
type HeaderValue = IncomingHttpHeaders[string]
|
|
9
|
+
|
|
10
|
+
export const POSTHOG_TRACING_HEADERS = {
|
|
11
|
+
sessionId: 'x-posthog-session-id',
|
|
12
|
+
distinctId: 'x-posthog-distinct-id',
|
|
13
|
+
} as const
|
|
14
|
+
|
|
15
|
+
export interface PostHogTracingHeaderValues {
|
|
16
|
+
sessionId?: string
|
|
17
|
+
distinctId?: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function addProperty(properties: Record<string, any>, key: string, value: unknown): void {
|
|
21
|
+
if (value !== undefined && value !== null && value !== '') {
|
|
22
|
+
properties[key] = value
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function getFirstHeaderValue(value: HeaderValue): string | undefined {
|
|
27
|
+
return Array.isArray(value) ? value[0] : value
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function sanitizeTracingHeaderValue(value: HeaderValue): string | undefined {
|
|
31
|
+
if (Array.isArray(value)) {
|
|
32
|
+
for (const item of value) {
|
|
33
|
+
const sanitized = sanitizeTracingHeaderValue(item)
|
|
34
|
+
if (sanitized !== undefined) {
|
|
35
|
+
return sanitized
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return undefined
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (typeof value !== 'string') {
|
|
42
|
+
return undefined
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const sanitized = value.replace(TRACING_HEADER_CONTROL_CHARS_REGEX, '').trim()
|
|
46
|
+
if (!sanitized) {
|
|
47
|
+
return undefined
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return sanitized.length > TRACING_HEADER_MAX_LENGTH ? sanitized.slice(0, TRACING_HEADER_MAX_LENGTH) : sanitized
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function getPostHogTracingHeaderValues(headers?: IncomingHttpHeaders): PostHogTracingHeaderValues {
|
|
54
|
+
if (!headers) {
|
|
55
|
+
return {}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const sessionId = sanitizeTracingHeaderValue(headers[POSTHOG_TRACING_HEADERS.sessionId])
|
|
59
|
+
const distinctId = sanitizeTracingHeaderValue(headers[POSTHOG_TRACING_HEADERS.distinctId])
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
...(sessionId !== undefined ? { sessionId } : {}),
|
|
63
|
+
...(distinctId !== undefined ? { distinctId } : {}),
|
|
64
|
+
}
|
|
65
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -112,6 +112,7 @@ export type FeatureFlagCondition = {
|
|
|
112
112
|
properties: FlagProperty[]
|
|
113
113
|
rollout_percentage?: number
|
|
114
114
|
variant?: string
|
|
115
|
+
aggregation_group_type_index?: number | null
|
|
115
116
|
}
|
|
116
117
|
|
|
117
118
|
export type FeatureFlagBucketingIdentifier = 'distinct_id' | 'device_id' | '' | null
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '5.
|
|
1
|
+
export const version = '5.32.0'
|