posthog-node 5.14.1 → 5.15.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.
Files changed (41) hide show
  1. package/dist/client.d.ts +44 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +23 -3
  4. package/dist/client.mjs +24 -4
  5. package/dist/entrypoints/index.edge.d.ts +1 -0
  6. package/dist/entrypoints/index.edge.d.ts.map +1 -1
  7. package/dist/entrypoints/index.edge.js +1 -0
  8. package/dist/entrypoints/index.edge.mjs +1 -0
  9. package/dist/entrypoints/index.node.d.ts +2 -0
  10. package/dist/entrypoints/index.node.d.ts.map +1 -1
  11. package/dist/entrypoints/index.node.js +7 -0
  12. package/dist/entrypoints/index.node.mjs +4 -0
  13. package/dist/extensions/context/context.d.ts +8 -0
  14. package/dist/extensions/context/context.d.ts.map +1 -0
  15. package/dist/extensions/context/context.js +60 -0
  16. package/dist/extensions/context/context.mjs +26 -0
  17. package/dist/extensions/context/types.d.ts +18 -0
  18. package/dist/extensions/context/types.d.ts.map +1 -0
  19. package/dist/extensions/context/types.js +18 -0
  20. package/dist/extensions/context/types.mjs +0 -0
  21. package/dist/extensions/error-tracking/autocapture.js +2 -2
  22. package/dist/extensions/error-tracking/autocapture.mjs +2 -2
  23. package/dist/extensions/feature-flags/feature-flags.d.ts +0 -1
  24. package/dist/extensions/feature-flags/feature-flags.d.ts.map +1 -1
  25. package/dist/extensions/feature-flags/feature-flags.js +6 -13
  26. package/dist/extensions/feature-flags/feature-flags.mjs +6 -13
  27. package/dist/types.d.ts +23 -8
  28. package/dist/types.d.ts.map +1 -1
  29. package/dist/version.d.ts +1 -1
  30. package/dist/version.js +1 -1
  31. package/dist/version.mjs +1 -1
  32. package/package.json +1 -1
  33. package/src/client.ts +86 -6
  34. package/src/entrypoints/index.edge.ts +4 -0
  35. package/src/entrypoints/index.node.ts +5 -0
  36. package/src/extensions/context/context.ts +33 -0
  37. package/src/extensions/context/types.ts +19 -0
  38. package/src/extensions/error-tracking/autocapture.ts +2 -2
  39. package/src/extensions/feature-flags/feature-flags.ts +10 -15
  40. package/src/types.ts +21 -4
  41. package/src/version.ts +1 -1
