@posthog/core 1.33.0 → 1.35.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.
@@ -26,6 +26,7 @@ __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
27
  toOtlpKeyValueList: ()=>toOtlpKeyValueList,
28
28
  getOtlpSeverityNumber: ()=>getOtlpSeverityNumber,
29
+ buildResourceAttributes: ()=>buildResourceAttributes,
29
30
  getOtlpSeverityText: ()=>getOtlpSeverityText,
30
31
  buildOtlpLogsPayload: ()=>buildOtlpLogsPayload,
31
32
  buildOtlpLogRecord: ()=>buildOtlpLogRecord,
@@ -142,6 +143,20 @@ function buildOtlpLogRecord(options, sdkContext) {
142
143
  if (!(0, index_js_namespaceObject.isUndefined)(options.trace_flags)) record.flags = options.trace_flags;
143
144
  return record;
144
145
  }
146
+ function buildResourceAttributes(config, scopeName, scopeVersion) {
147
+ return {
148
+ ...config.resourceAttributes,
149
+ 'service.name': config.serviceName || 'unknown_service',
150
+ ...config.environment && {
151
+ 'deployment.environment': config.environment
152
+ },
153
+ ...config.serviceVersion && {
154
+ 'service.version': config.serviceVersion
155
+ },
156
+ 'telemetry.sdk.name': scopeName,
157
+ 'telemetry.sdk.version': scopeVersion
158
+ };
159
+ }
145
160
  function buildOtlpLogsPayload(logRecords, resourceAttributes, scopeName, scopeVersion) {
146
161
  return {
147
162
  resourceLogs: [
@@ -164,6 +179,7 @@ function buildOtlpLogsPayload(logRecords, resourceAttributes, scopeName, scopeVe
164
179
  }
165
180
  exports.buildOtlpLogRecord = __webpack_exports__.buildOtlpLogRecord;
166
181
  exports.buildOtlpLogsPayload = __webpack_exports__.buildOtlpLogsPayload;
182
+ exports.buildResourceAttributes = __webpack_exports__.buildResourceAttributes;
167
183
  exports.getOtlpSeverityNumber = __webpack_exports__.getOtlpSeverityNumber;
168
184
  exports.getOtlpSeverityText = __webpack_exports__.getOtlpSeverityText;
169
185
  exports.toOtlpAnyValue = __webpack_exports__.toOtlpAnyValue;
@@ -171,6 +187,7 @@ exports.toOtlpKeyValueList = __webpack_exports__.toOtlpKeyValueList;
171
187
  for(var __webpack_i__ in __webpack_exports__)if (-1 === [
172
188
  "buildOtlpLogRecord",
173
189
  "buildOtlpLogsPayload",
190
+ "buildResourceAttributes",
174
191
  "getOtlpSeverityNumber",
175
192
  "getOtlpSeverityText",
176
193
  "toOtlpAnyValue",
@@ -109,6 +109,20 @@ function buildOtlpLogRecord(options, sdkContext) {
109
109
  if (!isUndefined(options.trace_flags)) record.flags = options.trace_flags;
110
110
  return record;
111
111
  }
112
+ function buildResourceAttributes(config, scopeName, scopeVersion) {
113
+ return {
114
+ ...config.resourceAttributes,
115
+ 'service.name': config.serviceName || 'unknown_service',
116
+ ...config.environment && {
117
+ 'deployment.environment': config.environment
118
+ },
119
+ ...config.serviceVersion && {
120
+ 'service.version': config.serviceVersion
121
+ },
122
+ 'telemetry.sdk.name': scopeName,
123
+ 'telemetry.sdk.version': scopeVersion
124
+ };
125
+ }
112
126
  function buildOtlpLogsPayload(logRecords, resourceAttributes, scopeName, scopeVersion) {
113
127
  return {
114
128
  resourceLogs: [
@@ -129,4 +143,4 @@ function buildOtlpLogsPayload(logRecords, resourceAttributes, scopeName, scopeVe
129
143
  ]
130
144
  };
131
145
  }
132
- export { buildOtlpLogRecord, buildOtlpLogsPayload, getOtlpSeverityNumber, getOtlpSeverityText, toOtlpAnyValue, toOtlpKeyValueList };
146
+ export { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText, toOtlpAnyValue, toOtlpKeyValueList };
@@ -1,4 +1,4 @@
1
- export type { LogSeverityLevel, OtlpSeverityText, OtlpSeverityEntry, LogAttributeValue, LogAttributes, CaptureLogOptions, OtlpAnyValue, OtlpKeyValue, OtlpLogRecord, OtlpLogsPayload, } from '@posthog/types';
1
+ export type { LogSeverityLevel, OtlpSeverityText, OtlpSeverityEntry, LogAttributeValue, LogAttributes, CaptureLogOptions, OtlpAnyValue, OtlpKeyValue, OtlpLogRecord, OtlpLogsPayload, BeforeSendLogFn, } from '@posthog/types';
2
2
  /**
3
3
  * SDK-internal context the host SDK passes to `buildOtlpLogRecord` at capture
4
4
  * time. Each SDK populates the fields that apply to it: browser fills
@@ -20,42 +20,26 @@ export interface LogSdkContext {
20
20
  }
21
21
  import type { Logger as CaptureLoggerType } from '@posthog/types';
22
22
  export type CaptureLogger = CaptureLoggerType;
23
- import type { LogAttributeValue, CaptureLogOptions, OtlpLogRecord } from '@posthog/types';
23
+ import type { LogAttributeValue, OtlpLogRecord, OtlpLogsPayload, BeforeSendLogFn } from '@posthog/types';
24
+ import type { PostHogPersistedProperty } from '../types';
25
+ import type { SendLogsBatchOutcome } from '../posthog-core-stateless';
24
26
  export interface BufferedLogEntry {
25
27
  record: OtlpLogRecord;
26
28
  }
27
29
  /**
28
- * Pre-send filter. Inspect, mutate, or drop a captured record before it
29
- * enters the rate-cap or the queue. Return the (possibly transformed) record
30
- * to keep it; return `null` to drop it.
31
- *
32
- * Configure as a single fn or an array. Arrays form a left-to-right chain:
33
- * each fn receives the previous fn's return value. A `null` from any link
34
- * short-circuits the chain and drops the record.
35
- *
36
- * Runs *before* the rate cap so dropped records don't consume the
37
- * per-interval budget. Throwing fns are logged and skipped — the chain
38
- * continues with the previous return value, so a buggy filter degrades to a
39
- * no-op rather than crashing `captureLog()`.
40
- *
41
- * @example Redact secrets from log bodies
42
- * ```ts
43
- * logs: {
44
- * beforeSend: (record) => ({
45
- * ...record,
46
- * body: record.body.replace(/api_key=\S+/g, 'api_key=[REDACTED]'),
47
- * }),
48
- * }
49
- * ```
50
- *
51
- * @example Drop noisy debug logs in production
52
- * ```ts
53
- * logs: {
54
- * beforeSend: (record) => (record.level === 'debug' ? null : record),
55
- * }
56
- * ```
30
+ * The minimal host surface `PostHogLogs` depends on. `PostHogCoreStateless`
31
+ * satisfies it structurally (mobile/node); the browser supplies an adapter
32
+ * backed by its own persistence and request layer.
57
33
  */
58
- export type BeforeSendLogFn = (record: CaptureLogOptions) => CaptureLogOptions | null;
34
+ export interface LogsHost {
35
+ readonly isDisabled: boolean;
36
+ readonly optedOut: boolean;
37
+ getPersistedProperty<T>(key: PostHogPersistedProperty): T | undefined;
38
+ setPersistedProperty<T>(key: PostHogPersistedProperty, value: T | null): void;
39
+ _sendLogsBatch(payload: OtlpLogsPayload): Promise<SendLogsBatchOutcome>;
40
+ getLibraryId(): string;
41
+ getLibraryVersion(): string;
42
+ }
59
43
  /**
60
44
  * Configuration for the logs feature on `new PostHog(key, { logs: ... })`.
61
45
  * All fields are optional; per-SDK defaults apply (mobile vs browser tune
@@ -65,7 +49,7 @@ export interface PostHogLogsConfig {
65
49
  /**
66
50
  * Service name attached to every record as the OTLP `service.name`
67
51
  * resource attribute. Used by the Logs UI for filtering / grouping.
68
- * Default: `'unknown_service'`.
52
+ * Defaults to `'unknown_service'` when unset.
69
53
  */
70
54
  serviceName?: string;
71
55
  /**
@@ -94,11 +78,11 @@ export interface PostHogLogsConfig {
94
78
  */
95
79
  flushIntervalMs?: number;
96
80
  /**
97
- * Max records held in memory before the queue evicts the oldest on push
98
- * (FIFO). Bounds memory footprint and on-disk-queue size. When the buffer
99
- * hits this size, an immediate flush is triggered to reclaim space; if
100
- * the flush hasn't completed before the next capture, the oldest record
101
- * is shifted out. Default: 100.
81
+ * Number of buffered records that triggers an immediate flush. Records also
82
+ * flush on the periodic interval and on `shutdown()`. The queue can grow past
83
+ * this while an async flush is in flight (e.g. during a synchronous burst); a
84
+ * separate, larger memory backstop evicts the oldest only once the queue
85
+ * exceeds the per-interval rate cap. Default: 100.
102
86
  */
103
87
  maxBufferSize?: number;
104
88
  /**
@@ -148,6 +132,7 @@ export interface PostHogLogsConfig {
148
132
  }
149
133
  export interface ResolvedPostHogLogsConfig extends Omit<PostHogLogsConfig, 'rateCap'> {
150
134
  maxBufferSize: number;
135
+ maxQueueSize?: number;
151
136
  flushIntervalMs: number;
152
137
  maxBatchRecordsPerPost: number;
153
138
  rateCapWindowMs: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/logs/types.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,YAAY,GAAG,YAAY,CAAA;IACtC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC9B;AAKD,OAAO,KAAK,EAAE,MAAM,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACjE,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEzF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,aAAa,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,iBAAiB,KAAK,iBAAiB,GAAG,IAAI,CAAA;AAErF;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAEtD;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAE/B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,EAAE;QACR;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB;;;WAGG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IAED;;;OAGG;IACH,UAAU,CAAC,EAAE,eAAe,GAAG,eAAe,EAAE,CAAA;CACjD;AAKD,MAAM,WAAW,yBAA0B,SAAQ,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC;IACnF,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,uBAAuB,EAAE,MAAM,CAAA;IAC/B,wBAAwB,EAAE,MAAM,CAAA;CACjC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/logs/types.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ interface FlagsAsyncOptions {
9
9
  }
10
10
  export declare abstract class PostHogCore extends PostHogCoreStateless {
11
11
  private sendFeatureFlagEvent;
12
+ private disableRemoteFeatureFlags;
12
13
  private flagCallReported;
13
14
  private _beforeSend?;
14
15
  protected _flagsResponsePromise?: Promise<PostHogFeatureFlagsResponse | undefined>;
@@ -165,6 +166,25 @@ export declare abstract class PostHogCore extends PostHogCoreStateless {
165
166
  onFeatureFlags(cb: (flags: PostHogFlagsResponse['featureFlags']) => void): () => void;
166
167
  onFeatureFlag(key: string, cb: (value: FeatureFlagValue) => void): () => void;
167
168
  overrideFeatureFlag(flags: PostHogFlagsResponse['featureFlags'] | null): Promise<void>;
169
+ /**
170
+ * Replaces (or merges into) the stored feature flags and payloads with locally supplied
171
+ * values, exactly as if they had been returned by the flags endpoint: the values are
172
+ * persisted, `getFeatureFlag()`/`getFeatureFlagPayload()` read them back, and
173
+ * `onFeatureFlags` listeners fire. Makes no network request.
174
+ *
175
+ * Intended for apps that evaluate flags outside the SDK (e.g. server-side local
176
+ * evaluation) and push the results in at runtime, typically together with the
177
+ * `disableRemoteFeatureFlags` option so the SDK never fetches flags itself.
178
+ *
179
+ * The values are cleared by `reset()`, so push them again after an identity change.
180
+ *
181
+ * @param flags - Flag keys mapped to their values (boolean, or a variant string)
182
+ * @param payloads - Optional flag keys mapped to their JSON payloads
183
+ * @param options - Set `merge: true` to merge with the currently stored flags instead of replacing them
184
+ */
185
+ updateFlags(flags: Record<string, FeatureFlagValue>, payloads?: Record<string, JsonType>, options?: {
186
+ merge?: boolean;
187
+ }): void;
168
188
  /**
169
189
  * Capture a caught exception manually
170
190
  *
@@ -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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"}
@@ -41,6 +41,7 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
41
41
  featureFlagsRequestTimeoutMs
42
42
  }), this.flagCallReported = {}, this._sessionMaxLengthSeconds = 86400, this.sessionProps = {}, this._cachedPersonProperties = null;
43
43
  this.sendFeatureFlagEvent = options?.sendFeatureFlagEvent ?? true;
44
+ this.disableRemoteFeatureFlags = options?.disableRemoteFeatureFlags ?? false;
44
45
  this._sessionExpirationTimeSeconds = options?.sessionExpirationTimeSeconds ?? 1800;
45
46
  this._personProfiles = options?.personProfiles ?? 'identified_only';
46
47
  this._beforeSend = options?.before_send;
@@ -97,7 +98,11 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
97
98
  this.clearProps();
98
99
  this._cachedPersonProperties = null;
99
100
  for (const key of Object.keys(external_types_js_namespaceObject.PostHogPersistedProperty))if (!allPropertiesToKeep.includes(external_types_js_namespaceObject.PostHogPersistedProperty[key])) this.setPersistedProperty(external_types_js_namespaceObject.PostHogPersistedProperty[key], null);
100
- this.reloadFeatureFlags();
101
+ if (this.disableRemoteFeatureFlags && !this.disabled) {
102
+ if (!allPropertiesToKeep.includes(external_types_js_namespaceObject.PostHogPersistedProperty.FeatureFlagDetails)) this.setKnownFeatureFlagDetails({
103
+ flags: {}
104
+ });
105
+ } else this.reloadFeatureFlags();
101
106
  });
102
107
  }
103
108
  getCommonEventProperties() {
@@ -312,6 +317,7 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
312
317
  const { sendAnonDistinctId = true, fetchConfig = false, triggerOnRemoteConfig = false } = options ?? {};
313
318
  await this._initPromise;
314
319
  if (this.disabled) return;
320
+ if (this.disableRemoteFeatureFlags && !fetchConfig) return void this._logger.info('Feature flags are disabled (disableRemoteFeatureFlags), skipping reload.');
315
321
  if (this._flagsResponsePromise) {
316
322
  this._logger.info('Feature flags are being loaded already, queuing reload.');
317
323
  if (this._pendingFlagsRequest) this._flagsResponsePromise.then(this._pendingFlagsRequest.resolve).catch(this._pendingFlagsRequest.reject);
@@ -375,11 +381,11 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
375
381
  this.cacheSessionReplay('remote config', response);
376
382
  let willLoadFlags = false;
377
383
  if (false === response.hasFeatureFlags) {
378
- this.setKnownFeatureFlagDetails({
384
+ if (!this.disableRemoteFeatureFlags) this.setKnownFeatureFlagDetails({
379
385
  flags: {}
380
386
  });
381
387
  this._logger.warn('Remote config has no feature flags, will not load feature flags.');
382
- } else if (false !== this.preloadFeatureFlags) {
388
+ } else if (false !== this.preloadFeatureFlags && !this.disableRemoteFeatureFlags) {
383
389
  willLoadFlags = true;
384
390
  this.flagsAsync({
385
391
  sendAnonDistinctId: true,
@@ -410,16 +416,22 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
410
416
  const deviceId = this.getPersistedProperty(external_types_js_namespaceObject.PostHogPersistedProperty.DeviceId);
411
417
  const extraProperties = {
412
418
  $anon_distinct_id: sendAnonDistinctId ? this.getAnonymousId() : void 0,
413
- $device_id: deviceId ?? void 0
419
+ $device_id: deviceId ?? void 0,
420
+ ...this.disableRemoteFeatureFlags ? {
421
+ disable_flags: true
422
+ } : {}
414
423
  };
415
424
  const result = await super.getFlags(distinctId, groups, personProperties, groupProperties, extraProperties, fetchConfig);
416
- if (!result.success) return void this.setKnownFeatureFlagDetails({
417
- flags: this.getKnownFeatureFlagDetails()?.flags ?? {},
418
- requestError: result.error
419
- });
425
+ if (!result.success) {
426
+ if (!this.disableRemoteFeatureFlags) this.setKnownFeatureFlagDetails({
427
+ flags: this.getKnownFeatureFlagDetails()?.flags ?? {},
428
+ requestError: result.error
429
+ });
430
+ return;
431
+ }
420
432
  const res = result.response;
421
433
  if (res?.quotaLimited?.includes(external_posthog_core_stateless_js_namespaceObject.QuotaLimitedFeature.FeatureFlags)) {
422
- this.setKnownFeatureFlagDetails({
434
+ if (!this.disableRemoteFeatureFlags) this.setKnownFeatureFlagDetails({
423
435
  flags: this.getKnownFeatureFlagDetails()?.flags ?? {},
424
436
  quotaLimited: res.quotaLimited
425
437
  });
@@ -428,6 +440,11 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
428
440
  return res;
429
441
  }
430
442
  if (res?.featureFlags) {
443
+ if (this.disableRemoteFeatureFlags) {
444
+ this.cacheSessionReplay('flags', res);
445
+ this.maybeNotifyRemoteConfig(triggerOnRemoteConfig, res);
446
+ return res;
447
+ }
431
448
  if (this.sendFeatureFlagEvent) this.flagCallReported = {};
432
449
  let newFeatureFlagDetails = res;
433
450
  if (res.errorsWhileComputingFlags) {
@@ -607,7 +624,9 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
607
624
  featureFlagPayloads: {},
608
625
  flags: {}
609
626
  };
610
- const flags = details.flags ?? {};
627
+ const flags = {
628
+ ...details.flags ?? {}
629
+ };
611
630
  for(const key in overriddenFlags)if (overriddenFlags[key]) flags[key] = (0, external_featureFlagUtils_js_namespaceObject.updateFlagValue)(flags[key], overriddenFlags[key]);
612
631
  else delete flags[key];
613
632
  const result = {
@@ -630,6 +649,7 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
630
649
  return !!response;
631
650
  }
632
651
  reloadFeatureFlags(options) {
652
+ if (this.disableRemoteFeatureFlags && !this.disabled) return void this._initPromise.then(()=>options?.cb?.(void 0, this.getFeatureFlags()));
633
653
  this.flagsAsync({
634
654
  sendAnonDistinctId: true
635
655
  }).then((res)=>{
@@ -643,6 +663,10 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
643
663
  return await this.remoteConfigAsync();
644
664
  }
645
665
  async reloadFeatureFlagsAsync(sendAnonDistinctId) {
666
+ if (this.disableRemoteFeatureFlags && !this.disabled) {
667
+ await this._initPromise;
668
+ return this.getFeatureFlags();
669
+ }
646
670
  return (await this.flagsAsync({
647
671
  sendAnonDistinctId: sendAnonDistinctId
648
672
  }))?.featureFlags;
@@ -665,6 +689,51 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
665
689
  return this.setPersistedProperty(external_types_js_namespaceObject.PostHogPersistedProperty.OverrideFeatureFlags, flags);
666
690
  });
667
691
  }
692
+ updateFlags(flags, payloads, options) {
693
+ this.wrap(()=>{
694
+ const existingDetails = options?.merge ? this.getKnownFeatureFlagDetails()?.flags : void 0;
695
+ const existingFlags = existingDetails ? (0, external_featureFlagUtils_js_namespaceObject.getFlagValuesFromFlags)(existingDetails) : {};
696
+ const existingPayloads = {};
697
+ for(const key in existingDetails){
698
+ const storedPayload = existingDetails[key].metadata?.payload;
699
+ if (void 0 !== storedPayload) existingPayloads[key] = (0, external_featureFlagUtils_js_namespaceObject.parsePayload)(storedPayload);
700
+ }
701
+ const finalFlags = {
702
+ ...existingFlags,
703
+ ...flags
704
+ };
705
+ const finalPayloads = {
706
+ ...existingPayloads,
707
+ ...payloads ?? {}
708
+ };
709
+ const flagDetails = {};
710
+ for (const [key, value] of Object.entries(finalFlags)){
711
+ const payload = finalPayloads[key];
712
+ let serializedPayload;
713
+ if (void 0 !== payload) try {
714
+ serializedPayload = JSON.stringify(payload);
715
+ } catch (e) {
716
+ this._logger.error(`updateFlags: could not serialize the payload for flag "${key}", dropping it.`, e);
717
+ }
718
+ flagDetails[key] = {
719
+ key,
720
+ enabled: (0, external_featureFlagUtils_js_namespaceObject.getEnabledFromValue)(value),
721
+ variant: (0, external_featureFlagUtils_js_namespaceObject.getVariantFromValue)(value),
722
+ reason: void 0,
723
+ metadata: {
724
+ id: void 0,
725
+ version: void 0,
726
+ description: void 0,
727
+ payload: serializedPayload
728
+ }
729
+ };
730
+ }
731
+ if (this.sendFeatureFlagEvent) this.flagCallReported = {};
732
+ this.setKnownFeatureFlagDetails({
733
+ flags: flagDetails
734
+ });
735
+ });
736
+ }
668
737
  captureException(error, additionalProperties, hint) {
669
738
  try {
670
739
  const exceptionProperties = this.getErrorPropertiesBuilder().buildFromUnknown(error, hint);
@@ -13,6 +13,7 @@ class PostHogCore extends PostHogCoreStateless {
13
13
  featureFlagsRequestTimeoutMs
14
14
  }), this.flagCallReported = {}, this._sessionMaxLengthSeconds = 86400, this.sessionProps = {}, this._cachedPersonProperties = null;
15
15
  this.sendFeatureFlagEvent = options?.sendFeatureFlagEvent ?? true;
16
+ this.disableRemoteFeatureFlags = options?.disableRemoteFeatureFlags ?? false;
16
17
  this._sessionExpirationTimeSeconds = options?.sessionExpirationTimeSeconds ?? 1800;
17
18
  this._personProfiles = options?.personProfiles ?? 'identified_only';
18
19
  this._beforeSend = options?.before_send;
@@ -69,7 +70,11 @@ class PostHogCore extends PostHogCoreStateless {
69
70
  this.clearProps();
70
71
  this._cachedPersonProperties = null;
71
72
  for (const key of Object.keys(PostHogPersistedProperty))if (!allPropertiesToKeep.includes(PostHogPersistedProperty[key])) this.setPersistedProperty(PostHogPersistedProperty[key], null);
72
- this.reloadFeatureFlags();
73
+ if (this.disableRemoteFeatureFlags && !this.disabled) {
74
+ if (!allPropertiesToKeep.includes(PostHogPersistedProperty.FeatureFlagDetails)) this.setKnownFeatureFlagDetails({
75
+ flags: {}
76
+ });
77
+ } else this.reloadFeatureFlags();
73
78
  });
74
79
  }
75
80
  getCommonEventProperties() {
@@ -284,6 +289,7 @@ class PostHogCore extends PostHogCoreStateless {
284
289
  const { sendAnonDistinctId = true, fetchConfig = false, triggerOnRemoteConfig = false } = options ?? {};
285
290
  await this._initPromise;
286
291
  if (this.disabled) return;
292
+ if (this.disableRemoteFeatureFlags && !fetchConfig) return void this._logger.info('Feature flags are disabled (disableRemoteFeatureFlags), skipping reload.');
287
293
  if (this._flagsResponsePromise) {
288
294
  this._logger.info('Feature flags are being loaded already, queuing reload.');
289
295
  if (this._pendingFlagsRequest) this._flagsResponsePromise.then(this._pendingFlagsRequest.resolve).catch(this._pendingFlagsRequest.reject);
@@ -347,11 +353,11 @@ class PostHogCore extends PostHogCoreStateless {
347
353
  this.cacheSessionReplay('remote config', response);
348
354
  let willLoadFlags = false;
349
355
  if (false === response.hasFeatureFlags) {
350
- this.setKnownFeatureFlagDetails({
356
+ if (!this.disableRemoteFeatureFlags) this.setKnownFeatureFlagDetails({
351
357
  flags: {}
352
358
  });
353
359
  this._logger.warn('Remote config has no feature flags, will not load feature flags.');
354
- } else if (false !== this.preloadFeatureFlags) {
360
+ } else if (false !== this.preloadFeatureFlags && !this.disableRemoteFeatureFlags) {
355
361
  willLoadFlags = true;
356
362
  this.flagsAsync({
357
363
  sendAnonDistinctId: true,
@@ -382,16 +388,22 @@ class PostHogCore extends PostHogCoreStateless {
382
388
  const deviceId = this.getPersistedProperty(PostHogPersistedProperty.DeviceId);
383
389
  const extraProperties = {
384
390
  $anon_distinct_id: sendAnonDistinctId ? this.getAnonymousId() : void 0,
385
- $device_id: deviceId ?? void 0
391
+ $device_id: deviceId ?? void 0,
392
+ ...this.disableRemoteFeatureFlags ? {
393
+ disable_flags: true
394
+ } : {}
386
395
  };
387
396
  const result = await super.getFlags(distinctId, groups, personProperties, groupProperties, extraProperties, fetchConfig);
388
- if (!result.success) return void this.setKnownFeatureFlagDetails({
389
- flags: this.getKnownFeatureFlagDetails()?.flags ?? {},
390
- requestError: result.error
391
- });
397
+ if (!result.success) {
398
+ if (!this.disableRemoteFeatureFlags) this.setKnownFeatureFlagDetails({
399
+ flags: this.getKnownFeatureFlagDetails()?.flags ?? {},
400
+ requestError: result.error
401
+ });
402
+ return;
403
+ }
392
404
  const res = result.response;
393
405
  if (res?.quotaLimited?.includes(QuotaLimitedFeature.FeatureFlags)) {
394
- this.setKnownFeatureFlagDetails({
406
+ if (!this.disableRemoteFeatureFlags) this.setKnownFeatureFlagDetails({
395
407
  flags: this.getKnownFeatureFlagDetails()?.flags ?? {},
396
408
  quotaLimited: res.quotaLimited
397
409
  });
@@ -400,6 +412,11 @@ class PostHogCore extends PostHogCoreStateless {
400
412
  return res;
401
413
  }
402
414
  if (res?.featureFlags) {
415
+ if (this.disableRemoteFeatureFlags) {
416
+ this.cacheSessionReplay('flags', res);
417
+ this.maybeNotifyRemoteConfig(triggerOnRemoteConfig, res);
418
+ return res;
419
+ }
403
420
  if (this.sendFeatureFlagEvent) this.flagCallReported = {};
404
421
  let newFeatureFlagDetails = res;
405
422
  if (res.errorsWhileComputingFlags) {
@@ -579,7 +596,9 @@ class PostHogCore extends PostHogCoreStateless {
579
596
  featureFlagPayloads: {},
580
597
  flags: {}
581
598
  };
582
- const flags = details.flags ?? {};
599
+ const flags = {
600
+ ...details.flags ?? {}
601
+ };
583
602
  for(const key in overriddenFlags)if (overriddenFlags[key]) flags[key] = updateFlagValue(flags[key], overriddenFlags[key]);
584
603
  else delete flags[key];
585
604
  const result = {
@@ -602,6 +621,7 @@ class PostHogCore extends PostHogCoreStateless {
602
621
  return !!response;
603
622
  }
604
623
  reloadFeatureFlags(options) {
624
+ if (this.disableRemoteFeatureFlags && !this.disabled) return void this._initPromise.then(()=>options?.cb?.(void 0, this.getFeatureFlags()));
605
625
  this.flagsAsync({
606
626
  sendAnonDistinctId: true
607
627
  }).then((res)=>{
@@ -615,6 +635,10 @@ class PostHogCore extends PostHogCoreStateless {
615
635
  return await this.remoteConfigAsync();
616
636
  }
617
637
  async reloadFeatureFlagsAsync(sendAnonDistinctId) {
638
+ if (this.disableRemoteFeatureFlags && !this.disabled) {
639
+ await this._initPromise;
640
+ return this.getFeatureFlags();
641
+ }
618
642
  return (await this.flagsAsync({
619
643
  sendAnonDistinctId: sendAnonDistinctId
620
644
  }))?.featureFlags;
@@ -637,6 +661,51 @@ class PostHogCore extends PostHogCoreStateless {
637
661
  return this.setPersistedProperty(PostHogPersistedProperty.OverrideFeatureFlags, flags);
638
662
  });
639
663
  }
664
+ updateFlags(flags, payloads, options) {
665
+ this.wrap(()=>{
666
+ const existingDetails = options?.merge ? this.getKnownFeatureFlagDetails()?.flags : void 0;
667
+ const existingFlags = existingDetails ? getFlagValuesFromFlags(existingDetails) : {};
668
+ const existingPayloads = {};
669
+ for(const key in existingDetails){
670
+ const storedPayload = existingDetails[key].metadata?.payload;
671
+ if (void 0 !== storedPayload) existingPayloads[key] = parsePayload(storedPayload);
672
+ }
673
+ const finalFlags = {
674
+ ...existingFlags,
675
+ ...flags
676
+ };
677
+ const finalPayloads = {
678
+ ...existingPayloads,
679
+ ...payloads ?? {}
680
+ };
681
+ const flagDetails = {};
682
+ for (const [key, value] of Object.entries(finalFlags)){
683
+ const payload = finalPayloads[key];
684
+ let serializedPayload;
685
+ if (void 0 !== payload) try {
686
+ serializedPayload = JSON.stringify(payload);
687
+ } catch (e) {
688
+ this._logger.error(`updateFlags: could not serialize the payload for flag "${key}", dropping it.`, e);
689
+ }
690
+ flagDetails[key] = {
691
+ key,
692
+ enabled: getEnabledFromValue(value),
693
+ variant: getVariantFromValue(value),
694
+ reason: void 0,
695
+ metadata: {
696
+ id: void 0,
697
+ version: void 0,
698
+ description: void 0,
699
+ payload: serializedPayload
700
+ }
701
+ };
702
+ }
703
+ if (this.sendFeatureFlagEvent) this.flagCallReported = {};
704
+ this.setKnownFeatureFlagDetails({
705
+ flags: flagDetails
706
+ });
707
+ });
708
+ }
640
709
  captureException(error, additionalProperties, hint) {
641
710
  try {
642
711
  const exceptionProperties = this.getErrorPropertiesBuilder().buildFromUnknown(error, hint);
package/dist/types.d.ts CHANGED
@@ -53,6 +53,25 @@ export type PostHogCoreOptions = {
53
53
  * @default true
54
54
  */
55
55
  preloadFeatureFlags?: boolean;
56
+ /**
57
+ * Advanced: whether to disable fetching and evaluating feature flags from PostHog entirely.
58
+ *
59
+ * When set to true, `reloadFeatureFlags()` and the reloads triggered by `identify()`,
60
+ * `group()`, `setPersonPropertiesForFlags()` and `reset()` become no-ops, and any request
61
+ * to the flags endpoint that still goes out (e.g. to fetch remote config or surveys)
62
+ * carries `disable_flags: true` so the server skips flag evaluation. Flag values must be
63
+ * supplied via the `bootstrap` option or `updateFlags()` instead; `getFeatureFlag()` and
64
+ * related methods keep working against those values. Until `updateFlags()` runs, reads
65
+ * return their not-loaded defaults, so use `bootstrap` for any flags needed at startup.
66
+ * Equivalent to the web SDK's `advanced_disable_feature_flags`.
67
+ *
68
+ * Note: surveys gated on feature flags will not evaluate unless the survey targeting
69
+ * flags are also provided via `updateFlags()`. This option cannot be toggled at runtime.
70
+ * `posthog-node` inherits this option but does not implement it (no-op).
71
+ *
72
+ * @default false
73
+ */
74
+ disableRemoteFeatureFlags?: boolean;
56
75
  /**
57
76
  * Whether to load remote config when initialized or not
58
77
  * Experimental support