posthog-js 1.232.0 → 1.232.2

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/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "posthog-js",
3
- "version": "1.232.0",
3
+ "version": "1.232.2",
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",
@@ -1,3 +1,4 @@
1
+ import 'core-js/features/object/from-entries';
1
2
  import './surveys';
2
3
  import './exception-autocapture';
3
4
  import './tracing-headers';
@@ -3,6 +3,7 @@
3
3
  // to allow es5/IE11 support
4
4
  // it doesn't include recorder which doesn't support IE11,
5
5
  // and it doesn't include web-vitals which doesn't support IE11
6
+ import 'core-js/features/object/from-entries';
6
7
  import './surveys';
7
8
  import './exception-autocapture';
8
9
  import './tracing-headers';
@@ -1 +1 @@
1
- {"version":3,"file":"array.full.es5.js","sourceRoot":"","sources":["../../../src/entrypoints/array.full.es5.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,4DAA4D;AAC5D,4BAA4B;AAE5B,0DAA0D;AAC1D,+DAA+D;AAE/D,OAAO,WAAW,CAAA;AAClB,OAAO,yBAAyB,CAAA;AAChC,OAAO,mBAAmB,CAAA;AAC1B,OAAO,qBAAqB,CAAA","sourcesContent":["// a straight copy of the array.full.ts entrypoint,\n// but will have different config when passed through rollup\n// to allow es5/IE11 support\n\n// it doesn't include recorder which doesn't support IE11,\n// and it doesn't include web-vitals which doesn't support IE11\n\nimport './surveys'\nimport './exception-autocapture'\nimport './tracing-headers'\nimport './array.no-external'\n"]}
1
+ {"version":3,"file":"array.full.es5.js","sourceRoot":"","sources":["../../../src/entrypoints/array.full.es5.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,4DAA4D;AAC5D,4BAA4B;AAE5B,0DAA0D;AAC1D,+DAA+D;AAE/D,OAAO,sCAAsC,CAAA;AAE7C,OAAO,WAAW,CAAA;AAClB,OAAO,yBAAyB,CAAA;AAChC,OAAO,mBAAmB,CAAA;AAC1B,OAAO,qBAAqB,CAAA","sourcesContent":["// a straight copy of the array.full.ts entrypoint,\n// but will have different config when passed through rollup\n// to allow es5/IE11 support\n\n// it doesn't include recorder which doesn't support IE11,\n// and it doesn't include web-vitals which doesn't support IE11\n\nimport 'core-js/features/object/from-entries'\n\nimport './surveys'\nimport './exception-autocapture'\nimport './tracing-headers'\nimport './array.no-external'\n"]}
@@ -350,7 +350,7 @@ var PostHogFeatureFlags = /** @class */ (function () {
350
350
  this._requestInFlight = true;
351
351
  this.instance._send_request({
352
352
  method: 'POST',
353
- url: this.instance.requestRouter.endpointFor('api', '/decide/?v=3'),
353
+ url: this.instance.requestRouter.endpointFor('api', '/decide/?v=4'),
354
354
  data: data,
355
355
  compression: this.instance.config.disable_compression ? undefined : Compression.Base64,
356
356
  timeout: this.instance.config.feature_flag_request_timeout_ms,
@@ -495,7 +495,7 @@ var PostHogFeatureFlags = /** @class */ (function () {
495
495
  var token = this.instance.config.token;
496
496
  this.instance._send_request({
497
497
  method: 'POST',
498
- url: this.instance.requestRouter.endpointFor('api', '/decide/?v=3'),
498
+ url: this.instance.requestRouter.endpointFor('api', '/decide/?v=4'),
499
499
  data: {
500
500
  distinct_id: this.instance.get_distinct_id(),
501
501
  token: token,
@@ -1 +1 @@
1
- {"version":3,"file":"posthog-featureflags.js","sourceRoot":"","sources":["../../src/posthog-featureflags.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEzC,OAAO,EAOH,WAAW,GAKd,MAAM,SAAS,CAAA;AAGhB,OAAO,EACH,iCAAiC,EACjC,gCAAgC,EAChC,qBAAqB,EACrB,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,GACrB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,IAAM,MAAM,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAA;AAE7C,IAAM,gCAAgC,GAAG,uBAAuB,CAAA;AAChE,IAAM,kCAAkC,GAAG,yBAAyB,CAAA;AACpE,IAAM,iCAAiC,GAAG,wBAAwB,CAAA;AAClE,IAAM,0CAA0C,GAAG,iCAAiC,CAAA;AACpF,IAAM,mCAAmC,GAAG,0BAA0B,CAAA;AAEtE,MAAM,CAAC,IAAM,wBAAwB,GAAG,UAAC,YAA+C;;IACpF,IAAM,kBAAkB,GAAqC,EAAE,CAAA;;QAC/D,KAA2B,IAAA,KAAA,SAAA,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAA,gBAAA,4BAAE,CAAC;YAA9C,IAAA,KAAA,mBAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;YAClB,IAAI,KAAK,EAAE,CAAC;gBACR,kBAAkB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACnC,CAAC;QACL,CAAC;;;;;;;;;IACD,OAAO,kBAAkB,CAAA;AAC7B,CAAC,CAAA;AAED,MAAM,CAAC,IAAM,8BAA8B,GAAG,UAC1C,QAAiC,EACjC,WAA+B,EAC/B,YAAmD,EACnD,mBAAkD,EAClD,kBAA0D;;IAF1D,6BAAA,EAAA,iBAAmD;IACnD,oCAAA,EAAA,wBAAkD;IAClD,mCAAA,EAAA,uBAA0D;IAE1D,IAAM,kBAAkB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAA;IAC5D,IAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAA;IAC5C,IAAM,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAA;IACpD,IAAM,YAAY,GAAG,kBAAkB,CAAC,mBAAmB,CAAA;IAE3D,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,OAAM,CAAC,uEAAuE;IAClF,CAAC;IAED,IAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;IAEvC,mBAAmB;IACnB,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAA;QAC7F,IAAM,sBAAsB,GAA4B,EAAE,CAAA;QAC1D,IAAI,YAAY,EAAE,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;YAClD,CAAC;QACL,CAAC;QACD,WAAW;YACP,WAAW,CAAC,QAAQ;gBAChB,GAAC,gCAAgC,IAAG,YAAY;gBAChD,GAAC,qBAAqB,IAAG,sBAAsB;oBACjD,CAAA;QACN,OAAM;IACV,CAAC;IAED,oBAAoB;IACpB,IAAI,eAAe,GAAG,YAAY,CAAA;IAClC,IAAI,sBAAsB,GAAG,YAAY,CAAA;IACzC,IAAI,qBAAqB,GAAG,WAAW,CAAA;IACvC,IAAI,QAAQ,CAAC,yBAAyB,EAAE,CAAC;QACrC,4EAA4E;QAC5E,eAAe,yBAAQ,YAAY,GAAK,eAAe,CAAE,CAAA;QACzD,sBAAsB,yBAAQ,mBAAmB,GAAK,sBAAsB,CAAE,CAAA;QAC9E,qBAAqB,yBAAQ,kBAAkB,GAAK,qBAAqB,CAAE,CAAA;IAC/E,CAAC;IAED,WAAW;QACP,WAAW,CAAC,QAAQ,uBACf,gCAAgC,IAAG,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC,KACzF,qBAAqB,IAAG,eAAe,IAAI,EAAE,KAC7C,iCAAiC,IAAG,sBAAsB,IAAI,EAAE,KAChE,gCAAgC,IAAG,qBAAqB,IAAI,EAAE,OAC5D,CAAC,SAAS,CAAC,CAAC,WAAG,GAAC,mCAAmC,IAAG,SAAS,MAAG,CAAC,CAAC,EAAE,CAAC,EAC5E,CAAA;AACV,CAAC,CAAA;AAED,IAAM,uBAAuB,GAAG,UAAC,QAAiC;IAC9D,IAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAErC,IAAI,WAAW,EAAE,CAAC;QACd,yBAAyB;QAEzB,oEAAoE;QACpE,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CACtC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,UAAC,IAAI,YAAK,OAAA,CAAC,IAAI,EAAE,MAAA,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,mCAAI,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAA,EAAA,CAAC,CACzG,CAAA;QACD,8DAA8D;QAC9D,QAAQ,CAAC,mBAAmB,GAAG,MAAM,CAAC,WAAW,CAC7C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;aACnB,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAzB,CAAyB,CAAC;aAC3C,MAAM,CAAC,UAAC,IAAI,YAAK,OAAA,MAAA,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,0CAAE,OAAO,CAAA,EAAA,CAAC;aACrD,GAAG,CAAC,UAAC,IAAI,YAAK,OAAA,CAAC,IAAI,EAAE,MAAA,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,0CAAE,OAAO,CAAC,CAAA,EAAA,CAAC,CAClE,CAAA;IACL,CAAC;SAAM,CAAC;QACJ,MAAM,CAAC,IAAI,CACP,gHAAgH,CACnH,CAAA;IACL,CAAC;IACD,OAAO,QAAQ,CAAA;AACnB,CAAC,CAAA;AAsBD,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC5B,sDAA8B,CAAA;IAC9B,iDAAyB,CAAA;AAC7B,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B;AAED;IAYI,6BAAoB,QAAiB;QAAjB,aAAQ,GAAR,QAAQ,CAAS;QAXrC,sBAAiB,GAAY,KAAK,CAAA;QAG1B,oBAAe,GAAY,KAAK,CAAA;QAChC,qBAAgB,GAAY,KAAK,CAAA;QACjC,uBAAkB,GAAY,KAAK,CAAA;QACnC,+BAA0B,GAAY,KAAK,CAAA;QAE3C,kBAAa,GAAY,KAAK,CAAA;QAC9B,2BAAsB,GAAY,KAAK,CAAA;QAG3C,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAA;IACtC,CAAC;IAED,oCAAM,GAAN;QACI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;YAC/C,yGAAyG;YACzG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;YACzB,OAAM;QACV,CAAC;QAED,+HAA+H;QAC/H,IAAM,YAAY,GACd,CAAC,IAAI,CAAC,gBAAgB;YACtB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B;gBAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAA;QAE1E,IAAI,CAAC,mBAAmB,CAAC;YACrB,YAAY,cAAA;SACf,CAAC,CAAA;IACN,CAAC;IAED,sBAAI,+CAAc;aAAlB;YACI,OAAO,IAAI,CAAC,eAAe,CAAA;QAC/B,CAAC;;;OAAA;IAED,sCAAQ,GAAR;QACI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,iDAAmB,GAAnB;;;QACI,IAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,gCAAgC,CAAC,CAAA;QAEhF,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,kCAAkC,CAAC,CAAA;QACrF,IAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAA;QAEjG,IAAI,CAAC,kBAAkB,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,OAAO,WAAW,IAAI,EAAE,CAAA;QAC5B,CAAC;QAED,IAAM,YAAY,GAAG,MAAM,CAAC,EAAE,EAAE,WAAW,IAAI,EAAE,CAAC,CAAA;QAClD,IAAM,cAAc,4BACb,IAAI,GAAG,wCAAK,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC,kBAAK,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,UAAE,SAC/F,CAAA;;YACD,KAAkB,IAAA,mBAAA,SAAA,cAAc,CAAA,8CAAA,0EAAE,CAAC;gBAA9B,IAAM,GAAG,2BAAA;gBACV,IAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;gBACxC,IAAM,iBAAiB,GAAG,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAG,GAAG,CAAC,CAAA;gBAE/C,IAAM,YAAY,GAAG,WAAW,CAAC,iBAAiB,CAAC;oBAC/C,CAAC,CAAC,CAAC,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,OAAO,mCAAI,KAAK,CAAC;oBACpC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAA;gBAEzB,IAAM,eAAe,GAAG,WAAW,CAAC,iBAAiB,CAAC;oBAClD,CAAC,CAAC,cAAc,CAAC,OAAO;oBACxB,CAAC,CAAC,OAAO,iBAAiB,KAAK,QAAQ;wBACrC,CAAC,CAAC,iBAAiB;wBACnB,CAAC,CAAC,SAAS,CAAA;gBAEjB,IAAM,eAAe,GAAG,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAG,GAAG,CAAC,CAAA;gBAEjD,IAAM,eAAe,yBACd,cAAc,KACjB,OAAO,EAAE,YAAY;oBACrB,yGAAyG;oBACzG,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,GACnF,CAAA;gBAED,+GAA+G;gBAC/G,oFAAoF;gBACpF,IAAI,YAAY,MAAK,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,OAAO,CAAA,EAAE,CAAC;oBAC3C,eAAe,CAAC,gBAAgB,GAAG,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,OAAO,CAAA;gBAC9D,CAAC;gBAED,IAAI,eAAe,MAAK,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,OAAO,CAAA,EAAE,CAAC;oBAC9C,eAAe,CAAC,gBAAgB,GAAG,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,OAAO,CAAA;gBAC9D,CAAC;gBAED,IAAI,eAAe,EAAE,CAAC;oBAClB,eAAe,CAAC,QAAQ,yBACjB,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,QAAQ,KAC3B,OAAO,EAAE,eAAe,EACxB,gBAAgB,EAAE,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,QAAQ,0CAAE,OAAO,GACtD,CAAA;gBACL,CAAC;gBAED,YAAY,CAAC,GAAG,CAAC,GAAG,eAAe,CAAA;YACvC,CAAC;;;;;;;;;QAED,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE;gBAC7C,WAAW,aAAA;gBACX,kBAAkB,oBAAA;gBAClB,YAAY,cAAA;aACf,CAAC,CAAA;YACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;QACjC,CAAC;QACD,OAAO,YAAY,CAAA;IACvB,CAAC;IAED,6CAAe,GAAf;QACI,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAA;QACtE,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,kCAAkC,CAAC,CAAA;QACtF,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,OAAO,YAAY,IAAI,EAAE,CAAA;QAC7B,CAAC;QAED,IAAM,UAAU,GAAG,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,CAAA;QAC3C,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;QACtE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;gBACtC,YAAY,cAAA;gBACZ,eAAe,iBAAA;gBACf,UAAU,YAAA;aACb,CAAC,CAAA;YACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;QACjC,CAAC;QACD,OAAO,UAAU,CAAA;IACrB,CAAC;IAED,6CAAe,GAAf;QACI,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAA;QAClF,IAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAA;QAEjG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACtB,OAAO,YAAY,IAAI,EAAE,CAAA;QAC7B,CAAC;QAED,IAAM,aAAa,GAAG,MAAM,CAAC,EAAE,EAAE,YAAY,IAAI,EAAE,CAAC,CAAA;QACpD,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5E,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;gBAC9C,YAAY,cAAA;gBACZ,kBAAkB,oBAAA;gBAClB,aAAa,eAAA;aAChB,CAAC,CAAA;YACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;QACjC,CAAC;QACD,OAAO,aAAa,CAAA;IACxB,CAAC;IAED;;;;;;;OAOG;IACH,gDAAkB,GAAlB;QAAA,iBAgBC;QAfG,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B,EAAE,CAAC;YACjF,8EAA8E;YAC9E,mCAAmC;YACnC,OAAM;QACV,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,mEAAmE;YACnE,OAAM;QACV,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;YAC/B,KAAI,CAAC,mBAAmB,EAAE,CAAA;QAC9B,CAAC,EAAE,CAAC,CAAC,CAAA;IACT,CAAC;IAEO,4CAAc,GAAtB;QACI,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACnC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAA;IACrC,CAAC;IAED,+CAAiB,GAAjB;QACI,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzE,+EAA+E;YAC/E,OAAM;QACV,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAA;IAC7B,CAAC;IAED,oDAAsB,GAAtB,UAAuB,gBAAwB;QAC3C,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAA;IAC7C,CAAC;IAED,gDAAkB,GAAlB,UAAmB,QAAiB;QAChC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAA;IACtC,CAAC;IAED;;;OAGG;IACH,iDAAmB,GAAnB,UAAoB,OAAoC;QAAxD,iBA+EC;;QA9EG,qDAAqD;QACrD,IAAI,CAAC,cAAc,EAAE,CAAA;QACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;YAC/C,6FAA6F;YAC7F,OAAM;QACV,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAA;YACtC,OAAM;QACV,CAAC;QACD,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAA;QACxC,IAAM,IAAI,GAAwB;YAC9B,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;YAC5C,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;YACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,iBAAiB,wBACV,CAAC,CAAA,MAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,iBAAiB,EAAE,KAAI,EAAE,CAAC,GACtD,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAC,CACtE;YACD,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,2BAA2B,CAAC;SAC5E,CAAA;QAED,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,KAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B,EAAE,CAAC;YAC/E,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QAC7B,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAC5B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxB,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC;YACnE,IAAI,MAAA;YACJ,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM;YACtF,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,+BAA+B;YAC7D,QAAQ,EAAE,UAAC,QAAQ;;gBACf,IAAI,aAAa,GAAG,IAAI,CAAA;gBAExB,IAAI,QAAQ,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;oBAC9B,qBAAqB;oBACrB,iEAAiE;oBACjE,mBAAmB;oBACnB,IAAI,CAAC,KAAI,CAAC,0BAA0B,EAAE,CAAC;wBACnC,KAAI,CAAC,iBAAiB,GAAG,SAAS,CAAA;oBACtC,CAAC;oBACD,aAAa,GAAG,KAAK,CAAA;gBACzB,CAAC;gBAED,KAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;gBAE7B,IAAI,CAAC,KAAI,CAAC,aAAa,EAAE,CAAC;oBACtB,KAAI,CAAC,aAAa,GAAG,IAAI,CAAA;oBACzB,KAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAA,QAAQ,CAAC,IAAI,mCAAI,EAAE,CAAC,CAAA;gBACtD,CAAC;gBAED,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,KAAI,CAAC,0BAA0B,EAAE,CAAC;oBACzD,8GAA8G;oBAC9G,6CAA6C;oBAC7C,OAAM;gBACV,CAAC;gBAED,KAAI,CAAC,sBAAsB,GAAG,CAAC,aAAa,CAAA;gBAE5C,IAAI,QAAQ,CAAC,IAAI,KAAI,MAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,0CAAE,QAAQ,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAA,EAAE,CAAC;oBAC3F,sCAAsC;oBACtC,MAAM,CAAC,IAAI,CACP,+LAA+L,CAClM,CAAA;oBACD,OAAM;gBACV,CAAC;gBAED,KAAI,CAAC,oBAAoB,CAAC,MAAA,QAAQ,CAAC,IAAI,mCAAI,EAAE,EAAE,aAAa,CAAC,CAAA;gBAE7D,IAAI,KAAI,CAAC,0BAA0B,EAAE,CAAC;oBAClC,KAAI,CAAC,0BAA0B,GAAG,KAAK,CAAA;oBACvC,KAAI,CAAC,mBAAmB,EAAE,CAAA;gBAC9B,CAAC;YACL,CAAC;SACJ,CAAC,CAAA;IACN,CAAC;IAED;;;;;;;;;OASG;IACH,4CAAc,GAAd,UAAe,GAAW,EAAE,OAAsC;;;QAAtC,wBAAA,EAAA,YAAsC;QAC9D,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5E,MAAM,CAAC,IAAI,CAAC,0BAA0B,GAAG,GAAG,GAAG,+CAA+C,CAAC,CAAA;YAC/F,OAAO,SAAS,CAAA;QACpB,CAAC;QACD,IAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAA;QAC7C,IAAM,eAAe,GAAG,UAAG,SAAS,CAAE,CAAA;QACtC,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,mCAAmC,CAAC,IAAI,SAAS,CAAA;QAC9F,IAAM,gBAAgB,GAA6B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;QAEvG,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,YAAY,IAAI,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,CAAC,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBACjF,IAAI,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACjC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC/C,CAAC;qBAAM,CAAC;oBACJ,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;gBAC7C,CAAC;gBACD,MAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,QAAQ,WAAG,GAAC,kBAAkB,IAAG,gBAAgB,MAAG,CAAA;gBAE/E,IAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;gBAEnD,IAAM,UAAU,GAAoC;oBAChD,aAAa,EAAE,GAAG;oBAClB,sBAAsB,EAAE,SAAS;oBACjC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,IAAI;oBAC9D,wBAAwB,EAAE,SAAS;oBACnC,mCAAmC,EAAE,CAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,0CAAE,YAAY,0CAAG,GAAG,CAAC,KAAI,IAAI;oBAChG,kCAAkC,EAC9B,CAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,0CAAE,mBAAmB,0CAAG,GAAG,CAAC,KAAI,IAAI;oBACtE,4GAA4G;oBAC5G,qBAAqB,EAAE,CAAC,IAAI,CAAC,sBAAsB;iBACtD,CAAA;gBAED,IAAI,CAAC,WAAW,CAAC,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,0CAAE,OAAO,CAAC,EAAE,CAAC;oBAC/C,UAAU,CAAC,qBAAqB,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAA;gBACnE,CAAC;gBAED,IAAM,MAAM,GAAG,MAAA,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,0CAAE,WAAW,mCAAI,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,0CAAE,IAAI,CAAA;gBAC5E,IAAI,MAAM,EAAE,CAAC;oBACT,UAAU,CAAC,oBAAoB,GAAG,MAAM,CAAA;gBAC5C,CAAC;gBAED,IAAI,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,0CAAE,EAAE,EAAE,CAAC;oBAC5B,UAAU,CAAC,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAA;gBACzD,CAAC;gBAED,kFAAkF;gBAClF,2FAA2F;gBAC3F,kDAAkD;gBAClD,IAAI,CAAC,WAAW,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,gBAAgB,CAAC,EAAE,CAAC;oBAC7F,UAAU,CAAC,+BAA+B,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,gBAAgB,CAAC;wBACnF,CAAC,CAAC,WAAW,CAAC,gBAAgB;wBAC9B,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAA;gBACtC,CAAC;gBAED,IAAI,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,0CAAE,gBAAgB,EAAE,CAAC;oBAC1C,UAAU,CAAC,8BAA8B,GAAG,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,0CAAE,gBAAgB,CAAA;gBACvF,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAA;YAC7D,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAA;IACpB,CAAC;IAED;;;;;;;;;;OAUG;IACH,mDAAqB,GAArB,UAAsB,GAAW;QAC7B,IAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IAED,mDAAqB,GAArB,UAAsB,GAAW;QAC7B,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,oDAAsB,GAAtB,UAAuB,GAAW,EAAE,QAAyC;QACzE,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAA;QACxC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YACxB,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC;YACnE,IAAI,EAAE;gBACF,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;gBAC5C,KAAK,OAAA;aACR;YACD,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM;YACtF,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,+BAA+B;YAC7D,QAAQ,EAAE,UAAC,QAAQ;;gBACf,IAAM,YAAY,GAAG,MAAA,QAAQ,CAAC,IAAI,0CAAG,qBAAqB,CAAC,CAAA;gBAC3D,QAAQ,CAAC,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,GAAG,CAAC,KAAI,SAAS,CAAC,CAAA;YAC9C,CAAC;SACJ,CAAC,CAAA;IACN,CAAC;IAED;;;;;;;;;OASG;IACH,8CAAgB,GAAhB,UAAiB,GAAW,EAAE,OAAsC;QAAtC,wBAAA,EAAA,YAAsC;QAChE,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5E,MAAM,CAAC,IAAI,CAAC,4BAA4B,GAAG,GAAG,GAAG,+CAA+C,CAAC,CAAA;YACjG,OAAO,SAAS,CAAA;QACpB,CAAC;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC9C,CAAC;IAED,oDAAsB,GAAtB,UAAuB,OAA6B;QAChD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC;IAED,uDAAyB,GAAzB,UAA0B,OAA6B;QACnD,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,KAAK,OAAO,EAAb,CAAa,CAAC,CAAA;IAC9F,CAAC;IAED,kDAAoB,GAApB,UAAqB,QAAiC,EAAE,aAAuB;QAC3E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC7B,OAAM;QACV,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAE3B,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAC3C,IAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAClD,IAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA;QACrD,8BAA8B,CAC1B,QAAQ,EACR,IAAI,CAAC,QAAQ,CAAC,WAAW,EACzB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,CACrB,CAAA;QACD,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC,CAAA;IAClD,CAAC;IAED;;OAEG;IACH,sCAAQ,GAAR,UAAS,KAA4D,EAAE,eAAgC;QAAhC,gCAAA,EAAA,uBAAgC;QACnG,MAAM,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;QAC/E,IAAI,CAAC,oBAAoB,CAAC;YACtB,KAAK,EAAE,KAAK;YACZ,eAAe,EAAE,eAAe;SACnC,CAAC,CAAA;IACN,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,kDAAoB,GAApB,UAAqB,eAA4C;;;QAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC,oBAAoB,CAAC,2CAA2C,CAAC,CAAA;QACnF,CAAC;QAED,4GAA4G;QAC5G,IAAI,eAAe,KAAK,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAA;YACxE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,0CAA0C,CAAC,CAAA;YAChF,IAAI,CAAC,0BAA0B,EAAE,CAAA;YACjC,OAAM;QACV,CAAC;QAED,IACI,eAAe;YACf,OAAO,eAAe,KAAK,QAAQ;YACnC,CAAC,OAAO,IAAI,eAAe,IAAI,UAAU,IAAI,eAAe,CAAC,EAC/D,CAAC;YACC,IAAM,OAAO,GAAG,eAAe,CAAA;YAC/B,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,MAAA,OAAO,CAAC,eAAe,mCAAI,KAAK,CAAC,CAAA;YAElE,4HAA4H;YAC5H,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;gBACrB,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;oBAC1B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAA;gBAC5E,CAAC;qBAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBACvB,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzB,IAAM,QAAQ,GAAqC,EAAE,CAAA;wBACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC5C,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;wBACrC,CAAC;wBACD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,WAAG,GAAC,kCAAkC,IAAG,QAAQ,MAAG,CAAA;oBAC1F,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,WAAG,GAAC,kCAAkC,IAAG,OAAO,CAAC,KAAK,MAAG,CAAA;oBAC/F,CAAC;gBACL,CAAC;YACL,CAAC;YAED,0JAA0J;YAC1J,IAAI,UAAU,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;oBAC7B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,0CAA0C,CAAC,CAAA;gBACpF,CAAC;qBAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC1B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ;wBAC9B,GAAC,0CAA0C,IAAG,OAAO,CAAC,QAAQ;4BAChE,CAAA;gBACN,CAAC;YACL,CAAC;YAED,IAAI,CAAC,0BAA0B,EAAE,CAAA;YACjC,OAAM;QACV,CAAC;QAED,IAAI,CAAC,0BAA0B,EAAE,CAAA;IACrC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,4CAAc,GAAd,UAAe,QAA8B;QAA7C,iBAOC;QANG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAA;QACrC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACjB,IAAA,KAA0B,IAAI,CAAC,gCAAgC,EAAE,EAA/D,KAAK,WAAA,EAAE,YAAY,kBAA4C,CAAA;YACvE,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;QACjC,CAAC;QACD,OAAO,cAAM,OAAA,KAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAxC,CAAwC,CAAA;IACzD,CAAC;IAED,gEAAkC,GAAlC,UAAmC,GAAW,EAAE,UAAmB;;;QAC/D,IAAM,8BAA8B,GAChC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,iCAAiC,CAAC,IAAI,EAAE,CAAA;QACvE,IAAM,OAAO,GAAG,8BAA8B,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,OAAO,KAAK,GAAG,EAAjB,CAAiB,CAAC,CAAA;QAE7E,IAAM,oBAAoB;YACtB,GAAC,8BAAuB,GAAG,CAAE,IAAG,UAAU;eAC7C,CAAA;QAED,IAAM,UAAU,GAAe;YAC3B,aAAa,EAAE,GAAG;YAClB,mBAAmB,EAAE,UAAU;YAC/B,IAAI,EAAE,oBAAoB;SAC7B,CAAA;QAED,IAAI,OAAO,EAAE,CAAC;YACV,UAAU,CAAC,4BAA4B,CAAC,GAAG,OAAO,CAAC,IAAI,CAAA;QAC3D,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,4BAA4B,EAAE,UAAU,CAAC,CAAA;QAC/D,IAAI,CAAC,2BAA2B,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA;QAE7D,IAAM,QAAQ,yBAAQ,IAAI,CAAC,eAAe,EAAE,gBAAG,GAAG,IAAG,UAAU,MAAE,CAAA;QACjE,MAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,QAAQ;YAC/B,GAAC,gCAAgC,IAAG,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YACnF,GAAC,qBAAqB,IAAG,QAAQ;gBACnC,CAAA;QACF,IAAI,CAAC,0BAA0B,EAAE,CAAA;IACrC,CAAC;IAED,oDAAsB,GAAtB,UACI,QAAoC,EACpC,YAAoB,EACpB,MAAkC;QAHtC,iBA4BC;QA1BG,6BAAA,EAAA,oBAAoB;QAGpB,IAAM,8BAA8B,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAA;QAEpG,IAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,WAAI,MAAM,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,gBAAS,CAAC,CAAE,EAAZ,CAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QAEjF,IAAI,CAAC,8BAA8B,IAAI,YAAY,EAAE,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;gBACxB,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CACxC,KAAK,EACL,4CAAqC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,SAAG,WAAW,CAAE,CAClF;gBACD,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,UAAC,QAAQ;;;oBACf,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACjB,OAAM;oBACV,CAAC;oBACD,IAAM,mBAAmB,GAAI,QAAQ,CAAC,IAAmC,CAAC,mBAAmB,CAAA;oBAC7F,MAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,QAAQ,WAAG,GAAC,iCAAiC,IAAG,mBAAmB,MAAG,CAAA;oBACjG,OAAO,QAAQ,CAAC,mBAAmB,CAAC,CAAA;gBACxC,CAAC;aACJ,CAAC,CAAA;QACN,CAAC;aAAM,CAAC;YACJ,OAAO,QAAQ,CAAC,8BAA8B,CAAC,CAAA;QACnD,CAAC;IACL,CAAC;IAED,8DAAgC,GAAhC;QACI,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC7B,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAE3C,gBAAgB;QAChB,IAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,YAAY,CAAC,IAAI,CAAC,EAAlB,CAAkB,CAAC,CAAA;QAC9D,IAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;aAC/C,MAAM,CAAC,UAAC,UAAU,IAAK,OAAA,YAAY,CAAC,UAAU,CAAC,EAAxB,CAAwB,CAAC;aAChD,MAAM,CAAC,UAAC,GAAqC,EAAE,GAAG;YAC/C,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;YAC5B,OAAO,GAAG,CAAA;QACd,CAAC,EAAE,EAAE,CAAC,CAAA;QAEV,OAAO;YACH,KAAK,EAAE,WAAW;YAClB,YAAY,EAAE,kBAAkB;SACnC,CAAA;IACL,CAAC;IAED,wDAA0B,GAA1B,UAA2B,aAAuB;QACxC,IAAA,KAA0B,IAAI,CAAC,gCAAgC,EAAE,EAA/D,KAAK,WAAA,EAAE,YAAY,kBAA4C,CAAA;QACvE,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,aAAa,eAAA,EAAE,CAAC,EAA/C,CAA+C,CAAC,CAAA;IACvG,CAAC;IAED;;;;OAIG;IACH,yDAA2B,GAA3B,UAA4B,UAAsB,EAAE,kBAAyB;;QAAzB,mCAAA,EAAA,yBAAyB;QACzE,kCAAkC;QAClC,IAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAA;QAEzF,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAClB,GAAC,4BAA4B,0BACtB,kBAAkB,GAClB,UAAU,CAChB;gBACH,CAAA;QAEF,IAAI,kBAAkB,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAA;QACtC,CAAC;IACL,CAAC;IAED,2DAA6B,GAA7B;QACI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAA;IAC1D,CAAC;IAED;;;;;;;OAOG;IACH,wDAA0B,GAA1B,UAA2B,UAA0C,EAAE,kBAAyB;;QAAzB,mCAAA,EAAA,yBAAyB;QAC5F,iCAAiC;QACjC,IAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAA;QAExF,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,UAAC,SAAS;gBAC9C,kBAAkB,CAAC,SAAS,CAAC,yBACtB,kBAAkB,CAAC,SAAS,CAAC,GAC7B,UAAU,CAAC,SAAS,CAAC,CAC3B,CAAA;gBACD,OAAO,UAAU,CAAC,SAAS,CAAC,CAAA;YAChC,CAAC,CAAC,CAAA;QACN,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAClB,GAAC,2BAA2B,0BACrB,kBAAkB,GAClB,UAAU,CAChB;gBACH,CAAA;QAEF,IAAI,kBAAkB,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAA;QACtC,CAAC;IACL,CAAC;IAED,0DAA4B,GAA5B,UAA6B,UAAmB;;QAC5C,IAAI,UAAU,EAAE,CAAC;YACb,IAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAA;YACxF,IAAI,CAAC,QAAQ,CAAC,QAAQ;gBAClB,GAAC,2BAA2B,0BAAQ,kBAAkB,gBAAG,UAAU,IAAG,EAAE,MAAE;oBAC5E,CAAA;QACN,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAA;QACzD,CAAC;IACL,CAAC;IACL,0BAAC;AAAD,CAAC,AAptBD,IAotBC","sourcesContent":["import { entries, extend } from './utils'\nimport { PostHog } from './posthog-core'\nimport {\n DecideResponse,\n FeatureFlagsCallback,\n EarlyAccessFeatureCallback,\n EarlyAccessFeatureResponse,\n Properties,\n JsonType,\n Compression,\n EarlyAccessFeature,\n RemoteConfigFeatureFlagCallback,\n EarlyAccessFeatureStage,\n FeatureFlagDetail,\n} from './types'\nimport { PostHogPersistence } from './posthog-persistence'\n\nimport {\n PERSISTENCE_EARLY_ACCESS_FEATURES,\n PERSISTENCE_FEATURE_FLAG_DETAILS,\n ENABLED_FEATURE_FLAGS,\n STORED_GROUP_PROPERTIES_KEY,\n STORED_PERSON_PROPERTIES_KEY,\n FLAG_CALL_REPORTED,\n} from './constants'\n\nimport { isArray, isUndefined } from './utils/type-utils'\nimport { createLogger } from './utils/logger'\n\nconst logger = createLogger('[FeatureFlags]')\n\nconst PERSISTENCE_ACTIVE_FEATURE_FLAGS = '$active_feature_flags'\nconst PERSISTENCE_OVERRIDE_FEATURE_FLAGS = '$override_feature_flags'\nconst PERSISTENCE_FEATURE_FLAG_PAYLOADS = '$feature_flag_payloads'\nconst PERSISTENCE_OVERRIDE_FEATURE_FLAG_PAYLOADS = '$override_feature_flag_payloads'\nconst PERSISTENCE_FEATURE_FLAG_REQUEST_ID = '$feature_flag_request_id'\n\nexport const filterActiveFeatureFlags = (featureFlags?: Record<string, string | boolean>) => {\n const activeFeatureFlags: Record<string, string | boolean> = {}\n for (const [key, value] of entries(featureFlags || {})) {\n if (value) {\n activeFeatureFlags[key] = value\n }\n }\n return activeFeatureFlags\n}\n\nexport const parseFeatureFlagDecideResponse = (\n response: Partial<DecideResponse>,\n persistence: PostHogPersistence,\n currentFlags: Record<string, string | boolean> = {},\n currentFlagPayloads: Record<string, JsonType> = {},\n currentFlagDetails: Record<string, FeatureFlagDetail> = {}\n) => {\n const normalizedResponse = normalizeDecideResponse(response)\n const flagDetails = normalizedResponse.flags\n const featureFlags = normalizedResponse.featureFlags\n const flagPayloads = normalizedResponse.featureFlagPayloads\n\n if (!featureFlags) {\n return // <-- This early return means we don't update anything, which is good.\n }\n\n const requestId = response['requestId']\n\n // using the v1 api\n if (isArray(featureFlags)) {\n logger.warn('v1 of the feature flags endpoint is deprecated. Please use the latest version.')\n const $enabled_feature_flags: Record<string, boolean> = {}\n if (featureFlags) {\n for (let i = 0; i < featureFlags.length; i++) {\n $enabled_feature_flags[featureFlags[i]] = true\n }\n }\n persistence &&\n persistence.register({\n [PERSISTENCE_ACTIVE_FEATURE_FLAGS]: featureFlags,\n [ENABLED_FEATURE_FLAGS]: $enabled_feature_flags,\n })\n return\n }\n\n // using the v2+ api\n let newFeatureFlags = featureFlags\n let newFeatureFlagPayloads = flagPayloads\n let newFeatureFlagDetails = flagDetails\n if (response.errorsWhileComputingFlags) {\n // if not all flags were computed, we upsert flags instead of replacing them\n newFeatureFlags = { ...currentFlags, ...newFeatureFlags }\n newFeatureFlagPayloads = { ...currentFlagPayloads, ...newFeatureFlagPayloads }\n newFeatureFlagDetails = { ...currentFlagDetails, ...newFeatureFlagDetails }\n }\n\n persistence &&\n persistence.register({\n [PERSISTENCE_ACTIVE_FEATURE_FLAGS]: Object.keys(filterActiveFeatureFlags(newFeatureFlags)),\n [ENABLED_FEATURE_FLAGS]: newFeatureFlags || {},\n [PERSISTENCE_FEATURE_FLAG_PAYLOADS]: newFeatureFlagPayloads || {},\n [PERSISTENCE_FEATURE_FLAG_DETAILS]: newFeatureFlagDetails || {},\n ...(requestId ? { [PERSISTENCE_FEATURE_FLAG_REQUEST_ID]: requestId } : {}),\n })\n}\n\nconst normalizeDecideResponse = (response: Partial<DecideResponse>): Partial<DecideResponse> => {\n const flagDetails = response['flags']\n\n if (flagDetails) {\n // This is a v=4 request.\n\n // Map of flag keys to flag values: Record<string, string | boolean>\n response.featureFlags = Object.fromEntries(\n Object.keys(flagDetails).map((flag) => [flag, flagDetails[flag].variant ?? flagDetails[flag].enabled])\n )\n // Map of flag keys to flag payloads: Record<string, JsonType>\n response.featureFlagPayloads = Object.fromEntries(\n Object.keys(flagDetails)\n .filter((flag) => flagDetails[flag].enabled)\n .filter((flag) => flagDetails[flag].metadata?.payload)\n .map((flag) => [flag, flagDetails[flag].metadata?.payload])\n )\n } else {\n logger.warn(\n 'Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version'\n )\n }\n return response\n}\n\ntype FeatureFlagOverrides = {\n [flagName: string]: string | boolean\n}\n\ntype FeatureFlagPayloadOverrides = {\n [flagName: string]: JsonType\n}\n\ntype FeatureFlagOverrideOptions = {\n flags?: boolean | string[] | FeatureFlagOverrides\n payloads?: FeatureFlagPayloadOverrides\n suppressWarning?: boolean\n}\n\ntype OverrideFeatureFlagsOptions =\n | boolean // clear all overrides\n | string[] // enable list of flags\n | FeatureFlagOverrides // set variants directly\n | FeatureFlagOverrideOptions\n\nexport enum QuotaLimitedResource {\n FeatureFlags = 'feature_flags',\n Recordings = 'recordings',\n}\n\nexport class PostHogFeatureFlags {\n _override_warning: boolean = false\n featureFlagEventHandlers: FeatureFlagsCallback[]\n $anon_distinct_id: string | undefined\n private _hasLoadedFlags: boolean = false\n private _requestInFlight: boolean = false\n private _reloadingDisabled: boolean = false\n private _additionalReloadRequested: boolean = false\n private _reloadDebouncer?: any\n private _decideCalled: boolean = false\n private _flagsLoadedFromRemote: boolean = false\n\n constructor(private instance: PostHog) {\n this.featureFlagEventHandlers = []\n }\n\n decide(): void {\n if (this.instance.config.__preview_remote_config) {\n // If remote config is enabled we don't call decide and we mark it as called so that we don't simulate it\n this._decideCalled = true\n return\n }\n\n // TRICKY: We want to disable flags if we don't have a queued reload, and one of the settings exist for disabling on first load\n const disableFlags =\n !this._reloadDebouncer &&\n (this.instance.config.advanced_disable_feature_flags ||\n this.instance.config.advanced_disable_feature_flags_on_first_load)\n\n this._callDecideEndpoint({\n disableFlags,\n })\n }\n\n get hasLoadedFlags(): boolean {\n return this._hasLoadedFlags\n }\n\n getFlags(): string[] {\n return Object.keys(this.getFlagVariants())\n }\n\n getFlagsWithDetails(): Record<string, FeatureFlagDetail> {\n const flagDetails = this.instance.get_property(PERSISTENCE_FEATURE_FLAG_DETAILS)\n\n const overridenFlags = this.instance.get_property(PERSISTENCE_OVERRIDE_FEATURE_FLAGS)\n const overriddenPayloads = this.instance.get_property(PERSISTENCE_OVERRIDE_FEATURE_FLAG_PAYLOADS)\n\n if (!overriddenPayloads && !overridenFlags) {\n return flagDetails || {}\n }\n\n const finalDetails = extend({}, flagDetails || {})\n const overriddenKeys = [\n ...new Set([...Object.keys(overriddenPayloads || {}), ...Object.keys(overridenFlags || {})]),\n ]\n for (const key of overriddenKeys) {\n const originalDetail = finalDetails[key]\n const overrideFlagValue = overridenFlags?.[key]\n\n const finalEnabled = isUndefined(overrideFlagValue)\n ? (originalDetail?.enabled ?? false)\n : !!overrideFlagValue\n\n const overrideVariant = isUndefined(overrideFlagValue)\n ? originalDetail.variant\n : typeof overrideFlagValue === 'string'\n ? overrideFlagValue\n : undefined\n\n const overridePayload = overriddenPayloads?.[key]\n\n const overridenDetail = {\n ...originalDetail,\n enabled: finalEnabled,\n // If the flag is not enabled, the variant should be undefined, even if the original has a variant value.\n variant: finalEnabled ? (overrideVariant ?? originalDetail?.variant) : undefined,\n }\n\n // Keep track of the original enabled and variant values so we can send them in the $feature_flag_called event.\n // This will be helpful for debugging and for understanding the impact of overrides.\n if (finalEnabled !== originalDetail?.enabled) {\n overridenDetail.original_enabled = originalDetail?.enabled\n }\n\n if (overrideVariant !== originalDetail?.variant) {\n overridenDetail.original_variant = originalDetail?.variant\n }\n\n if (overridePayload) {\n overridenDetail.metadata = {\n ...originalDetail?.metadata,\n payload: overridePayload,\n original_payload: originalDetail?.metadata?.payload,\n }\n }\n\n finalDetails[key] = overridenDetail\n }\n\n if (!this._override_warning) {\n logger.warn(' Overriding feature flag details!', {\n flagDetails,\n overriddenPayloads,\n finalDetails,\n })\n this._override_warning = true\n }\n return finalDetails\n }\n\n getFlagVariants(): Record<string, string | boolean> {\n const enabledFlags = this.instance.get_property(ENABLED_FEATURE_FLAGS)\n const overriddenFlags = this.instance.get_property(PERSISTENCE_OVERRIDE_FEATURE_FLAGS)\n if (!overriddenFlags) {\n return enabledFlags || {}\n }\n\n const finalFlags = extend({}, enabledFlags)\n const overriddenKeys = Object.keys(overriddenFlags)\n for (let i = 0; i < overriddenKeys.length; i++) {\n finalFlags[overriddenKeys[i]] = overriddenFlags[overriddenKeys[i]]\n }\n if (!this._override_warning) {\n logger.warn(' Overriding feature flags!', {\n enabledFlags,\n overriddenFlags,\n finalFlags,\n })\n this._override_warning = true\n }\n return finalFlags\n }\n\n getFlagPayloads(): Record<string, JsonType> {\n const flagPayloads = this.instance.get_property(PERSISTENCE_FEATURE_FLAG_PAYLOADS)\n const overriddenPayloads = this.instance.get_property(PERSISTENCE_OVERRIDE_FEATURE_FLAG_PAYLOADS)\n\n if (!overriddenPayloads) {\n return flagPayloads || {}\n }\n\n const finalPayloads = extend({}, flagPayloads || {})\n const overriddenKeys = Object.keys(overriddenPayloads)\n for (let i = 0; i < overriddenKeys.length; i++) {\n finalPayloads[overriddenKeys[i]] = overriddenPayloads[overriddenKeys[i]]\n }\n\n if (!this._override_warning) {\n logger.warn(' Overriding feature flag payloads!', {\n flagPayloads,\n overriddenPayloads,\n finalPayloads,\n })\n this._override_warning = true\n }\n return finalPayloads\n }\n\n /**\n * Reloads feature flags asynchronously.\n *\n * Constraints:\n *\n * 1. Avoid parallel requests\n * 2. Delay a few milliseconds after each reloadFeatureFlags call to batch subsequent changes together\n */\n reloadFeatureFlags(): void {\n if (this._reloadingDisabled || this.instance.config.advanced_disable_feature_flags) {\n // If reloading has been explicitly disabled then we don't want to do anything\n // Or if feature flags are disabled\n return\n }\n\n if (this._reloadDebouncer) {\n // If we're already in a debounce then we don't want to do anything\n return\n }\n\n // Debounce multiple calls on the same tick\n this._reloadDebouncer = setTimeout(() => {\n this._callDecideEndpoint()\n }, 5)\n }\n\n private clearDebouncer(): void {\n clearTimeout(this._reloadDebouncer)\n this._reloadDebouncer = undefined\n }\n\n ensureFlagsLoaded(): void {\n if (this._hasLoadedFlags || this._requestInFlight || this._reloadDebouncer) {\n // If we are or have already loaded the flags then we don't want to do anything\n return\n }\n\n this.reloadFeatureFlags()\n }\n\n setAnonymousDistinctId(anon_distinct_id: string): void {\n this.$anon_distinct_id = anon_distinct_id\n }\n\n setReloadingPaused(isPaused: boolean): void {\n this._reloadingDisabled = isPaused\n }\n\n /**\n * NOTE: This is used both for flags and remote config. Once the RemoteConfig is fully released this will essentially only\n * be for flags and can eventually be replaced with the new flags endpoint\n */\n _callDecideEndpoint(options?: { disableFlags?: boolean }): void {\n // Ensure we don't have double queued decide requests\n this.clearDebouncer()\n if (this.instance.config.advanced_disable_decide) {\n // The way this is documented is essentially used to refuse to ever call the decide endpoint.\n return\n }\n if (this._requestInFlight) {\n this._additionalReloadRequested = true\n return\n }\n const token = this.instance.config.token\n const data: Record<string, any> = {\n token: token,\n distinct_id: this.instance.get_distinct_id(),\n groups: this.instance.getGroups(),\n $anon_distinct_id: this.$anon_distinct_id,\n person_properties: {\n ...(this.instance.persistence?.get_initial_props() || {}),\n ...(this.instance.get_property(STORED_PERSON_PROPERTIES_KEY) || {}),\n },\n group_properties: this.instance.get_property(STORED_GROUP_PROPERTIES_KEY),\n }\n\n if (options?.disableFlags || this.instance.config.advanced_disable_feature_flags) {\n data.disable_flags = true\n }\n\n this._requestInFlight = true\n this.instance._send_request({\n method: 'POST',\n url: this.instance.requestRouter.endpointFor('api', '/decide/?v=3'),\n data,\n compression: this.instance.config.disable_compression ? undefined : Compression.Base64,\n timeout: this.instance.config.feature_flag_request_timeout_ms,\n callback: (response) => {\n let errorsLoading = true\n\n if (response.statusCode === 200) {\n // successful request\n // reset anon_distinct_id after at least a single request with it\n // makes it through\n if (!this._additionalReloadRequested) {\n this.$anon_distinct_id = undefined\n }\n errorsLoading = false\n }\n\n this._requestInFlight = false\n\n if (!this._decideCalled) {\n this._decideCalled = true\n this.instance._onRemoteConfig(response.json ?? {})\n }\n\n if (data.disable_flags && !this._additionalReloadRequested) {\n // If flags are disabled then there is no need to call decide again (flags are the only thing that may change)\n // UNLESS, an additional reload is requested.\n return\n }\n\n this._flagsLoadedFromRemote = !errorsLoading\n\n if (response.json && response.json.quotaLimited?.includes(QuotaLimitedResource.FeatureFlags)) {\n // log a warning and then early return\n logger.warn(\n 'You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more.'\n )\n return\n }\n\n this.receivedFeatureFlags(response.json ?? {}, errorsLoading)\n\n if (this._additionalReloadRequested) {\n this._additionalReloadRequested = false\n this._callDecideEndpoint()\n }\n },\n })\n }\n\n /*\n * Get feature flag's value for user.\n *\n * ### Usage:\n *\n * if(posthog.getFeatureFlag('my-flag') === 'some-variant') { // do something }\n *\n * @param {Object|String} key Key of the feature flag.\n * @param {Object|String} options (optional) If {send_event: false}, we won't send an $feature_flag_called event to PostHog.\n */\n getFeatureFlag(key: string, options: { send_event?: boolean } = {}): boolean | string | undefined {\n if (!this._hasLoadedFlags && !(this.getFlags() && this.getFlags().length > 0)) {\n logger.warn('getFeatureFlag for key \"' + key + '\" failed. Feature flags didn\\'t load in time.')\n return undefined\n }\n const flagValue = this.getFlagVariants()[key]\n const flagReportValue = `${flagValue}`\n const requestId = this.instance.get_property(PERSISTENCE_FEATURE_FLAG_REQUEST_ID) || undefined\n const flagCallReported: Record<string, string[]> = this.instance.get_property(FLAG_CALL_REPORTED) || {}\n\n if (options.send_event || !('send_event' in options)) {\n if (!(key in flagCallReported) || !flagCallReported[key].includes(flagReportValue)) {\n if (isArray(flagCallReported[key])) {\n flagCallReported[key].push(flagReportValue)\n } else {\n flagCallReported[key] = [flagReportValue]\n }\n this.instance.persistence?.register({ [FLAG_CALL_REPORTED]: flagCallReported })\n\n const flagDetails = this.getFeatureFlagDetails(key)\n\n const properties: Record<string, any | undefined> = {\n $feature_flag: key,\n $feature_flag_response: flagValue,\n $feature_flag_payload: this.getFeatureFlagPayload(key) || null,\n $feature_flag_request_id: requestId,\n $feature_flag_bootstrapped_response: this.instance.config.bootstrap?.featureFlags?.[key] || null,\n $feature_flag_bootstrapped_payload:\n this.instance.config.bootstrap?.featureFlagPayloads?.[key] || null,\n // If we haven't yet received a response from the /decide endpoint, we must have used the bootstrapped value\n $used_bootstrap_value: !this._flagsLoadedFromRemote,\n }\n\n if (!isUndefined(flagDetails?.metadata?.version)) {\n properties.$feature_flag_version = flagDetails.metadata.version\n }\n\n const reason = flagDetails?.reason?.description ?? flagDetails?.reason?.code\n if (reason) {\n properties.$feature_flag_reason = reason\n }\n\n if (flagDetails?.metadata?.id) {\n properties.$feature_flag_id = flagDetails.metadata.id\n }\n\n // It's possible that flag values were overridden by calling overrideFeatureFlags.\n // We want to capture the original values in case someone forgets they were using overrides\n // and is wondering why their app is acting weird.\n if (!isUndefined(flagDetails?.original_variant) || !isUndefined(flagDetails?.original_enabled)) {\n properties.$feature_flag_original_response = !isUndefined(flagDetails.original_variant)\n ? flagDetails.original_variant\n : flagDetails.original_enabled\n }\n\n if (flagDetails?.metadata?.original_payload) {\n properties.$feature_flag_original_payload = flagDetails?.metadata?.original_payload\n }\n\n this.instance.capture('$feature_flag_called', properties)\n }\n }\n return flagValue\n }\n\n /*\n * Retrieves the details for a feature flag.\n *\n * ### Usage:\n *\n * const details = getFeatureFlagDetails(\"my-flag\")\n * console.log(details.metadata.version)\n * console.log(details.reason)\n *\n * @param {String} key Key of the feature flag.\n */\n getFeatureFlagDetails(key: string): FeatureFlagDetail | undefined {\n const details = this.getFlagsWithDetails()\n return details[key]\n }\n\n getFeatureFlagPayload(key: string): JsonType {\n const payloads = this.getFlagPayloads()\n return payloads[key]\n }\n\n /*\n * Fetches the payload for a remote config feature flag. This method will bypass any cached values and fetch the latest\n * value from the PostHog API.\n *\n * Note: Because the posthog-js SDK is primarily used with public project API keys, encrypted remote config payloads will\n * be redacted, never decrypted in the response.\n *\n * ### Usage:\n *\n * getRemoteConfigPayload(\"home-page-welcome-message\", (payload) => console.log(`Fetched remote config: ${payload}`))\n *\n * @param {String} key Key of the feature flag.\n * @param {Function} [callback] The callback function will be called once the remote config feature flag payload has been fetched.\n */\n getRemoteConfigPayload(key: string, callback: RemoteConfigFeatureFlagCallback): void {\n const token = this.instance.config.token\n this.instance._send_request({\n method: 'POST',\n url: this.instance.requestRouter.endpointFor('api', '/decide/?v=3'),\n data: {\n distinct_id: this.instance.get_distinct_id(),\n token,\n },\n compression: this.instance.config.disable_compression ? undefined : Compression.Base64,\n timeout: this.instance.config.feature_flag_request_timeout_ms,\n callback: (response) => {\n const flagPayloads = response.json?.['featureFlagPayloads']\n callback(flagPayloads?.[key] || undefined)\n },\n })\n }\n\n /*\n * See if feature flag is enabled for user.\n *\n * ### Usage:\n *\n * if(posthog.isFeatureEnabled('beta-feature')) { // do something }\n *\n * @param {Object|String} key Key of the feature flag.\n * @param {Object|String} options (optional) If {send_event: false}, we won't send an $feature_flag_call event to PostHog.\n */\n isFeatureEnabled(key: string, options: { send_event?: boolean } = {}): boolean | undefined {\n if (!this._hasLoadedFlags && !(this.getFlags() && this.getFlags().length > 0)) {\n logger.warn('isFeatureEnabled for key \"' + key + '\" failed. Feature flags didn\\'t load in time.')\n return undefined\n }\n return !!this.getFeatureFlag(key, options)\n }\n\n addFeatureFlagsHandler(handler: FeatureFlagsCallback): void {\n this.featureFlagEventHandlers.push(handler)\n }\n\n removeFeatureFlagsHandler(handler: FeatureFlagsCallback): void {\n this.featureFlagEventHandlers = this.featureFlagEventHandlers.filter((h) => h !== handler)\n }\n\n receivedFeatureFlags(response: Partial<DecideResponse>, errorsLoading?: boolean): void {\n if (!this.instance.persistence) {\n return\n }\n this._hasLoadedFlags = true\n\n const currentFlags = this.getFlagVariants()\n const currentFlagPayloads = this.getFlagPayloads()\n const currentFlagDetails = this.getFlagsWithDetails()\n parseFeatureFlagDecideResponse(\n response,\n this.instance.persistence,\n currentFlags,\n currentFlagPayloads,\n currentFlagDetails\n )\n this._fireFeatureFlagsCallbacks(errorsLoading)\n }\n\n /**\n * @deprecated Use overrideFeatureFlags instead. This will be removed in a future version.\n */\n override(flags: boolean | string[] | Record<string, string | boolean>, suppressWarning: boolean = false): void {\n logger.warn('override is deprecated. Please use overrideFeatureFlags instead.')\n this.overrideFeatureFlags({\n flags: flags,\n suppressWarning: suppressWarning,\n })\n }\n\n /**\n * Override feature flags on the client-side. Useful for setting non-persistent feature flags,\n * or for testing/debugging feature flags in the PostHog app.\n *\n * ### Usage:\n *\n * - posthog.featureFlags.overrideFeatureFlags(false) // clear all overrides\n * - posthog.featureFlags.overrideFeatureFlags(['beta-feature']) // enable flags\n * - posthog.featureFlags.overrideFeatureFlags({'beta-feature': 'variant'}) // set variants\n * - posthog.featureFlags.overrideFeatureFlags({ // set both flags and payloads\n * flags: {'beta-feature': 'variant'},\n * payloads: { 'beta-feature': { someData: true } }\n * })\n * - posthog.featureFlags.overrideFeatureFlags({ // only override payloads\n * payloads: { 'beta-feature': { someData: true } }\n * })\n */\n overrideFeatureFlags(overrideOptions: OverrideFeatureFlagsOptions): void {\n if (!this.instance.__loaded || !this.instance.persistence) {\n return logger.uninitializedWarning('posthog.featureFlags.overrideFeatureFlags')\n }\n\n // Clear all overrides if false, lets you do something like posthog.featureFlags.overrideFeatureFlags(false)\n if (overrideOptions === false) {\n this.instance.persistence.unregister(PERSISTENCE_OVERRIDE_FEATURE_FLAGS)\n this.instance.persistence.unregister(PERSISTENCE_OVERRIDE_FEATURE_FLAG_PAYLOADS)\n this._fireFeatureFlagsCallbacks()\n return\n }\n\n if (\n overrideOptions &&\n typeof overrideOptions === 'object' &&\n ('flags' in overrideOptions || 'payloads' in overrideOptions)\n ) {\n const options = overrideOptions\n this._override_warning = Boolean(options.suppressWarning ?? false)\n\n // Handle flags if provided, lets you do something like posthog.featureFlags.overrideFeatureFlags({flags: ['beta-feature']})\n if ('flags' in options) {\n if (options.flags === false) {\n this.instance.persistence.unregister(PERSISTENCE_OVERRIDE_FEATURE_FLAGS)\n } else if (options.flags) {\n if (isArray(options.flags)) {\n const flagsObj: Record<string, string | boolean> = {}\n for (let i = 0; i < options.flags.length; i++) {\n flagsObj[options.flags[i]] = true\n }\n this.instance.persistence.register({ [PERSISTENCE_OVERRIDE_FEATURE_FLAGS]: flagsObj })\n } else {\n this.instance.persistence.register({ [PERSISTENCE_OVERRIDE_FEATURE_FLAGS]: options.flags })\n }\n }\n }\n\n // Handle payloads independently, lets you do something like posthog.featureFlags.overrideFeatureFlags({payloads: { 'beta-feature': { someData: true } }})\n if ('payloads' in options) {\n if (options.payloads === false) {\n this.instance.persistence.unregister(PERSISTENCE_OVERRIDE_FEATURE_FLAG_PAYLOADS)\n } else if (options.payloads) {\n this.instance.persistence.register({\n [PERSISTENCE_OVERRIDE_FEATURE_FLAG_PAYLOADS]: options.payloads,\n })\n }\n }\n\n this._fireFeatureFlagsCallbacks()\n return\n }\n\n this._fireFeatureFlagsCallbacks()\n }\n\n /*\n * Register an event listener that runs when feature flags become available or when they change.\n * If there are flags, the listener is called immediately in addition to being called on future changes.\n *\n * ### Usage:\n *\n * posthog.onFeatureFlags(function(featureFlags, featureFlagsVariants, { errorsLoading }) { // do something })\n *\n * @param {Function} [callback] The callback function will be called once the feature flags are ready or when they are updated.\n * It'll return a list of feature flags enabled for the user, the variants,\n * and also a context object indicating whether we succeeded to fetch the flags or not.\n * @returns {Function} A function that can be called to unsubscribe the listener. Used by useEffect when the component unmounts.\n */\n onFeatureFlags(callback: FeatureFlagsCallback): () => void {\n this.addFeatureFlagsHandler(callback)\n if (this._hasLoadedFlags) {\n const { flags, flagVariants } = this._prepareFeatureFlagsForCallbacks()\n callback(flags, flagVariants)\n }\n return () => this.removeFeatureFlagsHandler(callback)\n }\n\n updateEarlyAccessFeatureEnrollment(key: string, isEnrolled: boolean): void {\n const existing_early_access_features: EarlyAccessFeature[] =\n this.instance.get_property(PERSISTENCE_EARLY_ACCESS_FEATURES) || []\n const feature = existing_early_access_features.find((f) => f.flagKey === key)\n\n const enrollmentPersonProp = {\n [`$feature_enrollment/${key}`]: isEnrolled,\n }\n\n const properties: Properties = {\n $feature_flag: key,\n $feature_enrollment: isEnrolled,\n $set: enrollmentPersonProp,\n }\n\n if (feature) {\n properties['$early_access_feature_name'] = feature.name\n }\n\n this.instance.capture('$feature_enrollment_update', properties)\n this.setPersonPropertiesForFlags(enrollmentPersonProp, false)\n\n const newFlags = { ...this.getFlagVariants(), [key]: isEnrolled }\n this.instance.persistence?.register({\n [PERSISTENCE_ACTIVE_FEATURE_FLAGS]: Object.keys(filterActiveFeatureFlags(newFlags)),\n [ENABLED_FEATURE_FLAGS]: newFlags,\n })\n this._fireFeatureFlagsCallbacks()\n }\n\n getEarlyAccessFeatures(\n callback: EarlyAccessFeatureCallback,\n force_reload = false,\n stages?: EarlyAccessFeatureStage[]\n ): void {\n const existing_early_access_features = this.instance.get_property(PERSISTENCE_EARLY_ACCESS_FEATURES)\n\n const stageParams = stages ? `&${stages.map((s) => `stage=${s}`).join('&')}` : ''\n\n if (!existing_early_access_features || force_reload) {\n this.instance._send_request({\n url: this.instance.requestRouter.endpointFor(\n 'api',\n `/api/early_access_features/?token=${this.instance.config.token}${stageParams}`\n ),\n method: 'GET',\n callback: (response) => {\n if (!response.json) {\n return\n }\n const earlyAccessFeatures = (response.json as EarlyAccessFeatureResponse).earlyAccessFeatures\n this.instance.persistence?.register({ [PERSISTENCE_EARLY_ACCESS_FEATURES]: earlyAccessFeatures })\n return callback(earlyAccessFeatures)\n },\n })\n } else {\n return callback(existing_early_access_features)\n }\n }\n\n _prepareFeatureFlagsForCallbacks(): { flags: string[]; flagVariants: Record<string, string | boolean> } {\n const flags = this.getFlags()\n const flagVariants = this.getFlagVariants()\n\n // Return truthy\n const truthyFlags = flags.filter((flag) => flagVariants[flag])\n const truthyFlagVariants = Object.keys(flagVariants)\n .filter((variantKey) => flagVariants[variantKey])\n .reduce((res: Record<string, string | boolean>, key) => {\n res[key] = flagVariants[key]\n return res\n }, {})\n\n return {\n flags: truthyFlags,\n flagVariants: truthyFlagVariants,\n }\n }\n\n _fireFeatureFlagsCallbacks(errorsLoading?: boolean): void {\n const { flags, flagVariants } = this._prepareFeatureFlagsForCallbacks()\n this.featureFlagEventHandlers.forEach((handler) => handler(flags, flagVariants, { errorsLoading }))\n }\n\n /**\n * Set override person properties for feature flags.\n * This is used when dealing with new persons / where you don't want to wait for ingestion\n * to update user properties.\n */\n setPersonPropertiesForFlags(properties: Properties, reloadFeatureFlags = true): void {\n // Get persisted person properties\n const existingProperties = this.instance.get_property(STORED_PERSON_PROPERTIES_KEY) || {}\n\n this.instance.register({\n [STORED_PERSON_PROPERTIES_KEY]: {\n ...existingProperties,\n ...properties,\n },\n })\n\n if (reloadFeatureFlags) {\n this.instance.reloadFeatureFlags()\n }\n }\n\n resetPersonPropertiesForFlags(): void {\n this.instance.unregister(STORED_PERSON_PROPERTIES_KEY)\n }\n\n /**\n * Set override group properties for feature flags.\n * This is used when dealing with new groups / where you don't want to wait for ingestion\n * to update properties.\n * Takes in an object, the key of which is the group type.\n * For example:\n * setGroupPropertiesForFlags({'organization': { name: 'CYZ', employees: '11' } })\n */\n setGroupPropertiesForFlags(properties: { [type: string]: Properties }, reloadFeatureFlags = true): void {\n // Get persisted group properties\n const existingProperties = this.instance.get_property(STORED_GROUP_PROPERTIES_KEY) || {}\n\n if (Object.keys(existingProperties).length !== 0) {\n Object.keys(existingProperties).forEach((groupType) => {\n existingProperties[groupType] = {\n ...existingProperties[groupType],\n ...properties[groupType],\n }\n delete properties[groupType]\n })\n }\n\n this.instance.register({\n [STORED_GROUP_PROPERTIES_KEY]: {\n ...existingProperties,\n ...properties,\n },\n })\n\n if (reloadFeatureFlags) {\n this.instance.reloadFeatureFlags()\n }\n }\n\n resetGroupPropertiesForFlags(group_type?: string): void {\n if (group_type) {\n const existingProperties = this.instance.get_property(STORED_GROUP_PROPERTIES_KEY) || {}\n this.instance.register({\n [STORED_GROUP_PROPERTIES_KEY]: { ...existingProperties, [group_type]: {} },\n })\n } else {\n this.instance.unregister(STORED_GROUP_PROPERTIES_KEY)\n }\n }\n}\n"]}
1
+ {"version":3,"file":"posthog-featureflags.js","sourceRoot":"","sources":["../../src/posthog-featureflags.ts"],"names":[],"mappings":"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","sourcesContent":["import { entries, extend } from './utils'\nimport { PostHog } from './posthog-core'\nimport {\n DecideResponse,\n FeatureFlagsCallback,\n EarlyAccessFeatureCallback,\n EarlyAccessFeatureResponse,\n Properties,\n JsonType,\n Compression,\n EarlyAccessFeature,\n RemoteConfigFeatureFlagCallback,\n EarlyAccessFeatureStage,\n FeatureFlagDetail,\n} from './types'\nimport { PostHogPersistence } from './posthog-persistence'\n\nimport {\n PERSISTENCE_EARLY_ACCESS_FEATURES,\n PERSISTENCE_FEATURE_FLAG_DETAILS,\n ENABLED_FEATURE_FLAGS,\n STORED_GROUP_PROPERTIES_KEY,\n STORED_PERSON_PROPERTIES_KEY,\n FLAG_CALL_REPORTED,\n} from './constants'\n\nimport { isArray, isUndefined } from './utils/type-utils'\nimport { createLogger } from './utils/logger'\n\nconst logger = createLogger('[FeatureFlags]')\n\nconst PERSISTENCE_ACTIVE_FEATURE_FLAGS = '$active_feature_flags'\nconst PERSISTENCE_OVERRIDE_FEATURE_FLAGS = '$override_feature_flags'\nconst PERSISTENCE_FEATURE_FLAG_PAYLOADS = '$feature_flag_payloads'\nconst PERSISTENCE_OVERRIDE_FEATURE_FLAG_PAYLOADS = '$override_feature_flag_payloads'\nconst PERSISTENCE_FEATURE_FLAG_REQUEST_ID = '$feature_flag_request_id'\n\nexport const filterActiveFeatureFlags = (featureFlags?: Record<string, string | boolean>) => {\n const activeFeatureFlags: Record<string, string | boolean> = {}\n for (const [key, value] of entries(featureFlags || {})) {\n if (value) {\n activeFeatureFlags[key] = value\n }\n }\n return activeFeatureFlags\n}\n\nexport const parseFeatureFlagDecideResponse = (\n response: Partial<DecideResponse>,\n persistence: PostHogPersistence,\n currentFlags: Record<string, string | boolean> = {},\n currentFlagPayloads: Record<string, JsonType> = {},\n currentFlagDetails: Record<string, FeatureFlagDetail> = {}\n) => {\n const normalizedResponse = normalizeDecideResponse(response)\n const flagDetails = normalizedResponse.flags\n const featureFlags = normalizedResponse.featureFlags\n const flagPayloads = normalizedResponse.featureFlagPayloads\n\n if (!featureFlags) {\n return // <-- This early return means we don't update anything, which is good.\n }\n\n const requestId = response['requestId']\n\n // using the v1 api\n if (isArray(featureFlags)) {\n logger.warn('v1 of the feature flags endpoint is deprecated. Please use the latest version.')\n const $enabled_feature_flags: Record<string, boolean> = {}\n if (featureFlags) {\n for (let i = 0; i < featureFlags.length; i++) {\n $enabled_feature_flags[featureFlags[i]] = true\n }\n }\n persistence &&\n persistence.register({\n [PERSISTENCE_ACTIVE_FEATURE_FLAGS]: featureFlags,\n [ENABLED_FEATURE_FLAGS]: $enabled_feature_flags,\n })\n return\n }\n\n // using the v2+ api\n let newFeatureFlags = featureFlags\n let newFeatureFlagPayloads = flagPayloads\n let newFeatureFlagDetails = flagDetails\n if (response.errorsWhileComputingFlags) {\n // if not all flags were computed, we upsert flags instead of replacing them\n newFeatureFlags = { ...currentFlags, ...newFeatureFlags }\n newFeatureFlagPayloads = { ...currentFlagPayloads, ...newFeatureFlagPayloads }\n newFeatureFlagDetails = { ...currentFlagDetails, ...newFeatureFlagDetails }\n }\n\n persistence &&\n persistence.register({\n [PERSISTENCE_ACTIVE_FEATURE_FLAGS]: Object.keys(filterActiveFeatureFlags(newFeatureFlags)),\n [ENABLED_FEATURE_FLAGS]: newFeatureFlags || {},\n [PERSISTENCE_FEATURE_FLAG_PAYLOADS]: newFeatureFlagPayloads || {},\n [PERSISTENCE_FEATURE_FLAG_DETAILS]: newFeatureFlagDetails || {},\n ...(requestId ? { [PERSISTENCE_FEATURE_FLAG_REQUEST_ID]: requestId } : {}),\n })\n}\n\nconst normalizeDecideResponse = (response: Partial<DecideResponse>): Partial<DecideResponse> => {\n const flagDetails = response['flags']\n\n if (flagDetails) {\n // This is a v=4 request.\n\n // Map of flag keys to flag values: Record<string, string | boolean>\n response.featureFlags = Object.fromEntries(\n Object.keys(flagDetails).map((flag) => [flag, flagDetails[flag].variant ?? flagDetails[flag].enabled])\n )\n // Map of flag keys to flag payloads: Record<string, JsonType>\n response.featureFlagPayloads = Object.fromEntries(\n Object.keys(flagDetails)\n .filter((flag) => flagDetails[flag].enabled)\n .filter((flag) => flagDetails[flag].metadata?.payload)\n .map((flag) => [flag, flagDetails[flag].metadata?.payload])\n )\n } else {\n logger.warn(\n 'Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version'\n )\n }\n return response\n}\n\ntype FeatureFlagOverrides = {\n [flagName: string]: string | boolean\n}\n\ntype FeatureFlagPayloadOverrides = {\n [flagName: string]: JsonType\n}\n\ntype FeatureFlagOverrideOptions = {\n flags?: boolean | string[] | FeatureFlagOverrides\n payloads?: FeatureFlagPayloadOverrides\n suppressWarning?: boolean\n}\n\ntype OverrideFeatureFlagsOptions =\n | boolean // clear all overrides\n | string[] // enable list of flags\n | FeatureFlagOverrides // set variants directly\n | FeatureFlagOverrideOptions\n\nexport enum QuotaLimitedResource {\n FeatureFlags = 'feature_flags',\n Recordings = 'recordings',\n}\n\nexport class PostHogFeatureFlags {\n _override_warning: boolean = false\n featureFlagEventHandlers: FeatureFlagsCallback[]\n $anon_distinct_id: string | undefined\n private _hasLoadedFlags: boolean = false\n private _requestInFlight: boolean = false\n private _reloadingDisabled: boolean = false\n private _additionalReloadRequested: boolean = false\n private _reloadDebouncer?: any\n private _decideCalled: boolean = false\n private _flagsLoadedFromRemote: boolean = false\n\n constructor(private instance: PostHog) {\n this.featureFlagEventHandlers = []\n }\n\n decide(): void {\n if (this.instance.config.__preview_remote_config) {\n // If remote config is enabled we don't call decide and we mark it as called so that we don't simulate it\n this._decideCalled = true\n return\n }\n\n // TRICKY: We want to disable flags if we don't have a queued reload, and one of the settings exist for disabling on first load\n const disableFlags =\n !this._reloadDebouncer &&\n (this.instance.config.advanced_disable_feature_flags ||\n this.instance.config.advanced_disable_feature_flags_on_first_load)\n\n this._callDecideEndpoint({\n disableFlags,\n })\n }\n\n get hasLoadedFlags(): boolean {\n return this._hasLoadedFlags\n }\n\n getFlags(): string[] {\n return Object.keys(this.getFlagVariants())\n }\n\n getFlagsWithDetails(): Record<string, FeatureFlagDetail> {\n const flagDetails = this.instance.get_property(PERSISTENCE_FEATURE_FLAG_DETAILS)\n\n const overridenFlags = this.instance.get_property(PERSISTENCE_OVERRIDE_FEATURE_FLAGS)\n const overriddenPayloads = this.instance.get_property(PERSISTENCE_OVERRIDE_FEATURE_FLAG_PAYLOADS)\n\n if (!overriddenPayloads && !overridenFlags) {\n return flagDetails || {}\n }\n\n const finalDetails = extend({}, flagDetails || {})\n const overriddenKeys = [\n ...new Set([...Object.keys(overriddenPayloads || {}), ...Object.keys(overridenFlags || {})]),\n ]\n for (const key of overriddenKeys) {\n const originalDetail = finalDetails[key]\n const overrideFlagValue = overridenFlags?.[key]\n\n const finalEnabled = isUndefined(overrideFlagValue)\n ? (originalDetail?.enabled ?? false)\n : !!overrideFlagValue\n\n const overrideVariant = isUndefined(overrideFlagValue)\n ? originalDetail.variant\n : typeof overrideFlagValue === 'string'\n ? overrideFlagValue\n : undefined\n\n const overridePayload = overriddenPayloads?.[key]\n\n const overridenDetail = {\n ...originalDetail,\n enabled: finalEnabled,\n // If the flag is not enabled, the variant should be undefined, even if the original has a variant value.\n variant: finalEnabled ? (overrideVariant ?? originalDetail?.variant) : undefined,\n }\n\n // Keep track of the original enabled and variant values so we can send them in the $feature_flag_called event.\n // This will be helpful for debugging and for understanding the impact of overrides.\n if (finalEnabled !== originalDetail?.enabled) {\n overridenDetail.original_enabled = originalDetail?.enabled\n }\n\n if (overrideVariant !== originalDetail?.variant) {\n overridenDetail.original_variant = originalDetail?.variant\n }\n\n if (overridePayload) {\n overridenDetail.metadata = {\n ...originalDetail?.metadata,\n payload: overridePayload,\n original_payload: originalDetail?.metadata?.payload,\n }\n }\n\n finalDetails[key] = overridenDetail\n }\n\n if (!this._override_warning) {\n logger.warn(' Overriding feature flag details!', {\n flagDetails,\n overriddenPayloads,\n finalDetails,\n })\n this._override_warning = true\n }\n return finalDetails\n }\n\n getFlagVariants(): Record<string, string | boolean> {\n const enabledFlags = this.instance.get_property(ENABLED_FEATURE_FLAGS)\n const overriddenFlags = this.instance.get_property(PERSISTENCE_OVERRIDE_FEATURE_FLAGS)\n if (!overriddenFlags) {\n return enabledFlags || {}\n }\n\n const finalFlags = extend({}, enabledFlags)\n const overriddenKeys = Object.keys(overriddenFlags)\n for (let i = 0; i < overriddenKeys.length; i++) {\n finalFlags[overriddenKeys[i]] = overriddenFlags[overriddenKeys[i]]\n }\n if (!this._override_warning) {\n logger.warn(' Overriding feature flags!', {\n enabledFlags,\n overriddenFlags,\n finalFlags,\n })\n this._override_warning = true\n }\n return finalFlags\n }\n\n getFlagPayloads(): Record<string, JsonType> {\n const flagPayloads = this.instance.get_property(PERSISTENCE_FEATURE_FLAG_PAYLOADS)\n const overriddenPayloads = this.instance.get_property(PERSISTENCE_OVERRIDE_FEATURE_FLAG_PAYLOADS)\n\n if (!overriddenPayloads) {\n return flagPayloads || {}\n }\n\n const finalPayloads = extend({}, flagPayloads || {})\n const overriddenKeys = Object.keys(overriddenPayloads)\n for (let i = 0; i < overriddenKeys.length; i++) {\n finalPayloads[overriddenKeys[i]] = overriddenPayloads[overriddenKeys[i]]\n }\n\n if (!this._override_warning) {\n logger.warn(' Overriding feature flag payloads!', {\n flagPayloads,\n overriddenPayloads,\n finalPayloads,\n })\n this._override_warning = true\n }\n return finalPayloads\n }\n\n /**\n * Reloads feature flags asynchronously.\n *\n * Constraints:\n *\n * 1. Avoid parallel requests\n * 2. Delay a few milliseconds after each reloadFeatureFlags call to batch subsequent changes together\n */\n reloadFeatureFlags(): void {\n if (this._reloadingDisabled || this.instance.config.advanced_disable_feature_flags) {\n // If reloading has been explicitly disabled then we don't want to do anything\n // Or if feature flags are disabled\n return\n }\n\n if (this._reloadDebouncer) {\n // If we're already in a debounce then we don't want to do anything\n return\n }\n\n // Debounce multiple calls on the same tick\n this._reloadDebouncer = setTimeout(() => {\n this._callDecideEndpoint()\n }, 5)\n }\n\n private clearDebouncer(): void {\n clearTimeout(this._reloadDebouncer)\n this._reloadDebouncer = undefined\n }\n\n ensureFlagsLoaded(): void {\n if (this._hasLoadedFlags || this._requestInFlight || this._reloadDebouncer) {\n // If we are or have already loaded the flags then we don't want to do anything\n return\n }\n\n this.reloadFeatureFlags()\n }\n\n setAnonymousDistinctId(anon_distinct_id: string): void {\n this.$anon_distinct_id = anon_distinct_id\n }\n\n setReloadingPaused(isPaused: boolean): void {\n this._reloadingDisabled = isPaused\n }\n\n /**\n * NOTE: This is used both for flags and remote config. Once the RemoteConfig is fully released this will essentially only\n * be for flags and can eventually be replaced with the new flags endpoint\n */\n _callDecideEndpoint(options?: { disableFlags?: boolean }): void {\n // Ensure we don't have double queued decide requests\n this.clearDebouncer()\n if (this.instance.config.advanced_disable_decide) {\n // The way this is documented is essentially used to refuse to ever call the decide endpoint.\n return\n }\n if (this._requestInFlight) {\n this._additionalReloadRequested = true\n return\n }\n const token = this.instance.config.token\n const data: Record<string, any> = {\n token: token,\n distinct_id: this.instance.get_distinct_id(),\n groups: this.instance.getGroups(),\n $anon_distinct_id: this.$anon_distinct_id,\n person_properties: {\n ...(this.instance.persistence?.get_initial_props() || {}),\n ...(this.instance.get_property(STORED_PERSON_PROPERTIES_KEY) || {}),\n },\n group_properties: this.instance.get_property(STORED_GROUP_PROPERTIES_KEY),\n }\n\n if (options?.disableFlags || this.instance.config.advanced_disable_feature_flags) {\n data.disable_flags = true\n }\n\n this._requestInFlight = true\n this.instance._send_request({\n method: 'POST',\n url: this.instance.requestRouter.endpointFor('api', '/decide/?v=4'),\n data,\n compression: this.instance.config.disable_compression ? undefined : Compression.Base64,\n timeout: this.instance.config.feature_flag_request_timeout_ms,\n callback: (response) => {\n let errorsLoading = true\n\n if (response.statusCode === 200) {\n // successful request\n // reset anon_distinct_id after at least a single request with it\n // makes it through\n if (!this._additionalReloadRequested) {\n this.$anon_distinct_id = undefined\n }\n errorsLoading = false\n }\n\n this._requestInFlight = false\n\n if (!this._decideCalled) {\n this._decideCalled = true\n this.instance._onRemoteConfig(response.json ?? {})\n }\n\n if (data.disable_flags && !this._additionalReloadRequested) {\n // If flags are disabled then there is no need to call decide again (flags are the only thing that may change)\n // UNLESS, an additional reload is requested.\n return\n }\n\n this._flagsLoadedFromRemote = !errorsLoading\n\n if (response.json && response.json.quotaLimited?.includes(QuotaLimitedResource.FeatureFlags)) {\n // log a warning and then early return\n logger.warn(\n 'You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more.'\n )\n return\n }\n\n this.receivedFeatureFlags(response.json ?? {}, errorsLoading)\n\n if (this._additionalReloadRequested) {\n this._additionalReloadRequested = false\n this._callDecideEndpoint()\n }\n },\n })\n }\n\n /*\n * Get feature flag's value for user.\n *\n * ### Usage:\n *\n * if(posthog.getFeatureFlag('my-flag') === 'some-variant') { // do something }\n *\n * @param {Object|String} key Key of the feature flag.\n * @param {Object|String} options (optional) If {send_event: false}, we won't send an $feature_flag_called event to PostHog.\n */\n getFeatureFlag(key: string, options: { send_event?: boolean } = {}): boolean | string | undefined {\n if (!this._hasLoadedFlags && !(this.getFlags() && this.getFlags().length > 0)) {\n logger.warn('getFeatureFlag for key \"' + key + '\" failed. Feature flags didn\\'t load in time.')\n return undefined\n }\n const flagValue = this.getFlagVariants()[key]\n const flagReportValue = `${flagValue}`\n const requestId = this.instance.get_property(PERSISTENCE_FEATURE_FLAG_REQUEST_ID) || undefined\n const flagCallReported: Record<string, string[]> = this.instance.get_property(FLAG_CALL_REPORTED) || {}\n\n if (options.send_event || !('send_event' in options)) {\n if (!(key in flagCallReported) || !flagCallReported[key].includes(flagReportValue)) {\n if (isArray(flagCallReported[key])) {\n flagCallReported[key].push(flagReportValue)\n } else {\n flagCallReported[key] = [flagReportValue]\n }\n this.instance.persistence?.register({ [FLAG_CALL_REPORTED]: flagCallReported })\n\n const flagDetails = this.getFeatureFlagDetails(key)\n\n const properties: Record<string, any | undefined> = {\n $feature_flag: key,\n $feature_flag_response: flagValue,\n $feature_flag_payload: this.getFeatureFlagPayload(key) || null,\n $feature_flag_request_id: requestId,\n $feature_flag_bootstrapped_response: this.instance.config.bootstrap?.featureFlags?.[key] || null,\n $feature_flag_bootstrapped_payload:\n this.instance.config.bootstrap?.featureFlagPayloads?.[key] || null,\n // If we haven't yet received a response from the /decide endpoint, we must have used the bootstrapped value\n $used_bootstrap_value: !this._flagsLoadedFromRemote,\n }\n\n if (!isUndefined(flagDetails?.metadata?.version)) {\n properties.$feature_flag_version = flagDetails.metadata.version\n }\n\n const reason = flagDetails?.reason?.description ?? flagDetails?.reason?.code\n if (reason) {\n properties.$feature_flag_reason = reason\n }\n\n if (flagDetails?.metadata?.id) {\n properties.$feature_flag_id = flagDetails.metadata.id\n }\n\n // It's possible that flag values were overridden by calling overrideFeatureFlags.\n // We want to capture the original values in case someone forgets they were using overrides\n // and is wondering why their app is acting weird.\n if (!isUndefined(flagDetails?.original_variant) || !isUndefined(flagDetails?.original_enabled)) {\n properties.$feature_flag_original_response = !isUndefined(flagDetails.original_variant)\n ? flagDetails.original_variant\n : flagDetails.original_enabled\n }\n\n if (flagDetails?.metadata?.original_payload) {\n properties.$feature_flag_original_payload = flagDetails?.metadata?.original_payload\n }\n\n this.instance.capture('$feature_flag_called', properties)\n }\n }\n return flagValue\n }\n\n /*\n * Retrieves the details for a feature flag.\n *\n * ### Usage:\n *\n * const details = getFeatureFlagDetails(\"my-flag\")\n * console.log(details.metadata.version)\n * console.log(details.reason)\n *\n * @param {String} key Key of the feature flag.\n */\n getFeatureFlagDetails(key: string): FeatureFlagDetail | undefined {\n const details = this.getFlagsWithDetails()\n return details[key]\n }\n\n getFeatureFlagPayload(key: string): JsonType {\n const payloads = this.getFlagPayloads()\n return payloads[key]\n }\n\n /*\n * Fetches the payload for a remote config feature flag. This method will bypass any cached values and fetch the latest\n * value from the PostHog API.\n *\n * Note: Because the posthog-js SDK is primarily used with public project API keys, encrypted remote config payloads will\n * be redacted, never decrypted in the response.\n *\n * ### Usage:\n *\n * getRemoteConfigPayload(\"home-page-welcome-message\", (payload) => console.log(`Fetched remote config: ${payload}`))\n *\n * @param {String} key Key of the feature flag.\n * @param {Function} [callback] The callback function will be called once the remote config feature flag payload has been fetched.\n */\n getRemoteConfigPayload(key: string, callback: RemoteConfigFeatureFlagCallback): void {\n const token = this.instance.config.token\n this.instance._send_request({\n method: 'POST',\n url: this.instance.requestRouter.endpointFor('api', '/decide/?v=4'),\n data: {\n distinct_id: this.instance.get_distinct_id(),\n token,\n },\n compression: this.instance.config.disable_compression ? undefined : Compression.Base64,\n timeout: this.instance.config.feature_flag_request_timeout_ms,\n callback: (response) => {\n const flagPayloads = response.json?.['featureFlagPayloads']\n callback(flagPayloads?.[key] || undefined)\n },\n })\n }\n\n /*\n * See if feature flag is enabled for user.\n *\n * ### Usage:\n *\n * if(posthog.isFeatureEnabled('beta-feature')) { // do something }\n *\n * @param {Object|String} key Key of the feature flag.\n * @param {Object|String} options (optional) If {send_event: false}, we won't send an $feature_flag_call event to PostHog.\n */\n isFeatureEnabled(key: string, options: { send_event?: boolean } = {}): boolean | undefined {\n if (!this._hasLoadedFlags && !(this.getFlags() && this.getFlags().length > 0)) {\n logger.warn('isFeatureEnabled for key \"' + key + '\" failed. Feature flags didn\\'t load in time.')\n return undefined\n }\n return !!this.getFeatureFlag(key, options)\n }\n\n addFeatureFlagsHandler(handler: FeatureFlagsCallback): void {\n this.featureFlagEventHandlers.push(handler)\n }\n\n removeFeatureFlagsHandler(handler: FeatureFlagsCallback): void {\n this.featureFlagEventHandlers = this.featureFlagEventHandlers.filter((h) => h !== handler)\n }\n\n receivedFeatureFlags(response: Partial<DecideResponse>, errorsLoading?: boolean): void {\n if (!this.instance.persistence) {\n return\n }\n this._hasLoadedFlags = true\n\n const currentFlags = this.getFlagVariants()\n const currentFlagPayloads = this.getFlagPayloads()\n const currentFlagDetails = this.getFlagsWithDetails()\n parseFeatureFlagDecideResponse(\n response,\n this.instance.persistence,\n currentFlags,\n currentFlagPayloads,\n currentFlagDetails\n )\n this._fireFeatureFlagsCallbacks(errorsLoading)\n }\n\n /**\n * @deprecated Use overrideFeatureFlags instead. This will be removed in a future version.\n */\n override(flags: boolean | string[] | Record<string, string | boolean>, suppressWarning: boolean = false): void {\n logger.warn('override is deprecated. Please use overrideFeatureFlags instead.')\n this.overrideFeatureFlags({\n flags: flags,\n suppressWarning: suppressWarning,\n })\n }\n\n /**\n * Override feature flags on the client-side. Useful for setting non-persistent feature flags,\n * or for testing/debugging feature flags in the PostHog app.\n *\n * ### Usage:\n *\n * - posthog.featureFlags.overrideFeatureFlags(false) // clear all overrides\n * - posthog.featureFlags.overrideFeatureFlags(['beta-feature']) // enable flags\n * - posthog.featureFlags.overrideFeatureFlags({'beta-feature': 'variant'}) // set variants\n * - posthog.featureFlags.overrideFeatureFlags({ // set both flags and payloads\n * flags: {'beta-feature': 'variant'},\n * payloads: { 'beta-feature': { someData: true } }\n * })\n * - posthog.featureFlags.overrideFeatureFlags({ // only override payloads\n * payloads: { 'beta-feature': { someData: true } }\n * })\n */\n overrideFeatureFlags(overrideOptions: OverrideFeatureFlagsOptions): void {\n if (!this.instance.__loaded || !this.instance.persistence) {\n return logger.uninitializedWarning('posthog.featureFlags.overrideFeatureFlags')\n }\n\n // Clear all overrides if false, lets you do something like posthog.featureFlags.overrideFeatureFlags(false)\n if (overrideOptions === false) {\n this.instance.persistence.unregister(PERSISTENCE_OVERRIDE_FEATURE_FLAGS)\n this.instance.persistence.unregister(PERSISTENCE_OVERRIDE_FEATURE_FLAG_PAYLOADS)\n this._fireFeatureFlagsCallbacks()\n return\n }\n\n if (\n overrideOptions &&\n typeof overrideOptions === 'object' &&\n ('flags' in overrideOptions || 'payloads' in overrideOptions)\n ) {\n const options = overrideOptions\n this._override_warning = Boolean(options.suppressWarning ?? false)\n\n // Handle flags if provided, lets you do something like posthog.featureFlags.overrideFeatureFlags({flags: ['beta-feature']})\n if ('flags' in options) {\n if (options.flags === false) {\n this.instance.persistence.unregister(PERSISTENCE_OVERRIDE_FEATURE_FLAGS)\n } else if (options.flags) {\n if (isArray(options.flags)) {\n const flagsObj: Record<string, string | boolean> = {}\n for (let i = 0; i < options.flags.length; i++) {\n flagsObj[options.flags[i]] = true\n }\n this.instance.persistence.register({ [PERSISTENCE_OVERRIDE_FEATURE_FLAGS]: flagsObj })\n } else {\n this.instance.persistence.register({ [PERSISTENCE_OVERRIDE_FEATURE_FLAGS]: options.flags })\n }\n }\n }\n\n // Handle payloads independently, lets you do something like posthog.featureFlags.overrideFeatureFlags({payloads: { 'beta-feature': { someData: true } }})\n if ('payloads' in options) {\n if (options.payloads === false) {\n this.instance.persistence.unregister(PERSISTENCE_OVERRIDE_FEATURE_FLAG_PAYLOADS)\n } else if (options.payloads) {\n this.instance.persistence.register({\n [PERSISTENCE_OVERRIDE_FEATURE_FLAG_PAYLOADS]: options.payloads,\n })\n }\n }\n\n this._fireFeatureFlagsCallbacks()\n return\n }\n\n this._fireFeatureFlagsCallbacks()\n }\n\n /*\n * Register an event listener that runs when feature flags become available or when they change.\n * If there are flags, the listener is called immediately in addition to being called on future changes.\n *\n * ### Usage:\n *\n * posthog.onFeatureFlags(function(featureFlags, featureFlagsVariants, { errorsLoading }) { // do something })\n *\n * @param {Function} [callback] The callback function will be called once the feature flags are ready or when they are updated.\n * It'll return a list of feature flags enabled for the user, the variants,\n * and also a context object indicating whether we succeeded to fetch the flags or not.\n * @returns {Function} A function that can be called to unsubscribe the listener. Used by useEffect when the component unmounts.\n */\n onFeatureFlags(callback: FeatureFlagsCallback): () => void {\n this.addFeatureFlagsHandler(callback)\n if (this._hasLoadedFlags) {\n const { flags, flagVariants } = this._prepareFeatureFlagsForCallbacks()\n callback(flags, flagVariants)\n }\n return () => this.removeFeatureFlagsHandler(callback)\n }\n\n updateEarlyAccessFeatureEnrollment(key: string, isEnrolled: boolean): void {\n const existing_early_access_features: EarlyAccessFeature[] =\n this.instance.get_property(PERSISTENCE_EARLY_ACCESS_FEATURES) || []\n const feature = existing_early_access_features.find((f) => f.flagKey === key)\n\n const enrollmentPersonProp = {\n [`$feature_enrollment/${key}`]: isEnrolled,\n }\n\n const properties: Properties = {\n $feature_flag: key,\n $feature_enrollment: isEnrolled,\n $set: enrollmentPersonProp,\n }\n\n if (feature) {\n properties['$early_access_feature_name'] = feature.name\n }\n\n this.instance.capture('$feature_enrollment_update', properties)\n this.setPersonPropertiesForFlags(enrollmentPersonProp, false)\n\n const newFlags = { ...this.getFlagVariants(), [key]: isEnrolled }\n this.instance.persistence?.register({\n [PERSISTENCE_ACTIVE_FEATURE_FLAGS]: Object.keys(filterActiveFeatureFlags(newFlags)),\n [ENABLED_FEATURE_FLAGS]: newFlags,\n })\n this._fireFeatureFlagsCallbacks()\n }\n\n getEarlyAccessFeatures(\n callback: EarlyAccessFeatureCallback,\n force_reload = false,\n stages?: EarlyAccessFeatureStage[]\n ): void {\n const existing_early_access_features = this.instance.get_property(PERSISTENCE_EARLY_ACCESS_FEATURES)\n\n const stageParams = stages ? `&${stages.map((s) => `stage=${s}`).join('&')}` : ''\n\n if (!existing_early_access_features || force_reload) {\n this.instance._send_request({\n url: this.instance.requestRouter.endpointFor(\n 'api',\n `/api/early_access_features/?token=${this.instance.config.token}${stageParams}`\n ),\n method: 'GET',\n callback: (response) => {\n if (!response.json) {\n return\n }\n const earlyAccessFeatures = (response.json as EarlyAccessFeatureResponse).earlyAccessFeatures\n this.instance.persistence?.register({ [PERSISTENCE_EARLY_ACCESS_FEATURES]: earlyAccessFeatures })\n return callback(earlyAccessFeatures)\n },\n })\n } else {\n return callback(existing_early_access_features)\n }\n }\n\n _prepareFeatureFlagsForCallbacks(): { flags: string[]; flagVariants: Record<string, string | boolean> } {\n const flags = this.getFlags()\n const flagVariants = this.getFlagVariants()\n\n // Return truthy\n const truthyFlags = flags.filter((flag) => flagVariants[flag])\n const truthyFlagVariants = Object.keys(flagVariants)\n .filter((variantKey) => flagVariants[variantKey])\n .reduce((res: Record<string, string | boolean>, key) => {\n res[key] = flagVariants[key]\n return res\n }, {})\n\n return {\n flags: truthyFlags,\n flagVariants: truthyFlagVariants,\n }\n }\n\n _fireFeatureFlagsCallbacks(errorsLoading?: boolean): void {\n const { flags, flagVariants } = this._prepareFeatureFlagsForCallbacks()\n this.featureFlagEventHandlers.forEach((handler) => handler(flags, flagVariants, { errorsLoading }))\n }\n\n /**\n * Set override person properties for feature flags.\n * This is used when dealing with new persons / where you don't want to wait for ingestion\n * to update user properties.\n */\n setPersonPropertiesForFlags(properties: Properties, reloadFeatureFlags = true): void {\n // Get persisted person properties\n const existingProperties = this.instance.get_property(STORED_PERSON_PROPERTIES_KEY) || {}\n\n this.instance.register({\n [STORED_PERSON_PROPERTIES_KEY]: {\n ...existingProperties,\n ...properties,\n },\n })\n\n if (reloadFeatureFlags) {\n this.instance.reloadFeatureFlags()\n }\n }\n\n resetPersonPropertiesForFlags(): void {\n this.instance.unregister(STORED_PERSON_PROPERTIES_KEY)\n }\n\n /**\n * Set override group properties for feature flags.\n * This is used when dealing with new groups / where you don't want to wait for ingestion\n * to update properties.\n * Takes in an object, the key of which is the group type.\n * For example:\n * setGroupPropertiesForFlags({'organization': { name: 'CYZ', employees: '11' } })\n */\n setGroupPropertiesForFlags(properties: { [type: string]: Properties }, reloadFeatureFlags = true): void {\n // Get persisted group properties\n const existingProperties = this.instance.get_property(STORED_GROUP_PROPERTIES_KEY) || {}\n\n if (Object.keys(existingProperties).length !== 0) {\n Object.keys(existingProperties).forEach((groupType) => {\n existingProperties[groupType] = {\n ...existingProperties[groupType],\n ...properties[groupType],\n }\n delete properties[groupType]\n })\n }\n\n this.instance.register({\n [STORED_GROUP_PROPERTIES_KEY]: {\n ...existingProperties,\n ...properties,\n },\n })\n\n if (reloadFeatureFlags) {\n this.instance.reloadFeatureFlags()\n }\n }\n\n resetGroupPropertiesForFlags(group_type?: string): void {\n if (group_type) {\n const existingProperties = this.instance.get_property(STORED_GROUP_PROPERTIES_KEY) || {}\n this.instance.register({\n [STORED_GROUP_PROPERTIES_KEY]: { ...existingProperties, [group_type]: {} },\n })\n } else {\n this.instance.unregister(STORED_GROUP_PROPERTIES_KEY)\n }\n }\n}\n"]}
@@ -68,6 +68,11 @@ export var EVENT_TO_PERSON_PROPERTIES = [
68
68
  '$os_version',
69
69
  '$referring_domain',
70
70
  '$referrer',
71
+ '$screen_height',
72
+ '$screen_width',
73
+ '$viewport_height',
74
+ '$viewport_width',
75
+ '$raw_user_agent',
71
76
  ];
72
77
  export var MASKED = '<masked>';
73
78
  export var Info = {
@@ -1 +1 @@
1
- {"version":3,"file":"event-utils.js","sourceRoot":"","sources":["../../../src/utils/event-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,OAAO,MAAM,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEnD,IAAM,gBAAgB,GAAG,eAAe,CAAA;AAExC,6EAA6E;AAC7E,yFAAyF;AAEzF,0FAA0F;AAC1F,2EAA2E;AAC3E,MAAM,CAAC,IAAM,6BAA6B,GAAG;IACzC,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,iBAAiB;IAC3B,OAAO,EAAE,qBAAqB;IAC9B,QAAQ,EAAE,yBAAyB;IACnC,QAAQ,EAAE,yBAAyB;IACnC,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,YAAY;IACvB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,WAAW;IACxB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,UAAU;CACpB,CAAA;AAED,MAAM,CAAC,IAAM,eAAe,GAAG,WAAW,CACtC;IACI,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,aAAa;IACb,UAAU;IACV,YAAY,EAAE,oBAAoB;IAClC,QAAQ,EAAE,wBAAwB;CACrC,EACD,6BAA6B,CAChC,CAAA;AAED,MAAM,CAAC,IAAM,0BAA0B,GAAG;IACtC,gBAAgB;IAChB,YAAY;IACZ,WAAW;IACX,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,UAAU;IACV,kBAAkB;IAClB,cAAc;IACd,cAAc;IACd,WAAW;IACX,KAAK;IACL,UAAU,EAAE,+DAA+D;IAC3E,aAAa;IACb,mBAAmB;IACnB,WAAW;CACd,CAAA;AAED,MAAM,CAAC,IAAM,MAAM,GAAG,UAAU,CAAA;AAEhC,MAAM,CAAC,IAAM,IAAI,GAAG;IAChB,cAAc,EAAE,UAAU,EAQpB;YARoB,qBAQtB,EAAE,KAAA,EAPF,mBAAmB,yBAAA,EACnB,0BAA0B,gCAAA,EAC1B,4BAA4B,kCAAA;QAM5B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,EAAE,CAAA;QACb,CAAC;QAED,IAAM,YAAY,GAAG,0BAA0B;YAC3C,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,6BAA6B,EAAE,4BAA4B,IAAI,EAAE,CAAC;YACpF,CAAC,CAAC,EAAE,CAAA;QAER,OAAO,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,mBAAmB,CAAC,CAAA;IAChH,CAAC;IAED,sBAAsB,EAAE,UAAU,GAAW,EAAE,YAAuB;QAClE,IAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAA;QAEpE,IAAM,MAAM,GAAwB,EAAE,CAAA;QACtC,IAAI,CAAC,iBAAiB,EAAE,UAAU,KAAK;YACnC,IAAM,EAAE,GAAG,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACpC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QAClC,CAAC,CAAC,CAAA;QAEF,OAAO,MAAM,CAAA;IACjB,CAAC;IAED,aAAa,EAAE,UAAU,QAAgB;QACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,IAAI,CAAA;QACf,CAAC;aAAM,CAAC;YACJ,IAAI,QAAQ,CAAC,MAAM,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO,QAAQ,CAAA;YACnB,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO,MAAM,CAAA;YACjB,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/D,OAAO,OAAO,CAAA;YAClB,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpE,OAAO,YAAY,CAAA;YACvB,CAAC;iBAAM,CAAC;gBACJ,OAAO,IAAI,CAAA;YACf,CAAC;QACL,CAAC;IACL,CAAC;IAED,uBAAuB,EAAE,UAAU,QAAgB;QAC/C,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAM,KAAK,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QAC3C,IAAM,GAAG,GAAwB,EAAE,CAAA;QAEnC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAClB,GAAG,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAA;YAE9B,IAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YACvE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,GAAG,CAAC,YAAY,CAAC,GAAG,OAAO,CAAA;YAC/B,CAAC;QACL,CAAC;QAED,OAAO,GAAG,CAAA;IACd,CAAC;IAED,UAAU,EAAE;QACR,IAAM,QAAQ,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,CAAA;QACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,EAAE,CAAA;QACb,CAAC;QACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;IACjD,CAAC;IAED;;;;OAIG;IACH,OAAO,EAAE,aAAa;IAEtB;;;;;;;OAOG;IACH,cAAc,EAAE,oBAAoB;IAEpC,eAAe,EAAE;QACb,OAAO,CACH,SAAS,CAAC,QAAQ,IAAI,qBAAqB;YAC1C,SAAiC,CAAC,YAAY,CAAC,OAAO;SAC1D,CAAA;IACL,CAAC;IAED,qBAAqB,EAAE;QACnB,IAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAC9C,OAAO,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1F,CAAC;IAED,EAAE,EAAE,QAAQ;IAEZ,MAAM,EAAE,YAAY;IAEpB,UAAU,EAAE,gBAAgB;IAE5B,QAAQ,EAAE;QACN,OAAO,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,KAAI,SAAS,CAAA;IAC1C,CAAC;IAED,eAAe,EAAE;;QACb,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,CAAA,EAAE,CAAC;YACtB,OAAO,SAAS,CAAA;QACpB,CAAC;QACD,OAAO,CAAA,MAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,0CAAE,IAAI,KAAI,SAAS,CAAA;IAC7D,CAAC;IAED,YAAY,EAAE;QACV,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;YAC1B,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE;SAC5C,CAAA;IACL,CAAC;IAED,UAAU,EAAE,UAAU,EAMhB;YANgB,qBAMlB,EAAE,KAAA,EALF,0BAA0B,gCAAA,EAC1B,4BAA4B,kCAAA;QAK5B,IAAM,YAAY,GAAG,0BAA0B;YAC3C,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,6BAA6B,EAAE,4BAA4B,IAAI,EAAE,CAAC;YACpF,CAAC,CAAC,EAAE,CAAA;QACR,IAAM,GAAG,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAC7C,yFAAyF;QACzF,OAAO;YACH,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;YACrC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SAClE,CAAA;IACL,CAAC;IAED,mBAAmB,EAAE,UAAU,IAAyB;;QAC5C,IAAG,QAAQ,GAAa,IAAI,EAAjB,EAAK,GAAG,GAAK,IAAI,EAAT,CAAS;QACpC,IAAM,gBAAgB,GAClB,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAA,YAAY,CAAC,QAAQ,CAAC,0CAAE,IAAI,CAAA;QAEnG,IAAM,KAAK,GAAuC;YAC9C,SAAS,EAAE,QAAQ;YACnB,iBAAiB,EAAE,gBAAgB;SACtC,CAAA;QACD,IAAI,GAAG,EAAE,CAAC;YACN,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,CAAA;YAC3B,IAAM,UAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;YAClC,KAAK,CAAC,OAAO,CAAC,GAAG,UAAQ,aAAR,UAAQ,uBAAR,UAAQ,CAAE,IAAI,CAAA;YAC/B,KAAK,CAAC,WAAW,CAAC,GAAG,UAAQ,aAAR,UAAQ,uBAAR,UAAQ,CAAE,QAAQ,CAAA;YACvC,IAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAA;YACvD,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;QACjC,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACX,IAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;YACzD,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;QAC7B,CAAC;QACD,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,0BAA0B,EAAE,UAAU,IAAyB;QAC3D,IAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAClD,IAAM,KAAK,GAAwB,EAAE,CAAA;QACrC,IAAI,CAAC,WAAW,EAAE,UAAU,GAAQ,EAAE,GAAW;YAC7C,KAAK,CAAC,mBAAY,kBAAkB,CAAC,GAAG,CAAC,CAAE,CAAC,GAAG,GAAG,CAAA;QACtD,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,QAAQ,EAAE;QACN,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAA;QAC3D,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,SAAS,CAAA;QACpB,CAAC;IACL,CAAC;IAED,cAAc,EAAE;QACZ,IAAI,CAAC;YACD,OAAO,IAAI,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAA;QACzC,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,SAAS,CAAA;QACpB,CAAC;IACL,CAAC;IAED,UAAU,EAAE,UAAU,EAMhB;YANgB,qBAMlB,EAAE,KAAA,EALF,0BAA0B,gCAAA,EAC1B,4BAA4B,kCAAA;QAK5B,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO,EAAE,CAAA;QACb,CAAC;QACD,IAAM,YAAY,GAAG,0BAA0B;YAC3C,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,6BAA6B,EAAE,4BAA4B,IAAI,EAAE,CAAC;YACpF,CAAC,CAAC,EAAE,CAAA;QACF,IAAA,KAAA,OAAwB,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAA,EAAzC,OAAO,QAAA,EAAE,UAAU,QAAsB,CAAA;QAChD,OAAO,MAAM,CACT,oBAAoB,CAAC;YACjB,GAAG,EAAE,OAAO;YACZ,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC;YACnD,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YAC/B,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YACxC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;YAC1B,gBAAgB,EAAE,IAAI,CAAC,cAAc,EAAE;SAC1C,CAAC,EACF;YACI,YAAY,EAAE,eAAe,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC;YACnE,KAAK,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI;YACrB,SAAS,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ;YAC7B,eAAe,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS;YAC1F,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC;YAClE,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE;YACzC,wBAAwB,EAAE,IAAI,CAAC,qBAAqB,EAAE;YACtD,cAAc,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC,MAAM;YACrC,aAAa,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC,KAAK;YACnC,gBAAgB,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW;YACrC,eAAe,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU;YACnC,IAAI,EAAE,KAAK;YACX,YAAY,EAAE,MAAM,CAAC,WAAW;YAChC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;YACrG,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,wBAAwB;SACrD,CACJ,CAAA;IACL,CAAC;IAED,iBAAiB,EAAE;QACf,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,OAAO,EAAE,CAAA;QACb,CAAC;QAEK,IAAA,KAAA,OAAwB,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAA,EAAzC,OAAO,QAAA,EAAE,UAAU,QAAsB,CAAA;QAChD,OAAO,MAAM,CACT,oBAAoB,CAAC;YACjB,GAAG,EAAE,OAAO;YACZ,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC;SACtD,CAAC,EACF;YACI,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC;SACrE,CACJ,CAAA;IACL,CAAC;CACJ,CAAA","sourcesContent":["import { getQueryParam, convertToURL, maskQueryParams } from './request-utils'\nimport { isNull } from './type-utils'\nimport { Properties } from '../types'\nimport Config from '../config'\nimport { each, extend, extendArray, stripEmptyProperties } from './index'\nimport { document, location, userAgent, window } from './globals'\nimport { detectBrowser, detectBrowserVersion, detectDevice, detectDeviceType, detectOS } from './user-agent-utils'\nimport { stripLeadingDollar } from './string-utils'\n\nconst URL_REGEX_PREFIX = 'https?://(.*)'\n\n// CAMPAIGN_PARAMS and EVENT_TO_PERSON_PROPERTIES should be kept in sync with\n// https://github.com/PostHog/posthog/blob/master/plugin-server/src/utils/db/utils.ts#L60\n\n// The list of campaign parameters that could be considered personal data under e.g. GDPR.\n// These can be masked in URLs and properties before being sent to posthog.\nexport const PERSONAL_DATA_CAMPAIGN_PARAMS = [\n 'gclid', // google ads\n 'gclsrc', // google ads 360\n 'dclid', // google display ads\n 'gbraid', // google ads, web to app\n 'wbraid', // google ads, app to web\n 'fbclid', // facebook\n 'msclkid', // microsoft\n 'twclid', // twitter\n 'li_fat_id', // linkedin\n 'igshid', // instagram\n 'ttclid', // tiktok\n 'rdt_cid', // reddit\n 'irclid', // impact\n '_kx', // klaviyo\n]\n\nexport const CAMPAIGN_PARAMS = extendArray(\n [\n 'utm_source',\n 'utm_medium',\n 'utm_campaign',\n 'utm_content',\n 'utm_term',\n 'gad_source', // google ads source\n 'mc_cid', // mailchimp campaign id\n ],\n PERSONAL_DATA_CAMPAIGN_PARAMS\n)\n\nexport const EVENT_TO_PERSON_PROPERTIES = [\n // mobile params\n '$app_build',\n '$app_name',\n '$app_namespace',\n '$app_version',\n // web params\n '$browser',\n '$browser_version',\n '$device_type',\n '$current_url',\n '$pathname',\n '$os',\n '$os_name', // $os_name is a special case, it's treated as an alias of $os!\n '$os_version',\n '$referring_domain',\n '$referrer',\n]\n\nexport const MASKED = '<masked>'\n\nexport const Info = {\n campaignParams: function ({\n customTrackedParams,\n maskPersonalDataProperties,\n customPersonalDataProperties,\n }: {\n customTrackedParams?: string[]\n maskPersonalDataProperties?: boolean\n customPersonalDataProperties?: string[] | undefined\n } = {}): Record<string, string> {\n if (!document) {\n return {}\n }\n\n const paramsToMask = maskPersonalDataProperties\n ? extendArray([], PERSONAL_DATA_CAMPAIGN_PARAMS, customPersonalDataProperties || [])\n : []\n\n return this._campaignParamsFromUrl(maskQueryParams(document.URL, paramsToMask, MASKED), customTrackedParams)\n },\n\n _campaignParamsFromUrl: function (url: string, customParams?: string[]): Record<string, string> {\n const campaign_keywords = CAMPAIGN_PARAMS.concat(customParams || [])\n\n const params: Record<string, any> = {}\n each(campaign_keywords, function (kwkey) {\n const kw = getQueryParam(url, kwkey)\n params[kwkey] = kw ? kw : null\n })\n\n return params\n },\n\n _searchEngine: function (referrer: string): string | null {\n if (!referrer) {\n return null\n } else {\n if (referrer.search(URL_REGEX_PREFIX + 'google.([^/?]*)') === 0) {\n return 'google'\n } else if (referrer.search(URL_REGEX_PREFIX + 'bing.com') === 0) {\n return 'bing'\n } else if (referrer.search(URL_REGEX_PREFIX + 'yahoo.com') === 0) {\n return 'yahoo'\n } else if (referrer.search(URL_REGEX_PREFIX + 'duckduckgo.com') === 0) {\n return 'duckduckgo'\n } else {\n return null\n }\n }\n },\n\n _searchInfoFromReferrer: function (referrer: string): Record<string, any> {\n const search = Info._searchEngine(referrer)\n const param = search != 'yahoo' ? 'q' : 'p'\n const ret: Record<string, any> = {}\n\n if (!isNull(search)) {\n ret['$search_engine'] = search\n\n const keyword = document ? getQueryParam(document.referrer, param) : ''\n if (keyword.length) {\n ret['ph_keyword'] = keyword\n }\n }\n\n return ret\n },\n\n searchInfo: function (): Record<string, any> {\n const referrer = document?.referrer\n if (!referrer) {\n return {}\n }\n return this._searchInfoFromReferrer(referrer)\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include keywords used in later checks.\n */\n browser: detectBrowser,\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n *\n * `navigator.vendor` is passed in and used to help with detecting certain browsers\n * NB `navigator.vendor` is deprecated and not present in every browser\n */\n browserVersion: detectBrowserVersion,\n\n browserLanguage: function (): string | undefined {\n return (\n navigator.language || // Any modern browser\n (navigator as Record<string, any>).userLanguage // IE11\n )\n },\n\n browserLanguagePrefix: function (): string | undefined {\n const browserLanguage = this.browserLanguage()\n return typeof browserLanguage === 'string' ? browserLanguage.split('-')[0] : undefined\n },\n\n os: detectOS,\n\n device: detectDevice,\n\n deviceType: detectDeviceType,\n\n referrer: function (): string {\n return document?.referrer || '$direct'\n },\n\n referringDomain: function (): string {\n if (!document?.referrer) {\n return '$direct'\n }\n return convertToURL(document.referrer)?.host || '$direct'\n },\n\n referrerInfo: function (): Record<string, any> {\n return {\n $referrer: this.referrer(),\n $referring_domain: this.referringDomain(),\n }\n },\n\n personInfo: function ({\n maskPersonalDataProperties,\n customPersonalDataProperties,\n }: {\n maskPersonalDataProperties?: boolean\n customPersonalDataProperties?: string[]\n } = {}) {\n const paramsToMask = maskPersonalDataProperties\n ? extendArray([], PERSONAL_DATA_CAMPAIGN_PARAMS, customPersonalDataProperties || [])\n : []\n const url = location?.href.substring(0, 1000)\n // we're being a bit more economical with bytes here because this is stored in the cookie\n return {\n r: this.referrer().substring(0, 1000),\n u: url ? maskQueryParams(url, paramsToMask, MASKED) : undefined,\n }\n },\n\n personPropsFromInfo: function (info: Record<string, any>): Record<string, any> {\n const { r: referrer, u: url } = info\n const referring_domain =\n referrer == null ? undefined : referrer == '$direct' ? '$direct' : convertToURL(referrer)?.host\n\n const props: Record<string, string | undefined> = {\n $referrer: referrer,\n $referring_domain: referring_domain,\n }\n if (url) {\n props['$current_url'] = url\n const location = convertToURL(url)\n props['$host'] = location?.host\n props['$pathname'] = location?.pathname\n const campaignParams = this._campaignParamsFromUrl(url)\n extend(props, campaignParams)\n }\n if (referrer) {\n const searchInfo = this._searchInfoFromReferrer(referrer)\n extend(props, searchInfo)\n }\n return props\n },\n\n initialPersonPropsFromInfo: function (info: Record<string, any>): Record<string, any> {\n const personProps = this.personPropsFromInfo(info)\n const props: Record<string, any> = {}\n each(personProps, function (val: any, key: string) {\n props[`$initial_${stripLeadingDollar(key)}`] = val\n })\n return props\n },\n\n timezone: function (): string | undefined {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone\n } catch {\n return undefined\n }\n },\n\n timezoneOffset: function (): number | undefined {\n try {\n return new Date().getTimezoneOffset()\n } catch {\n return undefined\n }\n },\n\n properties: function ({\n maskPersonalDataProperties,\n customPersonalDataProperties,\n }: {\n maskPersonalDataProperties?: boolean\n customPersonalDataProperties?: string[]\n } = {}): Properties {\n if (!userAgent) {\n return {}\n }\n const paramsToMask = maskPersonalDataProperties\n ? extendArray([], PERSONAL_DATA_CAMPAIGN_PARAMS, customPersonalDataProperties || [])\n : []\n const [os_name, os_version] = Info.os(userAgent)\n return extend(\n stripEmptyProperties({\n $os: os_name,\n $os_version: os_version,\n $browser: Info.browser(userAgent, navigator.vendor),\n $device: Info.device(userAgent),\n $device_type: Info.deviceType(userAgent),\n $timezone: Info.timezone(),\n $timezone_offset: Info.timezoneOffset(),\n }),\n {\n $current_url: maskQueryParams(location?.href, paramsToMask, MASKED),\n $host: location?.host,\n $pathname: location?.pathname,\n $raw_user_agent: userAgent.length > 1000 ? userAgent.substring(0, 997) + '...' : userAgent,\n $browser_version: Info.browserVersion(userAgent, navigator.vendor),\n $browser_language: Info.browserLanguage(),\n $browser_language_prefix: Info.browserLanguagePrefix(),\n $screen_height: window?.screen.height,\n $screen_width: window?.screen.width,\n $viewport_height: window?.innerHeight,\n $viewport_width: window?.innerWidth,\n $lib: 'web',\n $lib_version: Config.LIB_VERSION,\n $insert_id: Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10),\n $time: Date.now() / 1000, // epoch time in seconds\n }\n )\n },\n\n people_properties: function (): Properties {\n if (!userAgent) {\n return {}\n }\n\n const [os_name, os_version] = Info.os(userAgent)\n return extend(\n stripEmptyProperties({\n $os: os_name,\n $os_version: os_version,\n $browser: Info.browser(userAgent, navigator.vendor),\n }),\n {\n $browser_version: Info.browserVersion(userAgent, navigator.vendor),\n }\n )\n },\n}\n"]}
1
+ {"version":3,"file":"event-utils.js","sourceRoot":"","sources":["../../../src/utils/event-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { getQueryParam, convertToURL, maskQueryParams } from './request-utils'\nimport { isNull } from './type-utils'\nimport { Properties } from '../types'\nimport Config from '../config'\nimport { each, extend, extendArray, stripEmptyProperties } from './index'\nimport { document, location, userAgent, window } from './globals'\nimport { detectBrowser, detectBrowserVersion, detectDevice, detectDeviceType, detectOS } from './user-agent-utils'\nimport { stripLeadingDollar } from './string-utils'\n\nconst URL_REGEX_PREFIX = 'https?://(.*)'\n\n// CAMPAIGN_PARAMS and EVENT_TO_PERSON_PROPERTIES should be kept in sync with\n// https://github.com/PostHog/posthog/blob/master/plugin-server/src/utils/db/utils.ts#L60\n\n// The list of campaign parameters that could be considered personal data under e.g. GDPR.\n// These can be masked in URLs and properties before being sent to posthog.\nexport const PERSONAL_DATA_CAMPAIGN_PARAMS = [\n 'gclid', // google ads\n 'gclsrc', // google ads 360\n 'dclid', // google display ads\n 'gbraid', // google ads, web to app\n 'wbraid', // google ads, app to web\n 'fbclid', // facebook\n 'msclkid', // microsoft\n 'twclid', // twitter\n 'li_fat_id', // linkedin\n 'igshid', // instagram\n 'ttclid', // tiktok\n 'rdt_cid', // reddit\n 'irclid', // impact\n '_kx', // klaviyo\n]\n\nexport const CAMPAIGN_PARAMS = extendArray(\n [\n 'utm_source',\n 'utm_medium',\n 'utm_campaign',\n 'utm_content',\n 'utm_term',\n 'gad_source', // google ads source\n 'mc_cid', // mailchimp campaign id\n ],\n PERSONAL_DATA_CAMPAIGN_PARAMS\n)\n\nexport const EVENT_TO_PERSON_PROPERTIES = [\n // mobile params\n '$app_build',\n '$app_name',\n '$app_namespace',\n '$app_version',\n // web params\n '$browser',\n '$browser_version',\n '$device_type',\n '$current_url',\n '$pathname',\n '$os',\n '$os_name', // $os_name is a special case, it's treated as an alias of $os!\n '$os_version',\n '$referring_domain',\n '$referrer',\n '$screen_height',\n '$screen_width',\n '$viewport_height',\n '$viewport_width',\n '$raw_user_agent',\n]\n\nexport const MASKED = '<masked>'\n\nexport const Info = {\n campaignParams: function ({\n customTrackedParams,\n maskPersonalDataProperties,\n customPersonalDataProperties,\n }: {\n customTrackedParams?: string[]\n maskPersonalDataProperties?: boolean\n customPersonalDataProperties?: string[] | undefined\n } = {}): Record<string, string> {\n if (!document) {\n return {}\n }\n\n const paramsToMask = maskPersonalDataProperties\n ? extendArray([], PERSONAL_DATA_CAMPAIGN_PARAMS, customPersonalDataProperties || [])\n : []\n\n return this._campaignParamsFromUrl(maskQueryParams(document.URL, paramsToMask, MASKED), customTrackedParams)\n },\n\n _campaignParamsFromUrl: function (url: string, customParams?: string[]): Record<string, string> {\n const campaign_keywords = CAMPAIGN_PARAMS.concat(customParams || [])\n\n const params: Record<string, any> = {}\n each(campaign_keywords, function (kwkey) {\n const kw = getQueryParam(url, kwkey)\n params[kwkey] = kw ? kw : null\n })\n\n return params\n },\n\n _searchEngine: function (referrer: string): string | null {\n if (!referrer) {\n return null\n } else {\n if (referrer.search(URL_REGEX_PREFIX + 'google.([^/?]*)') === 0) {\n return 'google'\n } else if (referrer.search(URL_REGEX_PREFIX + 'bing.com') === 0) {\n return 'bing'\n } else if (referrer.search(URL_REGEX_PREFIX + 'yahoo.com') === 0) {\n return 'yahoo'\n } else if (referrer.search(URL_REGEX_PREFIX + 'duckduckgo.com') === 0) {\n return 'duckduckgo'\n } else {\n return null\n }\n }\n },\n\n _searchInfoFromReferrer: function (referrer: string): Record<string, any> {\n const search = Info._searchEngine(referrer)\n const param = search != 'yahoo' ? 'q' : 'p'\n const ret: Record<string, any> = {}\n\n if (!isNull(search)) {\n ret['$search_engine'] = search\n\n const keyword = document ? getQueryParam(document.referrer, param) : ''\n if (keyword.length) {\n ret['ph_keyword'] = keyword\n }\n }\n\n return ret\n },\n\n searchInfo: function (): Record<string, any> {\n const referrer = document?.referrer\n if (!referrer) {\n return {}\n }\n return this._searchInfoFromReferrer(referrer)\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include keywords used in later checks.\n */\n browser: detectBrowser,\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n *\n * `navigator.vendor` is passed in and used to help with detecting certain browsers\n * NB `navigator.vendor` is deprecated and not present in every browser\n */\n browserVersion: detectBrowserVersion,\n\n browserLanguage: function (): string | undefined {\n return (\n navigator.language || // Any modern browser\n (navigator as Record<string, any>).userLanguage // IE11\n )\n },\n\n browserLanguagePrefix: function (): string | undefined {\n const browserLanguage = this.browserLanguage()\n return typeof browserLanguage === 'string' ? browserLanguage.split('-')[0] : undefined\n },\n\n os: detectOS,\n\n device: detectDevice,\n\n deviceType: detectDeviceType,\n\n referrer: function (): string {\n return document?.referrer || '$direct'\n },\n\n referringDomain: function (): string {\n if (!document?.referrer) {\n return '$direct'\n }\n return convertToURL(document.referrer)?.host || '$direct'\n },\n\n referrerInfo: function (): Record<string, any> {\n return {\n $referrer: this.referrer(),\n $referring_domain: this.referringDomain(),\n }\n },\n\n personInfo: function ({\n maskPersonalDataProperties,\n customPersonalDataProperties,\n }: {\n maskPersonalDataProperties?: boolean\n customPersonalDataProperties?: string[]\n } = {}) {\n const paramsToMask = maskPersonalDataProperties\n ? extendArray([], PERSONAL_DATA_CAMPAIGN_PARAMS, customPersonalDataProperties || [])\n : []\n const url = location?.href.substring(0, 1000)\n // we're being a bit more economical with bytes here because this is stored in the cookie\n return {\n r: this.referrer().substring(0, 1000),\n u: url ? maskQueryParams(url, paramsToMask, MASKED) : undefined,\n }\n },\n\n personPropsFromInfo: function (info: Record<string, any>): Record<string, any> {\n const { r: referrer, u: url } = info\n const referring_domain =\n referrer == null ? undefined : referrer == '$direct' ? '$direct' : convertToURL(referrer)?.host\n\n const props: Record<string, string | undefined> = {\n $referrer: referrer,\n $referring_domain: referring_domain,\n }\n if (url) {\n props['$current_url'] = url\n const location = convertToURL(url)\n props['$host'] = location?.host\n props['$pathname'] = location?.pathname\n const campaignParams = this._campaignParamsFromUrl(url)\n extend(props, campaignParams)\n }\n if (referrer) {\n const searchInfo = this._searchInfoFromReferrer(referrer)\n extend(props, searchInfo)\n }\n return props\n },\n\n initialPersonPropsFromInfo: function (info: Record<string, any>): Record<string, any> {\n const personProps = this.personPropsFromInfo(info)\n const props: Record<string, any> = {}\n each(personProps, function (val: any, key: string) {\n props[`$initial_${stripLeadingDollar(key)}`] = val\n })\n return props\n },\n\n timezone: function (): string | undefined {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone\n } catch {\n return undefined\n }\n },\n\n timezoneOffset: function (): number | undefined {\n try {\n return new Date().getTimezoneOffset()\n } catch {\n return undefined\n }\n },\n\n properties: function ({\n maskPersonalDataProperties,\n customPersonalDataProperties,\n }: {\n maskPersonalDataProperties?: boolean\n customPersonalDataProperties?: string[]\n } = {}): Properties {\n if (!userAgent) {\n return {}\n }\n const paramsToMask = maskPersonalDataProperties\n ? extendArray([], PERSONAL_DATA_CAMPAIGN_PARAMS, customPersonalDataProperties || [])\n : []\n const [os_name, os_version] = Info.os(userAgent)\n return extend(\n stripEmptyProperties({\n $os: os_name,\n $os_version: os_version,\n $browser: Info.browser(userAgent, navigator.vendor),\n $device: Info.device(userAgent),\n $device_type: Info.deviceType(userAgent),\n $timezone: Info.timezone(),\n $timezone_offset: Info.timezoneOffset(),\n }),\n {\n $current_url: maskQueryParams(location?.href, paramsToMask, MASKED),\n $host: location?.host,\n $pathname: location?.pathname,\n $raw_user_agent: userAgent.length > 1000 ? userAgent.substring(0, 997) + '...' : userAgent,\n $browser_version: Info.browserVersion(userAgent, navigator.vendor),\n $browser_language: Info.browserLanguage(),\n $browser_language_prefix: Info.browserLanguagePrefix(),\n $screen_height: window?.screen.height,\n $screen_width: window?.screen.width,\n $viewport_height: window?.innerHeight,\n $viewport_width: window?.innerWidth,\n $lib: 'web',\n $lib_version: Config.LIB_VERSION,\n $insert_id: Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10),\n $time: Date.now() / 1000, // epoch time in seconds\n }\n )\n },\n\n people_properties: function (): Properties {\n if (!userAgent) {\n return {}\n }\n\n const [os_name, os_version] = Info.os(userAgent)\n return extend(\n stripEmptyProperties({\n $os: os_name,\n $os_version: os_version,\n $browser: Info.browser(userAgent, navigator.vendor),\n }),\n {\n $browser_version: Info.browserVersion(userAgent, navigator.vendor),\n }\n )\n },\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "posthog-js",
3
- "version": "1.232.0",
3
+ "version": "1.232.2",
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",