package/dist/client.d.ts CHANGED
@@ -3,12 +3,14 @@ import { EventMessage, GroupIdentifyMessage, IdentifyMessage, IPostHog, PostHogO
3
3
  import { FeatureFlagValue } from '@posthog/core';
4
4
  import ErrorTracking from './extensions/error-tracking';
5
5
  import { PostHogEventProperties } from '@posthog/core';
6
+ import { ContextData, ContextOptions, IPostHogContext } from './extensions/context/types';
6
7
  export declare abstract class PostHogBackendClient extends PostHogCoreStateless implements IPostHog {
7
8
  private _memoryStorage;
8
9
  private featureFlagsPoller?;
9
10
  protected errorTracking: ErrorTracking;
10
11
  private maxCacheSize;
11
12
  readonly options: PostHogOptions;
13
+ protected readonly context?: IPostHogContext;
12
14
  distinctIdHasSentFlagCalls: Record<string, string[]>;
13
15
  /**
14
16
  * Initialize a new PostHog client instance.
@@ -683,6 +685,48 @@ export declare abstract class PostHogBackendClient extends PostHogCoreStateless
683
685
  * @returns Promise that resolves when flags are reloaded
684
686
  */
685
687
  reloadFeatureFlags(): Promise<void>;
688
+ protected abstract initializeContext(): IPostHogContext | undefined;
689
+ /**
690
+ * Run a function with specific context that will be applied to all events captured within that context.
691
+ * It propagates the context to all subsequent calls down the call stack.
692
+ * Context properties like tags and sessionId will be automatically attached to all events.
693
+ *
694
+ * @example
695
+ * ```ts
696
+ * posthog.withContext(
697
+ * { distinctId: 'user_123' },
698
+ * () => {
699
+ * posthog.capture({ event: 'button clicked' })
700
+ * },
701
+ * { fresh: false }
702
+ * )
703
+ * ```
704
+ *
705
+ * {@label Context}
706
+ *
707
+ * @param data - Context data to apply (sessionId, distinctId, properties, enableExceptionAutocapture)
708
+ * @param fn - Function to run with the context
709
+ * @param options - Context options (fresh)
710
+ * @returns The return value of the function
711
+ */
712
+ withContext<T>(data: Partial<ContextData>, fn: () => T, options?: ContextOptions): T;
713
+ /**
714
+ * Get the current context data.
715
+ *
716
+ * @example
717
+ * ```ts
718
+ * // Get current context within a withContext block
719
+ * posthog.withContext({ distinctId: 'user_123' }, () => {
720
+ * const context = posthog.getContext()
721
+ * console.log(context?.distinctId) // 'user_123'
722
+ * })
723
+ * ```
724
+ *
725
+ * {@label Context}
726
+ *
727
+ * @returns The current context data, or undefined if no context is set
728
+ */
729
+ getContext(): ContextData | undefined;
686
730
  /**
687
731
  * Shutdown the PostHog client gracefully.
688
732
  *
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -48,6 +48,7 @@ class PostHogBackendClient extends core_namespaceObject.PostHogCoreStateless {
48
48
  constructor(apiKey, options = {}){
49
49
  super(apiKey, options), this._memoryStorage = new external_storage_memory_js_namespaceObject.PostHogMemoryStorage();
50
50
  this.options = options;
51
+ this.context = this.initializeContext();
51
52
  this.options.featureFlagsPollingInterval = 'number' == typeof options.featureFlagsPollingInterval ? Math.max(options.featureFlagsPollingInterval, MINIMUM_POLLING_INTERVAL) : THIRTY_SECONDS;
52
53
  if (options.personalApiKey) {
53
54
  if (options.personalApiKey.includes('phc_')) throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');
@@ -299,6 +300,13 @@ class PostHogBackendClient extends core_namespaceObject.PostHogCoreStateless {
299
300
  async reloadFeatureFlags() {
300
301
  await this.featureFlagsPoller?.loadFeatureFlags(true);
301
302
  }
303
+ withContext(data, fn, options) {
304
+ if (!this.context) return fn();
305
+ return this.context.run(data, fn, options);
306
+ }
307
+ getContext() {
308
+ return this.context?.get();
309
+ }
302
310
  async _shutdown(shutdownTimeoutMs) {
303
311
  this.featureFlagsPoller?.stopPoller(shutdownTimeoutMs);
304
312
  this.errorTracking.shutdown();
@@ -410,10 +418,21 @@ class PostHogBackendClient extends core_namespaceObject.PostHogCoreStateless {
410
418
  }
411
419
  async prepareEventMessage(props) {
412
420
  const { distinctId, event, properties, groups, sendFeatureFlags, timestamp, disableGeoip, uuid } = props;
421
+ const contextData = this.context?.get();
422
+ let mergedDistinctId = distinctId || contextData?.distinctId;
423
+ const mergedProperties = {
424
+ ...contextData?.properties || {},
425
+ ...properties || {}
426
+ };
427
+ if (!mergedDistinctId) {
428
+ mergedDistinctId = (0, core_namespaceObject.uuidv7)();
429
+ mergedProperties.$process_person_profile = false;
430
+ }
431
+ if (contextData?.sessionId && !mergedProperties.$session_id) mergedProperties.$session_id = contextData.sessionId;
413
432
  const eventMessage = this._runBeforeSend({
414
- distinctId,
433
+ distinctId: mergedDistinctId,
415
434
  event,
416
- properties,
435
+ properties: mergedProperties,
417
436
  groups,
418
437
  sendFeatureFlags,
419
438
  timestamp,
@@ -424,8 +443,9 @@ class PostHogBackendClient extends core_namespaceObject.PostHogCoreStateless {
424
443
  const eventProperties = await Promise.resolve().then(async ()=>{
425
444
  if (sendFeatureFlags) {
426
445
  const sendFeatureFlagsOptions = 'object' == typeof sendFeatureFlags ? sendFeatureFlags : void 0;
427
- return await this.getFeatureFlagsForEvent(distinctId, groups, disableGeoip, sendFeatureFlagsOptions);
446
+ return await this.getFeatureFlagsForEvent(eventMessage.distinctId, groups, disableGeoip, sendFeatureFlagsOptions);
428
447
  }
448
+ eventMessage.event;
429
449
  return {};
430
450
  }).then((flags)=>{
431
451
  const additionalProperties = {};
package/dist/client.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { version } from "./version.mjs";
2
- import { PostHogCoreStateless, getFeatureFlagValue, isBlockedUA, isPlainObject, safeSetTimeout } from "@posthog/core";
2
+ import { PostHogCoreStateless, getFeatureFlagValue, isBlockedUA, isPlainObject, safeSetTimeout, uuidv7 } from "@posthog/core";
3
3
  import { FeatureFlagsPoller, InconclusiveMatchError, RequiresServerEvaluation } from "./extensions/feature-flags/feature-flags.mjs";
4
4
  import error_tracking from "./extensions/error-tracking/index.mjs";
5
5
  import { PostHogMemoryStorage } from "./storage-memory.mjs";
@@ -10,6 +10,7 @@ class PostHogBackendClient extends PostHogCoreStateless {
10
10
  constructor(apiKey, options = {}){
11
11
  super(apiKey, options), this._memoryStorage = new PostHogMemoryStorage();
12
12
  this.options = options;
13
+ this.context = this.initializeContext();
13
14
  this.options.featureFlagsPollingInterval = 'number' == typeof options.featureFlagsPollingInterval ? Math.max(options.featureFlagsPollingInterval, MINIMUM_POLLING_INTERVAL) : THIRTY_SECONDS;
14
15
  if (options.personalApiKey) {
15
16
  if (options.personalApiKey.includes('phc_')) throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');
@@ -261,6 +262,13 @@ class PostHogBackendClient extends PostHogCoreStateless {
261
262
  async reloadFeatureFlags() {
262
263
  await this.featureFlagsPoller?.loadFeatureFlags(true);
263
264
  }
265
+ withContext(data, fn, options) {
266
+ if (!this.context) return fn();
267
+ return this.context.run(data, fn, options);
268
+ }
269
+ getContext() {
270
+ return this.context?.get();
271
+ }
264
272
  async _shutdown(shutdownTimeoutMs) {
265
273
  this.featureFlagsPoller?.stopPoller(shutdownTimeoutMs);
266
274
  this.errorTracking.shutdown();
@@ -372,10 +380,21 @@ class PostHogBackendClient extends PostHogCoreStateless {
372
380
  }
373
381
  async prepareEventMessage(props) {
374
382
  const { distinctId, event, properties, groups, sendFeatureFlags, timestamp, disableGeoip, uuid } = props;
383
+ const contextData = this.context?.get();
384
+ let mergedDistinctId = distinctId || contextData?.distinctId;
385
+ const mergedProperties = {
386
+ ...contextData?.properties || {},
387
+ ...properties || {}
388
+ };
389
+ if (!mergedDistinctId) {
390
+ mergedDistinctId = uuidv7();
391
+ mergedProperties.$process_person_profile = false;
392
+ }
393
+ if (contextData?.sessionId && !mergedProperties.$session_id) mergedProperties.$session_id = contextData.sessionId;
375
394
  const eventMessage = this._runBeforeSend({
376
- distinctId,
395
+ distinctId: mergedDistinctId,
377
396
  event,
378
- properties,
397
+ properties: mergedProperties,
379
398
  groups,
380
399
  sendFeatureFlags,
381
400
  timestamp,
@@ -386,8 +405,9 @@ class PostHogBackendClient extends PostHogCoreStateless {
386
405
  const eventProperties = await Promise.resolve().then(async ()=>{
387
406
  if (sendFeatureFlags) {
388
407
  const sendFeatureFlagsOptions = 'object' == typeof sendFeatureFlags ? sendFeatureFlags : void 0;
389
- return await this.getFeatureFlagsForEvent(distinctId, groups, disableGeoip, sendFeatureFlagsOptions);
408
+ return await this.getFeatureFlagsForEvent(eventMessage.distinctId, groups, disableGeoip, sendFeatureFlagsOptions);
390
409
  }
410
+ eventMessage.event;
391
411
  return {};
392
412
  }).then((flags)=>{
393
413
  const additionalProperties = {};
@@ -2,5 +2,6 @@ export * from '../exports';
2
2
  import { PostHogBackendClient } from '../client';
3
3
  export declare class PostHog extends PostHogBackendClient {
4
4
  getLibraryId(): string;
5
+ protected initializeContext(): undefined;
5
6
  }
6
7
  //# sourceMappingURL=index.edge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.edge.d.ts","sourceRoot":"","sources":["../../src/entrypoints/index.edge.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAG1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAchD,qBAAa,OAAQ,SAAQ,oBAAoB;IAC/C,YAAY,IAAI,MAAM;CAGvB"}
1
+ {"version":3,"file":"index.edge.d.ts","sourceRoot":"","sources":["../../src/entrypoints/index.edge.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAG1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAchD,qBAAa,OAAQ,SAAQ,oBAAoB;IAC/C,YAAY,IAAI,MAAM;IAItB,SAAS,CAAC,iBAAiB,IAAI,SAAS;CAGzC"}
@@ -83,6 +83,7 @@ var __webpack_exports__ = {};
83
83
  getLibraryId() {
84
84
  return 'posthog-edge';
85
85
  }
86
+ initializeContext() {}
86
87
  }
87
88
  })();
88
89
  exports.PostHog = __webpack_exports__.PostHog;
@@ -13,5 +13,6 @@ class PostHog extends PostHogBackendClient {
13
13
  getLibraryId() {
14
14
  return 'posthog-edge';
15
15
  }
16
+ initializeContext() {}
16
17
  }
17
18
  export { PostHog };
@@ -1,6 +1,8 @@
1
1
  export * from '../exports';
2
2
  import { PostHogBackendClient } from '../client';
3
+ import { PostHogContext } from '../extensions/context/context';
3
4
  export declare class PostHog extends PostHogBackendClient {
4
5
  getLibraryId(): string;
6
+ protected initializeContext(): PostHogContext;
5
7
  }
6
8
  //# sourceMappingURL=index.node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.node.d.ts","sourceRoot":"","sources":["../../src/entrypoints/index.node.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAM1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAehD,qBAAa,OAAQ,SAAQ,oBAAoB;IAC/C,YAAY,IAAI,MAAM;CAGvB"}
1
+ {"version":3,"file":"index.node.d.ts","sourceRoot":"","sources":["../../src/entrypoints/index.node.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAM1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAc9D,qBAAa,OAAQ,SAAQ,oBAAoB;IAC/C,YAAY,IAAI,MAAM;IAItB,SAAS,CAAC,iBAAiB,IAAI,cAAc;CAG9C"}
@@ -6,6 +6,9 @@ var __webpack_modules__ = {
6
6
  "../exports": function(module) {
7
7
  module.exports = require("../exports.js");
8
8
  },
9
+ "../extensions/context/context": function(module) {
10
+ module.exports = require("../extensions/context/context.js");
11
+ },
9
12
  "../extensions/error-tracking": function(module) {
10
13
  module.exports = require("../extensions/error-tracking/index.js");
11
14
  },
@@ -80,6 +83,7 @@ var __webpack_exports__ = {};
80
83
  var _extensions_error_tracking__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/ __webpack_require__.n(_extensions_error_tracking__WEBPACK_IMPORTED_MODULE_3__);
81
84
  var _client__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../client");
82
85
  var _posthog_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("@posthog/core");
86
+ var _extensions_context_context__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("../extensions/context/context");
83
87
  _extensions_error_tracking__WEBPACK_IMPORTED_MODULE_3___default().errorPropertiesBuilder = new _posthog_core__WEBPACK_IMPORTED_MODULE_5__.ErrorTracking.ErrorPropertiesBuilder([
84
88
  new _posthog_core__WEBPACK_IMPORTED_MODULE_5__.ErrorTracking.EventCoercer(),
85
89
  new _posthog_core__WEBPACK_IMPORTED_MODULE_5__.ErrorTracking.ErrorCoercer(),
@@ -94,6 +98,9 @@ var __webpack_exports__ = {};
94
98
  getLibraryId() {
95
99
  return 'posthog-node';
96
100
  }
101
+ initializeContext() {
102
+ return new _extensions_context_context__WEBPACK_IMPORTED_MODULE_6__.PostHogContext();
103
+ }
97
104
  }
98
105
  })();
99
106
  exports.PostHog = __webpack_exports__.PostHog;
@@ -3,6 +3,7 @@ import { addSourceContext } from "../extensions/error-tracking/modifiers/context
3
3
  import error_tracking from "../extensions/error-tracking/index.mjs";
4
4
  import { PostHogBackendClient } from "../client.mjs";
5
5
  import { ErrorTracking } from "@posthog/core";
6
+ import { PostHogContext } from "../extensions/context/context.mjs";
6
7
  export * from "../exports.mjs";
7
8
  error_tracking.errorPropertiesBuilder = new ErrorTracking.ErrorPropertiesBuilder([
8
9
  new ErrorTracking.EventCoercer(),
@@ -18,5 +19,8 @@ class PostHog extends PostHogBackendClient {
18
19
  getLibraryId() {
19
20
  return 'posthog-node';
20
21
  }
22
+ initializeContext() {
23
+ return new PostHogContext();
24
+ }
21
25
  }
22
26
  export { PostHog };
@@ -0,0 +1,8 @@
1
+ import { ContextData, ContextOptions, IPostHogContext } from './types';
2
+ export declare class PostHogContext implements IPostHogContext {
3
+ private storage;
4
+ constructor();
5
+ get(): ContextData | undefined;
6
+ run<T>(context: ContextData, fn: () => T, options?: ContextOptions): T;
7
+ }
8
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/extensions/context/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAEtE,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,OAAO,CAAgC;;IAM/C,GAAG,IAAI,WAAW,GAAG,SAAS;IAI9B,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,CAAC;CAkBvE"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ PostHogContext: ()=>PostHogContext
28
+ });
29
+ const external_node_async_hooks_namespaceObject = require("node:async_hooks");
30
+ class PostHogContext {
31
+ constructor(){
32
+ this.storage = new external_node_async_hooks_namespaceObject.AsyncLocalStorage();
33
+ }
34
+ get() {
35
+ return this.storage.getStore();
36
+ }
37
+ run(context, fn, options) {
38
+ const fresh = options?.fresh !== false;
39
+ if (fresh) return this.storage.run(context, fn);
40
+ {
41
+ const currentContext = this.get() || {};
42
+ const mergedContext = {
43
+ distinctId: context.distinctId ?? currentContext.distinctId,
44
+ sessionId: context.sessionId ?? currentContext.sessionId,
45
+ properties: {
46
+ ...currentContext.properties || {},
47
+ ...context.properties || {}
48
+ }
49
+ };
50
+ return this.storage.run(mergedContext, fn);
51
+ }
52
+ }
53
+ }
54
+ exports.PostHogContext = __webpack_exports__.PostHogContext;
55
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
56
+ "PostHogContext"
57
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
58
+ Object.defineProperty(exports, '__esModule', {
59
+ value: true
60
+ });
@@ -0,0 +1,26 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ class PostHogContext {
3
+ constructor(){
4
+ this.storage = new AsyncLocalStorage();
5
+ }
6
+ get() {
7
+ return this.storage.getStore();
8
+ }
9
+ run(context, fn, options) {
10
+ const fresh = options?.fresh !== false;
11
+ if (fresh) return this.storage.run(context, fn);
12
+ {
13
+ const currentContext = this.get() || {};
14
+ const mergedContext = {
15
+ distinctId: context.distinctId ?? currentContext.distinctId,
16
+ sessionId: context.sessionId ?? currentContext.sessionId,
17
+ properties: {
18
+ ...currentContext.properties || {},
19
+ ...context.properties || {}
20
+ }
21
+ };
22
+ return this.storage.run(mergedContext, fn);
23
+ }
24
+ }
25
+ }
26
+ export { PostHogContext };
@@ -0,0 +1,18 @@
1
+ export interface ContextData {
2
+ distinctId?: string;
3
+ sessionId?: string;
4
+ properties?: Record<string, any>;
5
+ }
6
+ export interface ContextOptions {
7
+ /**
8
+ * If true, replaces the current context entirely.
9
+ * If false, merges with the existing context (new values override existing ones).
10
+ * @default true
11
+ */
12
+ fresh?: boolean;
13
+ }
14
+ export interface IPostHogContext {
15
+ get(): ContextData | undefined;
16
+ run<T>(context: ContextData, fn: () => T, options?: ContextOptions): T;
17
+ }
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/extensions/context/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,IAAI,WAAW,GAAG,SAAS,CAAA;IAC9B,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,CAAC,CAAA;CACvE"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.r = (exports1)=>{
5
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
6
+ value: 'Module'
7
+ });
8
+ Object.defineProperty(exports1, '__esModule', {
9
+ value: true
10
+ });
11
+ };
12
+ })();
13
+ var __webpack_exports__ = {};
14
+ __webpack_require__.r(__webpack_exports__);
15
+ for(var __webpack_i__ in __webpack_exports__)exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
16
+ Object.defineProperty(exports, '__esModule', {
17
+ value: true
18
+ });
File without changes
@@ -47,10 +47,10 @@ function makeUncaughtExceptionHandler(captureFn, onFatalFn) {
47
47
  });
