posthog-node 5.17.3 → 5.18.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/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +50 -33
- package/dist/client.mjs +50 -33
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +24 -1
- package/dist/types.mjs +7 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +2 -2
- package/src/client.ts +81 -56
- package/src/types.ts +22 -0
- package/src/version.ts +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -273,6 +273,7 @@ export declare abstract class PostHogBackendClient extends PostHogCoreStateless
|
|
|
273
273
|
* properties: {
|
|
274
274
|
* $set: { name: 'John Doe', email: 'john@example.com' },
|
|
275
275
|
* $set_once: { first_login: new Date().toISOString() }
|
|
276
|
+
* $anon_distinct_id: 'anonymous_user_456'
|
|
276
277
|
* }
|
|
277
278
|
* })
|
|
278
279
|
* ```
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EACR,oBAAoB,EAEpB,mBAAmB,EACnB,oBAAoB,EACpB,+BAA+B,EAC/B,wBAAwB,EACxB,qBAAqB,EAGtB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,YAAY,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -37,6 +37,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
37
37
|
});
|
|
38
38
|
const external_version_js_namespaceObject = require("./version.js");
|
|
39
39
|
const core_namespaceObject = require("@posthog/core");
|
|
40
|
+
const external_types_js_namespaceObject = require("./types.js");
|
|
40
41
|
const feature_flags_js_namespaceObject = require("./extensions/feature-flags/feature-flags.js");
|
|
41
42
|
const index_js_namespaceObject = require("./extensions/error-tracking/index.js");
|
|
42
43
|
var index_js_default = /*#__PURE__*/ __webpack_require__.n(index_js_namespaceObject);
|
|
@@ -119,25 +120,29 @@ class PostHogBackendClient extends core_namespaceObject.PostHogCoreStateless {
|
|
|
119
120
|
if (err) console.error(err);
|
|
120
121
|
}));
|
|
121
122
|
}
|
|
122
|
-
identify({ distinctId, properties, disableGeoip }) {
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
$set:
|
|
128
|
-
$set_once:
|
|
129
|
-
|
|
123
|
+
identify({ distinctId, properties = {}, disableGeoip }) {
|
|
124
|
+
const { $set, $set_once, $anon_distinct_id, ...rest } = properties;
|
|
125
|
+
const setProps = $set || rest;
|
|
126
|
+
const setOnceProps = $set_once || {};
|
|
127
|
+
const eventProperties = {
|
|
128
|
+
$set: setProps,
|
|
129
|
+
$set_once: setOnceProps,
|
|
130
|
+
$anon_distinct_id: $anon_distinct_id ?? void 0
|
|
131
|
+
};
|
|
132
|
+
super.identifyStateless(distinctId, eventProperties, {
|
|
130
133
|
disableGeoip
|
|
131
134
|
});
|
|
132
135
|
}
|
|
133
|
-
async identifyImmediate({ distinctId, properties, disableGeoip }) {
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
$set:
|
|
139
|
-
$set_once:
|
|
140
|
-
|
|
136
|
+
async identifyImmediate({ distinctId, properties = {}, disableGeoip }) {
|
|
137
|
+
const { $set, $set_once, $anon_distinct_id, ...rest } = properties;
|
|
138
|
+
const setProps = $set || rest;
|
|
139
|
+
const setOnceProps = $set_once || {};
|
|
140
|
+
const eventProperties = {
|
|
141
|
+
$set: setProps,
|
|
142
|
+
$set_once: setOnceProps,
|
|
143
|
+
$anon_distinct_id: $anon_distinct_id ?? void 0
|
|
144
|
+
};
|
|
145
|
+
super.identifyStatelessImmediate(distinctId, eventProperties, {
|
|
141
146
|
disableGeoip
|
|
142
147
|
});
|
|
143
148
|
}
|
|
@@ -182,13 +187,23 @@ class PostHogBackendClient extends core_namespaceObject.PostHogCoreStateless {
|
|
|
182
187
|
let requestId;
|
|
183
188
|
let evaluatedAt;
|
|
184
189
|
let flagDetail;
|
|
190
|
+
let featureFlagError;
|
|
185
191
|
if (!flagWasLocallyEvaluated && !onlyEvaluateLocally) {
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
+
const flagsResponse = await super.getFeatureFlagDetailsStateless(distinctId, groups, personProperties, groupProperties, disableGeoip, [
|
|
193
|
+
key
|
|
194
|
+
]);
|
|
195
|
+
if (void 0 === flagsResponse) featureFlagError = external_types_js_namespaceObject.FeatureFlagError.UNKNOWN_ERROR;
|
|
196
|
+
else {
|
|
197
|
+
requestId = flagsResponse.requestId;
|
|
198
|
+
evaluatedAt = flagsResponse.evaluatedAt;
|
|
199
|
+
const errors = [];
|
|
200
|
+
if (flagsResponse.errorsWhileComputingFlags) errors.push(external_types_js_namespaceObject.FeatureFlagError.ERRORS_WHILE_COMPUTING);
|
|
201
|
+
if (flagsResponse.quotaLimited?.includes('feature_flags')) errors.push(external_types_js_namespaceObject.FeatureFlagError.QUOTA_LIMITED);
|
|
202
|
+
flagDetail = flagsResponse.flags[key];
|
|
203
|
+
if (void 0 === flagDetail) errors.push(external_types_js_namespaceObject.FeatureFlagError.FLAG_MISSING);
|
|
204
|
+
if (errors.length > 0) featureFlagError = errors.join(',');
|
|
205
|
+
response = (0, core_namespaceObject.getFeatureFlagValue)(flagDetail);
|
|
206
|
+
}
|
|
192
207
|
}
|
|
193
208
|
const featureFlagReportedKey = `${key}_${response}`;
|
|
194
209
|
if (sendFeatureFlagEvents && (!(distinctId in this.distinctIdHasSentFlagCalls) || !this.distinctIdHasSentFlagCalls[distinctId].includes(featureFlagReportedKey))) {
|
|
@@ -197,20 +212,22 @@ class PostHogBackendClient extends core_namespaceObject.PostHogCoreStateless {
|
|
|
197
212
|
else this.distinctIdHasSentFlagCalls[distinctId] = [
|
|
198
213
|
featureFlagReportedKey
|
|
199
214
|
];
|
|
215
|
+
const properties = {
|
|
216
|
+
$feature_flag: key,
|
|
217
|
+
$feature_flag_response: response,
|
|
218
|
+
$feature_flag_id: flagDetail?.metadata?.id,
|
|
219
|
+
$feature_flag_version: flagDetail?.metadata?.version,
|
|
220
|
+
$feature_flag_reason: flagDetail?.reason?.description ?? flagDetail?.reason?.code,
|
|
221
|
+
locally_evaluated: flagWasLocallyEvaluated,
|
|
222
|
+
[`$feature/${key}`]: response,
|
|
223
|
+
$feature_flag_request_id: requestId,
|
|
224
|
+
$feature_flag_evaluated_at: evaluatedAt
|
|
225
|
+
};
|
|
226
|
+
if (featureFlagError) properties.$feature_flag_error = featureFlagError;
|
|
200
227
|
this.capture({
|
|
201
228
|
distinctId,
|
|
202
229
|
event: '$feature_flag_called',
|
|
203
|
-
properties
|
|
204
|
-
$feature_flag: key,
|
|
205
|
-
$feature_flag_response: response,
|
|
206
|
-
$feature_flag_id: flagDetail?.metadata?.id,
|
|
207
|
-
$feature_flag_version: flagDetail?.metadata?.version,
|
|
208
|
-
$feature_flag_reason: flagDetail?.reason?.description ?? flagDetail?.reason?.code,
|
|
209
|
-
locally_evaluated: flagWasLocallyEvaluated,
|
|
210
|
-
[`$feature/${key}`]: response,
|
|
211
|
-
$feature_flag_request_id: requestId,
|
|
212
|
-
$feature_flag_evaluated_at: evaluatedAt
|
|
213
|
-
},
|
|
230
|
+
properties,
|
|
214
231
|
groups,
|
|
215
232
|
disableGeoip
|
|
216
233
|
});
|
package/dist/client.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { version } from "./version.mjs";
|
|
2
2
|
import { PostHogCoreStateless, getFeatureFlagValue, isBlockedUA, isPlainObject, safeSetTimeout, uuidv7 } from "@posthog/core";
|
|
3
|
+
import { FeatureFlagError } from "./types.mjs";
|
|
3
4
|
import { FeatureFlagsPoller, InconclusiveMatchError, RequiresServerEvaluation } from "./extensions/feature-flags/feature-flags.mjs";
|
|
4
5
|
import error_tracking from "./extensions/error-tracking/index.mjs";
|
|
5
6
|
import { PostHogMemoryStorage } from "./storage-memory.mjs";
|
|
@@ -81,25 +82,29 @@ class PostHogBackendClient extends PostHogCoreStateless {
|
|
|
81
82
|
if (err) console.error(err);
|
|
82
83
|
}));
|
|
83
84
|
}
|
|
84
|
-
identify({ distinctId, properties, disableGeoip }) {
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
$set:
|
|
90
|
-
$set_once:
|
|
91
|
-
|
|
85
|
+
identify({ distinctId, properties = {}, disableGeoip }) {
|
|
86
|
+
const { $set, $set_once, $anon_distinct_id, ...rest } = properties;
|
|
87
|
+
const setProps = $set || rest;
|
|
88
|
+
const setOnceProps = $set_once || {};
|
|
89
|
+
const eventProperties = {
|
|
90
|
+
$set: setProps,
|
|
91
|
+
$set_once: setOnceProps,
|
|
92
|
+
$anon_distinct_id: $anon_distinct_id ?? void 0
|
|
93
|
+
};
|
|
94
|
+
super.identifyStateless(distinctId, eventProperties, {
|
|
92
95
|
disableGeoip
|
|
93
96
|
});
|
|
94
97
|
}
|
|
95
|
-
async identifyImmediate({ distinctId, properties, disableGeoip }) {
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
$set:
|
|
101
|
-
$set_once:
|
|
102
|
-
|
|
98
|
+
async identifyImmediate({ distinctId, properties = {}, disableGeoip }) {
|
|
99
|
+
const { $set, $set_once, $anon_distinct_id, ...rest } = properties;
|
|
100
|
+
const setProps = $set || rest;
|
|
101
|
+
const setOnceProps = $set_once || {};
|
|
102
|
+
const eventProperties = {
|
|
103
|
+
$set: setProps,
|
|
104
|
+
$set_once: setOnceProps,
|
|
105
|
+
$anon_distinct_id: $anon_distinct_id ?? void 0
|
|
106
|
+
};
|
|
107
|
+
super.identifyStatelessImmediate(distinctId, eventProperties, {
|
|
103
108
|
disableGeoip
|
|
104
109
|
});
|
|
105
110
|
}
|
|
@@ -144,13 +149,23 @@ class PostHogBackendClient extends PostHogCoreStateless {
|
|
|
144
149
|
let requestId;
|
|
145
150
|
let evaluatedAt;
|
|
146
151
|
let flagDetail;
|
|
152
|
+
let featureFlagError;
|
|
147
153
|
if (!flagWasLocallyEvaluated && !onlyEvaluateLocally) {
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
+
const flagsResponse = await super.getFeatureFlagDetailsStateless(distinctId, groups, personProperties, groupProperties, disableGeoip, [
|
|
155
|
+
key
|
|
156
|
+
]);
|
|
157
|
+
if (void 0 === flagsResponse) featureFlagError = FeatureFlagError.UNKNOWN_ERROR;
|
|
158
|
+
else {
|
|
159
|
+
requestId = flagsResponse.requestId;
|
|
160
|
+
evaluatedAt = flagsResponse.evaluatedAt;
|
|
161
|
+
const errors = [];
|
|
162
|
+
if (flagsResponse.errorsWhileComputingFlags) errors.push(FeatureFlagError.ERRORS_WHILE_COMPUTING);
|
|
163
|
+
if (flagsResponse.quotaLimited?.includes('feature_flags')) errors.push(FeatureFlagError.QUOTA_LIMITED);
|
|
164
|
+
flagDetail = flagsResponse.flags[key];
|
|
165
|
+
if (void 0 === flagDetail) errors.push(FeatureFlagError.FLAG_MISSING);
|
|
166
|
+
if (errors.length > 0) featureFlagError = errors.join(',');
|
|
167
|
+
response = getFeatureFlagValue(flagDetail);
|
|
168
|
+
}
|
|
154
169
|
}
|
|
155
170
|
const featureFlagReportedKey = `${key}_${response}`;
|
|
156
171
|
if (sendFeatureFlagEvents && (!(distinctId in this.distinctIdHasSentFlagCalls) || !this.distinctIdHasSentFlagCalls[distinctId].includes(featureFlagReportedKey))) {
|
|
@@ -159,20 +174,22 @@ class PostHogBackendClient extends PostHogCoreStateless {
|
|
|
159
174
|
else this.distinctIdHasSentFlagCalls[distinctId] = [
|
|
160
175
|
featureFlagReportedKey
|
|
161
176
|
];
|
|
177
|
+
const properties = {
|
|
178
|
+
$feature_flag: key,
|
|
179
|
+
$feature_flag_response: response,
|
|
180
|
+
$feature_flag_id: flagDetail?.metadata?.id,
|
|
181
|
+
$feature_flag_version: flagDetail?.metadata?.version,
|
|
182
|
+
$feature_flag_reason: flagDetail?.reason?.description ?? flagDetail?.reason?.code,
|
|
183
|
+
locally_evaluated: flagWasLocallyEvaluated,
|
|
184
|
+
[`$feature/${key}`]: response,
|
|
185
|
+
$feature_flag_request_id: requestId,
|
|
186
|
+
$feature_flag_evaluated_at: evaluatedAt
|
|
187
|
+
};
|
|
188
|
+
if (featureFlagError) properties.$feature_flag_error = featureFlagError;
|
|
162
189
|
this.capture({
|
|
163
190
|
distinctId,
|
|
164
191
|
event: '$feature_flag_called',
|
|
165
|
-
properties
|
|
166
|
-
$feature_flag: key,
|
|
167
|
-
$feature_flag_response: response,
|
|
168
|
-
$feature_flag_id: flagDetail?.metadata?.id,
|
|
169
|
-
$feature_flag_version: flagDetail?.metadata?.version,
|
|
170
|
-
$feature_flag_reason: flagDetail?.reason?.description ?? flagDetail?.reason?.code,
|
|
171
|
-
locally_evaluated: flagWasLocallyEvaluated,
|
|
172
|
-
[`$feature/${key}`]: response,
|
|
173
|
-
$feature_flag_request_id: requestId,
|
|
174
|
-
$feature_flag_evaluated_at: evaluatedAt
|
|
175
|
-
},
|
|
192
|
+
properties,
|
|
176
193
|
groups,
|
|
177
194
|
disableGeoip
|
|
178
195
|
});
|
package/dist/types.d.ts
CHANGED
|
@@ -145,6 +145,26 @@ export type PostHogFeatureFlag = {
|
|
|
145
145
|
ensure_experience_continuity: boolean;
|
|
146
146
|
experiment_set: number[];
|
|
147
147
|
};
|
|
148
|
+
/**
|
|
149
|
+
* Error type constants for the $feature_flag_error property.
|
|
150
|
+
*
|
|
151
|
+
* These values are sent in analytics events to track flag evaluation failures.
|
|
152
|
+
* They should not be changed without considering impact on existing dashboards
|
|
153
|
+
* and queries that filter on these values.
|
|
154
|
+
*
|
|
155
|
+
* Error values:
|
|
156
|
+
* ERRORS_WHILE_COMPUTING: Server returned errorsWhileComputingFlags=true
|
|
157
|
+
* FLAG_MISSING: Requested flag not in API response
|
|
158
|
+
* QUOTA_LIMITED: Rate/quota limit exceeded
|
|
159
|
+
* UNKNOWN_ERROR: Unexpected exceptions
|
|
160
|
+
*/
|
|
161
|
+
export declare const FeatureFlagError: {
|
|
162
|
+
readonly ERRORS_WHILE_COMPUTING: "errors_while_computing_flags";
|
|
163
|
+
readonly FLAG_MISSING: "flag_missing";
|
|
164
|
+
readonly QUOTA_LIMITED: "quota_limited";
|
|
165
|
+
readonly UNKNOWN_ERROR: "unknown_error";
|
|
166
|
+
};
|
|
167
|
+
export type FeatureFlagErrorType = (typeof FeatureFlagError)[keyof typeof FeatureFlagError] | string;
|
|
148
168
|
export interface IPostHog {
|
|
149
169
|
/**
|
|
150
170
|
* @description Capture allows you to capture anything a user does within your system,
|
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/types.js
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
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
|
+
})();
|
|
3
14
|
(()=>{
|
|
4
15
|
__webpack_require__.r = (exports1)=>{
|
|
5
16
|
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
@@ -12,7 +23,19 @@ var __webpack_require__ = {};
|
|
|
12
23
|
})();
|
|
13
24
|
var __webpack_exports__ = {};
|
|
14
25
|
__webpack_require__.r(__webpack_exports__);
|
|
15
|
-
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
FeatureFlagError: ()=>FeatureFlagError
|
|
28
|
+
});
|
|
29
|
+
const FeatureFlagError = {
|
|
30
|
+
ERRORS_WHILE_COMPUTING: 'errors_while_computing_flags',
|
|
31
|
+
FLAG_MISSING: 'flag_missing',
|
|
32
|
+
QUOTA_LIMITED: 'quota_limited',
|
|
33
|
+
UNKNOWN_ERROR: 'unknown_error'
|
|
34
|
+
};
|
|
35
|
+
exports.FeatureFlagError = __webpack_exports__.FeatureFlagError;
|
|
36
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
37
|
+
"FeatureFlagError"
|
|
38
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
16
39
|
Object.defineProperty(exports, '__esModule', {
|
|
17
40
|
value: true
|
|
18
41
|
});
|
package/dist/types.mjs
CHANGED
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "5.
|
|
1
|
+
export declare const version = "5.18.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.18.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.18.0';
|
|
2
2
|
export { version };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "posthog-node",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.18.0",
|
|
4
4
|
"description": "PostHog Node.js integration",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"module": "dist/entrypoints/index.node.mjs",
|
|
26
26
|
"types": "dist/entrypoints/index.node.d.ts",
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@posthog/core": "1.
|
|
28
|
+
"@posthog/core": "1.9.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@rslib/core": "0.10.6",
|
package/src/client.ts
CHANGED
|
@@ -14,6 +14,8 @@ import {
|
|
|
14
14
|
} from '@posthog/core'
|
|
15
15
|
import {
|
|
16
16
|
EventMessage,
|
|
17
|
+
FeatureFlagError,
|
|
18
|
+
FeatureFlagErrorType,
|
|
17
19
|
GroupIdentifyMessage,
|
|
18
20
|
IdentifyMessage,
|
|
19
21
|
IPostHog,
|
|
@@ -421,6 +423,7 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
|
|
|
421
423
|
* properties: {
|
|
422
424
|
* $set: { name: 'John Doe', email: 'john@example.com' },
|
|
423
425
|
* $set_once: { first_login: new Date().toISOString() }
|
|
426
|
+
* $anon_distinct_id: 'anonymous_user_456'
|
|
424
427
|
* }
|
|
425
428
|
* })
|
|
426
429
|
* ```
|
|
@@ -429,24 +432,18 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
|
|
|
429
432
|
*
|
|
430
433
|
* @param data - The identify data containing distinctId and properties
|
|
431
434
|
*/
|
|
432
|
-
identify({ distinctId, properties, disableGeoip }: IdentifyMessage): void {
|
|
435
|
+
identify({ distinctId, properties = {}, disableGeoip }: IdentifyMessage): void {
|
|
433
436
|
// Catch properties passed as $set and move them to the top level
|
|
434
|
-
|
|
435
|
-
//
|
|
436
|
-
const
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
{
|
|
445
|
-
$set: userProps,
|
|
446
|
-
$set_once: userPropsOnce,
|
|
447
|
-
},
|
|
448
|
-
{ disableGeoip }
|
|
449
|
-
)
|
|
437
|
+
const { $set, $set_once, $anon_distinct_id, ...rest } = properties
|
|
438
|
+
// if no $set is provided we assume all rest properties are $set
|
|
439
|
+
const setProps = $set || rest
|
|
440
|
+
const setOnceProps = $set_once || {}
|
|
441
|
+
const eventProperties = {
|
|
442
|
+
$set: setProps,
|
|
443
|
+
$set_once: setOnceProps,
|
|
444
|
+
$anon_distinct_id: $anon_distinct_id ?? undefined,
|
|
445
|
+
}
|
|
446
|
+
super.identifyStateless(distinctId, eventProperties, { disableGeoip })
|
|
450
447
|
}
|
|
451
448
|
|
|
452
449
|
/**
|
|
@@ -469,22 +466,18 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
|
|
|
469
466
|
* @param data - The identify data containing distinctId and properties
|
|
470
467
|
* @returns Promise that resolves when the identify is processed
|
|
471
468
|
*/
|
|
472
|
-
async identifyImmediate({ distinctId, properties, disableGeoip }: IdentifyMessage): Promise<void> {
|
|
473
|
-
//
|
|
474
|
-
const
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
const
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
$set_once: userPropsOnce,
|
|
485
|
-
},
|
|
486
|
-
{ disableGeoip }
|
|
487
|
-
)
|
|
469
|
+
async identifyImmediate({ distinctId, properties = {}, disableGeoip }: IdentifyMessage): Promise<void> {
|
|
470
|
+
// Catch properties passed as $set and move them to the top level
|
|
471
|
+
const { $set, $set_once, $anon_distinct_id, ...rest } = properties
|
|
472
|
+
// if no $set is provided we assume all rest properties are $set
|
|
473
|
+
const setProps = $set || rest
|
|
474
|
+
const setOnceProps = $set_once || {}
|
|
475
|
+
const eventProperties = {
|
|
476
|
+
$set: setProps,
|
|
477
|
+
$set_once: setOnceProps,
|
|
478
|
+
$anon_distinct_id: $anon_distinct_id ?? undefined,
|
|
479
|
+
}
|
|
480
|
+
super.identifyStatelessImmediate(distinctId, eventProperties, { disableGeoip })
|
|
488
481
|
}
|
|
489
482
|
|
|
490
483
|
/**
|
|
@@ -682,27 +675,52 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
|
|
|
682
675
|
)
|
|
683
676
|
|
|
684
677
|
const flagWasLocallyEvaluated = response !== undefined
|
|
685
|
-
let requestId = undefined
|
|
686
|
-
let evaluatedAt = undefined
|
|
678
|
+
let requestId: string | undefined = undefined
|
|
679
|
+
let evaluatedAt: number | undefined = undefined
|
|
687
680
|
let flagDetail: FeatureFlagDetail | undefined = undefined
|
|
681
|
+
let featureFlagError: FeatureFlagErrorType | undefined = undefined
|
|
682
|
+
|
|
688
683
|
if (!flagWasLocallyEvaluated && !onlyEvaluateLocally) {
|
|
689
|
-
|
|
690
|
-
|
|
684
|
+
// Call getFeatureFlagDetailsStateless directly to get access to error information
|
|
685
|
+
const flagsResponse = await super.getFeatureFlagDetailsStateless(
|
|
691
686
|
distinctId,
|
|
692
687
|
groups,
|
|
693
688
|
personProperties,
|
|
694
689
|
groupProperties,
|
|
695
|
-
disableGeoip
|
|
690
|
+
disableGeoip,
|
|
691
|
+
[key]
|
|
696
692
|
)
|
|
697
693
|
|
|
698
|
-
if (
|
|
699
|
-
|
|
700
|
-
|
|
694
|
+
if (flagsResponse === undefined) {
|
|
695
|
+
// Request failed (network error, timeout, etc.)
|
|
696
|
+
featureFlagError = FeatureFlagError.UNKNOWN_ERROR
|
|
697
|
+
} else {
|
|
698
|
+
requestId = flagsResponse.requestId
|
|
699
|
+
evaluatedAt = flagsResponse.evaluatedAt
|
|
700
|
+
|
|
701
|
+
// Track errors from the response
|
|
702
|
+
const errors: string[] = []
|
|
703
|
+
|
|
704
|
+
if (flagsResponse.errorsWhileComputingFlags) {
|
|
705
|
+
errors.push(FeatureFlagError.ERRORS_WHILE_COMPUTING)
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
if (flagsResponse.quotaLimited?.includes('feature_flags')) {
|
|
709
|
+
errors.push(FeatureFlagError.QUOTA_LIMITED)
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
flagDetail = flagsResponse.flags[key]
|
|
713
|
+
|
|
714
|
+
if (flagDetail === undefined) {
|
|
715
|
+
errors.push(FeatureFlagError.FLAG_MISSING)
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
if (errors.length > 0) {
|
|
719
|
+
featureFlagError = errors.join(',')
|
|
720
|
+
}
|
|
701
721
|
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
requestId = remoteResponse?.requestId
|
|
705
|
-
evaluatedAt = remoteResponse?.evaluatedAt
|
|
722
|
+
response = getFeatureFlagValue(flagDetail)
|
|
723
|
+
}
|
|
706
724
|
}
|
|
707
725
|
|
|
708
726
|
const featureFlagReportedKey = `${key}_${response}`
|
|
@@ -720,20 +738,27 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
|
|
|
720
738
|
} else {
|
|
721
739
|
this.distinctIdHasSentFlagCalls[distinctId] = [featureFlagReportedKey]
|
|
722
740
|
}
|
|
741
|
+
|
|
742
|
+
const properties: Record<string, any> = {
|
|
743
|
+
$feature_flag: key,
|
|
744
|
+
$feature_flag_response: response,
|
|
745
|
+
$feature_flag_id: flagDetail?.metadata?.id,
|
|
746
|
+
$feature_flag_version: flagDetail?.metadata?.version,
|
|
747
|
+
$feature_flag_reason: flagDetail?.reason?.description ?? flagDetail?.reason?.code,
|
|
748
|
+
locally_evaluated: flagWasLocallyEvaluated,
|
|
749
|
+
[`$feature/${key}`]: response,
|
|
750
|
+
$feature_flag_request_id: requestId,
|
|
751
|
+
$feature_flag_evaluated_at: evaluatedAt,
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
if (featureFlagError) {
|
|
755
|
+
properties.$feature_flag_error = featureFlagError
|
|
756
|
+
}
|
|
757
|
+
|
|
723
758
|
this.capture({
|
|
724
759
|
distinctId,
|
|
725
760
|
event: '$feature_flag_called',
|
|
726
|
-
properties
|
|
727
|
-
$feature_flag: key,
|
|
728
|
-
$feature_flag_response: response,
|
|
729
|
-
$feature_flag_id: flagDetail?.metadata?.id,
|
|
730
|
-
$feature_flag_version: flagDetail?.metadata?.version,
|
|
731
|
-
$feature_flag_reason: flagDetail?.reason?.description ?? flagDetail?.reason?.code,
|
|
732
|
-
locally_evaluated: flagWasLocallyEvaluated,
|
|
733
|
-
[`$feature/${key}`]: response,
|
|
734
|
-
$feature_flag_request_id: requestId,
|
|
735
|
-
$feature_flag_evaluated_at: evaluatedAt,
|
|
736
|
-
},
|
|
761
|
+
properties,
|
|
737
762
|
groups,
|
|
738
763
|
disableGeoip,
|
|
739
764
|
})
|
package/src/types.ts
CHANGED
|
@@ -168,6 +168,28 @@ export type PostHogFeatureFlag = {
|
|
|
168
168
|
experiment_set: number[]
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
+
/**
|
|
172
|
+
* Error type constants for the $feature_flag_error property.
|
|
173
|
+
*
|
|
174
|
+
* These values are sent in analytics events to track flag evaluation failures.
|
|
175
|
+
* They should not be changed without considering impact on existing dashboards
|
|
176
|
+
* and queries that filter on these values.
|
|
177
|
+
*
|
|
178
|
+
* Error values:
|
|
179
|
+
* ERRORS_WHILE_COMPUTING: Server returned errorsWhileComputingFlags=true
|
|
180
|
+
* FLAG_MISSING: Requested flag not in API response
|
|
181
|
+
* QUOTA_LIMITED: Rate/quota limit exceeded
|
|
182
|
+
* UNKNOWN_ERROR: Unexpected exceptions
|
|
183
|
+
*/
|
|
184
|
+
export const FeatureFlagError = {
|
|
185
|
+
ERRORS_WHILE_COMPUTING: 'errors_while_computing_flags',
|
|
186
|
+
FLAG_MISSING: 'flag_missing',
|
|
187
|
+
QUOTA_LIMITED: 'quota_limited',
|
|
188
|
+
UNKNOWN_ERROR: 'unknown_error',
|
|
189
|
+
} as const
|
|
190
|
+
|
|
191
|
+
export type FeatureFlagErrorType = (typeof FeatureFlagError)[keyof typeof FeatureFlagError] | string
|
|
192
|
+
|
|
171
193
|
export interface IPostHog {
|
|
172
194
|
/**
|
|
173
195
|
* @description Capture allows you to capture anything a user does within your system,
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '5.
|
|
1
|
+
export const version = '5.18.0'
|