posthog-js 1.40.2 → 1.41.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.
package/dist/es.js CHANGED
@@ -917,7 +917,7 @@ var LZString = {
917
917
  }
918
918
  };
919
919
 
920
- var version = "1.40.2";
920
+ var version = "1.41.0";
921
921
 
922
922
  // e.g. Config.DEBUG = Config.DEBUG || instance.get_config('debug')
923
923
 
@@ -3168,12 +3168,21 @@ var PostHogPeople = /*#__PURE__*/function () {
3168
3168
  return PostHogPeople;
3169
3169
  }();
3170
3170
 
3171
+ var PERSISTENCE_ACTIVE_FEATURE_FLAGS = '$active_feature_flags';
3172
+ var PERSISTENCE_ENABLED_FEATURE_FLAGS = '$enabled_feature_flags';
3173
+ var PERSISTENCE_OVERRIDE_FEATURE_FLAGS = '$override_feature_flags';
3174
+ var PERSISTENCE_FEATURE_FLAG_PAYLOADS = '$feature_flag_payloads';
3171
3175
  var parseFeatureFlagDecideResponse = function parseFeatureFlagDecideResponse(response, persistence) {
3176
+ var currentFlags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
3177
+ var currentFlagPayloads = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
3172
3178
  var flags = response['featureFlags'];
3179
+ var flagPayloads = response['featureFlagPayloads'];
3173
3180
 
3174
3181
  if (flags) {
3175
3182
  // using the v1 api
3176
3183
  if (Array.isArray(flags)) {
3184
+ var _persistence$register;
3185
+
3177
3186
  var $enabled_feature_flags = {};
3178
3187
 
3179
3188
  if (flags) {
@@ -3182,21 +3191,27 @@ var parseFeatureFlagDecideResponse = function parseFeatureFlagDecideResponse(res
3182
3191
  }
3183
3192
  }
3184
3193
 
3185
- persistence && persistence.register({
3186
- $active_feature_flags: flags,
3187
- $enabled_feature_flags: $enabled_feature_flags
3188
- });
3194
+ persistence && persistence.register((_persistence$register = {}, _defineProperty(_persistence$register, PERSISTENCE_ACTIVE_FEATURE_FLAGS, flags), _defineProperty(_persistence$register, PERSISTENCE_ENABLED_FEATURE_FLAGS, $enabled_feature_flags), _persistence$register));
3189
3195
  } else {
3190
- // using the v2 api
3191
- persistence && persistence.register({
3192
- $active_feature_flags: Object.keys(flags || {}),
3193
- $enabled_feature_flags: flags || {}
3194
- });
3196
+ var _persistence$register2;
3197
+
3198
+ // using the v2+ api
3199
+ var newFeatureFlags = flags;
3200
+ var newFeatureFlagPayloads = flagPayloads;
3201
+
3202
+ if (response.errorsWhileComputingFlags) {
3203
+ // if not all flags were computed, we upsert flags instead of replacing them
3204
+ newFeatureFlags = _objectSpread2(_objectSpread2({}, currentFlags), newFeatureFlags);
3205
+ newFeatureFlagPayloads = _objectSpread2(_objectSpread2({}, currentFlagPayloads), newFeatureFlagPayloads);
3206
+ }
3207
+
3208
+ persistence && persistence.register((_persistence$register2 = {}, _defineProperty(_persistence$register2, PERSISTENCE_ACTIVE_FEATURE_FLAGS, Object.keys(newFeatureFlags || {})), _defineProperty(_persistence$register2, PERSISTENCE_ENABLED_FEATURE_FLAGS, newFeatureFlags || {}), _defineProperty(_persistence$register2, PERSISTENCE_FEATURE_FLAG_PAYLOADS, newFeatureFlagPayloads || {}), _persistence$register2));
3195
3209
  }
3196
3210
  } else {
3197
3211
  if (persistence) {
3198
- persistence.unregister('$active_feature_flags');
3199
- persistence.unregister('$enabled_feature_flags');
3212
+ persistence.unregister(PERSISTENCE_ACTIVE_FEATURE_FLAGS);
3213
+ persistence.unregister(PERSISTENCE_ENABLED_FEATURE_FLAGS);
3214
+ persistence.unregister(PERSISTENCE_FEATURE_FLAG_PAYLOADS);
3200
3215
  }
3201
3216
  }
3202
3217
  };
