posthog-js 1.84.2 → 1.84.4

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 (77) hide show
  1. package/dist/array.full.js +1 -10
  2. package/dist/array.full.js.map +1 -1
  3. package/dist/array.js +1 -10
  4. package/dist/array.js.map +1 -1
  5. package/dist/es.js +1 -10
  6. package/dist/es.js.map +1 -1
  7. package/dist/module.d.ts +32 -148
  8. package/dist/module.js +1 -10
  9. package/dist/module.js.map +1 -1
  10. package/dist/recorder-v2.js +2 -2
  11. package/dist/recorder-v2.js.map +1 -1
  12. package/dist/recorder.js +1 -1
  13. package/dist/recorder.js.map +1 -1
  14. package/dist/surveys.js +1 -1
  15. package/dist/surveys.js.map +1 -1
  16. package/lib/package.json +9 -4
  17. package/lib/src/autocapture-utils.js +6 -6
  18. package/lib/src/autocapture-utils.js.map +1 -1
  19. package/lib/src/autocapture.js +5 -5
  20. package/lib/src/autocapture.js.map +1 -1
  21. package/lib/src/constants.d.ts +1 -0
  22. package/lib/src/constants.js +1 -0
  23. package/lib/src/constants.js.map +1 -1
  24. package/lib/src/extensions/exceptions/error-conversion.js +3 -2
  25. package/lib/src/extensions/exceptions/error-conversion.js.map +1 -1
  26. package/lib/src/extensions/exceptions/exception-autocapture.js +4 -7
  27. package/lib/src/extensions/exceptions/exception-autocapture.js.map +1 -1
  28. package/lib/src/extensions/exceptions/stack-trace.js +3 -2
  29. package/lib/src/extensions/exceptions/stack-trace.js.map +1 -1
  30. package/lib/src/extensions/exceptions/type-checking.js +3 -2
  31. package/lib/src/extensions/exceptions/type-checking.js.map +1 -1
  32. package/lib/src/extensions/{sessionrecording-utils.js → replay/sessionrecording-utils.js} +3 -2
  33. package/lib/src/extensions/replay/sessionrecording-utils.js.map +1 -0
  34. package/lib/src/extensions/{sessionrecording.d.ts → replay/sessionrecording.d.ts} +27 -19
  35. package/lib/src/extensions/{sessionrecording.js → replay/sessionrecording.js} +217 -92
  36. package/lib/src/extensions/replay/sessionrecording.js.map +1 -0
  37. package/lib/src/extensions/{web-performance.d.ts → replay/web-performance.d.ts} +2 -2
  38. package/lib/src/extensions/{web-performance.js → replay/web-performance.js} +3 -3
  39. package/lib/src/extensions/replay/web-performance.js.map +1 -0
  40. package/lib/src/extensions/surveys.js +3 -2
  41. package/lib/src/extensions/surveys.js.map +1 -1
  42. package/lib/src/loader-recorder-v2.js +2 -3
  43. package/lib/src/loader-recorder-v2.js.map +1 -1
  44. package/lib/src/loader-recorder.js +2 -1
  45. package/lib/src/loader-recorder.js.map +1 -1
  46. package/lib/src/loader-surveys.js +2 -1
  47. package/lib/src/loader-surveys.js.map +1 -1
  48. package/lib/src/posthog-core.d.ts +2 -2
  49. package/lib/src/posthog-core.js +14 -14
  50. package/lib/src/posthog-core.js.map +1 -1
  51. package/lib/src/posthog-featureflags.js +4 -4
  52. package/lib/src/posthog-featureflags.js.map +1 -1
  53. package/lib/src/posthog-persistence.js +4 -4
  54. package/lib/src/posthog-persistence.js.map +1 -1
  55. package/lib/src/request-queue.js +2 -2
  56. package/lib/src/request-queue.js.map +1 -1
  57. package/lib/src/retry-queue.js +7 -3
  58. package/lib/src/retry-queue.js.map +1 -1
  59. package/lib/src/send-request.js +3 -3
  60. package/lib/src/send-request.js.map +1 -1
  61. package/lib/src/sessionid.d.ts +6 -4
  62. package/lib/src/sessionid.js +17 -15
  63. package/lib/src/sessionid.js.map +1 -1
  64. package/lib/src/storage.js +7 -7
  65. package/lib/src/storage.js.map +1 -1
  66. package/lib/src/types.d.ts +3 -0
  67. package/lib/src/types.js.map +1 -1
  68. package/lib/src/utils.d.ts +8 -10
  69. package/lib/src/utils.js +42 -31
  70. package/lib/src/utils.js.map +1 -1
  71. package/lib/src/uuidv7.js +6 -4
  72. package/lib/src/uuidv7.js.map +1 -1
  73. package/package.json +9 -4
  74. package/lib/src/extensions/sessionrecording-utils.js.map +0 -1
  75. package/lib/src/extensions/sessionrecording.js.map +0 -1
  76. package/lib/src/extensions/web-performance.js.map +0 -1
  77. /package/lib/src/extensions/{sessionrecording-utils.d.ts → replay/sessionrecording-utils.d.ts} +0 -0