48
48
  }
49
49
  function addUncaughtExceptionListener(captureFn, onFatalFn) {
50
- global.process.on('uncaughtException', makeUncaughtExceptionHandler(captureFn, onFatalFn));
50
+ globalThis.process?.on('uncaughtException', makeUncaughtExceptionHandler(captureFn, onFatalFn));
51
51
  }
52
52
  function addUnhandledRejectionListener(captureFn) {
53
- global.process.on('unhandledRejection', (reason)=>captureFn(reason, {
53
+ globalThis.process?.on('unhandledRejection', (reason)=>captureFn(reason, {
54
54
  mechanism: {
55
55
  type: 'onunhandledrejection',
56
56
  handled: false
@@ -18,10 +18,10 @@ function makeUncaughtExceptionHandler(captureFn, onFatalFn) {
18
18
  });
19
19
  }
20
20
  function addUncaughtExceptionListener(captureFn, onFatalFn) {
21
- global.process.on('uncaughtException', makeUncaughtExceptionHandler(captureFn, onFatalFn));
21
+ globalThis.process?.on('uncaughtException', makeUncaughtExceptionHandler(captureFn, onFatalFn));
22
22
  }
23
23
  function addUnhandledRejectionListener(captureFn) {
24
- global.process.on('unhandledRejection', (reason)=>captureFn(reason, {
24
+ globalThis.process?.on('unhandledRejection', (reason)=>captureFn(reason, {
25
25
  mechanism: {
26
26
  type: 'onunhandledrejection',
27
27
  handled: false
@@ -46,7 +46,6 @@ declare class FeatureFlagsPoller {
46
46
  backOffCount: number;
47
47
  onLoad?: (count: number) => void;
48
48
  private cacheProvider?;
49
- private hasAttemptedCacheLoad;
50
49
  private loadingPromise?;
51
50
  constructor({ pollingInterval, personalApiKey, projectApiKey, timeout, host, customHeaders, ...options }: FeatureFlagsPollerOptions);
52
51
  debug(enabled?: boolean): void;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../src/extensions/feature-flags/feature-flags.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../src/extensions/feature-flags/feature-flags.ts"],"names":[],"mappings":"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"}
@@ -68,7 +68,6 @@ class FeatureFlagsPoller {
68
68
  this.debugMode = false;
69
69
  this.shouldBeginExponentialBackoff = false;
70
70
  this.backOffCount = 0;
71
- this.hasAttemptedCacheLoad = false;
72
71
  this.pollingInterval = pollingInterval;
73
72
  this.personalApiKey = personalApiKey;
74
73
  this.featureFlags = [];
@@ -296,15 +295,11 @@ class FeatureFlagsPoller {
296
295
  }
297
296
  }
298
297
  async loadFeatureFlags(forceReload = false) {
299
- if (this.cacheProvider && !this.hasAttemptedCacheLoad) {
300
- this.hasAttemptedCacheLoad = true;
301
- await this.loadFromCache('Loaded flags from cache');
302
- }
303
- if (this.loadingPromise) return this.loadingPromise;
304
- if (!this.loadedSuccessfullyOnce || forceReload) {
305
- this.loadingPromise = this._loadFeatureFlags();
306
- await this.loadingPromise;
307
- }
298
+ if (this.loadedSuccessfullyOnce && !forceReload) return;
299
+ if (!this.loadingPromise) this.loadingPromise = this._loadFeatureFlags().catch((err)=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${err}`))).finally(()=>{
300
+ this.loadingPromise = void 0;
301
+ });
302
+ return this.loadingPromise;
308
303
  }
309
304
  isLocalEvaluationReady() {
310
305
  return (this.loadedSuccessfullyOnce ?? false) && (this.featureFlags?.length ?? 0) > 0;
@@ -318,7 +313,7 @@ class FeatureFlagsPoller {
318
313
  clearTimeout(this.poller);
319
314
  this.poller = void 0;
320
315
  }
321
- this.poller = setTimeout(()=>this._loadFeatureFlags(), this.getPollingInterval());
316
+ this.poller = setTimeout(()=>this.loadFeatureFlags(true), this.getPollingInterval());
322
317
  try {
323
318
  let shouldFetch = true;
324
319
  if (this.cacheProvider) try {
@@ -378,8 +373,6 @@ class FeatureFlagsPoller {
378
373
  }
379
374
  } catch (err) {
380
375
  if (err instanceof ClientError) this.onError?.(err);
381
- } finally{
382
- this.loadingPromise = void 0;
383
376
  }
384
377
  }
385
378
  getPersonalApiKeyRequestOptions(method = 'GET') {
@@ -35,7 +35,6 @@ class FeatureFlagsPoller {
35
35
  this.debugMode = false;
36
36
  this.shouldBeginExponentialBackoff = false;
37
37
  this.backOffCount = 0;
38
- this.hasAttemptedCacheLoad = false;
39
38
  this.pollingInterval = pollingInterval;
40
39
  this.personalApiKey = personalApiKey;
41
40
  this.featureFlags = [];
@@ -263,15 +262,11 @@ class FeatureFlagsPoller {
263
262
  }
264
263
  }
265
264
  async loadFeatureFlags(forceReload = false) {
266
- if (this.cacheProvider && !this.hasAttemptedCacheLoad) {
267
- this.hasAttemptedCacheLoad = true;
268
- await this.loadFromCache('Loaded flags from cache');
269
- }
270
- if (this.loadingPromise) return this.loadingPromise;
271
- if (!this.loadedSuccessfullyOnce || forceReload) {
272
- this.loadingPromise = this._loadFeatureFlags();
273
- await this.loadingPromise;
274
- }
265
+ if (this.loadedSuccessfullyOnce && !forceReload) return;
266
+ if (!this.loadingPromise) this.loadingPromise = this._loadFeatureFlags().catch((err)=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${err}`))).finally(()=>{
267
+ this.loadingPromise = void 0;
268
+ });
269
+ return this.loadingPromise;
275
270
  }
276
271
  isLocalEvaluationReady() {
277
272
  return (this.loadedSuccessfullyOnce ?? false) && (this.featureFlags?.length ?? 0) > 0;
@@ -285,7 +280,7 @@ class FeatureFlagsPoller {
285
280
  clearTimeout(this.poller);
286
281
  this.poller = void 0;
287
282
  }
288
- this.poller = setTimeout(()=>this._loadFeatureFlags(), this.getPollingInterval());
283
+ this.poller = setTimeout(()=>this.loadFeatureFlags(true), this.getPollingInterval());
289
284
  try {
290
285
  let shouldFetch = true;
291
286
  if (this.cacheProvider) try {
@@ -345,8 +340,6 @@ class FeatureFlagsPoller {
345
340
  }
346
341
  } catch (err) {
347
342
  if (err instanceof ClientError) this.onError?.(err);
348
- } finally{
349
- this.loadingPromise = void 0;
350
343
  }
351
344
  }
352
345
  getPersonalApiKeyRequestOptions(method = 'GET') {
package/dist/types.d.ts CHANGED
@@ -1,30 +1,32 @@
1
1
  import type { PostHogCoreOptions, FeatureFlagValue, JsonType, PostHogFetchOptions, PostHogFetchResponse } from '@posthog/core';
2
+ import { ContextData, ContextOptions } from './extensions/context/types';
2
3
  import type { FlagDefinitionCacheProvider } from './extensions/feature-flags/cache';
3
- export interface IdentifyMessage {
4
+ export type IdentifyMessage = {
4
5
  distinctId: string;
5
6
  properties?: Record<string | number, any>;
6
7
  disableGeoip?: boolean;
7
- }
8
- export interface SendFeatureFlagsOptions {
8
+ };
9
+ export type SendFeatureFlagsOptions = {
9
10
  onlyEvaluateLocally?: boolean;
10
11
  personProperties?: Record<string, any>;
11
12
  groupProperties?: Record<string, Record<string, any>>;
12
13
  flagKeys?: string[];
13
- }
14
- export interface EventMessage extends IdentifyMessage {
14
+ };
15
+ export type EventMessage = Omit<IdentifyMessage, 'distinctId'> & {
16
+ distinctId?: string;
15
17
  event: string;
16
18
  groups?: Record<string, string | number>;
17
19
  sendFeatureFlags?: boolean | SendFeatureFlagsOptions;
18
20
  timestamp?: Date;
19
21
  uuid?: string;
20
- }
21
- export interface GroupIdentifyMessage {
22
+ };
23
+ export type GroupIdentifyMessage = {
22
24
  groupType: string;
23
25
  groupKey: string;
24
26
  properties?: Record<string | number, any>;
25
27
  distinctId?: string;
26
28
  disableGeoip?: boolean;
27
- }
29
+ };
28
30
  export type PropertyGroup = {
29
31
  type: 'AND' | 'OR';
30
32
  values: PropertyGroup[] | FlagProperty[];
@@ -294,6 +296,19 @@ export interface IPostHog {
294
296
  * already polled automatically at a regular interval.
295
297
  */
296
298
  reloadFeatureFlags(): Promise<void>;
299
+ /**
300
+ * @description Run a function with specific context that will be applied to all events captured within that context.
301
+ * @param data Context data to apply (sessionId, distinctId, properties, enableExceptionAutocapture)
302
+ * @param fn Function to run with the context
303
+ * @param options Context options (fresh)
304
+ * @returns The return value of the function
305
+ */
306
+ withContext<T>(data: Partial<ContextData>, fn: () => T, options?: ContextOptions): T;
307
+ /**
308
+ * @description Get the current context data.
309
+ * @returns The current context data, or undefined if no context is set
310
+ */
311
+ getContext(): ContextData | undefined;
297
312
  /**
298
313
  * @description Flushes the events still in the queue and clears the feature flags poller to allow for
299
314
  * a clean shutdown.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "5.14.1";
1
+ export declare const version = "5.15.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -26,7 +26,7 @@ __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
27
  version: ()=>version
28
28
  });
29
- const version = '5.14.1';
29
+ const version = '5.15.0';
30
30
  exports.version = __webpack_exports__.version;
31
31
  for(var __webpack_i__ in __webpack_exports__)if (-1 === [
32
32
  "version"
package/dist/version.mjs CHANGED
@@ -1,2 +1,2 @@
1
- const version = '5.14.1';
1
+ const version = '5.15.0';
2
2
  export { version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "posthog-node",
3
- "version": "5.14.1",
3
+ "version": "5.15.0",
4
4
  "description": "PostHog Node.js integration",
5
5
  "repository": {
6
6
  "type": "git",
package/src/client.ts CHANGED
@@ -8,7 +8,6 @@ import {
8
8
  PostHogFetchResponse,
9
9
  PostHogFlagsAndPayloadsResponse,
10
10
  PostHogPersistedProperty,
11
- Logger,
12
11
  PostHogCaptureOptions,
13
12
  isPlainObject,
14
13
  isBlockedUA,
@@ -30,6 +29,8 @@ import {
30
29
  import ErrorTracking from './extensions/error-tracking'
31
30
  import { safeSetTimeout, PostHogEventProperties } from '@posthog/core'
32
31
  import { PostHogMemoryStorage } from './storage-memory'
32
+ import { uuidv7 } from '@posthog/core'
33
+ import { ContextData, ContextOptions, IPostHogContext } from './extensions/context/types'
33
34
 
34
35
  // Standard local evaluation rate limit is 600 per minute (10 per second),
35
36
  // so the fastest a poller should ever be set is 100ms.
@@ -45,6 +46,7 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
45
46
  protected errorTracking: ErrorTracking
46
47
  private maxCacheSize: number
47
48
  public readonly options: PostHogOptions
49
+ protected readonly context?: IPostHogContext
48
50
 
49
51
  distinctIdHasSentFlagCalls: Record<string, string[]>
50
52
 
@@ -81,6 +83,7 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
81
83
  super(apiKey, options)
82
84
 
83
85
  this.options = options
86
+ this.context = this.initializeContext()
84
87
 
85
88
  this.options.featureFlagsPollingInterval =
86
89
  typeof options.featureFlagsPollingInterval === 'number'
@@ -1159,6 +1162,60 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
1159
1162
  await this.featureFlagsPoller?.loadFeatureFlags(true)
1160
1163
  }
1161
1164
 
1165
+ protected abstract initializeContext(): IPostHogContext | undefined
1166
+
1167
+ /**
1168
+ * Run a function with specific context that will be applied to all events captured within that context.
1169
+ * It propagates the context to all subsequent calls down the call stack.
1170
+ * Context properties like tags and sessionId will be automatically attached to all events.
1171
+ *
1172
+ * @example
1173
+ * ```ts
1174
+ * posthog.withContext(
1175
+ * { distinctId: 'user_123' },
1176
+ * () => {
1177
+ * posthog.capture({ event: 'button clicked' })
1178
+ * },
1179
+ * { fresh: false }
1180
+ * )
1181
+ * ```
1182
+ *
1183
+ * {@label Context}
1184
+ *
1185
+ * @param data - Context data to apply (sessionId, distinctId, properties, enableExceptionAutocapture)
1186
+ * @param fn - Function to run with the context
1187
+ * @param options - Context options (fresh)
1188
+ * @returns The return value of the function
1189
+ */
1190
+ withContext<T>(data: Partial<ContextData>, fn: () => T, options?: ContextOptions): T {
1191
+ if (!this.context) {
1192
+ // Context not supported in this environment (e.g., edge runtime)
1193
+ return fn()
1194
+ }
1195
+
1196
+ return this.context.run(data, fn, options)
1197
+ }
1198
+
1199
+ /**
1200
+ * Get the current context data.
1201
+ *
1202
+ * @example
1203
+ * ```ts
1204
+ * // Get current context within a withContext block
1205
+ * posthog.withContext({ distinctId: 'user_123' }, () => {
1206
+ * const context = posthog.getContext()
1207
+ * console.log(context?.distinctId) // 'user_123'
1208
+ * })
1209
+ * ```
1210
+ *
1211
+ * {@label Context}
1212
+ *
1213
+ * @returns The current context data, or undefined if no context is set
1214
+ */
1215
+ getContext(): ContextData | undefined {
1216
+ return this.context?.get()
1217
+ }
1218
+
1162
1219
  /**
1163
1220
  * Shutdown the PostHog client gracefully.
1164
1221
  *
@@ -1439,11 +1496,29 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
1439
1496
  const { distinctId, event, properties, groups, sendFeatureFlags, timestamp, disableGeoip, uuid }: EventMessage =
1440
1497
  props
1441
1498
 
1499
+ const contextData = this.context?.get()
1500
+
1501
+ let mergedDistinctId = distinctId || contextData?.distinctId
1502
+
1503
+ const mergedProperties = {
1504
+ ...(contextData?.properties || {}),
1505
+ ...(properties || {}),
1506
+ }
1507
+
1508
+ if (!mergedDistinctId) {
1509
+ mergedDistinctId = uuidv7()
1510
+ mergedProperties.$process_person_profile = false
1511
+ }
1512
+
1513
+ if (contextData?.sessionId && !mergedProperties.$session_id) {
1514
+ mergedProperties.$session_id = contextData.sessionId
1515
+ }
1516
+
1442
1517
  // Run before_send if configured
1443
1518
  const eventMessage = this._runBeforeSend({
1444
- distinctId,
1519
+ distinctId: mergedDistinctId,
1445
1520
  event,
1446
- properties,
1521
+ properties: mergedProperties,
1447
1522
  groups,
1448
1523
  sendFeatureFlags,
1449
1524
  timestamp,
@@ -1461,10 +1536,15 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
1461
1536
  if (sendFeatureFlags) {
1462
1537
  // If we are sending feature flags, we evaluate them locally if the user prefers it, otherwise we fall back to remote evaluation
1463
1538
  const sendFeatureFlagsOptions = typeof sendFeatureFlags === 'object' ? sendFeatureFlags : undefined
1464
- return await this.getFeatureFlagsForEvent(distinctId, groups, disableGeoip, sendFeatureFlagsOptions)
1539
+ return await this.getFeatureFlagsForEvent(
1540
+ eventMessage.distinctId!,
1541
+ groups,
1542
+ disableGeoip,
1543
+ sendFeatureFlagsOptions
1544
+ )
1465
1545
  }
1466
1546
 
1467
- if (event === '$feature_flag_called') {
1547
+ if (eventMessage.event === '$feature_flag_called') {
1468
1548
  // If we're capturing a $feature_flag_called event, we don't want to enrich the event with cached flags that may be out of date.
1469
1549
  return {}
1470
1550
  }
@@ -1514,7 +1594,7 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
1514
1594
  }
1515
1595
 
1516
1596
  return {
1517
- distinctId: eventMessage.distinctId,
1597
+ distinctId: eventMessage.distinctId!,
1518
1598
  event: eventMessage.event,
1519
1599
  properties: eventProperties,
1520
1600
  options: {
@@ -19,4 +19,8 @@ export class PostHog extends PostHogBackendClient {
19
19
  getLibraryId(): string {
20
20
  return 'posthog-edge'
21
21
  }
22
+
23
+ protected initializeContext(): undefined {
24
+ return undefined
25
+ }
22
26
  }
@@ -6,6 +6,7 @@ import ErrorTracking from '../extensions/error-tracking'
6
6
 
7
7
  import { PostHogBackendClient } from '../client'
8
8
  import { ErrorTracking as CoreErrorTracking } from '@posthog/core'
9
+ import { PostHogContext } from '../extensions/context/context'
9
10
 
10
11
  ErrorTracking.errorPropertiesBuilder = new CoreErrorTracking.ErrorPropertiesBuilder(
11
12
  [
@@ -23,4 +24,8 @@ export class PostHog extends PostHogBackendClient {
23
24
  getLibraryId(): string {
24
25
  return 'posthog-node'
25
26
  }
27
+
28
+ protected initializeContext(): PostHogContext {
29
+ return new PostHogContext()
30
+ }
26
31
  }
@@ -0,0 +1,33 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks'
2
+ import { ContextData, ContextOptions, IPostHogContext } from './types'
3
+
4
+ export class PostHogContext implements IPostHogContext {
5
+ private storage: AsyncLocalStorage<ContextData>
6
+
7
+ constructor() {
8
+ this.storage = new AsyncLocalStorage<ContextData>()
9
+ }
10
+
11
+ get(): ContextData | undefined {
12
+ return this.storage.getStore()
13
+ }
14
+
15
+ run<T>(context: ContextData, fn: () => T, options?: ContextOptions): T {
16
+ const fresh = options?.fresh !== false
17
+
18
+ if (fresh) {
19
+ return this.storage.run(context, fn)
20
+ } else {
21
+ const currentContext = this.get() || {}
22
+ const mergedContext: ContextData = {
23
+ distinctId: context.distinctId ?? currentContext.distinctId,
24
+ sessionId: context.sessionId ?? currentContext.sessionId,
25
+ properties: {
26
+ ...(currentContext.properties || {}),
27
+ ...(context.properties || {}),
28
+ },
29
+ }
30
+ return this.storage.run(mergedContext, fn)
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,19 @@
1
+ export interface ContextData {
2
+ distinctId?: string
3
+ sessionId?: string
4
+ properties?: Record<string, any>
5
+ }
6
+
7
+ export interface ContextOptions {
8
+ /**
9
+ * If true, replaces the current context entirely.
10
+ * If false, merges with the existing context (new values override existing ones).
11
+ * @default true
12
+ */
13
+ fresh?: boolean
14
+ }
15
+
16
+ export interface IPostHogContext {
17
+ get(): ContextData | undefined
18
+ run<T>(context: ContextData, fn: () => T, options?: ContextOptions): T
19
+ }
@@ -50,13 +50,13 @@ export function addUncaughtExceptionListener(
50
50
  captureFn: (exception: Error, hint: CoreErrorTracking.EventHint) => void,
51
51
  onFatalFn: (exception: Error) => void
52
52
  ): void {
53
- global.process.on('uncaughtException', makeUncaughtExceptionHandler(captureFn, onFatalFn))
53
+ globalThis.process?.on('uncaughtException', makeUncaughtExceptionHandler(captureFn, onFatalFn))
54
54
  }
55
55
 
56
56
  export function addUnhandledRejectionListener(
57
57
  captureFn: (exception: unknown, hint: CoreErrorTracking.EventHint) => void
58
58
  ): void {
59
- global.process.on('unhandledRejection', (reason: unknown) => {
59
+ globalThis.process?.on('unhandledRejection', (reason: unknown) => {
60
60
  return captureFn(reason, {
61
61
  mechanism: {
62
62
  type: 'onunhandledrejection',
@@ -77,7 +77,6 @@ class FeatureFlagsPoller {
77
77
  backOffCount: number = 0
78
78
  onLoad?: (count: number) => void
79
79
  private cacheProvider?: FlagDefinitionCacheProvider
80
- private hasAttemptedCacheLoad: boolean = false
81
80
  private loadingPromise?: Promise<void>
82
81
 
83
82
  constructor({
@@ -582,21 +581,19 @@ class FeatureFlagsPoller {
582
581
  }
583
582
 
584
583
  async loadFeatureFlags(forceReload = false): Promise<void> {
585
- // On first load, try to initialize from cache (if a cache provider is configured)
586
- if (this.cacheProvider && !this.hasAttemptedCacheLoad) {
587
- this.hasAttemptedCacheLoad = true
588
- await this.loadFromCache('Loaded flags from cache')
584
+ if (this.loadedSuccessfullyOnce && !forceReload) {
585
+ return
589
586
  }
590
587
 
591
- // If a fetch is already in progress, wait for it
592
- if (this.loadingPromise) {
593
- return this.loadingPromise
594
- }
595
-
596
- if (!this.loadedSuccessfullyOnce || forceReload) {
588
+ if (!this.loadingPromise) {
597
589
  this.loadingPromise = this._loadFeatureFlags()
598
- await this.loadingPromise
590
+ .catch((err) => this.logMsgIfDebug(() => console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${err}`)))
591
+ .finally(() => {
592
+ this.loadingPromise = undefined
593
+ })
599
594
  }
595
+
596
+ return this.loadingPromise
600
597
  }
601
598
 
602
599
  /**
@@ -627,7 +624,7 @@ class FeatureFlagsPoller {
627
624
  this.poller = undefined
628
625
  }
629
626
 
630
- this.poller = setTimeout(() => this._loadFeatureFlags(), this.getPollingInterval())
627
+ this.poller = setTimeout(() => this.loadFeatureFlags(true), this.getPollingInterval())
631
628
 
632
629
  try {
633
630
  let shouldFetch = true
@@ -764,8 +761,6 @@ class FeatureFlagsPoller {
764
761
  if (err instanceof ClientError) {
765
762
  this.onError?.(err)
766
763
  }
767
- } finally {
768
- this.loadingPromise = undefined
769
764
  }
770
765
  }
771
766
 
package/src/types.ts CHANGED
@@ -5,23 +5,25 @@ import type {
5
5
  PostHogFetchOptions,
6
6
  PostHogFetchResponse,
7
7
  } from '@posthog/core'
8
+ import { ContextData, ContextOptions } from './extensions/context/types'
8
9
 
9
10
  import type { FlagDefinitionCacheProvider } from './extensions/feature-flags/cache'
10
11
 
11
- export interface IdentifyMessage {
12
+ export type IdentifyMessage = {
12
13
  distinctId: string
13
14
  properties?: Record<string | number, any>
14
15
  disableGeoip?: boolean
15
16
  }
16
17
 
17
- export interface SendFeatureFlagsOptions {
18
+ export type SendFeatureFlagsOptions = {
18
19
  onlyEvaluateLocally?: boolean
19
20
  personProperties?: Record<string, any>
20
21
  groupProperties?: Record<string, Record<string, any>>
21
22
  flagKeys?: string[]
22
23
  }
23
24
 
24
- export interface EventMessage extends IdentifyMessage {
25
+ export type EventMessage = Omit<IdentifyMessage, 'distinctId'> & {
26
+ distinctId?: string // Optional - can be provided via context
25
27
  event: string
26
28
  groups?: Record<string, string | number> // Mapping of group type to group id
27
29
  sendFeatureFlags?: boolean | SendFeatureFlagsOptions
@@ -29,7 +31,7 @@ export interface EventMessage extends IdentifyMessage {
29
31
  uuid?: string
30
32
  }
31
33
 
32
- export interface GroupIdentifyMessage {
34
+ export type GroupIdentifyMessage = {
33
35
  groupType: string
34
36
  groupKey: string // Unique identifier for the group
35
37
  properties?: Record<string | number, any>
@@ -335,6 +337,21 @@ export interface IPostHog {
335
337
  */
336
338
  reloadFeatureFlags(): Promise<void>
337
339
 
340
+ /**
341
+ * @description Run a function with specific context that will be applied to all events captured within that context.
342
+ * @param data Context data to apply (sessionId, distinctId, properties, enableExceptionAutocapture)
343
+ * @param fn Function to run with the context
344
+ * @param options Context options (fresh)
345
+ * @returns The return value of the function
346
+ */
347
+ withContext<T>(data: Partial<ContextData>, fn: () => T, options?: ContextOptions): T
348
+
349
+ /**
350
+ * @description Get the current context data.
351
+ * @returns The current context data, or undefined if no context is set
352
+ */
353
+ getContext(): ContextData | undefined
354
+
338
355
  /**
339
356
  * @description Flushes the events still in the queue and clears the feature flags poller to allow for
340
357
  * a clean shutdown.
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '5.14.1'
1
+ export const version = '5.15.0'