@@ -3220,8 +3235,8 @@ var PostHogFeatureFlags = /*#__PURE__*/function () {
3220
3235
  }, {
3221
3236
  key: "getFlagVariants",
3222
3237
  value: function getFlagVariants() {
3223
- var enabledFlags = this.instance.get_property('$enabled_feature_flags');
3224
- var overriddenFlags = this.instance.get_property('$override_feature_flags');
3238
+ var enabledFlags = this.instance.get_property(PERSISTENCE_ENABLED_FEATURE_FLAGS);
3239
+ var overriddenFlags = this.instance.get_property(PERSISTENCE_OVERRIDE_FEATURE_FLAGS);
3225
3240
 
3226
3241
  if (!overriddenFlags) {
3227
3242
  return enabledFlags || {};
@@ -3250,6 +3265,12 @@ var PostHogFeatureFlags = /*#__PURE__*/function () {
3250
3265
 
3251
3266
  return finalFlags;
3252
3267
  }
3268
+ }, {
3269
+ key: "getFlagPayloads",
3270
+ value: function getFlagPayloads() {
3271
+ var flagPayloads = this.instance.get_property(PERSISTENCE_FEATURE_FLAG_PAYLOADS);
3272
+ return flagPayloads || {};
3273
+ }
3253
3274
  /**
3254
3275
  * Reloads feature flags asynchronously.
3255
3276
  *
@@ -3315,7 +3336,7 @@ var PostHogFeatureFlags = /*#__PURE__*/function () {
3315
3336
 
3316
3337
  var encoded_data = _base64Encode(json_data);
3317
3338
 
3318
- this.instance._send_request(this.instance.get_config('api_host') + '/decide/?v=2', {
3339
+ this.instance._send_request(this.instance.get_config('api_host') + '/decide/?v=3', {
3319
3340
  data: encoded_data
3320
3341
  }, {
3321
3342
  method: 'POST'
@@ -3324,7 +3345,9 @@ var PostHogFeatureFlags = /*#__PURE__*/function () {
3324
3345
  // makes it through
3325
3346
  _this2.$anon_distinct_id = undefined;
3326
3347
 
3327
- _this2.receivedFeatureFlags(response); // :TRICKY: Reload - start another request if queued!
3348
+ if (response && response.status === 200) {
3349
+ _this2.receivedFeatureFlags(response);
3350
+ } // :TRICKY: Reload - start another request if queued!
3328
3351
 
3329
3352
 
3330
3353
  _this2.setReloadingPaused(false);
@@ -3365,6 +3388,12 @@ var PostHogFeatureFlags = /*#__PURE__*/function () {
3365
3388
 
3366
3389
  return flagValue;
3367
3390
  }
3391
+ }, {
3392
+ key: "getFeatureFlagPayload",
3393
+ value: function getFeatureFlagPayload(key) {
3394
+ var payloads = this.getFlagPayloads();
3395
+ return payloads[key];
3396
+ }
3368
3397
  /*
3369
3398
  * See if feature flag is enabled for user.
3370
3399
  *
@@ -3397,7 +3426,9 @@ var PostHogFeatureFlags = /*#__PURE__*/function () {
3397
3426
  key: "receivedFeatureFlags",
3398
3427
  value: function receivedFeatureFlags(response) {
3399
3428
  this.instance.decideEndpointWasHit = true;
3400
- parseFeatureFlagDecideResponse(response, this.instance.persistence);
3429
+ var currentFlags = this.getFlagVariants();
3430
+ var currentFlagPayloads = this.getFlagPayloads();
3431
+ parseFeatureFlagDecideResponse(response, this.instance.persistence, currentFlags, currentFlagPayloads);
3401
3432
  var flags = this.getFlags();
3402
3433
  var variants = this.getFlagVariants();
3403
3434
  this.featureFlagEventHandlers.forEach(function (handler) {
@@ -3422,7 +3453,7 @@ var PostHogFeatureFlags = /*#__PURE__*/function () {
3422
3453
  this._override_warning = false;
3423
3454
 
3424
3455
  if (flags === false) {
3425
- this.instance.persistence.unregister('$override_feature_flags');
3456
+ this.instance.persistence.unregister(PERSISTENCE_OVERRIDE_FEATURE_FLAGS);
3426
3457
  } else if (Array.isArray(flags)) {
3427
3458
  var flagsObj = {};
3428
3459
 
@@ -3430,13 +3461,9 @@ var PostHogFeatureFlags = /*#__PURE__*/function () {
3430
3461
  flagsObj[flags[i]] = true;
3431
3462
  }
3432
3463
 
3433
- this.instance.persistence.register({
3434
- $override_feature_flags: flagsObj
3435
- });
3464
+ this.instance.persistence.register(_defineProperty({}, PERSISTENCE_OVERRIDE_FEATURE_FLAGS, flagsObj));
3436
3465
  } else {
3437
- this.instance.persistence.register({
3438
- $override_feature_flags: flags
3439
- });
3466
+ this.instance.persistence.register(_defineProperty({}, PERSISTENCE_OVERRIDE_FEATURE_FLAGS, flags));
3440
3467
  }
3441
3468
  }
3442
3469
  /*
@@ -4340,7 +4367,7 @@ var Decide = /*#__PURE__*/function () {
4340
4367
 
4341
4368
  var encoded_data = _base64Encode(json_data);
4342
4369
 
4343
- this.instance._send_request("".concat(this.instance.get_config('api_host'), "/decide/?v=2"), {
4370
+ this.instance._send_request("".concat(this.instance.get_config('api_host'), "/decide/?v=3"), {
4344
4371
  data: encoded_data,
4345
4372
  verbose: true
4346
4373
  }, {
@@ -4375,7 +4402,11 @@ var Decide = /*#__PURE__*/function () {
4375
4402
  (_this$instance$sessio = this.instance.sessionRecording) === null || _this$instance$sessio === void 0 ? void 0 : _this$instance$sessio.afterDecideResponse(response);
4376
4403
  autocapture.afterDecideResponse(response, this.instance);
4377
4404
  (_this$instance$webPer = this.instance.webPerformance) === null || _this$instance$webPer === void 0 ? void 0 : _this$instance$webPer.afterDecideResponse(response);
4378
- this.instance.featureFlags.receivedFeatureFlags(response);
4405
+
4406
+ if (response && response.status === 200) {
4407
+ this.instance.featureFlags.receivedFeatureFlags(response);
4408
+ }
4409
+
4379
4410
  this.instance['compression'] = {};
4380
4411
 
4381
4412
  if (response['supportedCompression'] && !this.instance.get_config('disable_compression')) {
@@ -5724,7 +5755,9 @@ var xhr = function xhr(_ref) {
5724
5755
  callback = _ref.callback,
5725
5756
  retriesPerformedSoFar = _ref.retriesPerformedSoFar,
5726
5757
  retryQueue = _ref.retryQueue,
5727
- onXHRError = _ref.onXHRError;
5758
+ onXHRError = _ref.onXHRError,
5759
+ _ref$timeout = _ref.timeout,
5760
+ timeout = _ref$timeout === void 0 ? 10000 : _ref$timeout;
5728
5761
  var req = new XMLHttpRequest();
5729
5762
  req.open(options.method || 'GET', url, true);
5730
5763
  var body = encodePostData(data, options);
@@ -5737,9 +5770,10 @@ var xhr = function xhr(_ref) {
5737
5770
 
5738
5771
  if (options.method === 'POST' && !options.blob) {
5739
5772
  req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
5740
- } // send the ph_optout cookie
5741
- // withCredentials cannot be modified until after calling .open on Android and Mobile Safari
5773
+ }
5742
5774
 
5775
+ req.timeout = timeout; // send the ph_optout cookie
5776
+ // withCredentials cannot be modified until after calling .open on Android and Mobile Safari
5743
5777
 
5744
5778
  req.withCredentials = true;
5745
5779
 
@@ -6621,7 +6655,7 @@ var PostHog = /*#__PURE__*/function () {
6621
6655
  }
6622
6656
 
6623
6657
  if (this._hasBootstrappedFeatureFlags()) {
6624
- var _config$bootstrap3;
6658
+ var _config$bootstrap3, _config$bootstrap6;
6625
6659
 
6626
6660
  var activeFlags = Object.keys(((_config$bootstrap3 = config.bootstrap) === null || _config$bootstrap3 === void 0 ? void 0 : _config$bootstrap3.featureFlags) || {}).filter(function (flag) {
6627
6661
  var _config$bootstrap4, _config$bootstrap4$fe;
@@ -6632,8 +6666,22 @@ var PostHog = /*#__PURE__*/function () {
6632
6666
 
6633
6667
  return res[key] = ((_config$bootstrap5 = config.bootstrap) === null || _config$bootstrap5 === void 0 ? void 0 : (_config$bootstrap5$fe = _config$bootstrap5.featureFlags) === null || _config$bootstrap5$fe === void 0 ? void 0 : _config$bootstrap5$fe[key]) || false, res;
6634
6668
  }, {});
6669
+ var featureFlagPayloads = Object.keys(((_config$bootstrap6 = config.bootstrap) === null || _config$bootstrap6 === void 0 ? void 0 : _config$bootstrap6.featureFlagPayloads) || {}).filter(function (key) {
6670
+ return activeFlags[key];
6671
+ }).reduce(function (res, key) {
6672
+ var _config$bootstrap7, _config$bootstrap7$fe;
6673
+
6674
+ if ((_config$bootstrap7 = config.bootstrap) !== null && _config$bootstrap7 !== void 0 && (_config$bootstrap7$fe = _config$bootstrap7.featureFlagPayloads) !== null && _config$bootstrap7$fe !== void 0 && _config$bootstrap7$fe[key]) {
6675
+ var _config$bootstrap8, _config$bootstrap8$fe;
6676
+
6677
+ res[key] = (_config$bootstrap8 = config.bootstrap) === null || _config$bootstrap8 === void 0 ? void 0 : (_config$bootstrap8$fe = _config$bootstrap8.featureFlagPayloads) === null || _config$bootstrap8$fe === void 0 ? void 0 : _config$bootstrap8$fe[key];
6678
+ }
6679
+
6680
+ return res;
6681
+ }, {});
6635
6682
  this.featureFlags.receivedFeatureFlags({
6636
- featureFlags: activeFlags
6683
+ featureFlags: activeFlags,
6684
+ featureFlagPayloads: featureFlagPayloads
6637
6685
  });
6638
6686
  }
6639
6687
 
@@ -7222,6 +7270,30 @@ var PostHog = /*#__PURE__*/function () {
7222
7270
  value: function getFeatureFlag(key, options) {
7223
7271
  return this.featureFlags.getFeatureFlag(key, options);
7224
7272
  }
7273
+ /*
7274
+ * Get feature flag payload value matching key for user (supports multivariate flags).
7275
+ *
7276
+ * ### Usage:
7277
+ *
7278
+ * if(posthog.getFeatureFlag('beta-feature') === 'some-value') {
7279
+ * const someValue = posthog.getFeatureFlagPayload('beta-feature')
7280
+ * // do something
7281
+ * }
7282
+ *
7283
+ * @param {Object|String} prop Key of the feature flag.
7284
+ */
7285
+
7286
+ }, {
7287
+ key: "getFeatureFlagPayload",
7288
+ value: function getFeatureFlagPayload(key) {
7289
+ var payload = this.featureFlags.getFeatureFlagPayload(key);
7290
+
7291
+ try {
7292
+ return JSON.parse(payload);
7293
+ } catch (_unused) {
7294
+ return payload;
7295
+ }
7296
+ }
7225
7297
  /*
7226
7298
  * See if feature flag is enabled for user.
7227
7299
  *