@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.
@@ -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"}
@@ -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 };
@@ -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(sendAnonDistinctId?: boolean, fetchConfig?: boolean): Promise<PostHogFeatureFlagsResponse | undefined>;
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":"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"}
1
+ {"version":3,"file":"posthog-core.d.ts","sourceRoot":"","sources":["../src/posthog-core.ts"],"names":[],"mappings":"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"}
@@ -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(sendAnonDistinctId = true, fetchConfig = true) {
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(sendAnonDistinctId, fetchConfig);
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) this.reloadFeatureFlags();
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(sendAnonDistinctId = true, fetchConfig = true) {
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(pendingRequest.sendAnonDistinctId, pendingRequest.fetchConfig).then(pendingRequest.resolve).catch(pendingRequest.reject);
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
- getFeatureFlag(key) {
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
- let response = (0, external_featureFlagUtils_js_namespaceObject.getFeatureFlagValue)(featureFlag);
483
- if (void 0 === response) {
484
- const hasCachedFlags = details && Object.keys(details.flags).length > 0;
485
- if (hasCachedFlags) response = false;
486
- if (details && !featureFlag && !storedDetails?.requestError && !isQuotaLimited) errors.push(external_types_js_namespaceObject.FeatureFlagError.FLAG_MISSING);
487
- }
488
- if (this.sendFeatureFlagEvent && !this.flagCallReported[key]) {
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: 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
- return response;
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 payloads = this.getFeatureFlagPayloads();
512
- if (!payloads) return;
513
- const response = payloads[key];
514
- if (void 0 === response) return null;
515
- return response;
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(true).then((res)=>{
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(sendAnonDistinctId ?? true))?.featureFlags;
629
+ return (await this.flagsAsync({
630
+ sendAnonDistinctId: sendAnonDistinctId
631
+ }))?.featureFlags;
567
632
  }
568
633
  onFeatureFlags(cb) {
569
634
  return this.on('featureflags', async ()=>{
@@ -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(sendAnonDistinctId = true, fetchConfig = true) {
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(sendAnonDistinctId, fetchConfig);
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) this.reloadFeatureFlags();
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(sendAnonDistinctId = true, fetchConfig = true) {
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(pendingRequest.sendAnonDistinctId, pendingRequest.fetchConfig).then(pendingRequest.resolve).catch(pendingRequest.reject);
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
- getFeatureFlag(key) {
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
- let response = getFeatureFlagValue(featureFlag);
455
- if (void 0 === response) {
456
- const hasCachedFlags = details && Object.keys(details.flags).length > 0;
457
- if (hasCachedFlags) response = false;
458
- if (details && !featureFlag && !storedDetails?.requestError && !isQuotaLimited) errors.push(FeatureFlagError.FLAG_MISSING);
459
- }
460
- if (this.sendFeatureFlagEvent && !this.flagCallReported[key]) {
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: 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
- return response;
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 payloads = this.getFeatureFlagPayloads();
484
- if (!payloads) return;
485
- const response = payloads[key];
486
- if (void 0 === response) return null;
487
- return response;
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(true).then((res)=>{
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(sendAnonDistinctId ?? true))?.featureFlags;
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;
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@posthog/core",
3
- "version": "1.21.0",
3
+ "version": "1.23.0",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -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
  }
@@ -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 PendingFlagsRequest {
37
- sendAnonDistinctId: boolean
38
- fetchConfig: boolean
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: boolean = true,
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
- this.reloadFeatureFlags()
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: boolean = true,
635
- fetchConfig: boolean = true
636
- ): Promise<PostHogFeatureFlagsResponse | undefined> {
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(pendingRequest.sendAnonDistinctId, pendingRequest.fetchConfig)
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
- getFeatureFlag(key: string): FeatureFlagValue | undefined {
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
- let response: FeatureFlagValue | undefined = getFeatureFlagValue(featureFlag)
838
-
839
- if (response === undefined) {
840
- // Return false for missing flags when we have successfully loaded flags.
841
- const hasCachedFlags = details && Object.keys(details.flags).length > 0
842
- if (hasCachedFlags) {
843
- response = false
844
- }
845
-
846
- // Track missing flags only when we had a successful, non-limited request.
847
- // When quota limited or request failed, we cannot determine if the flag is truly missing.
848
- if (details && !featureFlag && !storedDetails?.requestError && !isQuotaLimited) {
849
- errors.push(FeatureFlagError.FLAG_MISSING)
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: 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
- return response
880
- }
881
-
882
- getFeatureFlagPayload(key: string): JsonType | undefined {
883
- const payloads = this.getFeatureFlagPayloads()
884
-
885
- if (!payloads) {
886
- return undefined
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 response = payloads[key]
890
-
891
- // Undefined means a loading or missing data issue. Null means evaluation happened and there was no match
892
- if (response === undefined) {
893
- return null
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
- return response
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 ?? true))?.featureFlags
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