@posthog/core 1.21.0 → 1.23.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/featureFlagUtils.d.ts +2 -0
- package/dist/featureFlagUtils.d.ts.map +1 -1
- package/dist/featureFlagUtils.js +6 -0
- package/dist/featureFlagUtils.mjs +1 -1
- package/dist/posthog-core.d.ts +41 -2
- package/dist/posthog-core.d.ts.map +1 -1
- package/dist/posthog-core.js +98 -33
- package/dist/posthog-core.mjs +99 -34
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/featureFlagUtils.ts +2 -2
- package/src/posthog-core.ts +146 -72
- package/src/types.ts +37 -0
|
@@ -32,4 +32,6 @@ export declare const parsePayload: (response: any) => any;
|
|
|
32
32
|
*/
|
|
33
33
|
export declare const createFlagsResponseFromFlagsAndPayloads: (featureFlags: PostHogV1FlagsResponse["featureFlags"], featureFlagPayloads: PostHogV1FlagsResponse["featureFlagPayloads"]) => PostHogFeatureFlagsResponse;
|
|
34
34
|
export declare const updateFlagValue: (flag: FeatureFlagDetail, value: FeatureFlagValue) => FeatureFlagDetail;
|
|
35
|
+
export declare function getEnabledFromValue(value: FeatureFlagValue): boolean;
|
|
36
|
+
export declare function getVariantFromValue(value: FeatureFlagValue): string | undefined;
|
|
35
37
|
//# sourceMappingURL=featureFlagUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagUtils.d.ts","sourceRoot":"","sources":["../src/featureFlagUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAEhB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EAEtB,mBAAmB,EACnB,2BAA2B,EAC5B,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,sBAAsB,GACjC,eACI,mBAAmB,CAAC,sBAAsB,EAAE,OAAO,CAAC,GACpD,mBAAmB,CAAC,sBAAsB,EAAE,cAAc,GAAG,qBAAqB,CAAC,KACtF,2BAgCF,CAAA;AAqBD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,oBAAoB,CAAC,OAAO,CAAC,KAAG,oBAAoB,CAAC,cAAc,CAMhH,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,oBAAoB,CAAC,OAAO,CAAC,KACnC,oBAAoB,CAAC,qBAAqB,CAa5C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,GAC7C,eAAe,2BAA2B,KACzC,oBAAoB,CAAC,OAAO,CAoB9B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,QAAQ,iBAAiB,GAAG,SAAS,KAAG,gBAAgB,GAAG,SAE9F,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,UAAU,GAAG,KAAG,GAU5C,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uCAAuC,GAClD,cAAc,sBAAsB,CAAC,cAAc,CAAC,EACpD,qBAAqB,sBAAsB,CAAC,qBAAqB,CAAC,KACjE,2BAaF,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,MAAM,iBAAiB,EAAE,OAAO,gBAAgB,KAAG,iBAMlF,CAAA"}
|
|
1
|
+
{"version":3,"file":"featureFlagUtils.d.ts","sourceRoot":"","sources":["../src/featureFlagUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAEhB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EAEtB,mBAAmB,EACnB,2BAA2B,EAC5B,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,sBAAsB,GACjC,eACI,mBAAmB,CAAC,sBAAsB,EAAE,OAAO,CAAC,GACpD,mBAAmB,CAAC,sBAAsB,EAAE,cAAc,GAAG,qBAAqB,CAAC,KACtF,2BAgCF,CAAA;AAqBD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,oBAAoB,CAAC,OAAO,CAAC,KAAG,oBAAoB,CAAC,cAAc,CAMhH,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,oBAAoB,CAAC,OAAO,CAAC,KACnC,oBAAoB,CAAC,qBAAqB,CAa5C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,GAC7C,eAAe,2BAA2B,KACzC,oBAAoB,CAAC,OAAO,CAoB9B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,QAAQ,iBAAiB,GAAG,SAAS,KAAG,gBAAgB,GAAG,SAE9F,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,UAAU,GAAG,KAAG,GAU5C,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uCAAuC,GAClD,cAAc,sBAAsB,CAAC,cAAc,CAAC,EACpD,qBAAqB,sBAAsB,CAAC,qBAAqB,CAAC,KACjE,2BAaF,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,MAAM,iBAAiB,EAAE,OAAO,gBAAgB,KAAG,iBAMlF,CAAA;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAEpE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAE/E"}
|
package/dist/featureFlagUtils.js
CHANGED
|
@@ -25,10 +25,12 @@ var __webpack_exports__ = {};
|
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
27
|
createFlagsResponseFromFlagsAndPayloads: ()=>createFlagsResponseFromFlagsAndPayloads,
|
|
28
|
+
getEnabledFromValue: ()=>getEnabledFromValue,
|
|
28
29
|
getFeatureFlagValue: ()=>getFeatureFlagValue,
|
|
29
30
|
getFlagDetailsFromFlagsAndPayloads: ()=>getFlagDetailsFromFlagsAndPayloads,
|
|
30
31
|
getFlagValuesFromFlags: ()=>getFlagValuesFromFlags,
|
|
31
32
|
getPayloadsFromFlags: ()=>getPayloadsFromFlags,
|
|
33
|
+
getVariantFromValue: ()=>getVariantFromValue,
|
|
32
34
|
normalizeFlagsResponse: ()=>normalizeFlagsResponse,
|
|
33
35
|
parsePayload: ()=>parsePayload,
|
|
34
36
|
updateFlagValue: ()=>updateFlagValue
|
|
@@ -146,19 +148,23 @@ function getVariantFromValue(value) {
|
|
|
146
148
|
return 'string' == typeof value ? value : void 0;
|
|
147
149
|
}
|
|
148
150
|
exports.createFlagsResponseFromFlagsAndPayloads = __webpack_exports__.createFlagsResponseFromFlagsAndPayloads;
|
|
151
|
+
exports.getEnabledFromValue = __webpack_exports__.getEnabledFromValue;
|
|
149
152
|
exports.getFeatureFlagValue = __webpack_exports__.getFeatureFlagValue;
|
|
150
153
|
exports.getFlagDetailsFromFlagsAndPayloads = __webpack_exports__.getFlagDetailsFromFlagsAndPayloads;
|
|
151
154
|
exports.getFlagValuesFromFlags = __webpack_exports__.getFlagValuesFromFlags;
|
|
152
155
|
exports.getPayloadsFromFlags = __webpack_exports__.getPayloadsFromFlags;
|
|
156
|
+
exports.getVariantFromValue = __webpack_exports__.getVariantFromValue;
|
|
153
157
|
exports.normalizeFlagsResponse = __webpack_exports__.normalizeFlagsResponse;
|
|
154
158
|
exports.parsePayload = __webpack_exports__.parsePayload;
|
|
155
159
|
exports.updateFlagValue = __webpack_exports__.updateFlagValue;
|
|
156
160
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
157
161
|
"createFlagsResponseFromFlagsAndPayloads",
|
|
162
|
+
"getEnabledFromValue",
|
|
158
163
|
"getFeatureFlagValue",
|
|
159
164
|
"getFlagDetailsFromFlagsAndPayloads",
|
|
160
165
|
"getFlagValuesFromFlags",
|
|
161
166
|
"getPayloadsFromFlags",
|
|
167
|
+
"getVariantFromValue",
|
|
162
168
|
"normalizeFlagsResponse",
|
|
163
169
|
"parsePayload",
|
|
164
170
|
"updateFlagValue"
|
|
@@ -110,4 +110,4 @@ function getEnabledFromValue(value) {
|
|
|
110
110
|
function getVariantFromValue(value) {
|
|
111
111
|
return 'string' == typeof value ? value : void 0;
|
|
112
112
|
}
|
|
113
|
-
export { createFlagsResponseFromFlagsAndPayloads, getFeatureFlagValue, getFlagDetailsFromFlagsAndPayloads, getFlagValuesFromFlags, getPayloadsFromFlags, normalizeFlagsResponse, parsePayload, updateFlagValue };
|
|
113
|
+
export { createFlagsResponseFromFlagsAndPayloads, getEnabledFromValue, getFeatureFlagValue, getFlagDetailsFromFlagsAndPayloads, getFlagValuesFromFlags, getPayloadsFromFlags, getVariantFromValue, normalizeFlagsResponse, parsePayload, updateFlagValue };
|
package/dist/posthog-core.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import type { PostHogAutocaptureElement, PostHogFlagsResponse, PostHogFeatureFlagsResponse, PostHogCoreOptions, PostHogEventProperties, PostHogCaptureOptions, JsonType, PostHogRemoteConfig, FeatureFlagValue, PostHogFeatureFlagDetails, PostHogGroupProperties } from './types';
|
|
1
|
+
import type { PostHogAutocaptureElement, PostHogFlagsResponse, PostHogFeatureFlagsResponse, PostHogCoreOptions, PostHogEventProperties, PostHogCaptureOptions, JsonType, PostHogRemoteConfig, FeatureFlagValue, FeatureFlagResult, FeatureFlagResultOptions, PostHogFeatureFlagDetails, PostHogGroupProperties } from './types';
|
|
2
2
|
import { PostHogPersistedProperty } from './types';
|
|
3
3
|
import { PostHogCoreStateless } from './posthog-core-stateless';
|
|
4
|
+
interface FlagsAsyncOptions {
|
|
5
|
+
sendAnonDistinctId?: boolean;
|
|
6
|
+
fetchConfig?: boolean;
|
|
7
|
+
triggerOnRemoteConfig?: boolean;
|
|
8
|
+
}
|
|
4
9
|
export declare abstract class PostHogCore extends PostHogCoreStateless {
|
|
5
10
|
private sendFeatureFlagEvent;
|
|
6
11
|
private flagCallReported;
|
|
@@ -86,7 +91,25 @@ export declare abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
86
91
|
/***
|
|
87
92
|
*** FEATURE FLAGS
|
|
88
93
|
***/
|
|
89
|
-
protected flagsAsync(
|
|
94
|
+
protected flagsAsync(options?: FlagsAsyncOptions): Promise<PostHogFeatureFlagsResponse | undefined>;
|
|
95
|
+
/**
|
|
96
|
+
* Called when remote config has been loaded (from either the remote config endpoint or the flags endpoint).
|
|
97
|
+
* Override in subclasses to react to remote config changes (e.g., gating error tracking, session replay features).
|
|
98
|
+
*
|
|
99
|
+
* The full response is passed so consumers can read whatever fields they need.
|
|
100
|
+
* This is called exactly once per remote config load cycle.
|
|
101
|
+
*
|
|
102
|
+
* @param _response The remote config or flags response containing config fields
|
|
103
|
+
*/
|
|
104
|
+
protected onRemoteConfig(_response: PostHogRemoteConfig): void;
|
|
105
|
+
/**
|
|
106
|
+
* Conditionally triggers onRemoteConfig if requested.
|
|
107
|
+
* Only _remoteConfigAsync passes triggerOnRemoteConfig=true to apply remote config values
|
|
108
|
+
* (errorTracking, capturePerformance, etc.) on initial load.
|
|
109
|
+
* User-triggered reloadFeatureFlags/reloadFeatureFlagsAsync don't set this,
|
|
110
|
+
* so they won't re-trigger onRemoteConfig or reinstall/uninstall integrations.
|
|
111
|
+
*/
|
|
112
|
+
private maybeNotifyRemoteConfig;
|
|
90
113
|
private cacheSessionReplay;
|
|
91
114
|
private _remoteConfigAsync;
|
|
92
115
|
private _flagsAsync;
|
|
@@ -98,6 +121,21 @@ export declare abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
98
121
|
private setBootstrappedFeatureFlagDetails;
|
|
99
122
|
private getBootstrappedFeatureFlags;
|
|
100
123
|
private getBootstrappedFeatureFlagPayloads;
|
|
124
|
+
getFeatureFlagResult(key: string, options?: FeatureFlagResultOptions): FeatureFlagResult | undefined;
|
|
125
|
+
protected _getFeatureFlagResult(key: string, options?: {
|
|
126
|
+
/** Whether to send an event that the flag was evaluated. This defaults to true,
|
|
127
|
+
* but will respect the instance-level sendFeatureFlagEvent setting.
|
|
128
|
+
*/
|
|
129
|
+
sendEvent?: boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Preserves the legacy missing-flag behavior of the named function.
|
|
132
|
+
* Each value matches how that function handled missing flags before getFeatureFlagResult existed:
|
|
133
|
+
* - 'getFeatureFlag': returns a default only when non-empty flags are cached
|
|
134
|
+
* - 'getFeatureFlagPayload': returns a default whenever any flags response was stored (even if empty, e.g. error/quota)
|
|
135
|
+
* Without this, missing flags simply return undefined (this is usually what you want).
|
|
136
|
+
*/
|
|
137
|
+
missingFlagBehavior?: 'getFeatureFlag' | 'getFeatureFlagPayload';
|
|
138
|
+
}): FeatureFlagResult | undefined;
|
|
101
139
|
getFeatureFlag(key: string): FeatureFlagValue | undefined;
|
|
102
140
|
getFeatureFlagPayload(key: string): JsonType | undefined;
|
|
103
141
|
getFeatureFlagPayloads(): PostHogFlagsResponse['featureFlagPayloads'] | undefined;
|
|
@@ -285,4 +323,5 @@ export declare abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
285
323
|
*/
|
|
286
324
|
private _runBeforeSend;
|
|
287
325
|
}
|
|
326
|
+
export {};
|
|
288
327
|
//# sourceMappingURL=posthog-core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posthog-core.d.ts","sourceRoot":"","sources":["../src/posthog-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"posthog-core.d.ts","sourceRoot":"","sources":["../src/posthog-core.ts"],"names":[],"mappings":"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"}
|
package/dist/posthog-core.js
CHANGED
|
@@ -294,7 +294,8 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
294
294
|
if (this._remoteConfigResponsePromise) return this._remoteConfigResponsePromise;
|
|
295
295
|
return this._remoteConfigAsync();
|
|
296
296
|
}
|
|
297
|
-
async flagsAsync(
|
|
297
|
+
async flagsAsync(options) {
|
|
298
|
+
const { sendAnonDistinctId = true, fetchConfig = false, triggerOnRemoteConfig = false } = options ?? {};
|
|
298
299
|
await this._initPromise;
|
|
299
300
|
if (this._flagsResponsePromise) {
|
|
300
301
|
this._logger.info('Feature flags are being loaded already, queuing reload.');
|
|
@@ -303,12 +304,25 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
303
304
|
this._pendingFlagsRequest = {
|
|
304
305
|
sendAnonDistinctId,
|
|
305
306
|
fetchConfig,
|
|
307
|
+
triggerOnRemoteConfig,
|
|
306
308
|
resolve,
|
|
307
309
|
reject
|
|
308
310
|
};
|
|
309
311
|
});
|
|
310
312
|
}
|
|
311
|
-
return this._flagsAsync(
|
|
313
|
+
return this._flagsAsync({
|
|
314
|
+
sendAnonDistinctId,
|
|
315
|
+
fetchConfig,
|
|
316
|
+
triggerOnRemoteConfig
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
onRemoteConfig(_response) {}
|
|
320
|
+
maybeNotifyRemoteConfig(shouldTrigger, response) {
|
|
321
|
+
if (shouldTrigger) try {
|
|
322
|
+
this.onRemoteConfig(response);
|
|
323
|
+
} catch (e) {
|
|
324
|
+
this._logger.error('Error in onRemoteConfig callback:', e);
|
|
325
|
+
}
|
|
312
326
|
}
|
|
313
327
|
cacheSessionReplay(source, response) {
|
|
314
328
|
const sessionReplay = response?.sessionRecording;
|
|
@@ -344,13 +358,22 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
344
358
|
} else this.setPersistedProperty(external_types_js_namespaceObject.PostHogPersistedProperty.Surveys, null);
|
|
345
359
|
this.setPersistedProperty(external_types_js_namespaceObject.PostHogPersistedProperty.RemoteConfig, remoteConfigWithoutSurveys);
|
|
346
360
|
this.cacheSessionReplay('remote config', response);
|
|
361
|
+
let willLoadFlags = false;
|
|
347
362
|
if (false === response.hasFeatureFlags) {
|
|
348
363
|
this.setKnownFeatureFlagDetails({
|
|
349
364
|
flags: {}
|
|
350
365
|
});
|
|
351
366
|
this._logger.warn('Remote config has no feature flags, will not load feature flags.');
|
|
352
|
-
} else if (false !== this.preloadFeatureFlags)
|
|
367
|
+
} else if (false !== this.preloadFeatureFlags) {
|
|
368
|
+
willLoadFlags = true;
|
|
369
|
+
this.flagsAsync({
|
|
370
|
+
sendAnonDistinctId: true,
|
|
371
|
+
fetchConfig: true,
|
|
372
|
+
triggerOnRemoteConfig: true
|
|
373
|
+
});
|
|
374
|
+
}
|
|
353
375
|
if (!response.supportedCompression?.includes(external_types_js_namespaceObject.Compression.GZipJS)) this.disableCompression = true;
|
|
376
|
+
this.maybeNotifyRemoteConfig(!willLoadFlags, response);
|
|
354
377
|
remoteConfig = response;
|
|
355
378
|
}
|
|
356
379
|
return remoteConfig;
|
|
@@ -360,7 +383,10 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
360
383
|
});
|
|
361
384
|
return this._remoteConfigResponsePromise;
|
|
362
385
|
}
|
|
363
|
-
async _flagsAsync(
|
|
386
|
+
async _flagsAsync(options) {
|
|
387
|
+
const sendAnonDistinctId = options?.sendAnonDistinctId ?? true;
|
|
388
|
+
const fetchConfig = options?.fetchConfig ?? false;
|
|
389
|
+
const triggerOnRemoteConfig = options?.triggerOnRemoteConfig ?? false;
|
|
364
390
|
this._flagsResponsePromise = this._initPromise.then(async ()=>{
|
|
365
391
|
const distinctId = this.getDistinctId();
|
|
366
392
|
const groups = this.props.$groups || {};
|
|
@@ -381,6 +407,7 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
381
407
|
quotaLimited: res.quotaLimited
|
|
382
408
|
});
|
|
383
409
|
this._logger.warn('[FEATURE FLAGS] Feature flags quota limit exceeded. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts');
|
|
410
|
+
this.maybeNotifyRemoteConfig(triggerOnRemoteConfig, res);
|
|
384
411
|
return res;
|
|
385
412
|
}
|
|
386
413
|
if (res?.featureFlags) {
|
|
@@ -408,6 +435,7 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
408
435
|
});
|
|
409
436
|
this.setPersistedProperty(external_types_js_namespaceObject.PostHogPersistedProperty.FlagsEndpointWasHit, true);
|
|
410
437
|
this.cacheSessionReplay('flags', res);
|
|
438
|
+
this.maybeNotifyRemoteConfig(triggerOnRemoteConfig, res);
|
|
411
439
|
}
|
|
412
440
|
return res;
|
|
413
441
|
}).finally(()=>{
|
|
@@ -416,7 +444,11 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
416
444
|
if (pendingRequest) {
|
|
417
445
|
this._pendingFlagsRequest = void 0;
|
|
418
446
|
this._logger.info('Executing pending feature flags reload.');
|
|
419
|
-
this.flagsAsync(
|
|
447
|
+
this.flagsAsync({
|
|
448
|
+
sendAnonDistinctId: pendingRequest.sendAnonDistinctId,
|
|
449
|
+
fetchConfig: pendingRequest.fetchConfig,
|
|
450
|
+
triggerOnRemoteConfig: pendingRequest.triggerOnRemoteConfig
|
|
451
|
+
}).then(pendingRequest.resolve).catch(pendingRequest.reject);
|
|
420
452
|
}
|
|
421
453
|
});
|
|
422
454
|
return this._flagsResponsePromise;
|
|
@@ -463,36 +495,36 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
463
495
|
if (!details) return;
|
|
464
496
|
return (0, external_featureFlagUtils_js_namespaceObject.getPayloadsFromFlags)(details.flags);
|
|
465
497
|
}
|
|
466
|
-
|
|
498
|
+
getFeatureFlagResult(key, options) {
|
|
499
|
+
return this._getFeatureFlagResult(key, options);
|
|
500
|
+
}
|
|
501
|
+
_getFeatureFlagResult(key, options = {}) {
|
|
467
502
|
const storedDetails = this.getStoredFlagDetails();
|
|
468
503
|
const details = this.getFeatureFlagDetails();
|
|
469
|
-
const errors = [];
|
|
470
504
|
const isQuotaLimited = storedDetails?.quotaLimited?.includes(external_posthog_core_stateless_js_namespaceObject.QuotaLimitedFeature.FeatureFlags);
|
|
471
|
-
if (storedDetails?.requestError) {
|
|
472
|
-
const { type, statusCode } = storedDetails.requestError;
|
|
473
|
-
if ('timeout' === type) errors.push(external_types_js_namespaceObject.FeatureFlagError.TIMEOUT);
|
|
474
|
-
else if ('api_error' === type && void 0 !== statusCode) errors.push(external_types_js_namespaceObject.FeatureFlagError.apiError(statusCode));
|
|
475
|
-
else if ('connection_error' === type) errors.push(external_types_js_namespaceObject.FeatureFlagError.CONNECTION_ERROR);
|
|
476
|
-
else errors.push(external_types_js_namespaceObject.FeatureFlagError.UNKNOWN_ERROR);
|
|
477
|
-
} else if (storedDetails) {
|
|
478
|
-
if (storedDetails.errorsWhileComputingFlags) errors.push(external_types_js_namespaceObject.FeatureFlagError.ERRORS_WHILE_COMPUTING);
|
|
479
|
-
if (isQuotaLimited) errors.push(external_types_js_namespaceObject.FeatureFlagError.QUOTA_LIMITED);
|
|
480
|
-
}
|
|
481
505
|
const featureFlag = details?.flags[key];
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
if (
|
|
487
|
-
|
|
488
|
-
|
|
506
|
+
const sendEvent = (options.sendEvent ?? this.sendFeatureFlagEvent) && !this.flagCallReported[key];
|
|
507
|
+
const flagValue = (0, external_featureFlagUtils_js_namespaceObject.getFeatureFlagValue)(featureFlag);
|
|
508
|
+
if (sendEvent) {
|
|
509
|
+
const errors = [];
|
|
510
|
+
if (storedDetails?.requestError) {
|
|
511
|
+
const { type, statusCode } = storedDetails.requestError;
|
|
512
|
+
if ('timeout' === type) errors.push(external_types_js_namespaceObject.FeatureFlagError.TIMEOUT);
|
|
513
|
+
else if ('api_error' === type && void 0 !== statusCode) errors.push(external_types_js_namespaceObject.FeatureFlagError.apiError(statusCode));
|
|
514
|
+
else if ('connection_error' === type) errors.push(external_types_js_namespaceObject.FeatureFlagError.CONNECTION_ERROR);
|
|
515
|
+
else errors.push(external_types_js_namespaceObject.FeatureFlagError.UNKNOWN_ERROR);
|
|
516
|
+
} else if (storedDetails) {
|
|
517
|
+
if (storedDetails.errorsWhileComputingFlags) errors.push(external_types_js_namespaceObject.FeatureFlagError.ERRORS_WHILE_COMPUTING);
|
|
518
|
+
if (isQuotaLimited) errors.push(external_types_js_namespaceObject.FeatureFlagError.QUOTA_LIMITED);
|
|
519
|
+
else if (void 0 === flagValue && !featureFlag) errors.push(external_types_js_namespaceObject.FeatureFlagError.FLAG_MISSING);
|
|
520
|
+
}
|
|
489
521
|
const bootstrappedResponse = this.getBootstrappedFeatureFlags()?.[key];
|
|
490
522
|
const bootstrappedPayload = this.getBootstrappedFeatureFlagPayloads()?.[key];
|
|
491
523
|
const featureFlagError = errors.length > 0 ? errors.join(',') : void 0;
|
|
492
524
|
this.flagCallReported[key] = true;
|
|
493
525
|
const properties = {
|
|
494
526
|
$feature_flag: key,
|
|
495
|
-
$feature_flag_response:
|
|
527
|
+
$feature_flag_response: flagValue,
|
|
496
528
|
...(0, external_posthog_core_stateless_js_namespaceObject.maybeAdd)('$feature_flag_id', featureFlag?.metadata?.id),
|
|
497
529
|
...(0, external_posthog_core_stateless_js_namespaceObject.maybeAdd)('$feature_flag_version', featureFlag?.metadata?.version),
|
|
498
530
|
...(0, external_posthog_core_stateless_js_namespaceObject.maybeAdd)('$feature_flag_reason', featureFlag?.reason?.description ?? featureFlag?.reason?.code),
|
|
@@ -505,14 +537,43 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
505
537
|
};
|
|
506
538
|
this.capture('$feature_flag_called', properties);
|
|
507
539
|
}
|
|
508
|
-
|
|
540
|
+
if (void 0 === flagValue) switch(options.missingFlagBehavior){
|
|
541
|
+
case 'getFeatureFlagPayload':
|
|
542
|
+
return details ? {
|
|
543
|
+
key,
|
|
544
|
+
enabled: false,
|
|
545
|
+
payload: null
|
|
546
|
+
} : void 0;
|
|
547
|
+
case 'getFeatureFlag':
|
|
548
|
+
return details && Object.keys(details.flags).length ? {
|
|
549
|
+
key,
|
|
550
|
+
enabled: false,
|
|
551
|
+
payload: null
|
|
552
|
+
} : void 0;
|
|
553
|
+
case void 0:
|
|
554
|
+
return;
|
|
555
|
+
}
|
|
556
|
+
const rawPayload = featureFlag?.metadata?.payload;
|
|
557
|
+
const payload = void 0 !== rawPayload ? (0, external_featureFlagUtils_js_namespaceObject.parsePayload)(rawPayload) : null;
|
|
558
|
+
return {
|
|
559
|
+
key,
|
|
560
|
+
enabled: (0, external_featureFlagUtils_js_namespaceObject.getEnabledFromValue)(flagValue),
|
|
561
|
+
variant: (0, external_featureFlagUtils_js_namespaceObject.getVariantFromValue)(flagValue),
|
|
562
|
+
payload
|
|
563
|
+
};
|
|
564
|
+
}
|
|
565
|
+
getFeatureFlag(key) {
|
|
566
|
+
const result = this._getFeatureFlagResult(key, {
|
|
567
|
+
missingFlagBehavior: 'getFeatureFlag'
|
|
568
|
+
});
|
|
569
|
+
return result?.variant ?? result?.enabled;
|
|
509
570
|
}
|
|
510
571
|
getFeatureFlagPayload(key) {
|
|
511
|
-
const
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
return
|
|
572
|
+
const result = this._getFeatureFlagResult(key, {
|
|
573
|
+
missingFlagBehavior: 'getFeatureFlagPayload',
|
|
574
|
+
sendEvent: false
|
|
575
|
+
});
|
|
576
|
+
return result?.payload;
|
|
516
577
|
}
|
|
517
578
|
getFeatureFlagPayloads() {
|
|
518
579
|
return this.getFeatureFlagDetails()?.featureFlagPayloads;
|
|
@@ -552,7 +613,9 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
552
613
|
return !!response;
|
|
553
614
|
}
|
|
554
615
|
reloadFeatureFlags(options) {
|
|
555
|
-
this.flagsAsync(
|
|
616
|
+
this.flagsAsync({
|
|
617
|
+
sendAnonDistinctId: true
|
|
618
|
+
}).then((res)=>{
|
|
556
619
|
options?.cb?.(void 0, res?.featureFlags);
|
|
557
620
|
}).catch((e)=>{
|
|
558
621
|
options?.cb?.(e, void 0);
|
|
@@ -563,7 +626,9 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
563
626
|
return await this.remoteConfigAsync();
|
|
564
627
|
}
|
|
565
628
|
async reloadFeatureFlagsAsync(sendAnonDistinctId) {
|
|
566
|
-
return (await this.flagsAsync(
|
|
629
|
+
return (await this.flagsAsync({
|
|
630
|
+
sendAnonDistinctId: sendAnonDistinctId
|
|
631
|
+
}))?.featureFlags;
|
|
567
632
|
}
|
|
568
633
|
onFeatureFlags(cb) {
|
|
569
634
|
return this.on('featureflags', async ()=>{
|
package/dist/posthog-core.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createFlagsResponseFromFlagsAndPayloads, getFeatureFlagValue, getFlagValuesFromFlags, getPayloadsFromFlags, normalizeFlagsResponse, updateFlagValue } from "./featureFlagUtils.mjs";
|
|
1
|
+
import { createFlagsResponseFromFlagsAndPayloads, getEnabledFromValue, getFeatureFlagValue, getFlagValuesFromFlags, getPayloadsFromFlags, getVariantFromValue, normalizeFlagsResponse, parsePayload, updateFlagValue } from "./featureFlagUtils.mjs";
|
|
2
2
|
import { Compression, FeatureFlagError, PostHogPersistedProperty } from "./types.mjs";
|
|
3
3
|
import { PostHogCoreStateless, QuotaLimitedFeature, maybeAdd } from "./posthog-core-stateless.mjs";
|
|
4
4
|
import { uuidv7 } from "./vendor/uuidv7.mjs";
|
|
@@ -266,7 +266,8 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
266
266
|
if (this._remoteConfigResponsePromise) return this._remoteConfigResponsePromise;
|
|
267
267
|
return this._remoteConfigAsync();
|
|
268
268
|
}
|
|
269
|
-
async flagsAsync(
|
|
269
|
+
async flagsAsync(options) {
|
|
270
|
+
const { sendAnonDistinctId = true, fetchConfig = false, triggerOnRemoteConfig = false } = options ?? {};
|
|
270
271
|
await this._initPromise;
|
|
271
272
|
if (this._flagsResponsePromise) {
|
|
272
273
|
this._logger.info('Feature flags are being loaded already, queuing reload.');
|
|
@@ -275,12 +276,25 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
275
276
|
this._pendingFlagsRequest = {
|
|
276
277
|
sendAnonDistinctId,
|
|
277
278
|
fetchConfig,
|
|
279
|
+
triggerOnRemoteConfig,
|
|
278
280
|
resolve,
|
|
279
281
|
reject
|
|
280
282
|
};
|
|
281
283
|
});
|
|
282
284
|
}
|
|
283
|
-
return this._flagsAsync(
|
|
285
|
+
return this._flagsAsync({
|
|
286
|
+
sendAnonDistinctId,
|
|
287
|
+
fetchConfig,
|
|
288
|
+
triggerOnRemoteConfig
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
onRemoteConfig(_response) {}
|
|
292
|
+
maybeNotifyRemoteConfig(shouldTrigger, response) {
|
|
293
|
+
if (shouldTrigger) try {
|
|
294
|
+
this.onRemoteConfig(response);
|
|
295
|
+
} catch (e) {
|
|
296
|
+
this._logger.error('Error in onRemoteConfig callback:', e);
|
|
297
|
+
}
|
|
284
298
|
}
|
|
285
299
|
cacheSessionReplay(source, response) {
|
|
286
300
|
const sessionReplay = response?.sessionRecording;
|
|
@@ -316,13 +330,22 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
316
330
|
} else this.setPersistedProperty(PostHogPersistedProperty.Surveys, null);
|
|
317
331
|
this.setPersistedProperty(PostHogPersistedProperty.RemoteConfig, remoteConfigWithoutSurveys);
|
|
318
332
|
this.cacheSessionReplay('remote config', response);
|
|
333
|
+
let willLoadFlags = false;
|
|
319
334
|
if (false === response.hasFeatureFlags) {
|
|
320
335
|
this.setKnownFeatureFlagDetails({
|
|
321
336
|
flags: {}
|
|
322
337
|
});
|
|
323
338
|
this._logger.warn('Remote config has no feature flags, will not load feature flags.');
|
|
324
|
-
} else if (false !== this.preloadFeatureFlags)
|
|
339
|
+
} else if (false !== this.preloadFeatureFlags) {
|
|
340
|
+
willLoadFlags = true;
|
|
341
|
+
this.flagsAsync({
|
|
342
|
+
sendAnonDistinctId: true,
|
|
343
|
+
fetchConfig: true,
|
|
344
|
+
triggerOnRemoteConfig: true
|
|
345
|
+
});
|
|
346
|
+
}
|
|
325
347
|
if (!response.supportedCompression?.includes(Compression.GZipJS)) this.disableCompression = true;
|
|
348
|
+
this.maybeNotifyRemoteConfig(!willLoadFlags, response);
|
|
326
349
|
remoteConfig = response;
|
|
327
350
|
}
|
|
328
351
|
return remoteConfig;
|
|
@@ -332,7 +355,10 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
332
355
|
});
|
|
333
356
|
return this._remoteConfigResponsePromise;
|
|
334
357
|
}
|
|
335
|
-
async _flagsAsync(
|
|
358
|
+
async _flagsAsync(options) {
|
|
359
|
+
const sendAnonDistinctId = options?.sendAnonDistinctId ?? true;
|
|
360
|
+
const fetchConfig = options?.fetchConfig ?? false;
|
|
361
|
+
const triggerOnRemoteConfig = options?.triggerOnRemoteConfig ?? false;
|
|
336
362
|
this._flagsResponsePromise = this._initPromise.then(async ()=>{
|
|
337
363
|
const distinctId = this.getDistinctId();
|
|
338
364
|
const groups = this.props.$groups || {};
|
|
@@ -353,6 +379,7 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
353
379
|
quotaLimited: res.quotaLimited
|
|
354
380
|
});
|
|
355
381
|
this._logger.warn('[FEATURE FLAGS] Feature flags quota limit exceeded. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts');
|
|
382
|
+
this.maybeNotifyRemoteConfig(triggerOnRemoteConfig, res);
|
|
356
383
|
return res;
|
|
357
384
|
}
|
|
358
385
|
if (res?.featureFlags) {
|
|
@@ -380,6 +407,7 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
380
407
|
});
|
|
381
408
|
this.setPersistedProperty(PostHogPersistedProperty.FlagsEndpointWasHit, true);
|
|
382
409
|
this.cacheSessionReplay('flags', res);
|
|
410
|
+
this.maybeNotifyRemoteConfig(triggerOnRemoteConfig, res);
|
|
383
411
|
}
|
|
384
412
|
return res;
|
|
385
413
|
}).finally(()=>{
|
|
@@ -388,7 +416,11 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
388
416
|
if (pendingRequest) {
|
|
389
417
|
this._pendingFlagsRequest = void 0;
|
|
390
418
|
this._logger.info('Executing pending feature flags reload.');
|
|
391
|
-
this.flagsAsync(
|
|
419
|
+
this.flagsAsync({
|
|
420
|
+
sendAnonDistinctId: pendingRequest.sendAnonDistinctId,
|
|
421
|
+
fetchConfig: pendingRequest.fetchConfig,
|
|
422
|
+
triggerOnRemoteConfig: pendingRequest.triggerOnRemoteConfig
|
|
423
|
+
}).then(pendingRequest.resolve).catch(pendingRequest.reject);
|
|
392
424
|
}
|
|
393
425
|
});
|
|
394
426
|
return this._flagsResponsePromise;
|
|
@@ -435,36 +467,36 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
435
467
|
if (!details) return;
|
|
436
468
|
return getPayloadsFromFlags(details.flags);
|
|
437
469
|
}
|
|
438
|
-
|
|
470
|
+
getFeatureFlagResult(key, options) {
|
|
471
|
+
return this._getFeatureFlagResult(key, options);
|
|
472
|
+
}
|
|
473
|
+
_getFeatureFlagResult(key, options = {}) {
|
|
439
474
|
const storedDetails = this.getStoredFlagDetails();
|
|
440
475
|
const details = this.getFeatureFlagDetails();
|
|
441
|
-
const errors = [];
|
|
442
476
|
const isQuotaLimited = storedDetails?.quotaLimited?.includes(QuotaLimitedFeature.FeatureFlags);
|
|
443
|
-
if (storedDetails?.requestError) {
|
|
444
|
-
const { type, statusCode } = storedDetails.requestError;
|
|
445
|
-
if ('timeout' === type) errors.push(FeatureFlagError.TIMEOUT);
|
|
446
|
-
else if ('api_error' === type && void 0 !== statusCode) errors.push(FeatureFlagError.apiError(statusCode));
|
|
447
|
-
else if ('connection_error' === type) errors.push(FeatureFlagError.CONNECTION_ERROR);
|
|
448
|
-
else errors.push(FeatureFlagError.UNKNOWN_ERROR);
|
|
449
|
-
} else if (storedDetails) {
|
|
450
|
-
if (storedDetails.errorsWhileComputingFlags) errors.push(FeatureFlagError.ERRORS_WHILE_COMPUTING);
|
|
451
|
-
if (isQuotaLimited) errors.push(FeatureFlagError.QUOTA_LIMITED);
|
|
452
|
-
}
|
|
453
477
|
const featureFlag = details?.flags[key];
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
if (
|
|
459
|
-
|
|
460
|
-
|
|
478
|
+
const sendEvent = (options.sendEvent ?? this.sendFeatureFlagEvent) && !this.flagCallReported[key];
|
|
479
|
+
const flagValue = getFeatureFlagValue(featureFlag);
|
|
480
|
+
if (sendEvent) {
|
|
481
|
+
const errors = [];
|
|
482
|
+
if (storedDetails?.requestError) {
|
|
483
|
+
const { type, statusCode } = storedDetails.requestError;
|
|
484
|
+
if ('timeout' === type) errors.push(FeatureFlagError.TIMEOUT);
|
|
485
|
+
else if ('api_error' === type && void 0 !== statusCode) errors.push(FeatureFlagError.apiError(statusCode));
|
|
486
|
+
else if ('connection_error' === type) errors.push(FeatureFlagError.CONNECTION_ERROR);
|
|
487
|
+
else errors.push(FeatureFlagError.UNKNOWN_ERROR);
|
|
488
|
+
} else if (storedDetails) {
|
|
489
|
+
if (storedDetails.errorsWhileComputingFlags) errors.push(FeatureFlagError.ERRORS_WHILE_COMPUTING);
|
|
490
|
+
if (isQuotaLimited) errors.push(FeatureFlagError.QUOTA_LIMITED);
|
|
491
|
+
else if (void 0 === flagValue && !featureFlag) errors.push(FeatureFlagError.FLAG_MISSING);
|
|
492
|
+
}
|
|
461
493
|
const bootstrappedResponse = this.getBootstrappedFeatureFlags()?.[key];
|
|
462
494
|
const bootstrappedPayload = this.getBootstrappedFeatureFlagPayloads()?.[key];
|
|
463
495
|
const featureFlagError = errors.length > 0 ? errors.join(',') : void 0;
|
|
464
496
|
this.flagCallReported[key] = true;
|
|
465
497
|
const properties = {
|
|
466
498
|
$feature_flag: key,
|
|
467
|
-
$feature_flag_response:
|
|
499
|
+
$feature_flag_response: flagValue,
|
|
468
500
|
...maybeAdd('$feature_flag_id', featureFlag?.metadata?.id),
|
|
469
501
|
...maybeAdd('$feature_flag_version', featureFlag?.metadata?.version),
|
|
470
502
|
...maybeAdd('$feature_flag_reason', featureFlag?.reason?.description ?? featureFlag?.reason?.code),
|
|
@@ -477,14 +509,43 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
477
509
|
};
|
|
478
510
|
this.capture('$feature_flag_called', properties);
|
|
479
511
|
}
|
|
480
|
-
|
|
512
|
+
if (void 0 === flagValue) switch(options.missingFlagBehavior){
|
|
513
|
+
case 'getFeatureFlagPayload':
|
|
514
|
+
return details ? {
|
|
515
|
+
key,
|
|
516
|
+
enabled: false,
|
|
517
|
+
payload: null
|
|
518
|
+
} : void 0;
|
|
519
|
+
case 'getFeatureFlag':
|
|
520
|
+
return details && Object.keys(details.flags).length ? {
|
|
521
|
+
key,
|
|
522
|
+
enabled: false,
|
|
523
|
+
payload: null
|
|
524
|
+
} : void 0;
|
|
525
|
+
case void 0:
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
const rawPayload = featureFlag?.metadata?.payload;
|
|
529
|
+
const payload = void 0 !== rawPayload ? parsePayload(rawPayload) : null;
|
|
530
|
+
return {
|
|
531
|
+
key,
|
|
532
|
+
enabled: getEnabledFromValue(flagValue),
|
|
533
|
+
variant: getVariantFromValue(flagValue),
|
|
534
|
+
payload
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
getFeatureFlag(key) {
|
|
538
|
+
const result = this._getFeatureFlagResult(key, {
|
|
539
|
+
missingFlagBehavior: 'getFeatureFlag'
|
|
540
|
+
});
|
|
541
|
+
return result?.variant ?? result?.enabled;
|
|
481
542
|
}
|
|
482
543
|
getFeatureFlagPayload(key) {
|
|
483
|
-
const
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
return
|
|
544
|
+
const result = this._getFeatureFlagResult(key, {
|
|
545
|
+
missingFlagBehavior: 'getFeatureFlagPayload',
|
|
546
|
+
sendEvent: false
|
|
547
|
+
});
|
|
548
|
+
return result?.payload;
|
|
488
549
|
}
|
|
489
550
|
getFeatureFlagPayloads() {
|
|
490
551
|
return this.getFeatureFlagDetails()?.featureFlagPayloads;
|
|
@@ -524,7 +585,9 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
524
585
|
return !!response;
|
|
525
586
|
}
|
|
526
587
|
reloadFeatureFlags(options) {
|
|
527
|
-
this.flagsAsync(
|
|
588
|
+
this.flagsAsync({
|
|
589
|
+
sendAnonDistinctId: true
|
|
590
|
+
}).then((res)=>{
|
|
528
591
|
options?.cb?.(void 0, res?.featureFlags);
|
|
529
592
|
}).catch((e)=>{
|
|
530
593
|
options?.cb?.(e, void 0);
|
|
@@ -535,7 +598,9 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
535
598
|
return await this.remoteConfigAsync();
|
|
536
599
|
}
|
|
537
600
|
async reloadFeatureFlagsAsync(sendAnonDistinctId) {
|
|
538
|
-
return (await this.flagsAsync(
|
|
601
|
+
return (await this.flagsAsync({
|
|
602
|
+
sendAnonDistinctId: sendAnonDistinctId
|
|
603
|
+
}))?.featureFlags;
|
|
539
604
|
}
|
|
540
605
|
onFeatureFlags(cb) {
|
|
541
606
|
return this.on('featureflags', async ()=>{
|
package/dist/types.d.ts
CHANGED
|
@@ -208,8 +208,37 @@ export type PostHogRemoteConfig = {
|
|
|
208
208
|
* Indicates if the team has any flags enabled (if not we don't need to load them)
|
|
209
209
|
*/
|
|
210
210
|
hasFeatureFlags?: boolean;
|
|
211
|
+
/**
|
|
212
|
+
* Error tracking remote config.
|
|
213
|
+
* Either a boolean (false = disabled) or a map with configuration.
|
|
214
|
+
* When a map, `autocaptureExceptions` (boolean) controls whether automatic exception capture is enabled remotely.
|
|
215
|
+
*/
|
|
216
|
+
errorTracking?: boolean | {
|
|
217
|
+
[key: string]: JsonType;
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* Capture performance remote config.
|
|
221
|
+
* Either a boolean (false = disabled) or a map with configuration.
|
|
222
|
+
* When a map, `network_timing` (boolean) controls whether network timing capture is enabled remotely.
|
|
223
|
+
*/
|
|
224
|
+
capturePerformance?: boolean | {
|
|
225
|
+
[key: string]: JsonType;
|
|
226
|
+
};
|
|
211
227
|
};
|
|
212
228
|
export type FeatureFlagValue = string | boolean;
|
|
229
|
+
/**
|
|
230
|
+
* Result of evaluating a feature flag, including both the flag value and its payload.
|
|
231
|
+
*/
|
|
232
|
+
export type FeatureFlagResult = {
|
|
233
|
+
readonly key: string;
|
|
234
|
+
readonly enabled: boolean;
|
|
235
|
+
readonly variant?: string;
|
|
236
|
+
readonly payload?: JsonType;
|
|
237
|
+
};
|
|
238
|
+
export type FeatureFlagResultOptions = {
|
|
239
|
+
/** Whether to send a $feature_flag_called event. Defaults to true. */
|
|
240
|
+
sendEvent?: boolean;
|
|
241
|
+
};
|
|
213
242
|
export type PostHogFlagsResponse = Omit<PostHogRemoteConfig, 'hasFeatureFlags'> & {
|
|
214
243
|
featureFlags: {
|
|
215
244
|
[key: string]: FeatureFlagValue;
|
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/package.json
CHANGED
package/src/featureFlagUtils.ts
CHANGED
|
@@ -183,10 +183,10 @@ export const updateFlagValue = (flag: FeatureFlagDetail, value: FeatureFlagValue
|
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
function getEnabledFromValue(value: FeatureFlagValue): boolean {
|
|
186
|
+
export function getEnabledFromValue(value: FeatureFlagValue): boolean {
|
|
187
187
|
return typeof value === 'string' ? true : value
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
function getVariantFromValue(value: FeatureFlagValue): string | undefined {
|
|
190
|
+
export function getVariantFromValue(value: FeatureFlagValue): string | undefined {
|
|
191
191
|
return typeof value === 'string' ? value : undefined
|
|
192
192
|
}
|
package/src/posthog-core.ts
CHANGED
|
@@ -8,6 +8,8 @@ import type {
|
|
|
8
8
|
JsonType,
|
|
9
9
|
PostHogRemoteConfig,
|
|
10
10
|
FeatureFlagValue,
|
|
11
|
+
FeatureFlagResult,
|
|
12
|
+
FeatureFlagResultOptions,
|
|
11
13
|
PostHogV2FlagsResponse,
|
|
12
14
|
PostHogV1FlagsResponse,
|
|
13
15
|
PostHogFeatureFlagDetails,
|
|
@@ -21,10 +23,13 @@ import type {
|
|
|
21
23
|
} from './types'
|
|
22
24
|
import {
|
|
23
25
|
createFlagsResponseFromFlagsAndPayloads,
|
|
26
|
+
getEnabledFromValue,
|
|
24
27
|
getFeatureFlagValue,
|
|
25
28
|
getFlagValuesFromFlags,
|
|
26
29
|
getPayloadsFromFlags,
|
|
30
|
+
getVariantFromValue,
|
|
27
31
|
normalizeFlagsResponse,
|
|
32
|
+
parsePayload,
|
|
28
33
|
updateFlagValue,
|
|
29
34
|
} from './featureFlagUtils'
|
|
30
35
|
import { Compression, FeatureFlagError, PostHogPersistedProperty } from './types'
|
|
@@ -33,9 +38,13 @@ import { uuidv7 } from './vendor/uuidv7'
|
|
|
33
38
|
import { isEmptyObject, isNullish, isPlainError, getPersonPropertiesHash, isObject } from './utils'
|
|
34
39
|
|
|
35
40
|
// Stores the parameters for a pending feature flags reload request
|
|
36
|
-
interface
|
|
37
|
-
sendAnonDistinctId
|
|
38
|
-
fetchConfig
|
|
41
|
+
interface FlagsAsyncOptions {
|
|
42
|
+
sendAnonDistinctId?: boolean
|
|
43
|
+
fetchConfig?: boolean
|
|
44
|
+
triggerOnRemoteConfig?: boolean
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
interface PendingFlagsRequest extends FlagsAsyncOptions {
|
|
39
48
|
resolve: (value: PostHogFeatureFlagsResponse | undefined) => void
|
|
40
49
|
reject: (reason?: unknown) => void
|
|
41
50
|
}
|
|
@@ -522,10 +531,8 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
522
531
|
/***
|
|
523
532
|
*** FEATURE FLAGS
|
|
524
533
|
***/
|
|
525
|
-
protected async flagsAsync(
|
|
526
|
-
sendAnonDistinctId
|
|
527
|
-
fetchConfig: boolean = true
|
|
528
|
-
): Promise<PostHogFeatureFlagsResponse | undefined> {
|
|
534
|
+
protected async flagsAsync(options?: FlagsAsyncOptions): Promise<PostHogFeatureFlagsResponse | undefined> {
|
|
535
|
+
const { sendAnonDistinctId = true, fetchConfig = false, triggerOnRemoteConfig = false } = options ?? {}
|
|
529
536
|
await this._initPromise
|
|
530
537
|
if (this._flagsResponsePromise) {
|
|
531
538
|
// Queue the reload request instead of dropping it
|
|
@@ -537,10 +544,41 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
537
544
|
}
|
|
538
545
|
// Return a promise that resolves when the pending request completes
|
|
539
546
|
return new Promise((resolve, reject) => {
|
|
540
|
-
this._pendingFlagsRequest = { sendAnonDistinctId, fetchConfig, resolve, reject }
|
|
547
|
+
this._pendingFlagsRequest = { sendAnonDistinctId, fetchConfig, triggerOnRemoteConfig, resolve, reject }
|
|
541
548
|
})
|
|
542
549
|
}
|
|
543
|
-
return this._flagsAsync(sendAnonDistinctId, fetchConfig)
|
|
550
|
+
return this._flagsAsync({ sendAnonDistinctId, fetchConfig, triggerOnRemoteConfig })
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/**
|
|
554
|
+
* Called when remote config has been loaded (from either the remote config endpoint or the flags endpoint).
|
|
555
|
+
* Override in subclasses to react to remote config changes (e.g., gating error tracking, session replay features).
|
|
556
|
+
*
|
|
557
|
+
* The full response is passed so consumers can read whatever fields they need.
|
|
558
|
+
* This is called exactly once per remote config load cycle.
|
|
559
|
+
*
|
|
560
|
+
* @param _response The remote config or flags response containing config fields
|
|
561
|
+
*/
|
|
562
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
563
|
+
protected onRemoteConfig(_response: PostHogRemoteConfig): void {
|
|
564
|
+
// Override in subclasses
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
/**
|
|
568
|
+
* Conditionally triggers onRemoteConfig if requested.
|
|
569
|
+
* Only _remoteConfigAsync passes triggerOnRemoteConfig=true to apply remote config values
|
|
570
|
+
* (errorTracking, capturePerformance, etc.) on initial load.
|
|
571
|
+
* User-triggered reloadFeatureFlags/reloadFeatureFlagsAsync don't set this,
|
|
572
|
+
* so they won't re-trigger onRemoteConfig or reinstall/uninstall integrations.
|
|
573
|
+
*/
|
|
574
|
+
private maybeNotifyRemoteConfig(shouldTrigger: boolean, response: PostHogRemoteConfig): void {
|
|
575
|
+
if (shouldTrigger) {
|
|
576
|
+
try {
|
|
577
|
+
this.onRemoteConfig(response)
|
|
578
|
+
} catch (e) {
|
|
579
|
+
this._logger.error('Error in onRemoteConfig callback:', e)
|
|
580
|
+
}
|
|
581
|
+
}
|
|
544
582
|
}
|
|
545
583
|
|
|
546
584
|
private cacheSessionReplay(source: string, response?: PostHogRemoteConfig): void {
|
|
@@ -605,19 +643,26 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
605
643
|
this.cacheSessionReplay('remote config', response)
|
|
606
644
|
|
|
607
645
|
// we only dont load flags if the remote config has no feature flags
|
|
646
|
+
let willLoadFlags = false
|
|
608
647
|
if (response.hasFeatureFlags === false) {
|
|
609
648
|
// resetting flags to empty object
|
|
610
649
|
this.setKnownFeatureFlagDetails({ flags: {} })
|
|
611
650
|
|
|
612
651
|
this._logger.warn('Remote config has no feature flags, will not load feature flags.')
|
|
613
652
|
} else if (this.preloadFeatureFlags !== false) {
|
|
614
|
-
|
|
653
|
+
willLoadFlags = true
|
|
654
|
+
this.flagsAsync({ sendAnonDistinctId: true, fetchConfig: true, triggerOnRemoteConfig: true })
|
|
615
655
|
}
|
|
616
656
|
|
|
617
657
|
if (!response.supportedCompression?.includes(Compression.GZipJS)) {
|
|
618
658
|
this.disableCompression = true
|
|
619
659
|
}
|
|
620
660
|
|
|
661
|
+
// Notify onRemoteConfig only if flags won't be loaded.
|
|
662
|
+
// When flags will be loaded, _flagsAsync will call onRemoteConfig instead
|
|
663
|
+
// (via triggerOnRemoteConfig=true), ensuring it fires exactly once.
|
|
664
|
+
this.maybeNotifyRemoteConfig(!willLoadFlags, response)
|
|
665
|
+
|
|
621
666
|
remoteConfig = response
|
|
622
667
|
}
|
|
623
668
|
|
|
@@ -630,10 +675,10 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
630
675
|
return this._remoteConfigResponsePromise
|
|
631
676
|
}
|
|
632
677
|
|
|
633
|
-
private async _flagsAsync(
|
|
634
|
-
sendAnonDistinctId
|
|
635
|
-
fetchConfig
|
|
636
|
-
|
|
678
|
+
private async _flagsAsync(options?: FlagsAsyncOptions): Promise<PostHogFeatureFlagsResponse | undefined> {
|
|
679
|
+
const sendAnonDistinctId = options?.sendAnonDistinctId ?? true
|
|
680
|
+
const fetchConfig = options?.fetchConfig ?? false
|
|
681
|
+
const triggerOnRemoteConfig = options?.triggerOnRemoteConfig ?? false
|
|
637
682
|
this._flagsResponsePromise = this._initPromise
|
|
638
683
|
.then(async () => {
|
|
639
684
|
const distinctId = this.getDistinctId()
|
|
@@ -675,6 +720,7 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
675
720
|
this._logger.warn(
|
|
676
721
|
'[FEATURE FLAGS] Feature flags quota limit exceeded. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts'
|
|
677
722
|
)
|
|
723
|
+
this.maybeNotifyRemoteConfig(triggerOnRemoteConfig, res)
|
|
678
724
|
return res
|
|
679
725
|
}
|
|
680
726
|
if (res?.featureFlags) {
|
|
@@ -711,6 +757,8 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
711
757
|
// Mark that we hit the /flags endpoint so we can capture this in the $feature_flag_called event
|
|
712
758
|
this.setPersistedProperty(PostHogPersistedProperty.FlagsEndpointWasHit, true)
|
|
713
759
|
this.cacheSessionReplay('flags', res)
|
|
760
|
+
|
|
761
|
+
this.maybeNotifyRemoteConfig(triggerOnRemoteConfig, res)
|
|
714
762
|
}
|
|
715
763
|
return res
|
|
716
764
|
})
|
|
@@ -723,7 +771,11 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
723
771
|
this._pendingFlagsRequest = undefined
|
|
724
772
|
this._logger.info('Executing pending feature flags reload.')
|
|
725
773
|
// Execute the pending request and resolve its promise with the result
|
|
726
|
-
this.flagsAsync(
|
|
774
|
+
this.flagsAsync({
|
|
775
|
+
sendAnonDistinctId: pendingRequest.sendAnonDistinctId,
|
|
776
|
+
fetchConfig: pendingRequest.fetchConfig,
|
|
777
|
+
triggerOnRemoteConfig: pendingRequest.triggerOnRemoteConfig,
|
|
778
|
+
})
|
|
727
779
|
.then(pendingRequest.resolve)
|
|
728
780
|
.catch(pendingRequest.reject)
|
|
729
781
|
}
|
|
@@ -806,61 +858,69 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
806
858
|
return getPayloadsFromFlags(details.flags)
|
|
807
859
|
}
|
|
808
860
|
|
|
809
|
-
|
|
861
|
+
getFeatureFlagResult(key: string, options?: FeatureFlagResultOptions): FeatureFlagResult | undefined {
|
|
862
|
+
return this._getFeatureFlagResult(key, options)
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
protected _getFeatureFlagResult(
|
|
866
|
+
key: string,
|
|
867
|
+
options: {
|
|
868
|
+
/** Whether to send an event that the flag was evaluated. This defaults to true,
|
|
869
|
+
* but will respect the instance-level sendFeatureFlagEvent setting.
|
|
870
|
+
*/
|
|
871
|
+
sendEvent?: boolean
|
|
872
|
+
/**
|
|
873
|
+
* Preserves the legacy missing-flag behavior of the named function.
|
|
874
|
+
* Each value matches how that function handled missing flags before getFeatureFlagResult existed:
|
|
875
|
+
* - 'getFeatureFlag': returns a default only when non-empty flags are cached
|
|
876
|
+
* - 'getFeatureFlagPayload': returns a default whenever any flags response was stored (even if empty, e.g. error/quota)
|
|
877
|
+
* Without this, missing flags simply return undefined (this is usually what you want).
|
|
878
|
+
*/
|
|
879
|
+
missingFlagBehavior?: 'getFeatureFlag' | 'getFeatureFlagPayload'
|
|
880
|
+
} = {}
|
|
881
|
+
): FeatureFlagResult | undefined {
|
|
810
882
|
const storedDetails = this.getStoredFlagDetails()
|
|
811
883
|
const details = this.getFeatureFlagDetails()
|
|
812
|
-
const errors: string[] = []
|
|
813
884
|
const isQuotaLimited = storedDetails?.quotaLimited?.includes(QuotaLimitedFeature.FeatureFlags)
|
|
814
|
-
|
|
815
|
-
if (storedDetails?.requestError) {
|
|
816
|
-
const { type, statusCode } = storedDetails.requestError
|
|
817
|
-
if (type === 'timeout') {
|
|
818
|
-
errors.push(FeatureFlagError.TIMEOUT)
|
|
819
|
-
} else if (type === 'api_error' && statusCode !== undefined) {
|
|
820
|
-
errors.push(FeatureFlagError.apiError(statusCode))
|
|
821
|
-
} else if (type === 'connection_error') {
|
|
822
|
-
errors.push(FeatureFlagError.CONNECTION_ERROR)
|
|
823
|
-
} else {
|
|
824
|
-
errors.push(FeatureFlagError.UNKNOWN_ERROR)
|
|
825
|
-
}
|
|
826
|
-
} else if (storedDetails) {
|
|
827
|
-
if (storedDetails.errorsWhileComputingFlags) {
|
|
828
|
-
errors.push(FeatureFlagError.ERRORS_WHILE_COMPUTING)
|
|
829
|
-
}
|
|
830
|
-
if (isQuotaLimited) {
|
|
831
|
-
errors.push(FeatureFlagError.QUOTA_LIMITED)
|
|
832
|
-
}
|
|
833
|
-
}
|
|
834
|
-
|
|
835
885
|
const featureFlag = details?.flags[key]
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
if (
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
886
|
+
const sendEvent = (options.sendEvent ?? this.sendFeatureFlagEvent) && !this.flagCallReported[key]
|
|
887
|
+
const flagValue: FeatureFlagValue | undefined = getFeatureFlagValue(featureFlag)
|
|
888
|
+
|
|
889
|
+
if (sendEvent) {
|
|
890
|
+
const errors: string[] = []
|
|
891
|
+
if (storedDetails?.requestError) {
|
|
892
|
+
const { type, statusCode } = storedDetails.requestError
|
|
893
|
+
if (type === 'timeout') {
|
|
894
|
+
errors.push(FeatureFlagError.TIMEOUT)
|
|
895
|
+
} else if (type === 'api_error' && statusCode !== undefined) {
|
|
896
|
+
errors.push(FeatureFlagError.apiError(statusCode))
|
|
897
|
+
} else if (type === 'connection_error') {
|
|
898
|
+
errors.push(FeatureFlagError.CONNECTION_ERROR)
|
|
899
|
+
} else {
|
|
900
|
+
errors.push(FeatureFlagError.UNKNOWN_ERROR)
|
|
901
|
+
}
|
|
902
|
+
} else if (storedDetails) {
|
|
903
|
+
if (storedDetails.errorsWhileComputingFlags) {
|
|
904
|
+
errors.push(FeatureFlagError.ERRORS_WHILE_COMPUTING)
|
|
905
|
+
}
|
|
906
|
+
if (isQuotaLimited) {
|
|
907
|
+
errors.push(FeatureFlagError.QUOTA_LIMITED)
|
|
908
|
+
} else if (flagValue === undefined && !featureFlag) {
|
|
909
|
+
// Track missing flags only when we had a successful, non-limited request.
|
|
910
|
+
// When quota limited or request failed, we cannot determine if the flag is truly missing.
|
|
911
|
+
errors.push(FeatureFlagError.FLAG_MISSING)
|
|
912
|
+
}
|
|
850
913
|
}
|
|
851
|
-
}
|
|
852
914
|
|
|
853
|
-
if (this.sendFeatureFlagEvent && !this.flagCallReported[key]) {
|
|
854
915
|
const bootstrappedResponse = this.getBootstrappedFeatureFlags()?.[key]
|
|
855
916
|
const bootstrappedPayload = this.getBootstrappedFeatureFlagPayloads()?.[key]
|
|
856
|
-
|
|
857
917
|
const featureFlagError = errors.length > 0 ? errors.join(',') : undefined
|
|
858
918
|
|
|
859
919
|
this.flagCallReported[key] = true
|
|
860
920
|
|
|
861
921
|
const properties: Record<string, any> = {
|
|
862
922
|
$feature_flag: key,
|
|
863
|
-
$feature_flag_response:
|
|
923
|
+
$feature_flag_response: flagValue,
|
|
864
924
|
...maybeAdd('$feature_flag_id', featureFlag?.metadata?.id),
|
|
865
925
|
...maybeAdd('$feature_flag_version', featureFlag?.metadata?.version),
|
|
866
926
|
...maybeAdd('$feature_flag_reason', featureFlag?.reason?.description ?? featureFlag?.reason?.code),
|
|
@@ -876,24 +936,38 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
876
936
|
this.capture('$feature_flag_called', properties)
|
|
877
937
|
}
|
|
878
938
|
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
939
|
+
if (flagValue === undefined) {
|
|
940
|
+
// TRICKY: getFeatureFlagPayload and getFeatureFlag had different criteria for
|
|
941
|
+
// "missing flag" vs "flags not loaded" return values before
|
|
942
|
+
// _getFeatureFlagResult existed. Preserved for backward compatibility.
|
|
943
|
+
switch (options.missingFlagBehavior) {
|
|
944
|
+
case 'getFeatureFlagPayload':
|
|
945
|
+
return details ? { key, enabled: false, payload: null } : undefined
|
|
946
|
+
case 'getFeatureFlag':
|
|
947
|
+
return details && Object.keys(details.flags).length ? { key, enabled: false, payload: null } : undefined
|
|
948
|
+
case undefined:
|
|
949
|
+
return undefined
|
|
950
|
+
}
|
|
887
951
|
}
|
|
888
952
|
|
|
889
|
-
const
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
953
|
+
const rawPayload = featureFlag?.metadata?.payload
|
|
954
|
+
const payload = rawPayload !== undefined ? parsePayload(rawPayload) : null
|
|
955
|
+
return {
|
|
956
|
+
key,
|
|
957
|
+
enabled: getEnabledFromValue(flagValue),
|
|
958
|
+
variant: getVariantFromValue(flagValue),
|
|
959
|
+
payload,
|
|
894
960
|
}
|
|
961
|
+
}
|
|
895
962
|
|
|
896
|
-
|
|
963
|
+
getFeatureFlag(key: string): FeatureFlagValue | undefined {
|
|
964
|
+
const result = this._getFeatureFlagResult(key, { missingFlagBehavior: 'getFeatureFlag' })
|
|
965
|
+
return result?.variant ?? result?.enabled
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
getFeatureFlagPayload(key: string): JsonType | undefined {
|
|
969
|
+
const result = this._getFeatureFlagResult(key, { missingFlagBehavior: 'getFeatureFlagPayload', sendEvent: false })
|
|
970
|
+
return result?.payload
|
|
897
971
|
}
|
|
898
972
|
|
|
899
973
|
getFeatureFlagPayloads(): PostHogFlagsResponse['featureFlagPayloads'] | undefined {
|
|
@@ -961,7 +1035,7 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
961
1035
|
|
|
962
1036
|
// Used when we want to trigger the reload but we don't care about the result
|
|
963
1037
|
reloadFeatureFlags(options?: { cb?: (err?: Error, flags?: PostHogFlagsResponse['featureFlags']) => void }): void {
|
|
964
|
-
this.flagsAsync(true)
|
|
1038
|
+
this.flagsAsync({ sendAnonDistinctId: true })
|
|
965
1039
|
.then((res) => {
|
|
966
1040
|
options?.cb?.(undefined, res?.featureFlags)
|
|
967
1041
|
})
|
|
@@ -980,7 +1054,7 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
980
1054
|
async reloadFeatureFlagsAsync(
|
|
981
1055
|
sendAnonDistinctId?: boolean
|
|
982
1056
|
): Promise<PostHogFlagsResponse['featureFlags'] | undefined> {
|
|
983
|
-
return (await this.flagsAsync(sendAnonDistinctId
|
|
1057
|
+
return (await this.flagsAsync({ sendAnonDistinctId: sendAnonDistinctId }))?.featureFlags
|
|
984
1058
|
}
|
|
985
1059
|
|
|
986
1060
|
onFeatureFlags(cb: (flags: PostHogFlagsResponse['featureFlags']) => void): () => void {
|
package/src/types.ts
CHANGED
|
@@ -225,10 +225,47 @@ export type PostHogRemoteConfig = {
|
|
|
225
225
|
* Indicates if the team has any flags enabled (if not we don't need to load them)
|
|
226
226
|
*/
|
|
227
227
|
hasFeatureFlags?: boolean
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Error tracking remote config.
|
|
231
|
+
* Either a boolean (false = disabled) or a map with configuration.
|
|
232
|
+
* When a map, `autocaptureExceptions` (boolean) controls whether automatic exception capture is enabled remotely.
|
|
233
|
+
*/
|
|
234
|
+
errorTracking?:
|
|
235
|
+
| boolean
|
|
236
|
+
| {
|
|
237
|
+
[key: string]: JsonType
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Capture performance remote config.
|
|
242
|
+
* Either a boolean (false = disabled) or a map with configuration.
|
|
243
|
+
* When a map, `network_timing` (boolean) controls whether network timing capture is enabled remotely.
|
|
244
|
+
*/
|
|
245
|
+
capturePerformance?:
|
|
246
|
+
| boolean
|
|
247
|
+
| {
|
|
248
|
+
[key: string]: JsonType
|
|
249
|
+
}
|
|
228
250
|
}
|
|
229
251
|
|
|
230
252
|
export type FeatureFlagValue = string | boolean
|
|
231
253
|
|
|
254
|
+
/**
|
|
255
|
+
* Result of evaluating a feature flag, including both the flag value and its payload.
|
|
256
|
+
*/
|
|
257
|
+
export type FeatureFlagResult = {
|
|
258
|
+
readonly key: string
|
|
259
|
+
readonly enabled: boolean
|
|
260
|
+
readonly variant?: string
|
|
261
|
+
readonly payload?: JsonType
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
export type FeatureFlagResultOptions = {
|
|
265
|
+
/** Whether to send a $feature_flag_called event. Defaults to true. */
|
|
266
|
+
sendEvent?: boolean
|
|
267
|
+
}
|
|
268
|
+
|
|
232
269
|
export type PostHogFlagsResponse = Omit<PostHogRemoteConfig, 'hasFeatureFlags'> & {
|
|
233
270
|
featureFlags: {
|
|
234
271
|
[key: string]: FeatureFlagValue
|