package/dist/module.d.ts CHANGED
@@ -49,18 +49,6 @@ type serializedNode = (documentNode | documentTypeNode | elementNode | textNode
49
49
  type serializedNodeWithId = serializedNode & {
50
50
  id: number;
51
51
  };
52
- interface IMirror<TNode> {
53
- getId(n: TNode | undefined | null): number;
54
- getNode(id: number): TNode | null;
55
- getIds(): number[];
56
- getMeta(n: TNode): serializedNodeWithId | null;
57
- removeNodeFromMap(n: TNode): void;
58
- has(id: number): boolean;
59
- hasNode(node: TNode): boolean;
60
- add(n: TNode, meta: serializedNodeWithId): void;
61
- replace(id: number, n: TNode): void;
62
- reset(): void;
63
- }
64
52
  type MaskInputOptions = Partial<{
65
53
  color: boolean;
66
54
  date: boolean;
@@ -91,27 +79,6 @@ type SlimDOMOptions = Partial<{
91
79
  headMetaAuthorship: boolean;
92
80
  headMetaVerification: boolean;
93
81
  }>;
94
- type DataURLOptions = Partial<{
95
- type: string;
96
- quality: number;
97
- }>;
98
- type MaskTextFn = (text: string) => string;
99
- type MaskInputFn = (text: string, element: HTMLElement) => string;
100
-
101
- declare class Mirror implements IMirror<Node> {
102
- private idNodeMap;
103
- private nodeMetaMap;
104
- getId(n: Node | undefined | null): number;
105
- getNode(id: number): Node | null;
106
- getIds(): number[];
107
- getMeta(n: Node): serializedNodeWithId | null;
108
- removeNodeFromMap(n: Node): void;
109
- has(id: number): boolean;
110
- hasNode(node: Node): boolean;
111
- add(n: Node, meta: serializedNodeWithId): void;
112
- replace(id: number, n: Node): void;
113
- reset(): void;
114
- }
115
82
 
116
83
  declare class RequestQueueScaffold {
117
84
  isPolling: boolean;
@@ -355,6 +322,9 @@ interface DecideResponse {
355
322
  endpoint?: string;
356
323
  consoleLogRecordingEnabled?: boolean;
357
324
  recorderVersion?: 'v1' | 'v2';
325
+ sampleRate?: string | null;
326
+ minimumDurationMilliseconds?: number;
327
+ linkedFlag?: string | null;
358
328
  };
359
329
  surveys?: boolean;
360
330
  toolbarParams: ToolbarParams;
@@ -686,49 +656,6 @@ type eventWithTime = event & {
686
656
  timestamp: number;
687
657
  delay?: number;
688
658
  };
689
- type blockClass = string | RegExp;
690
- type maskTextClass = string | RegExp;
691
- type SamplingStrategy = Partial<{
692
- mousemove: boolean | number;
693
- mousemoveCallback: number;
694
- mouseInteraction: boolean | Record<string, boolean | undefined>;
695
- scroll: number;
696
- media: number;
697
- input: 'all' | 'last';
698
- canvas: 'all' | number;
699
- }>;
700
- interface ICrossOriginIframeMirror {
701
- getId(iframe: HTMLIFrameElement, remoteId: number, parentToRemoteMap?: Map<number, number>, remoteToParentMap?: Map<number, number>): number;
702
- getIds(iframe: HTMLIFrameElement, remoteId: number[]): number[];
703
- getRemoteId(iframe: HTMLIFrameElement, parentId: number, map?: Map<number, number>): number;
704
- getRemoteIds(iframe: HTMLIFrameElement, parentId: number[]): number[];
705
- reset(iframe?: HTMLIFrameElement): void;
706
- }
707
- type RecordPlugin<TOptions = unknown> = {
708
- name: string;
709
- observer?: (cb: (...args: Array<unknown>) => void, win: IWindow, options: TOptions) => listenerHandler;
710
- eventProcessor?: <TExtend>(event: eventWithTime) => eventWithTime & TExtend;
711
- getMirror?: (mirrors: {
712
- nodeMirror: Mirror;
713
- crossOriginIframeMirror: ICrossOriginIframeMirror;
714
- crossOriginIframeStyleMirror: ICrossOriginIframeMirror;
715
- }) => void;
716
- options: TOptions;
717
- };
718
- type hooksParam = {
719
- mutation?: mutationCallBack;
720
- mousemove?: mousemoveCallBack;
721
- mouseInteraction?: mouseInteractionCallBack;
722
- scroll?: scrollCallback;
723
- viewportResize?: viewportResizeCallback;
724
- input?: inputCallback;
725
- mediaInteaction?: mediaInteractionCallback;
726
- styleSheetRule?: styleSheetRuleCallback;
727
- styleDeclaration?: styleDeclarationCallback;
728
- canvasMutation?: canvasMutationCallback;
729
- font?: fontCallback;
730
- selection?: selectionCallback;
731
- };
732
659
  type textMutation = {
733
660
  id: number;
734
661
  value: string | null;
@@ -761,8 +688,6 @@ type mutationCallbackParam = {
761
688
  adds: addedNodeMutation[];
762
689
  isAttachIframe?: true;
763
690
  };
764
- type mutationCallBack = (m: mutationCallbackParam) => void;
765
- type mousemoveCallBack = (p: mousePosition[], source: IncrementalSource.MouseMove | IncrementalSource.TouchMove | IncrementalSource.Drag) => void;
766
691
  type mousePosition = {
767
692
  x: number;
768
693
  y: number;
@@ -799,13 +724,11 @@ type mouseInteractionParam = {
799
724
  y: number;
800
725
  pointerType?: PointerTypes;
801
726
  };
802
- type mouseInteractionCallBack = (d: mouseInteractionParam) => void;
803
727
  type scrollPosition = {
804
728
  id: number;
805
729
  x: number;
806
730
  y: number;
807
731
  };
808
- type scrollCallback = (p: scrollPosition) => void;
809
732
  type styleSheetAddRule = {
810
733
  rule: string;
811
734
  index?: number | number[];
@@ -821,7 +744,6 @@ type styleSheetRuleParam = {
821
744
  replace?: string;
822
745
  replaceSync?: string;
823
746
  };
824
- type styleSheetRuleCallback = (s: styleSheetRuleParam) => void;
825
747
  type adoptedStyleSheetParam = {
826
748
  id: number;
827
749
  styles?: {
@@ -843,7 +765,6 @@ type styleDeclarationParam = {
843
765
  property: string;
844
766
  };
845
767
  };
846
- type styleDeclarationCallback = (s: styleDeclarationParam) => void;
847
768
  type canvasMutationCommand = {
848
769
  property: string;
849
770
  args: Array<unknown>;
@@ -857,27 +778,21 @@ type canvasMutationParam = {
857
778
  id: number;
858
779
  type: CanvasContext;
859
780
  } & canvasMutationCommand);
860
- type canvasMutationCallback = (p: canvasMutationParam) => void;
861
781
  type fontParam = {
862
782
  family: string;
863
783
  fontSource: string;
864
784
  buffer: boolean;
865
785
  descriptors?: FontFaceDescriptors;
866
786
  };
867
- type fontCallback = (p: fontParam) => void;
868
787
  type viewportResizeDimension = {
869
788
  width: number;
870
789
  height: number;
871
790
  };
872
- type viewportResizeCallback = (d: viewportResizeDimension) => void;
873
791
  type inputValue = {
874
792
  text: string;
875
793
  isChecked: boolean;
876
794
  userTriggered?: boolean;
877
795
  };
878
- type inputCallback = (v: inputValue & {
879
- id: number;
880
- }) => void;
881
796
  declare const enum MediaInteractions {
882
797
  Play = 0,
883
798
  Pause = 1,
@@ -893,7 +808,6 @@ type mediaInteractionParam = {
893
808
  muted?: boolean;
894
809
  playbackRate?: number;
895
810
  };
896
- type mediaInteractionCallback = (p: mediaInteractionParam) => void;
897
811
  type SelectionRange = {
898
812
  start: number;
899
813
  startOffset: number;
@@ -903,57 +817,15 @@ type SelectionRange = {
903
817
  type selectionParam = {
904
818
  ranges: Array<SelectionRange>;
905
819
  };
906
- type selectionCallback = (p: selectionParam) => void;
907
- type listenerHandler = () => void;
908
- type KeepIframeSrcFn = (src: string) => boolean;
909
820
  declare global {
910
821
  interface Window {
911
822
  FontFace: typeof FontFace;
912
823
  }
913
824
  }
914
- type IWindow = Window & typeof globalThis;
915
-
916
- declare type rrwebRecord = {
917
- (options: recordOptions<eventWithTime>): listenerHandler;
918
- addCustomEvent: (tag: string, payload: any) => void;
919
- takeFullSnapshot: () => void;
920
- mirror: Mirror;
921
- };
922
- declare type recordOptions<T> = {
923
- emit?: (e: T, isCheckout?: boolean) => void;
924
- checkoutEveryNth?: number;
925
- checkoutEveryNms?: number;
926
- blockClass?: blockClass;
927
- blockSelector?: string;
928
- ignoreClass?: string;
929
- maskTextClass?: maskTextClass;
930
- maskTextSelector?: string;
931
- maskAllInputs?: boolean;
932
- maskInputOptions?: MaskInputOptions;
933
- maskInputFn?: MaskInputFn;
934
- maskTextFn?: MaskTextFn;
935
- slimDOMOptions?: SlimDOMOptions | 'all' | true;
936
- ignoreCSSAttributes?: Set<string>;
937
- inlineStylesheet?: boolean;
938
- hooks?: hooksParam;
939
- sampling?: SamplingStrategy;
940
- dataURLOptions?: DataURLOptions;
941
- recordCanvas?: boolean;
942
- recordCrossOriginIframes?: boolean;
943
- recordAfter?: 'DOMContentLoaded' | 'load';
944
- userTriggeredOnInput?: boolean;
945
- collectFonts?: boolean;
946
- inlineImages?: boolean;
947
- plugins?: RecordPlugin[];
948
- mousemoveWait?: number;
949
- keepIframeSrcFn?: KeepIframeSrcFn;
950
- };
951
825
 
952
826
  declare class SessionRecording {
953
- get lastActivityTimestamp(): number;
954
- get endpoint(): string;
827
+ private _linkedFlagSeen;
955
828
  private instance;
956
- private emit;
957
829
  private _endpoint;
958
830
  private windowId;
959
831
  private sessionId;
@@ -961,21 +833,30 @@ declare class SessionRecording {
961
833
  private flushBufferTimer?;
962
834
  private buffer?;
963
835
  private mutationRateLimiter?;
964
- captureStarted: boolean;
965
- snapshots: any[];
966
- stopRrweb: listenerHandler | undefined;
967
- receivedDecide: boolean;
968
- rrwebRecord: rrwebRecord | undefined;
969
- recorderVersion?: string;
970
- isIdle: boolean;
836
+ private _captureStarted;
837
+ private stopRrweb;
838
+ private receivedDecide;
839
+ private rrwebRecord;
840
+ private isIdle;
841
+ private _linkedFlag;
842
+ private _sampleRate;
843
+ private _minimumDuration;
844
+ get started(): boolean;
845
+ private get sessionManager();
846
+ private get isSampled();
847
+ private get sessionDuration();
848
+ private get isRecordingEnabled();
849
+ private get isConsoleLogCaptureEnabled();
850
+ private get recordingVersion();
851
+ /**
852
+ * defaults to buffering mode until a decide response is received
853
+ * once a decide response is received status can be disabled, active or sampled
854
+ */
855
+ private get status();
971
856
  constructor(instance: PostHog);
972
- private getSessionManager;
973
857
  startRecordingIfEnabled(): void;
974
- started(): boolean;
975
858
  stopRecording(): void;
976
- isRecordingEnabled(): boolean;
977
- isConsoleLogCaptureEnabled(): boolean;
978
- getRecordingVersion(): any;
859
+ private makeSamplingDecision;
979
860
  afterDecideResponse(response: DecideResponse): void;
980
861
  log(message: string, level?: 'log' | 'warn' | 'error'): void;
981
862
  private startCaptureAndTrySendingQueuedSnapshots;
@@ -986,6 +867,7 @@ declare class SessionRecording {
986
867
  private _onScriptLoaded;
987
868
  onRRwebEmit(rawEvent: eventWithTime): void;
988
869
  private _maskUrl;
870
+ private clearBuffer;
989
871
  private _flushBuffer;
990
872
  private _captureSnapshotBuffered;
991
873
  private _captureSnapshot;
@@ -1037,17 +919,19 @@ declare class RequestQueue extends RequestQueueScaffold {
1037
919
  }
1038
920
 
1039
921
  declare class SessionIdManager {
922
+ private readonly _sessionIdGenerator;
923
+ private readonly _windowIdGenerator;
1040
924
  private config;
1041
925
  private persistence;
1042
926
  private _windowId;
1043
927
  private _sessionId;
1044
- private _window_id_storage_key;
1045
- private _primary_window_exists_storage_key;
928
+ private readonly _window_id_storage_key;
929
+ private readonly _primary_window_exists_storage_key;
1046
930
  private _sessionStartTimestamp;
1047
931
  private _sessionActivityTimestamp;
1048
- private _sessionTimeoutMs;
932
+ private readonly _sessionTimeoutMs;
1049
933
  private _sessionIdChangedHandlers;
1050
- constructor(config: Partial<PostHogConfig>, persistence: PostHogPersistence);
934
+ constructor(config: Partial<PostHogConfig>, persistence: PostHogPersistence, sessionIdGenerator?: () => string, windowIdGenerator?: () => string);
1051
935
  onSessionId(callback: SessionIdChangedCallback): () => void;
1052
936
  private _canUseSessionStorage;
1053
937
  private _setWindowId;