posthog-js 1.297.2 → 1.297.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 (56) hide show
  1. package/dist/array.full.es5.js +1 -1
  2. package/dist/array.full.js +1 -1
  3. package/dist/array.full.no-external.js +1 -1
  4. package/dist/array.js +1 -1
  5. package/dist/array.no-external.js +1 -1
  6. package/dist/customizations.full.js +1 -1
  7. package/dist/lazy-recorder.js +1 -1
  8. package/dist/main.js +1 -1
  9. package/dist/module.full.js +1 -1
  10. package/dist/module.full.no-external.js +1 -1
  11. package/dist/module.js +1 -1
  12. package/dist/module.no-external.js +1 -1
  13. package/dist/posthog-recorder.js +1 -1
  14. package/dist/src/extensions/exception-autocapture/chunk-ids.d.ts +4 -0
  15. package/dist/src/extensions/exception-autocapture/error-conversion.d.ts +62 -0
  16. package/dist/src/extensions/exception-autocapture/stack-trace.d.ts +31 -0
  17. package/dist/src/extensions/exception-autocapture/type-checking.d.ts +10 -0
  18. package/dist/src/extensions/replay/config.d.ts +9 -0
  19. package/dist/src/extensions/replay/mutation-throttler.d.ts +18 -0
  20. package/dist/src/extensions/replay/sessionrecording-utils.d.ts +19 -0
  21. package/dist/src/extensions/replay/sessionrecording-wrapper.d.ts +75 -0
  22. package/dist/src/extensions/replay/sessionrecording.d.ts +163 -0
  23. package/dist/src/extensions/replay/triggerMatching.d.ts +99 -0
  24. package/lib/package.json +1 -1
  25. package/lib/src/extensions/exception-autocapture/chunk-ids.d.ts +4 -0
  26. package/lib/src/extensions/exception-autocapture/chunk-ids.js +44 -0
  27. package/lib/src/extensions/exception-autocapture/chunk-ids.js.map +1 -0
  28. package/lib/src/extensions/exception-autocapture/error-conversion.d.ts +62 -0
  29. package/lib/src/extensions/exception-autocapture/error-conversion.js +324 -0
  30. package/lib/src/extensions/exception-autocapture/error-conversion.js.map +1 -0
  31. package/lib/src/extensions/exception-autocapture/stack-trace.d.ts +31 -0
  32. package/lib/src/extensions/exception-autocapture/stack-trace.js +283 -0
  33. package/lib/src/extensions/exception-autocapture/stack-trace.js.map +1 -0
  34. package/lib/src/extensions/exception-autocapture/type-checking.d.ts +10 -0
  35. package/lib/src/extensions/exception-autocapture/type-checking.js +59 -0
  36. package/lib/src/extensions/exception-autocapture/type-checking.js.map +1 -0
  37. package/lib/src/extensions/replay/config.d.ts +9 -0
  38. package/lib/src/extensions/replay/config.js +248 -0
  39. package/lib/src/extensions/replay/config.js.map +1 -0
  40. package/lib/src/extensions/replay/mutation-throttler.d.ts +18 -0
  41. package/lib/src/extensions/replay/mutation-throttler.js +96 -0
  42. package/lib/src/extensions/replay/mutation-throttler.js.map +1 -0
  43. package/lib/src/extensions/replay/sessionrecording-utils.d.ts +19 -0
  44. package/lib/src/extensions/replay/sessionrecording-utils.js +157 -0
  45. package/lib/src/extensions/replay/sessionrecording-utils.js.map +1 -0
  46. package/lib/src/extensions/replay/sessionrecording-wrapper.d.ts +75 -0
  47. package/lib/src/extensions/replay/sessionrecording-wrapper.js +285 -0
  48. package/lib/src/extensions/replay/sessionrecording-wrapper.js.map +1 -0
  49. package/lib/src/extensions/replay/sessionrecording.d.ts +163 -0
  50. package/lib/src/extensions/replay/sessionrecording.js +1208 -0
  51. package/lib/src/extensions/replay/sessionrecording.js.map +1 -0
  52. package/lib/src/extensions/replay/triggerMatching.d.ts +99 -0
  53. package/lib/src/extensions/replay/triggerMatching.js +390 -0
  54. package/lib/src/extensions/replay/triggerMatching.js.map +1 -0
  55. package/lib/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +2 -2
