@webex/internal-plugin-metrics 3.11.0 → 3.12.0-llmrefactor.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.
Files changed (74) hide show
  1. package/dist/automated-user.js +19 -0
  2. package/dist/automated-user.js.map +1 -0
  3. package/dist/batcher.js +3 -0
  4. package/dist/batcher.js.map +1 -1
  5. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js +639 -65
  6. package/dist/call-diagnostic/call-diagnostic-metrics-latencies.js.map +1 -1
  7. package/dist/call-diagnostic/call-diagnostic-metrics.js +168 -76
  8. package/dist/call-diagnostic/call-diagnostic-metrics.js.map +1 -1
  9. package/dist/call-diagnostic/call-diagnostic-metrics.util.js +18 -4
  10. package/dist/call-diagnostic/call-diagnostic-metrics.util.js.map +1 -1
  11. package/dist/call-diagnostic/config.js +17 -3
  12. package/dist/call-diagnostic/config.js.map +1 -1
  13. package/dist/config.js +1 -0
  14. package/dist/config.js.map +1 -1
  15. package/dist/generic-metrics.js +8 -6
  16. package/dist/generic-metrics.js.map +1 -1
  17. package/dist/index.js +22 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/metrics.js +1 -1
  20. package/dist/metrics.types.js +4 -0
  21. package/dist/metrics.types.js.map +1 -1
  22. package/dist/new-metrics.js +105 -26
  23. package/dist/new-metrics.js.map +1 -1
  24. package/dist/prelogin-metrics.js +106 -0
  25. package/dist/prelogin-metrics.js.map +1 -0
  26. package/dist/privacy-and-security-permission-enricher/constants.js +18 -0
  27. package/dist/privacy-and-security-permission-enricher/constants.js.map +1 -0
  28. package/dist/privacy-and-security-permission-enricher/index.js +143 -0
  29. package/dist/privacy-and-security-permission-enricher/index.js.map +1 -0
  30. package/dist/privacy-and-security-permission-enricher/types.js +7 -0
  31. package/dist/privacy-and-security-permission-enricher/types.js.map +1 -0
  32. package/dist/privacy-and-security-permission-enricher/utils.js +71 -0
  33. package/dist/privacy-and-security-permission-enricher/utils.js.map +1 -0
  34. package/dist/types/automated-user.d.ts +2 -0
  35. package/dist/types/call-diagnostic/call-diagnostic-metrics-latencies.d.ts +208 -5
  36. package/dist/types/call-diagnostic/call-diagnostic-metrics.d.ts +79 -15
  37. package/dist/types/call-diagnostic/call-diagnostic-metrics.util.d.ts +5 -0
  38. package/dist/types/call-diagnostic/config.d.ts +5 -0
  39. package/dist/types/config.d.ts +1 -0
  40. package/dist/types/index.d.ts +6 -3
  41. package/dist/types/metrics.types.d.ts +9 -4
  42. package/dist/types/new-metrics.d.ts +29 -1
  43. package/dist/types/prelogin-metrics.d.ts +47 -0
  44. package/dist/types/privacy-and-security-permission-enricher/constants.d.ts +6 -0
  45. package/dist/types/privacy-and-security-permission-enricher/index.d.ts +40 -0
  46. package/dist/types/privacy-and-security-permission-enricher/types.d.ts +14 -0
  47. package/dist/types/privacy-and-security-permission-enricher/utils.d.ts +5 -0
  48. package/package.json +12 -11
  49. package/src/automated-user.ts +16 -0
  50. package/src/batcher.js +4 -0
  51. package/src/call-diagnostic/call-diagnostic-metrics-latencies.ts +800 -75
  52. package/src/call-diagnostic/call-diagnostic-metrics.ts +102 -15
  53. package/src/call-diagnostic/call-diagnostic-metrics.util.ts +22 -2
  54. package/src/call-diagnostic/config.ts +15 -0
  55. package/src/config.js +1 -0
  56. package/src/generic-metrics.ts +6 -6
  57. package/src/index.ts +9 -0
  58. package/src/metrics.types.ts +27 -5
  59. package/src/new-metrics.ts +95 -6
  60. package/src/prelogin-metrics.ts +94 -0
  61. package/src/privacy-and-security-permission-enricher/constants.ts +33 -0
  62. package/src/privacy-and-security-permission-enricher/index.ts +142 -0
  63. package/src/privacy-and-security-permission-enricher/types.ts +21 -0
  64. package/src/privacy-and-security-permission-enricher/utils.ts +82 -0
  65. package/test/unit/spec/automated-user.ts +43 -0
  66. package/test/unit/spec/batcher.js +43 -0
  67. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-batcher.ts +47 -11
  68. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics-latencies.ts +1550 -416
  69. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.ts +887 -159
  70. package/test/unit/spec/call-diagnostic/call-diagnostic-metrics.util.ts +61 -3
  71. package/test/unit/spec/new-metrics.ts +183 -50
  72. package/test/unit/spec/prelogin-metrics-batcher.ts +71 -36
  73. package/test/unit/spec/prelogin-metrics.ts +132 -0
  74. package/test/unit/spec/privacy-and-security-permission-enricher.ts +318 -0
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
+ var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
5
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
6
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
7
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
8
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
9
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
10
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
11
+ _Object$defineProperty(exports, "__esModule", {
12
+ value: true
13
+ });
14
+ exports.default = void 0;
15
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
16
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
17
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
18
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
19
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
20
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
21
+ var _genericMetrics = _interopRequireDefault(require("./generic-metrics"));
22
+ function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
24
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
25
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
26
+ /**
27
+ * @description Util class to handle PreLogin Metrics
28
+ * @export
29
+ * @class PreLoginMetrics
30
+ */
31
+ var PreLoginMetrics = exports.default = /*#__PURE__*/function (_GenericMetrics) {
32
+ /**
33
+ * Constructor
34
+ * @param {PreLoginMetricsBatcher} preLoginMetricsBatcher - Pre-login metrics batcher
35
+ * @param {any} attrs - Attributes
36
+ * @param {any} options - Options
37
+ * @constructor
38
+ */
39
+ function PreLoginMetrics(preLoginMetricsBatcher) {
40
+ var _this;
41
+ var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
42
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
43
+ (0, _classCallCheck2.default)(this, PreLoginMetrics);
44
+ _this = _callSuper(this, PreLoginMetrics, [attrs, options]);
45
+ (0, _defineProperty2.default)(_this, "preLoginMetricsBatcher", void 0);
46
+ _this.preLoginMetricsBatcher = preLoginMetricsBatcher;
47
+ return _this;
48
+ }
49
+
50
+ /**
51
+ * Submit a business metric to our metrics endpoint.
52
+ * Routes to the correct table with the correct schema payload by table.
53
+ * @see https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA
54
+ * @param {Object} options - The options object
55
+ * @param {string} options.name - Name of the metric
56
+ * @param {string} options.preLoginId - ID to identify pre-login user
57
+ * @param {EventPayload} options.payload - User payload of the metric
58
+ * @param {EventPayload} [options.metadata] - Optional metadata to include outside of eventPayload.value
59
+ * @returns {Promise<void>} Promise that resolves when the metric is submitted
60
+ */
61
+ (0, _inherits2.default)(PreLoginMetrics, _GenericMetrics);
62
+ return (0, _createClass2.default)(PreLoginMetrics, [{
63
+ key: "submitPreLoginEvent",
64
+ value: function submitPreLoginEvent(_ref) {
65
+ var name = _ref.name,
66
+ preLoginId = _ref.preLoginId,
67
+ payload = _ref.payload,
68
+ metadata = _ref.metadata;
69
+ if (!metadata) {
70
+ metadata = {};
71
+ }
72
+ if (!metadata.appType) {
73
+ metadata.appType = 'Web Client';
74
+ }
75
+ var finalEvent = this.buildEvent(name, preLoginId, payload, metadata);
76
+ this.preLoginMetricsBatcher.savePreLoginId(preLoginId);
77
+ return this.preLoginMetricsBatcher.request(finalEvent);
78
+ }
79
+
80
+ /**
81
+ * Builds a formatted event object for metrics submission.
82
+ * @param {string} metricName - Metric name
83
+ * @param {string} preLoginId - Pre-login user identifier
84
+ * @param {EventPayload} payload - Metric payload data
85
+ * @param {EventPayload} metadata - Additional metadata to include in the event
86
+ * @returns {object} Formatted metrics event object with type, eventPayload, and timestamp
87
+ */
88
+ }, {
89
+ key: "buildEvent",
90
+ value: function buildEvent(metricName, preLoginId, payload, metadata) {
91
+ return {
92
+ type: ['business'],
93
+ eventPayload: {
94
+ metricName: metricName,
95
+ browserDetails: this.getBrowserDetails(),
96
+ context: this.getContext(),
97
+ timestamp: new Date().getTime(),
98
+ value: _objectSpread(_objectSpread({
99
+ preLoginId: preLoginId
100
+ }, metadata), payload)
101
+ }
102
+ };
103
+ }
104
+ }]);
105
+ }(_genericMetrics.default);
106
+ //# sourceMappingURL=prelogin-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_genericMetrics","_interopRequireDefault","require","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","PreLoginMetrics","exports","_GenericMetrics","preLoginMetricsBatcher","_this","attrs","undefined","options","_classCallCheck2","_inherits2","_createClass2","key","value","submitPreLoginEvent","_ref","name","preLoginId","payload","metadata","appType","finalEvent","buildEvent","savePreLoginId","request","metricName","type","eventPayload","browserDetails","getBrowserDetails","context","getContext","timestamp","Date","getTime","GenericMetrics"],"sources":["prelogin-metrics.ts"],"sourcesContent":["import GenericMetrics from './generic-metrics';\nimport {BusinessEvent, EventPayload} from './metrics.types';\nimport PreLoginMetricsBatcher from './prelogin-metrics-batcher';\n\n/**\n * @description Util class to handle PreLogin Metrics\n * @export\n * @class PreLoginMetrics\n */\nexport default class PreLoginMetrics extends GenericMetrics {\n private preLoginMetricsBatcher: typeof PreLoginMetricsBatcher;\n\n /**\n * Constructor\n * @param {PreLoginMetricsBatcher} preLoginMetricsBatcher - Pre-login metrics batcher\n * @param {any} attrs - Attributes\n * @param {any} options - Options\n * @constructor\n */\n constructor(\n preLoginMetricsBatcher: typeof PreLoginMetricsBatcher,\n attrs: any = {},\n options: {parent?: any} = {}\n ) {\n super(attrs, options);\n this.preLoginMetricsBatcher = preLoginMetricsBatcher;\n }\n\n /**\n * Submit a business metric to our metrics endpoint.\n * Routes to the correct table with the correct schema payload by table.\n * @see https://confluence-eng-gpk2.cisco.com/conf/display/WAP/Business+metrics++-%3E+ROMA\n * @param {Object} options - The options object\n * @param {string} options.name - Name of the metric\n * @param {string} options.preLoginId - ID to identify pre-login user\n * @param {EventPayload} options.payload - User payload of the metric\n * @param {EventPayload} [options.metadata] - Optional metadata to include outside of eventPayload.value\n * @returns {Promise<void>} Promise that resolves when the metric is submitted\n */\n public submitPreLoginEvent({\n name,\n preLoginId,\n payload,\n metadata,\n }: {\n name: string;\n preLoginId: string;\n payload: EventPayload;\n metadata?: EventPayload;\n }): Promise<void> {\n if (!metadata) {\n metadata = {};\n }\n if (!metadata.appType) {\n metadata.appType = 'Web Client';\n }\n\n const finalEvent = this.buildEvent(name, preLoginId, payload, metadata);\n\n this.preLoginMetricsBatcher.savePreLoginId(preLoginId);\n\n return this.preLoginMetricsBatcher.request(finalEvent);\n }\n\n /**\n * Builds a formatted event object for metrics submission.\n * @param {string} metricName - Metric name\n * @param {string} preLoginId - Pre-login user identifier\n * @param {EventPayload} payload - Metric payload data\n * @param {EventPayload} metadata - Additional metadata to include in the event\n * @returns {object} Formatted metrics event object with type, eventPayload, and timestamp\n */\n private buildEvent(\n metricName: string,\n preLoginId: string,\n payload: EventPayload,\n metadata: EventPayload\n ): BusinessEvent {\n return {\n type: ['business'],\n eventPayload: {\n metricName,\n browserDetails: this.getBrowserDetails(),\n context: this.getContext(),\n timestamp: new Date().getTime(),\n value: {\n preLoginId,\n ...metadata,\n ...payload,\n },\n },\n };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA+C,SAAAC,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,gCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,gCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAqB,WAAAnB,CAAA,EAAAG,CAAA,EAAAL,CAAA,WAAAK,CAAA,OAAAiB,gBAAA,CAAAL,OAAA,EAAAZ,CAAA,OAAAkB,2BAAA,CAAAN,OAAA,EAAAf,CAAA,EAAAsB,yBAAA,KAAAC,kBAAA,CAAApB,CAAA,EAAAL,CAAA,YAAAsB,gBAAA,CAAAL,OAAA,EAAAf,CAAA,EAAAwB,WAAA,IAAArB,CAAA,CAAAK,KAAA,CAAAR,CAAA,EAAAF,CAAA;AAAA,SAAAwB,0BAAA,cAAAtB,CAAA,IAAAyB,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAL,kBAAA,CAAAE,OAAA,iCAAAzB,CAAA,aAAAsB,yBAAA,YAAAA,0BAAA,aAAAtB,CAAA;AAI/C;AACA;AACA;AACA;AACA;AAJA,IAKqB6B,eAAe,GAAAC,OAAA,CAAAf,OAAA,0BAAAgB,eAAA;EAGlC;AACF;AACA;AACA;AACA;AACA;AACA;EACE,SAAAF,gBACEG,sBAAqD,EAGrD;IAAA,IAAAC,KAAA;IAAA,IAFAC,KAAU,GAAAxB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAyB,SAAA,GAAAzB,SAAA,MAAG,CAAC,CAAC;IAAA,IACf0B,OAAuB,GAAA1B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAyB,SAAA,GAAAzB,SAAA,MAAG,CAAC,CAAC;IAAA,IAAA2B,gBAAA,CAAAtB,OAAA,QAAAc,eAAA;IAE5BI,KAAA,GAAAd,UAAA,OAAAU,eAAA,GAAMK,KAAK,EAAEE,OAAO;IAAE,IAAAtB,gBAAA,CAAAC,OAAA,EAAAkB,KAAA;IACtBA,KAAA,CAAKD,sBAAsB,GAAGA,sBAAsB;IAAC,OAAAC,KAAA;EACvD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAVE,IAAAK,UAAA,CAAAvB,OAAA,EAAAc,eAAA,EAAAE,eAAA;EAAA,WAAAQ,aAAA,CAAAxB,OAAA,EAAAc,eAAA;IAAAW,GAAA;IAAAC,KAAA,EAWA,SAAOC,mBAAmBA,CAAAC,IAAA,EAUR;MAAA,IAThBC,IAAI,GAAAD,IAAA,CAAJC,IAAI;QACJC,UAAU,GAAAF,IAAA,CAAVE,UAAU;QACVC,OAAO,GAAAH,IAAA,CAAPG,OAAO;QACPC,QAAQ,GAAAJ,IAAA,CAARI,QAAQ;MAOR,IAAI,CAACA,QAAQ,EAAE;QACbA,QAAQ,GAAG,CAAC,CAAC;MACf;MACA,IAAI,CAACA,QAAQ,CAACC,OAAO,EAAE;QACrBD,QAAQ,CAACC,OAAO,GAAG,YAAY;MACjC;MAEA,IAAMC,UAAU,GAAG,IAAI,CAACC,UAAU,CAACN,IAAI,EAAEC,UAAU,EAAEC,OAAO,EAAEC,QAAQ,CAAC;MAEvE,IAAI,CAACf,sBAAsB,CAACmB,cAAc,CAACN,UAAU,CAAC;MAEtD,OAAO,IAAI,CAACb,sBAAsB,CAACoB,OAAO,CAACH,UAAU,CAAC;IACxD;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAT,GAAA;IAAAC,KAAA,EAQA,SAAQS,UAAUA,CAChBG,UAAkB,EAClBR,UAAkB,EAClBC,OAAqB,EACrBC,QAAsB,EACP;MACf,OAAO;QACLO,IAAI,EAAE,CAAC,UAAU,CAAC;QAClBC,YAAY,EAAE;UACZF,UAAU,EAAVA,UAAU;UACVG,cAAc,EAAE,IAAI,CAACC,iBAAiB,CAAC,CAAC;UACxCC,OAAO,EAAE,IAAI,CAACC,UAAU,CAAC,CAAC;UAC1BC,SAAS,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;UAC/BrB,KAAK,EAAAhC,aAAA,CAAAA,aAAA;YACHoC,UAAU,EAAVA;UAAU,GACPE,QAAQ,GACRD,OAAO;QAEd;MACF,CAAC;IACH;EAAC;AAAA,EAnF0CiB,uBAAc","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.NO_PERMISSION_ENRICHMENT = exports.MEDIA_TX_PERMISSION_EVENTS = exports.FINAL_PERMISSION_EVENTS = exports.CONTENT_SHARE_PERMISSION_EVENTS = exports.CAMERA_AND_MICROPHONE_PERMISSION_EVENTS = void 0;
9
+ var _set = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/set"));
10
+ var CAMERA_AND_MICROPHONE_PERMISSION_EVENTS = exports.CAMERA_AND_MICROPHONE_PERMISSION_EVENTS = new _set.default(['client.call.initiated', 'client.media.capabilities', 'client.ice.end', 'client.locus.join.request', 'client.locus.join.response', 'client.media-engine.ready']);
11
+ var MEDIA_TX_PERMISSION_EVENTS = exports.MEDIA_TX_PERMISSION_EVENTS = new _set.default(['client.media.tx.start', 'client.media.tx.stop']);
12
+ var CONTENT_SHARE_PERMISSION_EVENTS = exports.CONTENT_SHARE_PERMISSION_EVENTS = new _set.default(['client.share.initiated', 'client.share.floor-grant.request', 'client.share.floor-granted.local']);
13
+ var FINAL_PERMISSION_EVENTS = exports.FINAL_PERMISSION_EVENTS = new _set.default(['client.call.leave', 'client.call.remote-ended', 'client.call.aborted']);
14
+ var NO_PERMISSION_ENRICHMENT = exports.NO_PERMISSION_ENRICHMENT = {
15
+ resources: [],
16
+ terminal: false
17
+ };
18
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CAMERA_AND_MICROPHONE_PERMISSION_EVENTS","exports","_set","default","MEDIA_TX_PERMISSION_EVENTS","CONTENT_SHARE_PERMISSION_EVENTS","FINAL_PERMISSION_EVENTS","NO_PERMISSION_ENRICHMENT","resources","terminal"],"sources":["constants.ts"],"sourcesContent":["import type {ClientEvent} from '../metrics.types';\nimport type {PermissionEnrichmentPolicy} from './types';\n\nexport const CAMERA_AND_MICROPHONE_PERMISSION_EVENTS = new Set<ClientEvent['name']>([\n 'client.call.initiated',\n 'client.media.capabilities',\n 'client.ice.end',\n 'client.locus.join.request',\n 'client.locus.join.response',\n 'client.media-engine.ready',\n]);\n\nexport const MEDIA_TX_PERMISSION_EVENTS = new Set<ClientEvent['name']>([\n 'client.media.tx.start',\n 'client.media.tx.stop',\n]);\n\nexport const CONTENT_SHARE_PERMISSION_EVENTS = new Set<ClientEvent['name']>([\n 'client.share.initiated',\n 'client.share.floor-grant.request',\n 'client.share.floor-granted.local',\n]);\n\nexport const FINAL_PERMISSION_EVENTS = new Set<ClientEvent['name']>([\n 'client.call.leave',\n 'client.call.remote-ended',\n 'client.call.aborted',\n]);\n\nexport const NO_PERMISSION_ENRICHMENT: PermissionEnrichmentPolicy = {\n resources: [],\n terminal: false,\n};\n"],"mappings":";;;;;;;;;AAGO,IAAMA,uCAAuC,GAAAC,OAAA,CAAAD,uCAAA,GAAG,IAAAE,IAAA,CAAAC,OAAA,CAA6B,CAClF,uBAAuB,EACvB,2BAA2B,EAC3B,gBAAgB,EAChB,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,CAC5B,CAAC;AAEK,IAAMC,0BAA0B,GAAAH,OAAA,CAAAG,0BAAA,GAAG,IAAAF,IAAA,CAAAC,OAAA,CAA6B,CACrE,uBAAuB,EACvB,sBAAsB,CACvB,CAAC;AAEK,IAAME,+BAA+B,GAAAJ,OAAA,CAAAI,+BAAA,GAAG,IAAAH,IAAA,CAAAC,OAAA,CAA6B,CAC1E,wBAAwB,EACxB,kCAAkC,EAClC,kCAAkC,CACnC,CAAC;AAEK,IAAMG,uBAAuB,GAAAL,OAAA,CAAAK,uBAAA,GAAG,IAAAJ,IAAA,CAAAC,OAAA,CAA6B,CAClE,mBAAmB,EACnB,0BAA0B,EAC1B,qBAAqB,CACtB,CAAC;AAEK,IAAMI,wBAAoD,GAAAN,OAAA,CAAAM,wBAAA,GAAG;EAClEC,SAAS,EAAE,EAAE;EACbC,QAAQ,EAAE;AACZ,CAAC","ignoreList":[]}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
4
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
5
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
6
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
7
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
8
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
9
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
10
+ _Object$defineProperty(exports, "__esModule", {
11
+ value: true
12
+ });
13
+ exports.default = exports.PERMISSION_ENRICHMENT_RULES = void 0;
14
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
15
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
16
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
17
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
18
+ var _constants = require("./constants");
19
+ var _utils = require("./utils");
20
+ function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
22
+ var PERMISSION_ENRICHMENT_RULES = exports.PERMISSION_ENRICHMENT_RULES = [{
23
+ events: _constants.CAMERA_AND_MICROPHONE_PERMISSION_EVENTS,
24
+ resolve: function resolve() {
25
+ return {
26
+ resources: ['camera', 'microphone'],
27
+ terminal: false
28
+ };
29
+ }
30
+ }, {
31
+ events: _constants.MEDIA_TX_PERMISSION_EVENTS,
32
+ resolve: function resolve(payload) {
33
+ return {
34
+ resources: (0, _utils.resolveMediaResources)(payload),
35
+ terminal: false
36
+ };
37
+ }
38
+ }, {
39
+ events: _constants.CONTENT_SHARE_PERMISSION_EVENTS,
40
+ resolve: function resolve(payload) {
41
+ return {
42
+ resources: (0, _utils.resolveContentShareResources)(payload),
43
+ terminal: false
44
+ };
45
+ }
46
+ }, {
47
+ events: _constants.FINAL_PERMISSION_EVENTS,
48
+ resolve: function resolve() {
49
+ return {
50
+ resources: ['camera', 'microphone', 'contentShare'],
51
+ terminal: true
52
+ };
53
+ }
54
+ }];
55
+ var resolvePermissionEnrichmentPolicy = function resolvePermissionEnrichmentPolicy(name, payload) {
56
+ var _PERMISSION_ENRICHMEN, _PERMISSION_ENRICHMEN2;
57
+ return (_PERMISSION_ENRICHMEN = (_PERMISSION_ENRICHMEN2 = PERMISSION_ENRICHMENT_RULES.find(function (_ref) {
58
+ var events = _ref.events;
59
+ return events.has(name);
60
+ })) === null || _PERMISSION_ENRICHMEN2 === void 0 ? void 0 : _PERMISSION_ENRICHMEN2.resolve(payload)) !== null && _PERMISSION_ENRICHMEN !== void 0 ? _PERMISSION_ENRICHMEN : _constants.NO_PERMISSION_ENRICHMENT;
61
+ };
62
+
63
+ /**
64
+ * Enriches eligible client events with relevant browser permission changes.
65
+ */
66
+ var PrivacyAndSecurityPermissionEnricher = exports.default = /*#__PURE__*/function () {
67
+ /**
68
+ * Creates a permission enricher.
69
+ * @param {Function} onEnrichmentError permission enrichment error handler
70
+ */
71
+ function PrivacyAndSecurityPermissionEnricher(onEnrichmentError) {
72
+ (0, _classCallCheck2.default)(this, PrivacyAndSecurityPermissionEnricher);
73
+ (0, _defineProperty2.default)(this, "permission", void 0);
74
+ (0, _defineProperty2.default)(this, "lastReported", new _map.default());
75
+ (0, _defineProperty2.default)(this, "onEnrichmentError", void 0);
76
+ this.onEnrichmentError = onEnrichmentError;
77
+ }
78
+
79
+ /**
80
+ * Stores the latest normalized browser permission state.
81
+ * @param {PrivacyAndSecurityPermission} permission permission snapshot
82
+ * @returns {void}
83
+ */
84
+ return (0, _createClass2.default)(PrivacyAndSecurityPermissionEnricher, [{
85
+ key: "setPermission",
86
+ value: function setPermission(permission) {
87
+ this.permission = (0, _utils.projectPrivacyAndSecurityPermission)(permission, ['camera', 'microphone', 'contentShare']);
88
+ }
89
+
90
+ /**
91
+ * Returns the original payload or a copy enriched with relevant permission changes.
92
+ * @param {PermissionEnrichmentContext} context event context and permission history scope
93
+ * @returns {ClientEventPayload | undefined}
94
+ */
95
+ }, {
96
+ key: "enrich",
97
+ value: function enrich(_ref2) {
98
+ var name = _ref2.name,
99
+ payload = _ref2.payload,
100
+ scope = _ref2.scope;
101
+ var policy = resolvePermissionEnrichmentPolicy(name, payload);
102
+ try {
103
+ var _this$lastReported$ge;
104
+ if ((payload === null || payload === void 0 ? void 0 : payload.privacyAndSecurityPermission) !== undefined) {
105
+ // An explicitly supplied permission payload is authoritative for this event.
106
+ if (!policy.terminal) {
107
+ this.lastReported.set(scope, _objectSpread(_objectSpread({}, this.lastReported.get(scope)), payload.privacyAndSecurityPermission));
108
+ }
109
+ return payload;
110
+ }
111
+ if (policy.resources.length === 0) {
112
+ return payload;
113
+ }
114
+ var projectedPermission = this.permission ? (0, _utils.projectPrivacyAndSecurityPermission)(this.permission, policy.resources) : undefined;
115
+ if (!projectedPermission) {
116
+ return payload;
117
+ }
118
+ if (policy.terminal) {
119
+ return _objectSpread(_objectSpread({}, payload), {}, {
120
+ privacyAndSecurityPermission: projectedPermission
121
+ });
122
+ }
123
+ var lastReported = (_this$lastReported$ge = this.lastReported.get(scope)) !== null && _this$lastReported$ge !== void 0 ? _this$lastReported$ge : {};
124
+ var changedPermission = (0, _utils.getChangedPermission)(projectedPermission, lastReported);
125
+ if (!changedPermission) {
126
+ return payload;
127
+ }
128
+ this.lastReported.set(scope, _objectSpread(_objectSpread({}, lastReported), changedPermission));
129
+ return _objectSpread(_objectSpread({}, payload), {}, {
130
+ privacyAndSecurityPermission: changedPermission
131
+ });
132
+ } catch (error) {
133
+ this.onEnrichmentError(error);
134
+ return payload;
135
+ } finally {
136
+ if (policy.terminal) {
137
+ this.lastReported.delete(scope);
138
+ }
139
+ }
140
+ }
141
+ }]);
142
+ }();
143
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_constants","require","_utils","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","PERMISSION_ENRICHMENT_RULES","exports","events","CAMERA_AND_MICROPHONE_PERMISSION_EVENTS","resolve","resources","terminal","MEDIA_TX_PERMISSION_EVENTS","payload","resolveMediaResources","CONTENT_SHARE_PERMISSION_EVENTS","resolveContentShareResources","FINAL_PERMISSION_EVENTS","resolvePermissionEnrichmentPolicy","name","_PERMISSION_ENRICHMEN","_PERMISSION_ENRICHMEN2","find","_ref","has","NO_PERMISSION_ENRICHMENT","PrivacyAndSecurityPermissionEnricher","onEnrichmentError","_classCallCheck2","_map","_createClass2","key","value","setPermission","permission","projectPrivacyAndSecurityPermission","enrich","_ref2","scope","policy","_this$lastReported$ge","privacyAndSecurityPermission","undefined","lastReported","set","get","projectedPermission","changedPermission","getChangedPermission","error","delete"],"sources":["index.ts"],"sourcesContent":["import type {ClientEventPayload, PrivacyAndSecurityPermission} from '../metrics.types';\nimport {\n CAMERA_AND_MICROPHONE_PERMISSION_EVENTS,\n CONTENT_SHARE_PERMISSION_EVENTS,\n FINAL_PERMISSION_EVENTS,\n MEDIA_TX_PERMISSION_EVENTS,\n NO_PERMISSION_ENRICHMENT,\n} from './constants';\nimport type {\n PermissionEnrichmentContext,\n PermissionEnrichmentPolicy,\n PermissionEnrichmentRule,\n} from './types';\nimport {\n getChangedPermission,\n projectPrivacyAndSecurityPermission,\n resolveContentShareResources,\n resolveMediaResources,\n} from './utils';\n\nexport const PERMISSION_ENRICHMENT_RULES = [\n {\n events: CAMERA_AND_MICROPHONE_PERMISSION_EVENTS,\n resolve: () => ({resources: ['camera', 'microphone'], terminal: false}),\n },\n {\n events: MEDIA_TX_PERMISSION_EVENTS,\n resolve: (payload) => ({resources: resolveMediaResources(payload), terminal: false}),\n },\n {\n events: CONTENT_SHARE_PERMISSION_EVENTS,\n resolve: (payload) => ({\n resources: resolveContentShareResources(payload),\n terminal: false,\n }),\n },\n {\n events: FINAL_PERMISSION_EVENTS,\n resolve: () => ({resources: ['camera', 'microphone', 'contentShare'], terminal: true}),\n },\n] satisfies readonly PermissionEnrichmentRule[];\n\nconst resolvePermissionEnrichmentPolicy = (\n name: PermissionEnrichmentContext['name'],\n payload?: ClientEventPayload\n): PermissionEnrichmentPolicy =>\n PERMISSION_ENRICHMENT_RULES.find(({events}) => events.has(name))?.resolve(payload) ??\n NO_PERMISSION_ENRICHMENT;\n\n/**\n * Enriches eligible client events with relevant browser permission changes.\n */\nexport default class PrivacyAndSecurityPermissionEnricher {\n private permission?: PrivacyAndSecurityPermission;\n\n private lastReported = new Map<string, PrivacyAndSecurityPermission>();\n\n private readonly onEnrichmentError: (error: unknown) => void;\n\n /**\n * Creates a permission enricher.\n * @param {Function} onEnrichmentError permission enrichment error handler\n */\n constructor(onEnrichmentError: (error: unknown) => void) {\n this.onEnrichmentError = onEnrichmentError;\n }\n\n /**\n * Stores the latest normalized browser permission state.\n * @param {PrivacyAndSecurityPermission} permission permission snapshot\n * @returns {void}\n */\n public setPermission(permission: PrivacyAndSecurityPermission): void {\n this.permission = projectPrivacyAndSecurityPermission(permission, [\n 'camera',\n 'microphone',\n 'contentShare',\n ]);\n }\n\n /**\n * Returns the original payload or a copy enriched with relevant permission changes.\n * @param {PermissionEnrichmentContext} context event context and permission history scope\n * @returns {ClientEventPayload | undefined}\n */\n public enrich({\n name,\n payload,\n scope,\n }: PermissionEnrichmentContext): ClientEventPayload | undefined {\n const policy = resolvePermissionEnrichmentPolicy(name, payload);\n\n try {\n if (payload?.privacyAndSecurityPermission !== undefined) {\n // An explicitly supplied permission payload is authoritative for this event.\n if (!policy.terminal) {\n this.lastReported.set(scope, {\n ...this.lastReported.get(scope),\n ...(payload.privacyAndSecurityPermission as PrivacyAndSecurityPermission),\n });\n }\n\n return payload;\n }\n\n if (policy.resources.length === 0) {\n return payload;\n }\n\n const projectedPermission = this.permission\n ? projectPrivacyAndSecurityPermission(this.permission, policy.resources)\n : undefined;\n\n if (!projectedPermission) {\n return payload;\n }\n\n if (policy.terminal) {\n return {...payload, privacyAndSecurityPermission: projectedPermission};\n }\n\n const lastReported = this.lastReported.get(scope) ?? {};\n const changedPermission = getChangedPermission(projectedPermission, lastReported);\n\n if (!changedPermission) {\n return payload;\n }\n\n this.lastReported.set(scope, {...lastReported, ...changedPermission});\n\n return {...payload, privacyAndSecurityPermission: changedPermission};\n } catch (error) {\n this.onEnrichmentError(error);\n\n return payload;\n } finally {\n if (policy.terminal) {\n this.lastReported.delete(scope);\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type {\n ClientEvent,\n ClientEventPayload,\n PrivacyAndSecurityPermissionResource,\n} from '../metrics.types';\n\nexport type PermissionEnrichmentPolicy = {\n resources: readonly PrivacyAndSecurityPermissionResource[];\n terminal: boolean;\n};\n\nexport type PermissionEnrichmentRule = {\n events: ReadonlySet<ClientEvent['name']>;\n resolve: (payload?: ClientEventPayload) => PermissionEnrichmentPolicy;\n};\n\nexport type PermissionEnrichmentContext = {\n name: ClientEvent['name'];\n payload?: ClientEventPayload;\n scope: string;\n};\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
4
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
5
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
6
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
7
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
8
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
9
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
10
+ _Object$defineProperty(exports, "__esModule", {
11
+ value: true
12
+ });
13
+ exports.resolveMediaResources = exports.resolveContentShareResources = exports.projectPrivacyAndSecurityPermission = exports.getChangedPermission = void 0;
14
+ var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
16
+ var _lodash = require("lodash");
17
+ function ownKeys(e, r) { var t = _Object$keys2(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
18
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
19
+ var resolveMediaResources = exports.resolveMediaResources = function resolveMediaResources(payload) {
20
+ switch (payload === null || payload === void 0 ? void 0 : payload.mediaType) {
21
+ case 'audio':
22
+ return ['microphone'];
23
+ case 'video':
24
+ return ['camera'];
25
+ case 'share':
26
+ return ['contentShare'];
27
+ default:
28
+ return [];
29
+ }
30
+ };
31
+ var resolveContentShareResources = exports.resolveContentShareResources = function resolveContentShareResources(payload) {
32
+ if ((payload === null || payload === void 0 ? void 0 : payload.mediaType) !== 'share') {
33
+ return [];
34
+ }
35
+ return ['contentShare'];
36
+ };
37
+ var copyPermissionState = function copyPermissionState(source, target, resource) {
38
+ switch (resource) {
39
+ case 'camera':
40
+ if (source.camera) {
41
+ target.camera = _objectSpread({}, source.camera);
42
+ }
43
+ break;
44
+ case 'microphone':
45
+ if (source.microphone) {
46
+ target.microphone = _objectSpread({}, source.microphone);
47
+ }
48
+ break;
49
+ case 'contentShare':
50
+ if (source.contentShare) {
51
+ target.contentShare = _objectSpread({}, source.contentShare);
52
+ }
53
+ break;
54
+ default:
55
+ break;
56
+ }
57
+ };
58
+ var projectPrivacyAndSecurityPermission = exports.projectPrivacyAndSecurityPermission = function projectPrivacyAndSecurityPermission(permission, resources) {
59
+ var projectedPermission = {};
60
+ resources.forEach(function (resource) {
61
+ copyPermissionState(permission, projectedPermission, resource);
62
+ });
63
+ return (0, _keys.default)(projectedPermission).length > 0 ? projectedPermission : undefined;
64
+ };
65
+ var getChangedPermission = exports.getChangedPermission = function getChangedPermission(current, previous) {
66
+ var changedResources = (0, _keys.default)(current).filter(function (resource) {
67
+ return !(0, _lodash.isEqual)(current[resource], previous[resource]);
68
+ });
69
+ return projectPrivacyAndSecurityPermission(current, changedResources);
70
+ };
71
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_lodash","require","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","resolveMediaResources","exports","payload","mediaType","resolveContentShareResources","copyPermissionState","source","target","resource","camera","microphone","contentShare","projectPrivacyAndSecurityPermission","permission","resources","projectedPermission","_keys","undefined","getChangedPermission","current","previous","changedResources","isEqual"],"sources":["utils.ts"],"sourcesContent":["import {isEqual} from 'lodash';\n\nimport type {\n ClientEventPayload,\n PrivacyAndSecurityPermission,\n PrivacyAndSecurityPermissionResource,\n} from '../metrics.types';\n\nexport const resolveMediaResources = (\n payload?: ClientEventPayload\n): PrivacyAndSecurityPermissionResource[] => {\n switch (payload?.mediaType) {\n case 'audio':\n return ['microphone'];\n case 'video':\n return ['camera'];\n case 'share':\n return ['contentShare'];\n default:\n return [];\n }\n};\n\nexport const resolveContentShareResources = (\n payload?: ClientEventPayload\n): PrivacyAndSecurityPermissionResource[] => {\n if (payload?.mediaType !== 'share') {\n return [];\n }\n\n return ['contentShare'];\n};\n\nconst copyPermissionState = (\n source: PrivacyAndSecurityPermission,\n target: PrivacyAndSecurityPermission,\n resource: PrivacyAndSecurityPermissionResource\n): void => {\n switch (resource) {\n case 'camera':\n if (source.camera) {\n target.camera = {...source.camera};\n }\n break;\n case 'microphone':\n if (source.microphone) {\n target.microphone = {...source.microphone};\n }\n break;\n case 'contentShare':\n if (source.contentShare) {\n target.contentShare = {...source.contentShare};\n }\n break;\n default:\n break;\n }\n};\n\nexport const projectPrivacyAndSecurityPermission = (\n permission: PrivacyAndSecurityPermission,\n resources: readonly PrivacyAndSecurityPermissionResource[]\n): PrivacyAndSecurityPermission | undefined => {\n const projectedPermission: PrivacyAndSecurityPermission = {};\n\n resources.forEach((resource) => {\n copyPermissionState(permission, projectedPermission, resource);\n });\n\n return Object.keys(projectedPermission).length > 0 ? projectedPermission : undefined;\n};\n\nexport const getChangedPermission = (\n current: PrivacyAndSecurityPermission,\n previous: PrivacyAndSecurityPermission\n): PrivacyAndSecurityPermission | undefined => {\n const changedResources = (Object.keys(current) as PrivacyAndSecurityPermissionResource[]).filter(\n (resource) => !isEqual(current[resource], previous[resource])\n );\n\n return projectPrivacyAndSecurityPermission(current, changedResources);\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export declare const isAutomatedUserAgent: (userAgent?: string | null) => boolean;
2
+ export declare const isAutomatedUser: () => boolean;