@@ -0,0 +1,390 @@
1
+ "use strict";
2
+ var __values = (this && this.__values) || function(o) {
3
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
4
+ if (m) return m.call(o);
5
+ if (o && typeof o.length === "number") return {
6
+ next: function () {
7
+ if (o && i >= o.length) o = void 0;
8
+ return { value: o && o[i++], done: !o };
9
+ }
10
+ };
11
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.EventTriggerMatching = exports.LinkedFlagMatching = exports.URLTriggerMatching = exports.PendingTriggerMatching = exports.AndTriggerMatching = exports.OrTriggerMatching = exports.TRIGGER_DISABLED = exports.TRIGGER_PENDING = exports.TRIGGER_ACTIVATED = exports.LAZY_LOADING = exports.PAUSED = exports.BUFFERING = exports.ACTIVE = exports.SAMPLED = exports.DISABLED = void 0;
15
+ exports.nullMatchSessionRecordingStatus = nullMatchSessionRecordingStatus;
16
+ exports.anyMatchSessionRecordingStatus = anyMatchSessionRecordingStatus;
17
+ exports.allMatchSessionRecordingStatus = allMatchSessionRecordingStatus;
18
+ var constants_1 = require("../../constants");
19
+ var core_1 = require("@posthog/core");
20
+ var globals_1 = require("../../utils/globals");
21
+ exports.DISABLED = 'disabled';
22
+ exports.SAMPLED = 'sampled';
23
+ exports.ACTIVE = 'active';
24
+ exports.BUFFERING = 'buffering';
25
+ exports.PAUSED = 'paused';
26
+ exports.LAZY_LOADING = 'lazy_loading';
27
+ var TRIGGER = 'trigger';
28
+ exports.TRIGGER_ACTIVATED = TRIGGER + '_activated';
29
+ exports.TRIGGER_PENDING = TRIGGER + '_pending';
30
+ exports.TRIGGER_DISABLED = TRIGGER + '_' + exports.DISABLED;
31
+ /*
32
+ triggers can have one of three statuses:
33
+ * - trigger_activated: the trigger met conditions to start recording
34
+ * - trigger_pending: the trigger is present, but the conditions are not yet met
35
+ * - trigger_disabled: the trigger is not present
36
+ */
37
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
38
+ var triggerStatuses = [exports.TRIGGER_ACTIVATED, exports.TRIGGER_PENDING, exports.TRIGGER_DISABLED];
39
+ /**
40
+ * Session recording starts in buffering mode while waiting for "flags response".
41
+ * Once the response is received, it might be disabled, active or sampled.
42
+ * When "sampled" that means a sample rate is set, and the last time the session ID rotated
43
+ * the sample rate determined this session should be sent to the server.
44
+ */
45
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
46
+ var sessionRecordingStatuses = [exports.DISABLED, exports.SAMPLED, exports.ACTIVE, exports.BUFFERING, exports.PAUSED, exports.LAZY_LOADING];
47
+ function sessionRecordingUrlTriggerMatches(url, triggers) {
48
+ return triggers.some(function (trigger) {
49
+ switch (trigger.matching) {
50
+ case 'regex':
51
+ return new RegExp(trigger.url).test(url);
52
+ default:
53
+ return false;
54
+ }
55
+ });
56
+ }
57
+ var OrTriggerMatching = /** @class */ (function () {
58
+ function OrTriggerMatching(_matchers) {
59
+ this._matchers = _matchers;
60
+ }
61
+ OrTriggerMatching.prototype.triggerStatus = function (sessionId) {
62
+ var statuses = this._matchers.map(function (m) { return m.triggerStatus(sessionId); });
63
+ if (statuses.includes(exports.TRIGGER_ACTIVATED)) {
64
+ return exports.TRIGGER_ACTIVATED;
65
+ }
66
+ if (statuses.includes(exports.TRIGGER_PENDING)) {
67
+ return exports.TRIGGER_PENDING;
68
+ }
69
+ return exports.TRIGGER_DISABLED;
70
+ };
71
+ OrTriggerMatching.prototype.stop = function () {
72
+ this._matchers.forEach(function (m) { return m.stop(); });
73
+ };
74
+ return OrTriggerMatching;
75
+ }());
76
+ exports.OrTriggerMatching = OrTriggerMatching;
77
+ var AndTriggerMatching = /** @class */ (function () {
78
+ function AndTriggerMatching(_matchers) {
79
+ this._matchers = _matchers;
80
+ }
81
+ AndTriggerMatching.prototype.triggerStatus = function (sessionId) {
82
+ var e_1, _a;
83
+ var statuses = new Set();
84
+ try {
85
+ for (var _b = __values(this._matchers), _c = _b.next(); !_c.done; _c = _b.next()) {
86
+ var matcher = _c.value;
87
+ statuses.add(matcher.triggerStatus(sessionId));
88
+ }
89
+ }
90
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
91
+ finally {
92
+ try {
93
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
94
+ }
95
+ finally { if (e_1) throw e_1.error; }
96
+ }
97
+ // trigger_disabled means no config
98
+ statuses.delete(exports.TRIGGER_DISABLED);
99
+ switch (statuses.size) {
100
+ case 0:
101
+ return exports.TRIGGER_DISABLED;
102
+ case 1:
103
+ return Array.from(statuses)[0];
104
+ default:
105
+ return exports.TRIGGER_PENDING;
106
+ }
107
+ };
108
+ AndTriggerMatching.prototype.stop = function () {
109
+ this._matchers.forEach(function (m) { return m.stop(); });
110
+ };
111
+ return AndTriggerMatching;
112
+ }());
113
+ exports.AndTriggerMatching = AndTriggerMatching;
114
+ var PendingTriggerMatching = /** @class */ (function () {
115
+ function PendingTriggerMatching() {
116
+ }
117
+ PendingTriggerMatching.prototype.triggerStatus = function () {
118
+ return exports.TRIGGER_PENDING;
119
+ };
120
+ PendingTriggerMatching.prototype.stop = function () {
121
+ // no-op
122
+ };
123
+ return PendingTriggerMatching;
124
+ }());
125
+ exports.PendingTriggerMatching = PendingTriggerMatching;
126
+ var isEagerLoadedConfig = function (x) {
127
+ return 'sessionRecording' in x;
128
+ };
129
+ var URLTriggerMatching = /** @class */ (function () {
130
+ function URLTriggerMatching(_instance) {
131
+ this._instance = _instance;
132
+ this._urlTriggers = [];
133
+ this._urlBlocklist = [];
134
+ this.urlBlocked = false;
135
+ }
136
+ URLTriggerMatching.prototype.onConfig = function (config) {
137
+ var _a, _b;
138
+ this._urlTriggers =
139
+ (isEagerLoadedConfig(config)
140
+ ? (0, core_1.isObject)(config.sessionRecording)
141
+ ? (_a = config.sessionRecording) === null || _a === void 0 ? void 0 : _a.urlTriggers
142
+ : []
143
+ : config === null || config === void 0 ? void 0 : config.urlTriggers) || [];
144
+ this._urlBlocklist =
145
+ (isEagerLoadedConfig(config)
146
+ ? (0, core_1.isObject)(config.sessionRecording)
147
+ ? (_b = config.sessionRecording) === null || _b === void 0 ? void 0 : _b.urlBlocklist
148
+ : []
149
+ : config === null || config === void 0 ? void 0 : config.urlBlocklist) || [];
150
+ };
151
+ /**
152
+ * @deprecated Use onConfig instead
153
+ */
154
+ URLTriggerMatching.prototype.onRemoteConfig = function (response) {
155
+ this.onConfig(response);
156
+ };
157
+ URLTriggerMatching.prototype._urlTriggerStatus = function (sessionId) {
158
+ var _a;
159
+ if (this._urlTriggers.length === 0) {
160
+ return exports.TRIGGER_DISABLED;
161
+ }
162
+ var currentTriggerSession = (_a = this._instance) === null || _a === void 0 ? void 0 : _a.get_property(constants_1.SESSION_RECORDING_URL_TRIGGER_ACTIVATED_SESSION);
163
+ return currentTriggerSession === sessionId ? exports.TRIGGER_ACTIVATED : exports.TRIGGER_PENDING;
164
+ };
165
+ URLTriggerMatching.prototype.triggerStatus = function (sessionId) {
166
+ var urlTriggerStatus = this._urlTriggerStatus(sessionId);
167
+ var eitherIsActivated = urlTriggerStatus === exports.TRIGGER_ACTIVATED;
168
+ var eitherIsPending = urlTriggerStatus === exports.TRIGGER_PENDING;
169
+ var result = eitherIsActivated ? exports.TRIGGER_ACTIVATED : eitherIsPending ? exports.TRIGGER_PENDING : exports.TRIGGER_DISABLED;
170
+ this._instance.register_for_session({
171
+ $sdk_debug_replay_url_trigger_status: result,
172
+ });
173
+ return result;
174
+ };
175
+ URLTriggerMatching.prototype.checkUrlTriggerConditions = function (onPause, onResume, onActivate) {
176
+ if (typeof globals_1.window === 'undefined' || !globals_1.window.location.href) {
177
+ return;
178
+ }
179
+ var url = globals_1.window.location.href;
180
+ var wasBlocked = this.urlBlocked;
181
+ var isNowBlocked = sessionRecordingUrlTriggerMatches(url, this._urlBlocklist);
182
+ if (wasBlocked && isNowBlocked) {
183
+ // if the url is blocked and was already blocked, do nothing
184
+ return;
185
+ }
186
+ else if (isNowBlocked && !wasBlocked) {
187
+ onPause();
188
+ }
189
+ else if (!isNowBlocked && wasBlocked) {
190
+ onResume();
191
+ }
192
+ if (sessionRecordingUrlTriggerMatches(url, this._urlTriggers)) {
193
+ onActivate('url');
194
+ }
195
+ };
196
+ URLTriggerMatching.prototype.stop = function () {
197
+ // no-op
198
+ };
199
+ return URLTriggerMatching;
200
+ }());
201
+ exports.URLTriggerMatching = URLTriggerMatching;
202
+ var LinkedFlagMatching = /** @class */ (function () {
203
+ function LinkedFlagMatching(_instance) {
204
+ this._instance = _instance;
205
+ this.linkedFlag = null;
206
+ this.linkedFlagSeen = false;
207
+ this._flagListenerCleanup = function () { };
208
+ }
209
+ LinkedFlagMatching.prototype.triggerStatus = function () {
210
+ var result = exports.TRIGGER_PENDING;
211
+ if ((0, core_1.isNullish)(this.linkedFlag)) {
212
+ result = exports.TRIGGER_DISABLED;
213
+ }
214
+ if (this.linkedFlagSeen) {
215
+ result = exports.TRIGGER_ACTIVATED;
216
+ }
217
+ this._instance.register_for_session({
218
+ $sdk_debug_replay_linked_flag_trigger_status: result,
219
+ });
220
+ return result;
221
+ };
222
+ LinkedFlagMatching.prototype.onConfig = function (config, onStarted) {
223
+ var _this = this;
224
+ var _a;
225
+ this.linkedFlag =
226
+ (isEagerLoadedConfig(config)
227
+ ? (0, core_1.isObject)(config.sessionRecording)
228
+ ? (_a = config.sessionRecording) === null || _a === void 0 ? void 0 : _a.linkedFlag
229
+ : null
230
+ : config === null || config === void 0 ? void 0 : config.linkedFlag) || null;
231
+ if (!(0, core_1.isNullish)(this.linkedFlag) && !this.linkedFlagSeen) {
232
+ var linkedFlag_1 = (0, core_1.isString)(this.linkedFlag) ? this.linkedFlag : this.linkedFlag.flag;
233
+ var linkedVariant_1 = (0, core_1.isString)(this.linkedFlag) ? null : this.linkedFlag.variant;
234
+ this._flagListenerCleanup = this._instance.onFeatureFlags(function (_flags, variants) {
235
+ var flagIsPresent = (0, core_1.isObject)(variants) && linkedFlag_1 in variants;
236
+ var linkedFlagMatches = false;
237
+ if (flagIsPresent) {
238
+ var variantForFlagKey = variants[linkedFlag_1];
239
+ if ((0, core_1.isBoolean)(variantForFlagKey)) {
240
+ linkedFlagMatches = variantForFlagKey === true;
241
+ }
242
+ else if (linkedVariant_1) {
243
+ linkedFlagMatches = variantForFlagKey === linkedVariant_1;
244
+ }
245
+ else {
246
+ // then this is a variant flag and we want to match any string
247
+ linkedFlagMatches = !!variantForFlagKey;
248
+ }
249
+ }
250
+ _this.linkedFlagSeen = linkedFlagMatches;
251
+ if (linkedFlagMatches) {
252
+ onStarted(linkedFlag_1, linkedVariant_1);
253
+ }
254
+ });
255
+ }
256
+ };
257
+ /**
258
+ * @deprecated Use onConfig instead
259
+ */
260
+ LinkedFlagMatching.prototype.onRemoteConfig = function (response, onStarted) {
261
+ this.onConfig(response, onStarted);
262
+ };
263
+ LinkedFlagMatching.prototype.stop = function () {
264
+ this._flagListenerCleanup();
265
+ };
266
+ return LinkedFlagMatching;
267
+ }());
268
+ exports.LinkedFlagMatching = LinkedFlagMatching;
269
+ var EventTriggerMatching = /** @class */ (function () {
270
+ function EventTriggerMatching(_instance) {
271
+ this._instance = _instance;
272
+ this._eventTriggers = [];
273
+ }
274
+ EventTriggerMatching.prototype.onConfig = function (config) {
275
+ var _a;
276
+ this._eventTriggers =
277
+ (isEagerLoadedConfig(config)
278
+ ? (0, core_1.isObject)(config.sessionRecording)
279
+ ? (_a = config.sessionRecording) === null || _a === void 0 ? void 0 : _a.eventTriggers
280
+ : []
281
+ : config === null || config === void 0 ? void 0 : config.eventTriggers) || [];
282
+ };
283
+ /**
284
+ * @deprecated Use onConfig instead
285
+ */
286
+ EventTriggerMatching.prototype.onRemoteConfig = function (response) {
287
+ this.onConfig(response);
288
+ };
289
+ EventTriggerMatching.prototype._eventTriggerStatus = function (sessionId) {
290
+ var _a;
291
+ if (this._eventTriggers.length === 0) {
292
+ return exports.TRIGGER_DISABLED;
293
+ }
294
+ var currentTriggerSession = (_a = this._instance) === null || _a === void 0 ? void 0 : _a.get_property(constants_1.SESSION_RECORDING_EVENT_TRIGGER_ACTIVATED_SESSION);
295
+ return currentTriggerSession === sessionId ? exports.TRIGGER_ACTIVATED : exports.TRIGGER_PENDING;
296
+ };
297
+ EventTriggerMatching.prototype.triggerStatus = function (sessionId) {
298
+ var eventTriggerStatus = this._eventTriggerStatus(sessionId);
299
+ var result = eventTriggerStatus === exports.TRIGGER_ACTIVATED
300
+ ? exports.TRIGGER_ACTIVATED
301
+ : eventTriggerStatus === exports.TRIGGER_PENDING
302
+ ? exports.TRIGGER_PENDING
303
+ : exports.TRIGGER_DISABLED;
304
+ this._instance.register_for_session({
305
+ $sdk_debug_replay_event_trigger_status: result,
306
+ });
307
+ return result;
308
+ };
309
+ EventTriggerMatching.prototype.stop = function () {
310
+ // no-op
311
+ };
312
+ return EventTriggerMatching;
313
+ }());
314
+ exports.EventTriggerMatching = EventTriggerMatching;
315
+ // we need a no-op matcher before we can lazy-load the other matches, since all matchers wait on remote config anyway
316
+ function nullMatchSessionRecordingStatus(triggersStatus) {
317
+ if (!triggersStatus.isRecordingEnabled) {
318
+ return exports.DISABLED;
319
+ }
320
+ return exports.BUFFERING;
321
+ }
322
+ function anyMatchSessionRecordingStatus(triggersStatus) {
323
+ if (!triggersStatus.receivedFlags) {
324
+ return exports.BUFFERING;
325
+ }
326
+ if (!triggersStatus.isRecordingEnabled) {
327
+ return exports.DISABLED;
328
+ }
329
+ if (triggersStatus.urlTriggerMatching.urlBlocked) {
330
+ return exports.PAUSED;
331
+ }
332
+ var sampledActive = triggersStatus.isSampled === true;
333
+ var triggerMatches = new OrTriggerMatching([
334
+ triggersStatus.eventTriggerMatching,
335
+ triggersStatus.urlTriggerMatching,
336
+ triggersStatus.linkedFlagMatching,
337
+ ]).triggerStatus(triggersStatus.sessionId);
338
+ if (sampledActive) {
339
+ return exports.SAMPLED;
340
+ }
341
+ if (triggerMatches === exports.TRIGGER_ACTIVATED) {
342
+ return exports.ACTIVE;
343
+ }
344
+ if (triggerMatches === exports.TRIGGER_PENDING) {
345
+ // even if sampled active is false, we should still be buffering
346
+ // since a pending trigger could override it
347
+ return exports.BUFFERING;
348
+ }
349
+ // if sampling is set and the session is already decided to not be sampled
350
+ // then we should never be active
351
+ if (triggersStatus.isSampled === false) {
352
+ return exports.DISABLED;
353
+ }
354
+ return exports.ACTIVE;
355
+ }
356
+ function allMatchSessionRecordingStatus(triggersStatus) {
357
+ if (!triggersStatus.receivedFlags) {
358
+ return exports.BUFFERING;
359
+ }
360
+ if (!triggersStatus.isRecordingEnabled) {
361
+ return exports.DISABLED;
362
+ }
363
+ if (triggersStatus.urlTriggerMatching.urlBlocked) {
364
+ return exports.PAUSED;
365
+ }
366
+ var andTriggerMatch = new AndTriggerMatching([
367
+ triggersStatus.eventTriggerMatching,
368
+ triggersStatus.urlTriggerMatching,
369
+ triggersStatus.linkedFlagMatching,
370
+ ]);
371
+ var currentTriggerStatus = andTriggerMatch.triggerStatus(triggersStatus.sessionId);
372
+ var hasTriggersConfigured = currentTriggerStatus !== exports.TRIGGER_DISABLED;
373
+ var hasSamplingConfigured = (0, core_1.isBoolean)(triggersStatus.isSampled);
374
+ if (hasTriggersConfigured && currentTriggerStatus === exports.TRIGGER_PENDING) {
375
+ return exports.BUFFERING;
376
+ }
377
+ if (hasTriggersConfigured && currentTriggerStatus === exports.TRIGGER_DISABLED) {
378
+ return exports.DISABLED;
379
+ }
380
+ // sampling can't ever cause buffering, it's always determined right away or not configured
381
+ if (hasSamplingConfigured && !triggersStatus.isSampled) {
382
+ return exports.DISABLED;
383
+ }
384
+ // If sampling is configured and set to true, return sampled
385
+ if (triggersStatus.isSampled === true) {
386
+ return exports.SAMPLED;
387
+ }
388
+ return exports.ACTIVE;
389
+ }
390
+ //# sourceMappingURL=triggerMatching.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggerMatching.js","sourceRoot":"","sources":["../../../../src/extensions/replay/triggerMatching.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAwUA,0EAMC;AAED,wEAyCC;AAED,wEA0CC;AAraD,6CAGwB;AAGxB,sCAAwE;AACxE,+CAA4C;AAE/B,QAAA,QAAQ,GAAG,UAAU,CAAA;AACrB,QAAA,OAAO,GAAG,SAAS,CAAA;AACnB,QAAA,MAAM,GAAG,QAAQ,CAAA;AACjB,QAAA,SAAS,GAAG,WAAW,CAAA;AACvB,QAAA,MAAM,GAAG,QAAQ,CAAA;AACjB,QAAA,YAAY,GAAG,cAAc,CAAA;AAE1C,IAAM,OAAO,GAAG,SAAS,CAAA;AACZ,QAAA,iBAAiB,GAAG,OAAO,GAAG,YAAY,CAAA;AAC1C,QAAA,eAAe,GAAG,OAAO,GAAG,UAAU,CAAA;AACtC,QAAA,gBAAgB,GAAG,OAAO,GAAG,GAAG,GAAG,gBAAQ,CAAA;AAaxD;;;;;GAKG;AACH,6DAA6D;AAC7D,IAAM,eAAe,GAAG,CAAC,yBAAiB,EAAE,uBAAe,EAAE,wBAAgB,CAAU,CAAA;AAGvF;;;;;GAKG;AACH,6DAA6D;AAC7D,IAAM,wBAAwB,GAAG,CAAC,gBAAQ,EAAE,eAAO,EAAE,cAAM,EAAE,iBAAS,EAAE,cAAM,EAAE,oBAAY,CAAU,CAAA;AAMtG,SAAS,iCAAiC,CAAC,GAAW,EAAE,QAAsC;IAC1F,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAC,OAAO;QACzB,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvB,KAAK,OAAO;gBACR,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC5C;gBACI,OAAO,KAAK,CAAA;QACpB,CAAC;IACL,CAAC,CAAC,CAAA;AACN,CAAC;AAMD;IACI,2BAA6B,SAAkC;QAAlC,cAAS,GAAT,SAAS,CAAyB;IAAG,CAAC;IAEnE,yCAAa,GAAb,UAAc,SAAiB;QAC3B,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,EAA1B,CAA0B,CAAC,CAAA;QACtE,IAAI,QAAQ,CAAC,QAAQ,CAAC,yBAAiB,CAAC,EAAE,CAAC;YACvC,OAAO,yBAAiB,CAAA;QAC5B,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,uBAAe,CAAC,EAAE,CAAC;YACrC,OAAO,uBAAe,CAAA;QAC1B,CAAC;QACD,OAAO,wBAAgB,CAAA;IAC3B,CAAC;IAED,gCAAI,GAAJ;QACI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,EAAE,EAAR,CAAQ,CAAC,CAAA;IAC3C,CAAC;IACL,wBAAC;AAAD,CAAC,AAjBD,IAiBC;AAjBY,8CAAiB;AAmB9B;IACI,4BAA6B,SAAkC;QAAlC,cAAS,GAAT,SAAS,CAAyB;IAAG,CAAC;IAEnE,0CAAa,GAAb,UAAc,SAAiB;;QAC3B,IAAM,QAAQ,GAAG,IAAI,GAAG,EAAiB,CAAA;;YACzC,KAAsB,IAAA,KAAA,SAAA,IAAI,CAAC,SAAS,CAAA,gBAAA,4BAAE,CAAC;gBAAlC,IAAM,OAAO,WAAA;gBACd,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;YAClD,CAAC;;;;;;;;;QAED,mCAAmC;QACnC,QAAQ,CAAC,MAAM,CAAC,wBAAgB,CAAC,CAAA;QACjC,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,CAAC;gBACF,OAAO,wBAAgB,CAAA;YAC3B,KAAK,CAAC;gBACF,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;YAClC;gBACI,OAAO,uBAAe,CAAA;QAC9B,CAAC;IACL,CAAC;IAED,iCAAI,GAAJ;QACI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,EAAE,EAAR,CAAQ,CAAC,CAAA;IAC3C,CAAC;IACL,yBAAC;AAAD,CAAC,AAxBD,IAwBC;AAxBY,gDAAkB;AA0B/B;IAAA;IAQA,CAAC;IAPG,8CAAa,GAAb;QACI,OAAO,uBAAe,CAAA;IAC1B,CAAC;IAED,qCAAI,GAAJ;QACI,QAAQ;IACZ,CAAC;IACL,6BAAC;AAAD,CAAC,AARD,IAQC;AARY,wDAAsB;AAUnC,IAAM,mBAAmB,GAAG,UAAC,CAAmB;IAC5C,OAAO,kBAAkB,IAAI,CAAC,CAAA;AAClC,CAAC,CAAA;AAED;IAMI,4BAA6B,SAAkB;QAAlB,cAAS,GAAT,SAAS,CAAS;QAL/C,iBAAY,GAAiC,EAAE,CAAA;QAC/C,kBAAa,GAAiC,EAAE,CAAA;QAEhD,eAAU,GAAY,KAAK,CAAA;IAEuB,CAAC;IAEnD,qCAAQ,GAAR,UAAS,MAAwB;;QAC7B,IAAI,CAAC,YAAY;YACb,CAAC,mBAAmB,CAAC,MAAM,CAAC;gBACxB,CAAC,CAAC,IAAA,eAAQ,EAAC,MAAM,CAAC,gBAAgB,CAAC;oBAC/B,CAAC,CAAC,MAAA,MAAM,CAAC,gBAAgB,0CAAE,WAAW;oBACtC,CAAC,CAAC,EAAE;gBACR,CAAC,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAC,IAAI,EAAE,CAAA;QACpC,IAAI,CAAC,aAAa;YACd,CAAC,mBAAmB,CAAC,MAAM,CAAC;gBACxB,CAAC,CAAC,IAAA,eAAQ,EAAC,MAAM,CAAC,gBAAgB,CAAC;oBAC/B,CAAC,CAAC,MAAA,MAAM,CAAC,gBAAgB,0CAAE,YAAY;oBACvC,CAAC,CAAC,EAAE;gBACR,CAAC,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAC,IAAI,EAAE,CAAA;IACzC,CAAC;IAED;;OAEG;IACH,2CAAc,GAAd,UAAe,QAAsB;QACjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC3B,CAAC;IAEO,8CAAiB,GAAzB,UAA0B,SAAiB;;QACvC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,wBAAgB,CAAA;QAC3B,CAAC;QAED,IAAM,qBAAqB,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,YAAY,CAAC,2DAA+C,CAAC,CAAA;QAC3G,OAAO,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,yBAAiB,CAAC,CAAC,CAAC,uBAAe,CAAA;IACpF,CAAC;IAED,0CAAa,GAAb,UAAc,SAAiB;QAC3B,IAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;QAC1D,IAAM,iBAAiB,GAAG,gBAAgB,KAAK,yBAAiB,CAAA;QAChE,IAAM,eAAe,GAAG,gBAAgB,KAAK,uBAAe,CAAA;QAE5D,IAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,yBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,uBAAe,CAAC,CAAC,CAAC,wBAAgB,CAAA;QAC3G,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;YAChC,oCAAoC,EAAE,MAAM;SAC/C,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACjB,CAAC;IAED,sDAAyB,GAAzB,UACI,OAAmB,EACnB,QAAoB,EACpB,UAA8C;QAE9C,IAAI,OAAO,gBAAM,KAAK,WAAW,IAAI,CAAC,gBAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACzD,OAAM;QACV,CAAC;QAED,IAAM,GAAG,GAAG,gBAAM,CAAC,QAAQ,CAAC,IAAI,CAAA;QAEhC,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAClC,IAAM,YAAY,GAAG,iCAAiC,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAE/E,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;YAC7B,4DAA4D;YAC5D,OAAM;QACV,CAAC;aAAM,IAAI,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,OAAO,EAAE,CAAA;QACb,CAAC;aAAM,IAAI,CAAC,YAAY,IAAI,UAAU,EAAE,CAAC;YACrC,QAAQ,EAAE,CAAA;QACd,CAAC;QAED,IAAI,iCAAiC,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5D,UAAU,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACL,CAAC;IAED,iCAAI,GAAJ;QACI,QAAQ;IACZ,CAAC;IACL,yBAAC;AAAD,CAAC,AAlFD,IAkFC;AAlFY,gDAAkB;AAoF/B;IAII,4BAA6B,SAAkB;QAAlB,cAAS,GAAT,SAAS,CAAS;QAH/C,eAAU,GAAgC,IAAI,CAAA;QAC9C,mBAAc,GAAY,KAAK,CAAA;QACvB,yBAAoB,GAAe,cAAO,CAAC,CAAA;IACD,CAAC;IAEnD,0CAAa,GAAb;QACI,IAAI,MAAM,GAAG,uBAAe,CAAA;QAC5B,IAAI,IAAA,gBAAS,EAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,wBAAgB,CAAA;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,MAAM,GAAG,yBAAiB,CAAA;QAC9B,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;YAChC,4CAA4C,EAAE,MAAM;SACvD,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACjB,CAAC;IAED,qCAAQ,GAAR,UAAS,MAAwB,EAAE,SAAyD;QAA5F,iBA+BC;;QA9BG,IAAI,CAAC,UAAU;YACX,CAAC,mBAAmB,CAAC,MAAM,CAAC;gBACxB,CAAC,CAAC,IAAA,eAAQ,EAAC,MAAM,CAAC,gBAAgB,CAAC;oBAC/B,CAAC,CAAC,MAAA,MAAM,CAAC,gBAAgB,0CAAE,UAAU;oBACrC,CAAC,CAAC,IAAI;gBACV,CAAC,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,CAAC,IAAI,IAAI,CAAA;QAErC,IAAI,CAAC,IAAA,gBAAS,EAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACtD,IAAM,YAAU,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAA;YACrF,IAAM,eAAa,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAA;YAChF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAC,MAAM,EAAE,QAAQ;gBACvE,IAAM,aAAa,GAAG,IAAA,eAAQ,EAAC,QAAQ,CAAC,IAAI,YAAU,IAAI,QAAQ,CAAA;gBAClE,IAAI,iBAAiB,GAAG,KAAK,CAAA;gBAC7B,IAAI,aAAa,EAAE,CAAC;oBAChB,IAAM,iBAAiB,GAAG,QAAQ,CAAC,YAAU,CAAC,CAAA;oBAC9C,IAAI,IAAA,gBAAS,EAAC,iBAAiB,CAAC,EAAE,CAAC;wBAC/B,iBAAiB,GAAG,iBAAiB,KAAK,IAAI,CAAA;oBAClD,CAAC;yBAAM,IAAI,eAAa,EAAE,CAAC;wBACvB,iBAAiB,GAAG,iBAAiB,KAAK,eAAa,CAAA;oBAC3D,CAAC;yBAAM,CAAC;wBACJ,8DAA8D;wBAC9D,iBAAiB,GAAG,CAAC,CAAC,iBAAiB,CAAA;oBAC3C,CAAC;gBACL,CAAC;gBACD,KAAI,CAAC,cAAc,GAAG,iBAAiB,CAAA;gBACvC,IAAI,iBAAiB,EAAE,CAAC;oBACpB,SAAS,CAAC,YAAU,EAAE,eAAa,CAAC,CAAA;gBACxC,CAAC;YACL,CAAC,CAAC,CAAA;QACN,CAAC;IACL,CAAC;IAED;;OAEG;IACH,2CAAc,GAAd,UAAe,QAAsB,EAAE,SAAyD;QAC5F,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IACtC,CAAC;IAED,iCAAI,GAAJ;QACI,IAAI,CAAC,oBAAoB,EAAE,CAAA;IAC/B,CAAC;IACL,yBAAC;AAAD,CAAC,AA/DD,IA+DC;AA/DY,gDAAkB;AAiE/B;IAGI,8BAA6B,SAAkB;QAAlB,cAAS,GAAT,SAAS,CAAS;QAF/C,mBAAc,GAAa,EAAE,CAAA;IAEqB,CAAC;IAEnD,uCAAQ,GAAR,UAAS,MAAwB;;QAC7B,IAAI,CAAC,cAAc;YACf,CAAC,mBAAmB,CAAC,MAAM,CAAC;gBACxB,CAAC,CAAC,IAAA,eAAQ,EAAC,MAAM,CAAC,gBAAgB,CAAC;oBAC/B,CAAC,CAAC,MAAA,MAAM,CAAC,gBAAgB,0CAAE,aAAa;oBACxC,CAAC,CAAC,EAAE;gBACR,CAAC,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,IAAI,EAAE,CAAA;IAC1C,CAAC;IAED;;OAEG;IACH,6CAAc,GAAd,UAAe,QAAsB;QACjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC3B,CAAC;IAEO,kDAAmB,GAA3B,UAA4B,SAAiB;;QACzC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,wBAAgB,CAAA;QAC3B,CAAC;QAED,IAAM,qBAAqB,GAAG,MAAA,IAAI,CAAC,SAAS,0CAAE,YAAY,CAAC,6DAAiD,CAAC,CAAA;QAC7G,OAAO,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,yBAAiB,CAAC,CAAC,CAAC,uBAAe,CAAA;IACpF,CAAC;IAED,4CAAa,GAAb,UAAc,SAAiB;QAC3B,IAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAA;QAC9D,IAAM,MAAM,GACR,kBAAkB,KAAK,yBAAiB;YACpC,CAAC,CAAC,yBAAiB;YACnB,CAAC,CAAC,kBAAkB,KAAK,uBAAe;gBACtC,CAAC,CAAC,uBAAe;gBACjB,CAAC,CAAC,wBAAgB,CAAA;QAC5B,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;YAChC,sCAAsC,EAAE,MAAM;SACjD,CAAC,CAAA;QACF,OAAO,MAAM,CAAA;IACjB,CAAC;IAED,mCAAI,GAAJ;QACI,QAAQ;IACZ,CAAC;IACL,2BAAC;AAAD,CAAC,AA/CD,IA+CC;AA/CY,oDAAoB;AAiDjC,qHAAqH;AACrH,SAAgB,+BAA+B,CAAC,cAAuC;IACnF,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACrC,OAAO,gBAAQ,CAAA;IACnB,CAAC;IAED,OAAO,iBAAS,CAAA;AACpB,CAAC;AAED,SAAgB,8BAA8B,CAAC,cAAuC;IAClF,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QAChC,OAAO,iBAAS,CAAA;IACpB,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACrC,OAAO,gBAAQ,CAAA;IACnB,CAAC;IAED,IAAI,cAAc,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;QAC/C,OAAO,cAAM,CAAA;IACjB,CAAC;IAED,IAAM,aAAa,GAAG,cAAc,CAAC,SAAS,KAAK,IAAI,CAAA;IACvD,IAAM,cAAc,GAAG,IAAI,iBAAiB,CAAC;QACzC,cAAc,CAAC,oBAAoB;QACnC,cAAc,CAAC,kBAAkB;QACjC,cAAc,CAAC,kBAAkB;KACpC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;IAE1C,IAAI,aAAa,EAAE,CAAC;QAChB,OAAO,eAAO,CAAA;IAClB,CAAC;IAED,IAAI,cAAc,KAAK,yBAAiB,EAAE,CAAC;QACvC,OAAO,cAAM,CAAA;IACjB,CAAC;IAED,IAAI,cAAc,KAAK,uBAAe,EAAE,CAAC;QACrC,gEAAgE;QAChE,4CAA4C;QAC5C,OAAO,iBAAS,CAAA;IACpB,CAAC;IAED,0EAA0E;IAC1E,iCAAiC;IACjC,IAAI,cAAc,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QACrC,OAAO,gBAAQ,CAAA;IACnB,CAAC;IAED,OAAO,cAAM,CAAA;AACjB,CAAC;AAED,SAAgB,8BAA8B,CAAC,cAAuC;IAClF,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QAChC,OAAO,iBAAS,CAAA;IACpB,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACrC,OAAO,gBAAQ,CAAA;IACnB,CAAC;IAED,IAAI,cAAc,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;QAC/C,OAAO,cAAM,CAAA;IACjB,CAAC;IAED,IAAM,eAAe,GAAG,IAAI,kBAAkB,CAAC;QAC3C,cAAc,CAAC,oBAAoB;QACnC,cAAc,CAAC,kBAAkB;QACjC,cAAc,CAAC,kBAAkB;KACpC,CAAC,CAAA;IACF,IAAM,oBAAoB,GAAG,eAAe,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;IACpF,IAAM,qBAAqB,GAAG,oBAAoB,KAAK,wBAAgB,CAAA;IAEvE,IAAM,qBAAqB,GAAG,IAAA,gBAAS,EAAC,cAAc,CAAC,SAAS,CAAC,CAAA;IAEjE,IAAI,qBAAqB,IAAI,oBAAoB,KAAK,uBAAe,EAAE,CAAC;QACpE,OAAO,iBAAS,CAAA;IACpB,CAAC;IAED,IAAI,qBAAqB,IAAI,oBAAoB,KAAK,wBAAgB,EAAE,CAAC;QACrE,OAAO,gBAAQ,CAAA;IACnB,CAAC;IAED,2FAA2F;IAC3F,IAAI,qBAAqB,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QACrD,OAAO,gBAAQ,CAAA;IACnB,CAAC;IAED,4DAA4D;IAC5D,IAAI,cAAc,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QACpC,OAAO,eAAO,CAAA;IAClB,CAAC;IAED,OAAO,cAAM,CAAA;AACjB,CAAC","sourcesContent":["import {\n SESSION_RECORDING_EVENT_TRIGGER_ACTIVATED_SESSION,\n SESSION_RECORDING_URL_TRIGGER_ACTIVATED_SESSION,\n} from '../../constants'\nimport { PostHog } from '../../posthog-core'\nimport { FlagVariant, RemoteConfig, SessionRecordingPersistedConfig, SessionRecordingUrlTrigger } from '../../types'\nimport { isNullish, isBoolean, isString, isObject } from '@posthog/core'\nimport { window } from '../../utils/globals'\n\nexport const DISABLED = 'disabled'\nexport const SAMPLED = 'sampled'\nexport const ACTIVE = 'active'\nexport const BUFFERING = 'buffering'\nexport const PAUSED = 'paused'\nexport const LAZY_LOADING = 'lazy_loading'\n\nconst TRIGGER = 'trigger'\nexport const TRIGGER_ACTIVATED = TRIGGER + '_activated'\nexport const TRIGGER_PENDING = TRIGGER + '_pending'\nexport const TRIGGER_DISABLED = TRIGGER + '_' + DISABLED\n\nexport interface RecordingTriggersStatus {\n get receivedFlags(): boolean\n get isRecordingEnabled(): false | true | undefined\n get isSampled(): false | true | null\n get urlTriggerMatching(): URLTriggerMatching\n get eventTriggerMatching(): EventTriggerMatching\n get linkedFlagMatching(): LinkedFlagMatching\n get sessionId(): string\n}\n\nexport type TriggerType = 'url' | 'event'\n/* \ntriggers can have one of three statuses:\n * - trigger_activated: the trigger met conditions to start recording\n * - trigger_pending: the trigger is present, but the conditions are not yet met\n * - trigger_disabled: the trigger is not present\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst triggerStatuses = [TRIGGER_ACTIVATED, TRIGGER_PENDING, TRIGGER_DISABLED] as const\nexport type TriggerStatus = (typeof triggerStatuses)[number]\n\n/**\n * Session recording starts in buffering mode while waiting for \"flags response\".\n * Once the response is received, it might be disabled, active or sampled.\n * When \"sampled\" that means a sample rate is set, and the last time the session ID rotated\n * the sample rate determined this session should be sent to the server.\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst sessionRecordingStatuses = [DISABLED, SAMPLED, ACTIVE, BUFFERING, PAUSED, LAZY_LOADING] as const\nexport type SessionRecordingStatus = (typeof sessionRecordingStatuses)[number]\n\n// while we have both lazy and eager loaded replay we might get either type of config\ntype ReplayConfigType = RemoteConfig | SessionRecordingPersistedConfig\n\nfunction sessionRecordingUrlTriggerMatches(url: string, triggers: SessionRecordingUrlTrigger[]) {\n return triggers.some((trigger) => {\n switch (trigger.matching) {\n case 'regex':\n return new RegExp(trigger.url).test(url)\n default:\n return false\n }\n })\n}\n\nexport interface TriggerStatusMatching {\n triggerStatus(sessionId: string): TriggerStatus\n stop(): void\n}\nexport class OrTriggerMatching implements TriggerStatusMatching {\n constructor(private readonly _matchers: TriggerStatusMatching[]) {}\n\n triggerStatus(sessionId: string): TriggerStatus {\n const statuses = this._matchers.map((m) => m.triggerStatus(sessionId))\n if (statuses.includes(TRIGGER_ACTIVATED)) {\n return TRIGGER_ACTIVATED\n }\n if (statuses.includes(TRIGGER_PENDING)) {\n return TRIGGER_PENDING\n }\n return TRIGGER_DISABLED\n }\n\n stop(): void {\n this._matchers.forEach((m) => m.stop())\n }\n}\n\nexport class AndTriggerMatching implements TriggerStatusMatching {\n constructor(private readonly _matchers: TriggerStatusMatching[]) {}\n\n triggerStatus(sessionId: string): TriggerStatus {\n const statuses = new Set<TriggerStatus>()\n for (const matcher of this._matchers) {\n statuses.add(matcher.triggerStatus(sessionId))\n }\n\n // trigger_disabled means no config\n statuses.delete(TRIGGER_DISABLED)\n switch (statuses.size) {\n case 0:\n return TRIGGER_DISABLED\n case 1:\n return Array.from(statuses)[0]\n default:\n return TRIGGER_PENDING\n }\n }\n\n stop(): void {\n this._matchers.forEach((m) => m.stop())\n }\n}\n\nexport class PendingTriggerMatching implements TriggerStatusMatching {\n triggerStatus(): TriggerStatus {\n return TRIGGER_PENDING\n }\n\n stop(): void {\n // no-op\n }\n}\n\nconst isEagerLoadedConfig = (x: ReplayConfigType): x is RemoteConfig => {\n return 'sessionRecording' in x\n}\n\nexport class URLTriggerMatching implements TriggerStatusMatching {\n _urlTriggers: SessionRecordingUrlTrigger[] = []\n _urlBlocklist: SessionRecordingUrlTrigger[] = []\n\n urlBlocked: boolean = false\n\n constructor(private readonly _instance: PostHog) {}\n\n onConfig(config: ReplayConfigType) {\n this._urlTriggers =\n (isEagerLoadedConfig(config)\n ? isObject(config.sessionRecording)\n ? config.sessionRecording?.urlTriggers\n : []\n : config?.urlTriggers) || []\n this._urlBlocklist =\n (isEagerLoadedConfig(config)\n ? isObject(config.sessionRecording)\n ? config.sessionRecording?.urlBlocklist\n : []\n : config?.urlBlocklist) || []\n }\n\n /**\n * @deprecated Use onConfig instead\n */\n onRemoteConfig(response: RemoteConfig) {\n this.onConfig(response)\n }\n\n private _urlTriggerStatus(sessionId: string): TriggerStatus {\n if (this._urlTriggers.length === 0) {\n return TRIGGER_DISABLED\n }\n\n const currentTriggerSession = this._instance?.get_property(SESSION_RECORDING_URL_TRIGGER_ACTIVATED_SESSION)\n return currentTriggerSession === sessionId ? TRIGGER_ACTIVATED : TRIGGER_PENDING\n }\n\n triggerStatus(sessionId: string): TriggerStatus {\n const urlTriggerStatus = this._urlTriggerStatus(sessionId)\n const eitherIsActivated = urlTriggerStatus === TRIGGER_ACTIVATED\n const eitherIsPending = urlTriggerStatus === TRIGGER_PENDING\n\n const result = eitherIsActivated ? TRIGGER_ACTIVATED : eitherIsPending ? TRIGGER_PENDING : TRIGGER_DISABLED\n this._instance.register_for_session({\n $sdk_debug_replay_url_trigger_status: result,\n })\n return result\n }\n\n checkUrlTriggerConditions(\n onPause: () => void,\n onResume: () => void,\n onActivate: (triggerType: TriggerType) => void\n ) {\n if (typeof window === 'undefined' || !window.location.href) {\n return\n }\n\n const url = window.location.href\n\n const wasBlocked = this.urlBlocked\n const isNowBlocked = sessionRecordingUrlTriggerMatches(url, this._urlBlocklist)\n\n if (wasBlocked && isNowBlocked) {\n // if the url is blocked and was already blocked, do nothing\n return\n } else if (isNowBlocked && !wasBlocked) {\n onPause()\n } else if (!isNowBlocked && wasBlocked) {\n onResume()\n }\n\n if (sessionRecordingUrlTriggerMatches(url, this._urlTriggers)) {\n onActivate('url')\n }\n }\n\n stop(): void {\n // no-op\n }\n}\n\nexport class LinkedFlagMatching implements TriggerStatusMatching {\n linkedFlag: string | FlagVariant | null = null\n linkedFlagSeen: boolean = false\n private _flagListenerCleanup: () => void = () => {}\n constructor(private readonly _instance: PostHog) {}\n\n triggerStatus(): TriggerStatus {\n let result = TRIGGER_PENDING\n if (isNullish(this.linkedFlag)) {\n result = TRIGGER_DISABLED\n }\n if (this.linkedFlagSeen) {\n result = TRIGGER_ACTIVATED\n }\n this._instance.register_for_session({\n $sdk_debug_replay_linked_flag_trigger_status: result,\n })\n return result\n }\n\n onConfig(config: ReplayConfigType, onStarted: (flag: string, variant: string | null) => void) {\n this.linkedFlag =\n (isEagerLoadedConfig(config)\n ? isObject(config.sessionRecording)\n ? config.sessionRecording?.linkedFlag\n : null\n : config?.linkedFlag) || null\n\n if (!isNullish(this.linkedFlag) && !this.linkedFlagSeen) {\n const linkedFlag = isString(this.linkedFlag) ? this.linkedFlag : this.linkedFlag.flag\n const linkedVariant = isString(this.linkedFlag) ? null : this.linkedFlag.variant\n this._flagListenerCleanup = this._instance.onFeatureFlags((_flags, variants) => {\n const flagIsPresent = isObject(variants) && linkedFlag in variants\n let linkedFlagMatches = false\n if (flagIsPresent) {\n const variantForFlagKey = variants[linkedFlag]\n if (isBoolean(variantForFlagKey)) {\n linkedFlagMatches = variantForFlagKey === true\n } else if (linkedVariant) {\n linkedFlagMatches = variantForFlagKey === linkedVariant\n } else {\n // then this is a variant flag and we want to match any string\n linkedFlagMatches = !!variantForFlagKey\n }\n }\n this.linkedFlagSeen = linkedFlagMatches\n if (linkedFlagMatches) {\n onStarted(linkedFlag, linkedVariant)\n }\n })\n }\n }\n\n /**\n * @deprecated Use onConfig instead\n */\n onRemoteConfig(response: RemoteConfig, onStarted: (flag: string, variant: string | null) => void) {\n this.onConfig(response, onStarted)\n }\n\n stop(): void {\n this._flagListenerCleanup()\n }\n}\n\nexport class EventTriggerMatching implements TriggerStatusMatching {\n _eventTriggers: string[] = []\n\n constructor(private readonly _instance: PostHog) {}\n\n onConfig(config: ReplayConfigType) {\n this._eventTriggers =\n (isEagerLoadedConfig(config)\n ? isObject(config.sessionRecording)\n ? config.sessionRecording?.eventTriggers\n : []\n : config?.eventTriggers) || []\n }\n\n /**\n * @deprecated Use onConfig instead\n */\n onRemoteConfig(response: RemoteConfig) {\n this.onConfig(response)\n }\n\n private _eventTriggerStatus(sessionId: string): TriggerStatus {\n if (this._eventTriggers.length === 0) {\n return TRIGGER_DISABLED\n }\n\n const currentTriggerSession = this._instance?.get_property(SESSION_RECORDING_EVENT_TRIGGER_ACTIVATED_SESSION)\n return currentTriggerSession === sessionId ? TRIGGER_ACTIVATED : TRIGGER_PENDING\n }\n\n triggerStatus(sessionId: string): TriggerStatus {\n const eventTriggerStatus = this._eventTriggerStatus(sessionId)\n const result =\n eventTriggerStatus === TRIGGER_ACTIVATED\n ? TRIGGER_ACTIVATED\n : eventTriggerStatus === TRIGGER_PENDING\n ? TRIGGER_PENDING\n : TRIGGER_DISABLED\n this._instance.register_for_session({\n $sdk_debug_replay_event_trigger_status: result,\n })\n return result\n }\n\n stop(): void {\n // no-op\n }\n}\n\n// we need a no-op matcher before we can lazy-load the other matches, since all matchers wait on remote config anyway\nexport function nullMatchSessionRecordingStatus(triggersStatus: RecordingTriggersStatus): SessionRecordingStatus {\n if (!triggersStatus.isRecordingEnabled) {\n return DISABLED\n }\n\n return BUFFERING\n}\n\nexport function anyMatchSessionRecordingStatus(triggersStatus: RecordingTriggersStatus): SessionRecordingStatus {\n if (!triggersStatus.receivedFlags) {\n return BUFFERING\n }\n\n if (!triggersStatus.isRecordingEnabled) {\n return DISABLED\n }\n\n if (triggersStatus.urlTriggerMatching.urlBlocked) {\n return PAUSED\n }\n\n const sampledActive = triggersStatus.isSampled === true\n const triggerMatches = new OrTriggerMatching([\n triggersStatus.eventTriggerMatching,\n triggersStatus.urlTriggerMatching,\n triggersStatus.linkedFlagMatching,\n ]).triggerStatus(triggersStatus.sessionId)\n\n if (sampledActive) {\n return SAMPLED\n }\n\n if (triggerMatches === TRIGGER_ACTIVATED) {\n return ACTIVE\n }\n\n if (triggerMatches === TRIGGER_PENDING) {\n // even if sampled active is false, we should still be buffering\n // since a pending trigger could override it\n return BUFFERING\n }\n\n // if sampling is set and the session is already decided to not be sampled\n // then we should never be active\n if (triggersStatus.isSampled === false) {\n return DISABLED\n }\n\n return ACTIVE\n}\n\nexport function allMatchSessionRecordingStatus(triggersStatus: RecordingTriggersStatus): SessionRecordingStatus {\n if (!triggersStatus.receivedFlags) {\n return BUFFERING\n }\n\n if (!triggersStatus.isRecordingEnabled) {\n return DISABLED\n }\n\n if (triggersStatus.urlTriggerMatching.urlBlocked) {\n return PAUSED\n }\n\n const andTriggerMatch = new AndTriggerMatching([\n triggersStatus.eventTriggerMatching,\n triggersStatus.urlTriggerMatching,\n triggersStatus.linkedFlagMatching,\n ])\n const currentTriggerStatus = andTriggerMatch.triggerStatus(triggersStatus.sessionId)\n const hasTriggersConfigured = currentTriggerStatus !== TRIGGER_DISABLED\n\n const hasSamplingConfigured = isBoolean(triggersStatus.isSampled)\n\n if (hasTriggersConfigured && currentTriggerStatus === TRIGGER_PENDING) {\n return BUFFERING\n }\n\n if (hasTriggersConfigured && currentTriggerStatus === TRIGGER_DISABLED) {\n return DISABLED\n }\n\n // sampling can't ever cause buffering, it's always determined right away or not configured\n if (hasSamplingConfigured && !triggersStatus.isSampled) {\n return DISABLED\n }\n\n // If sampling is configured and set to true, return sampled\n if (triggersStatus.isSampled === true) {\n return SAMPLED\n }\n\n return ACTIVE\n}\n"]}
@@ -1 +1 @@
1
- {"root":["../src/autocapture-utils.ts","../src/autocapture.ts","../src/config.ts","../src/consent.ts","../src/constants.ts","../src/declaration.d.ts","../src/heatmaps.ts","../src/page-view.ts","../src/posthog-core.ts","../src/posthog-exceptions.ts","../src/posthog-featureflags.ts","../src/posthog-persistence.ts","../src/posthog-surveys-types.ts","../src/posthog-surveys.ts","../src/rate-limiter.ts","../src/remote-config.ts","../src/request-queue.ts","../src/request.ts","../src/retry-queue.ts","../src/scroll-manager.ts","../src/session-props.ts","../src/sessionid.ts","../src/site-apps.ts","../src/storage.ts","../src/types.ts","../src/uuidv7.ts","../src/web-experiments-types.ts","../src/web-experiments.ts","../src/web-types.d.ts","../src/customizations/before-send.ts","../src/customizations/index.ts","../src/customizations/posthogReduxLogger.ts","../src/customizations/setAllPersonProfilePropertiesAsPersonPropertiesForFlags.ts","../src/entrypoints/all-external-dependencies.ts","../src/entrypoints/array.full.es5.ts","../src/entrypoints/array.full.no-external.ts","../src/entrypoints/array.full.ts","../src/entrypoints/array.no-external.ts","../src/entrypoints/array.ts","../src/entrypoints/crisp-chat-integration.ts","../src/entrypoints/customizations.full.ts","../src/entrypoints/dead-clicks-autocapture.ts","../src/entrypoints/exception-autocapture.ts","../src/entrypoints/external-scripts-loader.ts","../src/entrypoints/intercom-integration.ts","../src/entrypoints/lazy-recorder.ts","../src/entrypoints/main.cjs.ts","../src/entrypoints/module.es.ts","../src/entrypoints/module.full.es.ts","../src/entrypoints/module.full.no-external.es.ts","../src/entrypoints/module.no-external.es.ts","../src/entrypoints/posthog-recorder.ts","../src/entrypoints/recorder-v2.ts","../src/entrypoints/recorder.ts","../src/entrypoints/surveys-preview.es.ts","../src/entrypoints/surveys.ts","../src/entrypoints/tracing-headers.ts","../src/entrypoints/web-vitals.ts","../src/extensions/dead-clicks-autocapture.ts","../src/extensions/external-integration.ts","../src/extensions/history-autocapture.ts","../src/extensions/rageclick.ts","../src/extensions/sampling.ts","../src/extensions/segment-integration.ts","../src/extensions/sentry-integration.ts","../src/extensions/surveys.tsx","../src/extensions/toolbar.ts","../src/extensions/tracing-headers.ts","../src/extensions/exception-autocapture/index.ts","../src/extensions/replay/session-recording.ts","../src/extensions/replay/external/config.ts","../src/extensions/replay/external/denylist.ts","../src/extensions/replay/external/flushed-size-tracker.ts","../src/extensions/replay/external/lazy-loaded-session-recorder.ts","../src/extensions/replay/external/mutation-throttler.ts","../src/extensions/replay/external/network-plugin.ts","../src/extensions/replay/external/sessionrecording-utils.ts","../src/extensions/replay/external/triggerMatching.ts","../src/extensions/replay/rrweb-plugins/patch.ts","../src/extensions/replay/types/rrweb-types.ts","../src/extensions/replay/types/rrweb.ts","../src/extensions/surveys/action-matcher.ts","../src/extensions/surveys/icons.tsx","../src/extensions/surveys/surveys-extension-utils.tsx","../src/extensions/surveys/components/BottomSection.tsx","../src/extensions/surveys/components/ConfirmationMessage.tsx","../src/extensions/surveys/components/PostHogLogo.tsx","../src/extensions/surveys/components/QuestionHeader.tsx","../src/extensions/surveys/components/QuestionTypes.tsx","../src/extensions/utils/stylesheet-loader.ts","../src/extensions/web-vitals/index.ts","../src/utils/blocked-uas.ts","../src/utils/element-utils.ts","../src/utils/encode-utils.ts","../src/utils/event-utils.ts","../src/utils/globals.ts","../src/utils/index.ts","../src/utils/logger.ts","../src/utils/property-utils.ts","../src/utils/prototype-utils.ts","../src/utils/regex-utils.ts","../src/utils/request-router.ts","../src/utils/request-utils.ts","../src/utils/simple-event-emitter.ts","../src/utils/survey-event-receiver.ts","../src/utils/survey-url-prefill.ts","../src/utils/survey-utils.ts","../src/utils/type-utils.ts","../src/utils/user-agent-utils.ts"],"version":"5.8.2"}
1
+ {"root":["../src/autocapture-utils.ts","../src/autocapture.ts","../src/config.ts","../src/consent.ts","../src/constants.ts","../src/declaration.d.ts","../src/heatmaps.ts","../src/page-view.ts","../src/posthog-core.ts","../src/posthog-exceptions.ts","../src/posthog-featureflags.ts","../src/posthog-persistence.ts","../src/posthog-surveys-types.ts","../src/posthog-surveys.ts","../src/rate-limiter.ts","../src/remote-config.ts","../src/request-queue.ts","../src/request.ts","../src/retry-queue.ts","../src/scroll-manager.ts","../src/session-props.ts","../src/sessionid.ts","../src/site-apps.ts","../src/storage.ts","../src/types.ts","../src/uuidv7.ts","../src/web-experiments-types.ts","../src/web-experiments.ts","../src/web-types.d.ts","../src/customizations/before-send.ts","../src/customizations/index.ts","../src/customizations/posthogreduxlogger.ts","../src/customizations/setallpersonprofilepropertiesaspersonpropertiesforflags.ts","../src/entrypoints/all-external-dependencies.ts","../src/entrypoints/array.full.es5.ts","../src/entrypoints/array.full.no-external.ts","../src/entrypoints/array.full.ts","../src/entrypoints/array.no-external.ts","../src/entrypoints/array.ts","../src/entrypoints/crisp-chat-integration.ts","../src/entrypoints/customizations.full.ts","../src/entrypoints/dead-clicks-autocapture.ts","../src/entrypoints/exception-autocapture.ts","../src/entrypoints/external-scripts-loader.ts","../src/entrypoints/intercom-integration.ts","../src/entrypoints/lazy-recorder.ts","../src/entrypoints/main.cjs.ts","../src/entrypoints/module.es.ts","../src/entrypoints/module.full.es.ts","../src/entrypoints/module.full.no-external.es.ts","../src/entrypoints/module.no-external.es.ts","../src/entrypoints/posthog-recorder.ts","../src/entrypoints/recorder-v2.ts","../src/entrypoints/recorder.ts","../src/entrypoints/surveys-preview.es.ts","../src/entrypoints/surveys.ts","../src/entrypoints/tracing-headers.ts","../src/entrypoints/web-vitals.ts","../src/extensions/dead-clicks-autocapture.ts","../src/extensions/external-integration.ts","../src/extensions/history-autocapture.ts","../src/extensions/rageclick.ts","../src/extensions/sampling.ts","../src/extensions/segment-integration.ts","../src/extensions/sentry-integration.ts","../src/extensions/surveys.tsx","../src/extensions/toolbar.ts","../src/extensions/tracing-headers.ts","../src/extensions/exception-autocapture/index.ts","../src/extensions/replay/session-recording.ts","../src/extensions/replay/external/config.ts","../src/extensions/replay/external/denylist.ts","../src/extensions/replay/external/flushed-size-tracker.ts","../src/extensions/replay/external/lazy-loaded-session-recorder.ts","../src/extensions/replay/external/mutation-throttler.ts","../src/extensions/replay/external/network-plugin.ts","../src/extensions/replay/external/sessionrecording-utils.ts","../src/extensions/replay/external/triggermatching.ts","../src/extensions/replay/rrweb-plugins/patch.ts","../src/extensions/replay/types/rrweb-types.ts","../src/extensions/replay/types/rrweb.ts","../src/extensions/surveys/action-matcher.ts","../src/extensions/surveys/icons.tsx","../src/extensions/surveys/surveys-extension-utils.tsx","../src/extensions/surveys/components/bottomsection.tsx","../src/extensions/surveys/components/confirmationmessage.tsx","../src/extensions/surveys/components/posthoglogo.tsx","../src/extensions/surveys/components/questionheader.tsx","../src/extensions/surveys/components/questiontypes.tsx","../src/extensions/utils/stylesheet-loader.ts","../src/extensions/web-vitals/index.ts","../src/utils/blocked-uas.ts","../src/utils/element-utils.ts","../src/utils/encode-utils.ts","../src/utils/event-utils.ts","../src/utils/globals.ts","../src/utils/index.ts","../src/utils/logger.ts","../src/utils/property-utils.ts","../src/utils/prototype-utils.ts","../src/utils/regex-utils.ts","../src/utils/request-router.ts","../src/utils/request-utils.ts","../src/utils/simple-event-emitter.ts","../src/utils/survey-event-receiver.ts","../src/utils/survey-url-prefill.ts","../src/utils/survey-utils.ts","../src/utils/type-utils.ts","../src/utils/user-agent-utils.ts"],"version":"5.8.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "posthog-js",
3
- "version": "1.297.2",
3
+ "version": "1.297.4",
4
4
  "description": "Posthog-js allows you to automatically capture usage and send events to PostHog.",
5
5
  "repository": "https://github.com/PostHog/posthog-js",
6
6
  "author": "hey@posthog.com",
@@ -20,7 +20,7 @@
20
20
  "fflate": "^0.4.8",
21
21
  "preact": "^10.19.3",
22
22
  "web-vitals": "^4.2.4",
23
- "@posthog/core": "1.5.5"
23
+ "@posthog/core": "1.5.7"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@babel/core": "7.27.1",