@webex/internal-plugin-metrics 3.12.0-llmrefactor.1 → 3.12.0-llmrefactor.3
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/README.md +36 -0
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics.js +1 -1
- package/dist/metrics.types.js.map +1 -1
- package/dist/new-metrics.js +47 -11
- package/dist/new-metrics.js.map +1 -1
- package/dist/privacy-and-security-permission-enricher/constants.js +18 -0
- package/dist/privacy-and-security-permission-enricher/constants.js.map +1 -0
- package/dist/privacy-and-security-permission-enricher/index.js +143 -0
- package/dist/privacy-and-security-permission-enricher/index.js.map +1 -0
- package/dist/privacy-and-security-permission-enricher/types.js +7 -0
- package/dist/privacy-and-security-permission-enricher/types.js.map +1 -0
- package/dist/privacy-and-security-permission-enricher/utils.js +71 -0
- package/dist/privacy-and-security-permission-enricher/utils.js.map +1 -0
- package/dist/types/config.d.ts +3 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/metrics.types.d.ts +3 -0
- package/dist/types/new-metrics.d.ts +13 -1
- package/dist/types/privacy-and-security-permission-enricher/constants.d.ts +6 -0
- package/dist/types/privacy-and-security-permission-enricher/index.d.ts +40 -0
- package/dist/types/privacy-and-security-permission-enricher/types.d.ts +14 -0
- package/dist/types/privacy-and-security-permission-enricher/utils.d.ts +5 -0
- package/dist/types/unhandled-exception-telemetry/index.d.ts +60 -0
- package/dist/types/unhandled-exception-telemetry/utils.d.ts +6 -0
- package/dist/unhandled-exception-telemetry/index.js +330 -0
- package/dist/unhandled-exception-telemetry/index.js.map +1 -0
- package/dist/unhandled-exception-telemetry/utils.js +105 -0
- package/dist/unhandled-exception-telemetry/utils.js.map +1 -0
- package/package.json +8 -8
- package/src/config.js +3 -0
- package/src/index.ts +2 -0
- package/src/metrics.types.ts +9 -0
- package/src/new-metrics.ts +44 -2
- package/src/privacy-and-security-permission-enricher/constants.ts +33 -0
- package/src/privacy-and-security-permission-enricher/index.ts +142 -0
- package/src/privacy-and-security-permission-enricher/types.ts +21 -0
- package/src/privacy-and-security-permission-enricher/utils.ts +82 -0
- package/src/unhandled-exception-telemetry/index.ts +403 -0
- package/src/unhandled-exception-telemetry/utils.ts +101 -0
- package/test/unit/spec/new-metrics.ts +168 -52
- package/test/unit/spec/privacy-and-security-permission-enricher.ts +318 -0
- package/test/unit/spec/unhandled-exception-telemetry/utils.ts +109 -0
- package/test/unit/spec/unhandled-exception-telemetry.ts +688 -0
|
@@ -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 @@
|
|
|
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":";;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAA+B,SAAAC,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,aAAA,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;AAQxB,IAAMqB,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAG,SAAxBA,qBAAqBA,CAChCE,OAA4B,EACe;EAC3C,QAAQA,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,SAAS;IACxB,KAAK,OAAO;MACV,OAAO,CAAC,YAAY,CAAC;IACvB,KAAK,OAAO;MACV,OAAO,CAAC,QAAQ,CAAC;IACnB,KAAK,OAAO;MACV,OAAO,CAAC,cAAc,CAAC;IACzB;MACE,OAAO,EAAE;EACb;AACF,CAAC;AAEM,IAAMC,4BAA4B,GAAAH,OAAA,CAAAG,4BAAA,GAAG,SAA/BA,4BAA4BA,CACvCF,OAA4B,EACe;EAC3C,IAAI,CAAAA,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,SAAS,MAAK,OAAO,EAAE;IAClC,OAAO,EAAE;EACX;EAEA,OAAO,CAAC,cAAc,CAAC;AACzB,CAAC;AAED,IAAME,mBAAmB,GAAG,SAAtBA,mBAAmBA,CACvBC,MAAoC,EACpCC,MAAoC,EACpCC,QAA8C,EACrC;EACT,QAAQA,QAAQ;IACd,KAAK,QAAQ;MACX,IAAIF,MAAM,CAACG,MAAM,EAAE;QACjBF,MAAM,CAACE,MAAM,GAAAnB,aAAA,KAAOgB,MAAM,CAACG,MAAM,CAAC;MACpC;MACA;IACF,KAAK,YAAY;MACf,IAAIH,MAAM,CAACI,UAAU,EAAE;QACrBH,MAAM,CAACG,UAAU,GAAApB,aAAA,KAAOgB,MAAM,CAACI,UAAU,CAAC;MAC5C;MACA;IACF,KAAK,cAAc;MACjB,IAAIJ,MAAM,CAACK,YAAY,EAAE;QACvBJ,MAAM,CAACI,YAAY,GAAArB,aAAA,KAAOgB,MAAM,CAACK,YAAY,CAAC;MAChD;MACA;IACF;MACE;EACJ;AACF,CAAC;AAEM,IAAMC,mCAAmC,GAAAX,OAAA,CAAAW,mCAAA,GAAG,SAAtCA,mCAAmCA,CAC9CC,UAAwC,EACxCC,SAA0D,EACb;EAC7C,IAAMC,mBAAiD,GAAG,CAAC,CAAC;EAE5DD,SAAS,CAACpB,OAAO,CAAC,UAACc,QAAQ,EAAK;IAC9BH,mBAAmB,CAACQ,UAAU,EAAEE,mBAAmB,EAAEP,QAAQ,CAAC;EAChE,CAAC,CAAC;EAEF,OAAO,IAAAQ,KAAA,CAAApB,OAAA,EAAYmB,mBAAmB,CAAC,CAACvB,MAAM,GAAG,CAAC,GAAGuB,mBAAmB,GAAGE,SAAS;AACtF,CAAC;AAEM,IAAMC,oBAAoB,GAAAjB,OAAA,CAAAiB,oBAAA,GAAG,SAAvBA,oBAAoBA,CAC/BC,OAAqC,EACrCC,QAAsC,EACO;EAC7C,IAAMC,gBAAgB,GAAI,IAAAL,KAAA,CAAApB,OAAA,EAAYuB,OAAO,CAAC,CAA4ClC,MAAM,CAC9F,UAACuB,QAAQ;IAAA,OAAK,CAAC,IAAAc,eAAO,EAACH,OAAO,CAACX,QAAQ,CAAC,EAAEY,QAAQ,CAACZ,QAAQ,CAAC,CAAC;EAAA,CAC/D,CAAC;EAED,OAAOI,mCAAmC,CAACO,OAAO,EAAEE,gBAAgB,CAAC;AACvE,CAAC","ignoreList":[]}
|
package/dist/types/config.d.ts
CHANGED
package/dist/types/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import config from './config';
|
|
|
5
5
|
import NewMetrics from './new-metrics';
|
|
6
6
|
import * as Utils from './utils';
|
|
7
7
|
import * as AutomatedUserUtils from './automated-user';
|
|
8
|
-
import { ClientEvent, ClientEventLeaveReason, SubmitBehavioralEvent, SubmitClientEvent, SubmitInternalEvent, SubmitOperationalEvent, SubmitBusinessEvent, SubmitMQE, PreComputedLatencies, SubmitFeatureEvent, LocusSyncLatencyEventName } from './metrics.types';
|
|
8
|
+
import { ClientEvent, ClientEventLeaveReason, SubmitBehavioralEvent, SubmitClientEvent, SubmitInternalEvent, SubmitOperationalEvent, SubmitBusinessEvent, SubmitMQE, PreComputedLatencies, SubmitFeatureEvent, LocusSyncLatencyEventName, PrivacyAndSecurityPermission } from './metrics.types';
|
|
9
9
|
import * as CALL_DIAGNOSTIC_CONFIG from './call-diagnostic/config';
|
|
10
10
|
import * as CallDiagnosticUtils from './call-diagnostic/call-diagnostic-metrics.util';
|
|
11
11
|
import CallDiagnosticMetrics from './call-diagnostic/call-diagnostic-metrics';
|
|
@@ -18,4 +18,4 @@ import PreLoginMetrics from './prelogin-metrics';
|
|
|
18
18
|
export { default, getOSNameInternal } from './metrics';
|
|
19
19
|
export { config, CALL_DIAGNOSTIC_CONFIG, AutomatedUserUtils, NewMetrics, Utils, CallDiagnosticUtils, CallDiagnosticLatencies, CallDiagnosticMetrics, BehavioralMetrics, OperationalMetrics, BusinessMetrics, RtcMetrics, PreLoginMetrics, };
|
|
20
20
|
export { isAutomatedUser, isAutomatedUserAgent } from './automated-user';
|
|
21
|
-
export type { ClientEvent, ClientEventLeaveReason, SubmitBehavioralEvent, SubmitClientEvent, SubmitInternalEvent, SubmitMQE, SubmitOperationalEvent, SubmitBusinessEvent, PreComputedLatencies, SubmitFeatureEvent, LocusSyncLatencyEventName, };
|
|
21
|
+
export type { ClientEvent, ClientEventLeaveReason, SubmitBehavioralEvent, SubmitClientEvent, SubmitInternalEvent, SubmitMQE, SubmitOperationalEvent, SubmitBusinessEvent, PreComputedLatencies, SubmitFeatureEvent, LocusSyncLatencyEventName, PrivacyAndSecurityPermission, };
|
|
@@ -8,6 +8,9 @@ export type NewEnvironmentType = NonNullable<RawEvent['origin']['newEnvironment'
|
|
|
8
8
|
export type ClientLaunchMethodType = NonNullable<RawEvent['origin']['clientInfo']>['clientLaunchMethod'];
|
|
9
9
|
export type ClientUserNameInput = NonNullable<RawClientEvent['userNameInput']>;
|
|
10
10
|
export type ClientEmailInput = NonNullable<RawClientEvent['emailInput']>;
|
|
11
|
+
export type PrivacyAndSecurityPermission = NonNullable<RawClientEvent['privacyAndSecurityPermission']>;
|
|
12
|
+
export type PrivacyAndSecurityPermissionResource = keyof PrivacyAndSecurityPermission;
|
|
13
|
+
export type PrivacyAndSecurityPermissionState = PrivacyAndSecurityPermission[PrivacyAndSecurityPermissionResource];
|
|
11
14
|
export type BrowserLaunchMethodType = NonNullable<RawEvent['origin']['clientInfo']>['browserLaunchMethod'];
|
|
12
15
|
export type MetricEventProduct = 'webex' | 'wxcc_desktop' | 'wxcc_crm' | 'wxcc_sdk';
|
|
13
16
|
export type MetricEventAgent = 'user' | 'browser' | 'system' | 'sdk' | 'redux' | 'service' | 'api';
|
|
@@ -4,7 +4,7 @@ import BehavioralMetrics from './behavioral-metrics';
|
|
|
4
4
|
import OperationalMetrics from './operational-metrics';
|
|
5
5
|
import BusinessMetrics from './business-metrics';
|
|
6
6
|
import PreLoginMetrics from './prelogin-metrics';
|
|
7
|
-
import { RecursivePartial, MetricEventProduct, MetricEventAgent, MetricEventVerb, ClientEvent, FeatureEvent, EventPayload, MediaQualityEvent, InternalEvent, SubmitClientEventOptions, Table, DelayedClientEvent, DelayedClientFeatureEvent } from './metrics.types';
|
|
7
|
+
import { RecursivePartial, MetricEventProduct, MetricEventAgent, MetricEventVerb, ClientEvent, FeatureEvent, EventPayload, MediaQualityEvent, InternalEvent, SubmitClientEventOptions, Table, DelayedClientEvent, DelayedClientFeatureEvent, PrivacyAndSecurityPermission } from './metrics.types';
|
|
8
8
|
import CallDiagnosticLatencies from './call-diagnostic/call-diagnostic-metrics-latencies';
|
|
9
9
|
/**
|
|
10
10
|
* Metrics plugin to centralize all types of metrics.
|
|
@@ -33,6 +33,7 @@ declare class Metrics extends WebexPlugin {
|
|
|
33
33
|
*/
|
|
34
34
|
delayedClientEventsOverrides: Partial<DelayedClientEvent['options']>;
|
|
35
35
|
delayedClientFeatureEventsOverrides: Partial<DelayedClientFeatureEvent['options']>;
|
|
36
|
+
private privacyAndSecurityPermissionEnricher;
|
|
36
37
|
/**
|
|
37
38
|
* Constructor
|
|
38
39
|
* @param args
|
|
@@ -151,6 +152,17 @@ declare class Metrics extends WebexPlugin {
|
|
|
151
152
|
payload?: RecursivePartial<ClientEvent['payload']>;
|
|
152
153
|
options?: SubmitClientEventOptions;
|
|
153
154
|
}): Promise<any>;
|
|
155
|
+
/**
|
|
156
|
+
* Stores the latest browser permission state supplied by the client.
|
|
157
|
+
* @param permission latest normalized permission snapshot
|
|
158
|
+
*/
|
|
159
|
+
setPrivacyAndSecurityPermission(permission: PrivacyAndSecurityPermission): void;
|
|
160
|
+
/**
|
|
161
|
+
* Resolves event options to the call identity used by Call Diagnostic where possible.
|
|
162
|
+
* @param options client event options
|
|
163
|
+
* @returns the permission history scope
|
|
164
|
+
*/
|
|
165
|
+
private getPermissionScope;
|
|
154
166
|
/**
|
|
155
167
|
* Issue request to alias a user's pre-login ID with their CI UUID
|
|
156
168
|
* @param {string} preLoginId
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PermissionEnrichmentPolicy } from './types';
|
|
2
|
+
export declare const CAMERA_AND_MICROPHONE_PERMISSION_EVENTS: Set<"client.abort.join" | "client.alert.displayed" | "client.alert.removed" | "client.application.validate" | "client.audio.noise.removal" | "client.breakout-session.join.request" | "client.breakout-session.join.response" | "client.breakout-session.leave" | "client.breakout-session.move.request" | "client.breakout-session.move.response" | "client.call.aborted" | "client.call.declined" | "client.call.fallback" | "client.call.diagnostics" | "client.call.displayed" | "client.call.info" | "client.call.initiated" | "client.call.leave" | "client.call.move-media" | "client.call.remote-ended" | "client.call.remote-started" | "client.call.skip-locus-join" | "client.ci.exchange-token.request" | "client.ci.exchange-token.response" | "client.conversation.request" | "client.conversation.response" | "client.click.pre-join" | "client.crash" | "client.daemon.join.begin" | "client.daemon.job.done" | "client.daemon.launch-meeting-process" | "client.daemon.pending-on-existing-upgrade-job" | "client.daemon.query-site-info" | "client.daemon.upgrade-and-join" | "client.daemon.wakeup-meeting-client" | "client.duplicate.join" | "client.device.resource-room.joined" | "client.dialog-window.dismissed" | "client.dialog-window.selected" | "client.dialog-window.showed" | "client.e2ee.join.response" | "client.embedded-authorize-page.loaded" | "client.embedded-object-info" | "client.entering-background" | "client.entering-foreground" | "client.exit.app" | "client.gesture.recognition" | "client.hologram.initiated" | "client.hologram.stopped" | "client.hologram.remote.initiated" | "client.hologram.remote.stopped" | "client.hung" | "client.ice.end" | "client.ice.start" | "client.idbroker.authorize.request" | "client.idbroker.authorize.response" | "client.idbroker.client-credential.request" | "client.idbroker.client-credential.response" | "client.idbroker.cloud-reduced-scope.request" | "client.idbroker.direct-authorize.request" | "client.idbroker.direct-authorize.response" | "client.idbroker.cloud-reduced-scope.response" | "client.idbroker.exchange-token.request" | "client.idbroker.exchange-token.response" | "client.idbroker.kms-reduced-scope.request" | "client.idbroker.kms-reduced-scope.response" | "client.idbroker.scim.request" | "client.idbroker.scim.response" | "client.idbroker.user-invoke.request" | "client.idbroker.user-invoke.response" | "client.installer.start" | "client.installer.end" | "client.installer.download-app" | "client.installer.decompress-app" | "client.installer.fallback" | "client.installer.install-app" | "client.installer.launch-app" | "client.installer.switch.to.webapp" | "client.launcher.start" | "client.launcher.selfupgrade.start" | "client.launcher.selfupgrade.end" | "client.launcher.downloadapp.start" | "client.launcher.downloadapp.end" | "client.launcher.launchapp" | "client.launcher.end" | "client.launcher.restart.begin" | "client.launcher.restart.end" | "client.license.activations.request" | "client.license.activations.response" | "client.llm.connect.response" | "client.interstitial-window.launched" | "client.interstitial-window.start-launch" | "client.ivr.join.request" | "client.ivr.join.response" | "client.ivr.leave.request" | "client.ivr.leave.response" | "client.ivr.notify.request" | "client.ivr.notify.response" | "client.lobby.entered" | "client.lobby.exited" | "client.locus.decline.request" | "client.locus.join.request" | "client.locus.join.response" | "client.locus.leave.request" | "client.locus.leave.response" | "client.locus.media.request" | "client.locus.media.response" | "client.locus.sync.complete" | "client.media-engine.crash" | "client.media-engine.launched" | "client.media-engine.lost" | "client.media-engine.local-sdp-generated" | "client.media-engine.ready" | "client.media-engine.remote-sdp-received" | "client.media-engine.start-launch" | "client.media-device.ready" | "client.media-device.stop" | "client.media-device.error" | "client.media-status" | "client.media.capabilities" | "client.media.ready" | "client.media.reachability" | "client.media.reconnecting" | "client.media.recovered" | "client.media.render.start" | "client.media.render.stop" | "client.media.rx.start" | "client.media.rx.stop" | "client.media.share.csi.changed" | "client.media.tx.start" | "client.media.tx.stop" | "client.meetinginfo.request" | "client.meetinginfo.response" | "client.meetingmanagersdk.ipc.run" | "client.meeting.app-loaded" | "client.meeting.breakout-session.action" | "client.meeting.breakout-session.summary" | "client.meeting.browser-plugin.started" | "client.meeting.click.joinbutton" | "client.meeting.closed" | "client.meeting.disclaimer-window.accepted" | "client.meeting.disclaimer-window.closed" | "client.meeting.disclaimer-window.showed" | "client.meeting.docshow.request" | "client.meeting.docshow.response" | "client.meeting.e2e.u2c.response" | "client.meeting.e2e.wca.response" | "client.meeting.e2e.key.response" | "client.meeting.e2ee.u2c.response" | "client.meeting.e2ee.wca.response" | "client.meeting.e2ee.key.response" | "client.meeting.gpc.download" | "client.meeting.gpcparameter.request" | "client.meeting.gpcparameter.response" | "client.meeting.interstitial-window.closed" | "client.meeting.interstitial-window.showed" | "client.meeting.join.request" | "client.meeting.key-information" | "client.meeting.launched" | "client.meeting.login-window.clicked" | "client.meeting.login-window.closed" | "client.meeting.login-window.showed" | "client.meeting.login.response" | "client.meeting.people-insights.check.response" | "client.meeting.people-insights.query.response" | "client.meeting.ping.request" | "client.meeting.ping.response" | "client.meeting.plugin-extension.started" | "client.meeting.resume" | "client.meeting.report-log" | "client.meeting.session.connected" | "client.meeting.start-webexapp" | "client.meeting.start-launch" | "client.meeting.summary" | "client.meeting.user-action" | "client.meeting.validated" | "client.meeting.VDI.detect.plugin.response" | "client.meeting.VDI.connect.plugin.response" | "client.mercury.connection.lost" | "client.mercury.connection.restored" | "client.mercury.connection.start" | "client.mercury.connection.connected" | "client.multistream.sca.rx" | "client.multistream.sca.tx" | "client.multistream.scr.rx" | "client.multistream.scr.tx" | "client.muted" | "client.network.changed" | "client.notification.received" | "client.onboarding-window.start" | "client.onboarding-window.end" | "client.permission.closed" | "client.permission.prompted" | "client.pin.collected" | "client.pin.prompt" | "client.post.meeting.hook" | "client.pstnaudio.attempt.correlation" | "client.pstnaudio.attempt.finish" | "client.pstnaudio.attempt.skip" | "client.pstnaudio.attempt.start" | "client.roap-message.received" | "client.roap-message.sent" | "client.scheduling.initiate" | "client.scheduling.notification" | "client.share.floor-accept.notification" | "client.share.floor-grant.cancel-request" | "client.share.floor-grant.notification" | "client.share.floor-grant.request" | "client.share.floor-granted.local" | "client.share.initiated" | "client.share.layout.displayed" | "client.share.paused" | "client.share.selected-app" | "client.share.stopped" | "client.sign-in.start" | "client.sign-in.end" | "client.started-after-shutdown" | "client.started-from-crash" | "client.stuntrace.failed" | "client.switch.app" | "client.terminate.app" | "client.unmuted" | "client.webexapp.start-launch" | "client.webexapp.launched" | "client.login.start" | "client.login.end" | "client.startup.start" | "client.startup.end" | "client.switch.environment" | "client.u2c.limited-catalog.request" | "client.u2c.limited-catalog.response" | "client.u2c.signin-catalog.request" | "client.u2c.signin-catalog.response" | "client.upgrade-window.accepted" | "client.upgrade-window.closed" | "client.upgrade-window.showed" | "client.waiting.user-action" | "client.warhol.downloaded" | "client.wdm.device-registration.request" | "client.wdm.device-registration.response" | "client.webapp-download.start" | "client.webapp-download.in-progress" | "client.webapp-download.end" | "client.whiteboard.loaded" | "client.call.survey.trigger" | "meeting.initiated" | "meeting.converged.initiated" | "meeting.joined" | "page.click.pre-join" | "page.client.abort.join" | "page.client.interstitial-window.launched" | "page.meeting.browser-reset" | "page.meeting.close-browser" | "page.meeting.extension.started" | "page.meeting.extension.app.starting" | "page.meeting.extension.app.started" | "page.meeting.join-fallback.dismiss" | "page.meeting.join-fallback" | "page.meeting.launch-thinclient" | "page.meeting.launched-duplicate.context" | "page.meeting.loading" | "page.meeting.mobile.call" | "page.meeting.mobile.download" | "page.meeting.mobile.join-link" | "page.meeting.plugin.launch-meeting" | "page.meeting.run-plugin" | "page.meeting.switch.to.webapp" | "page.meeting.testing-plugin" | "page.meeting.testing-plugin.finished" | "page.meeting.tfs.start-download" | "page.meeting.urlprotocol.detect" | "page.meeting.waiting.user-action" | "page.meeting.webexapp.launched" | "page.meeting.webinstaller.started" | "page.meeting.webinstaller.ended" | "client.feature.ptplugin.distribution">;
|
|
3
|
+
export declare const MEDIA_TX_PERMISSION_EVENTS: Set<"client.abort.join" | "client.alert.displayed" | "client.alert.removed" | "client.application.validate" | "client.audio.noise.removal" | "client.breakout-session.join.request" | "client.breakout-session.join.response" | "client.breakout-session.leave" | "client.breakout-session.move.request" | "client.breakout-session.move.response" | "client.call.aborted" | "client.call.declined" | "client.call.fallback" | "client.call.diagnostics" | "client.call.displayed" | "client.call.info" | "client.call.initiated" | "client.call.leave" | "client.call.move-media" | "client.call.remote-ended" | "client.call.remote-started" | "client.call.skip-locus-join" | "client.ci.exchange-token.request" | "client.ci.exchange-token.response" | "client.conversation.request" | "client.conversation.response" | "client.click.pre-join" | "client.crash" | "client.daemon.join.begin" | "client.daemon.job.done" | "client.daemon.launch-meeting-process" | "client.daemon.pending-on-existing-upgrade-job" | "client.daemon.query-site-info" | "client.daemon.upgrade-and-join" | "client.daemon.wakeup-meeting-client" | "client.duplicate.join" | "client.device.resource-room.joined" | "client.dialog-window.dismissed" | "client.dialog-window.selected" | "client.dialog-window.showed" | "client.e2ee.join.response" | "client.embedded-authorize-page.loaded" | "client.embedded-object-info" | "client.entering-background" | "client.entering-foreground" | "client.exit.app" | "client.gesture.recognition" | "client.hologram.initiated" | "client.hologram.stopped" | "client.hologram.remote.initiated" | "client.hologram.remote.stopped" | "client.hung" | "client.ice.end" | "client.ice.start" | "client.idbroker.authorize.request" | "client.idbroker.authorize.response" | "client.idbroker.client-credential.request" | "client.idbroker.client-credential.response" | "client.idbroker.cloud-reduced-scope.request" | "client.idbroker.direct-authorize.request" | "client.idbroker.direct-authorize.response" | "client.idbroker.cloud-reduced-scope.response" | "client.idbroker.exchange-token.request" | "client.idbroker.exchange-token.response" | "client.idbroker.kms-reduced-scope.request" | "client.idbroker.kms-reduced-scope.response" | "client.idbroker.scim.request" | "client.idbroker.scim.response" | "client.idbroker.user-invoke.request" | "client.idbroker.user-invoke.response" | "client.installer.start" | "client.installer.end" | "client.installer.download-app" | "client.installer.decompress-app" | "client.installer.fallback" | "client.installer.install-app" | "client.installer.launch-app" | "client.installer.switch.to.webapp" | "client.launcher.start" | "client.launcher.selfupgrade.start" | "client.launcher.selfupgrade.end" | "client.launcher.downloadapp.start" | "client.launcher.downloadapp.end" | "client.launcher.launchapp" | "client.launcher.end" | "client.launcher.restart.begin" | "client.launcher.restart.end" | "client.license.activations.request" | "client.license.activations.response" | "client.llm.connect.response" | "client.interstitial-window.launched" | "client.interstitial-window.start-launch" | "client.ivr.join.request" | "client.ivr.join.response" | "client.ivr.leave.request" | "client.ivr.leave.response" | "client.ivr.notify.request" | "client.ivr.notify.response" | "client.lobby.entered" | "client.lobby.exited" | "client.locus.decline.request" | "client.locus.join.request" | "client.locus.join.response" | "client.locus.leave.request" | "client.locus.leave.response" | "client.locus.media.request" | "client.locus.media.response" | "client.locus.sync.complete" | "client.media-engine.crash" | "client.media-engine.launched" | "client.media-engine.lost" | "client.media-engine.local-sdp-generated" | "client.media-engine.ready" | "client.media-engine.remote-sdp-received" | "client.media-engine.start-launch" | "client.media-device.ready" | "client.media-device.stop" | "client.media-device.error" | "client.media-status" | "client.media.capabilities" | "client.media.ready" | "client.media.reachability" | "client.media.reconnecting" | "client.media.recovered" | "client.media.render.start" | "client.media.render.stop" | "client.media.rx.start" | "client.media.rx.stop" | "client.media.share.csi.changed" | "client.media.tx.start" | "client.media.tx.stop" | "client.meetinginfo.request" | "client.meetinginfo.response" | "client.meetingmanagersdk.ipc.run" | "client.meeting.app-loaded" | "client.meeting.breakout-session.action" | "client.meeting.breakout-session.summary" | "client.meeting.browser-plugin.started" | "client.meeting.click.joinbutton" | "client.meeting.closed" | "client.meeting.disclaimer-window.accepted" | "client.meeting.disclaimer-window.closed" | "client.meeting.disclaimer-window.showed" | "client.meeting.docshow.request" | "client.meeting.docshow.response" | "client.meeting.e2e.u2c.response" | "client.meeting.e2e.wca.response" | "client.meeting.e2e.key.response" | "client.meeting.e2ee.u2c.response" | "client.meeting.e2ee.wca.response" | "client.meeting.e2ee.key.response" | "client.meeting.gpc.download" | "client.meeting.gpcparameter.request" | "client.meeting.gpcparameter.response" | "client.meeting.interstitial-window.closed" | "client.meeting.interstitial-window.showed" | "client.meeting.join.request" | "client.meeting.key-information" | "client.meeting.launched" | "client.meeting.login-window.clicked" | "client.meeting.login-window.closed" | "client.meeting.login-window.showed" | "client.meeting.login.response" | "client.meeting.people-insights.check.response" | "client.meeting.people-insights.query.response" | "client.meeting.ping.request" | "client.meeting.ping.response" | "client.meeting.plugin-extension.started" | "client.meeting.resume" | "client.meeting.report-log" | "client.meeting.session.connected" | "client.meeting.start-webexapp" | "client.meeting.start-launch" | "client.meeting.summary" | "client.meeting.user-action" | "client.meeting.validated" | "client.meeting.VDI.detect.plugin.response" | "client.meeting.VDI.connect.plugin.response" | "client.mercury.connection.lost" | "client.mercury.connection.restored" | "client.mercury.connection.start" | "client.mercury.connection.connected" | "client.multistream.sca.rx" | "client.multistream.sca.tx" | "client.multistream.scr.rx" | "client.multistream.scr.tx" | "client.muted" | "client.network.changed" | "client.notification.received" | "client.onboarding-window.start" | "client.onboarding-window.end" | "client.permission.closed" | "client.permission.prompted" | "client.pin.collected" | "client.pin.prompt" | "client.post.meeting.hook" | "client.pstnaudio.attempt.correlation" | "client.pstnaudio.attempt.finish" | "client.pstnaudio.attempt.skip" | "client.pstnaudio.attempt.start" | "client.roap-message.received" | "client.roap-message.sent" | "client.scheduling.initiate" | "client.scheduling.notification" | "client.share.floor-accept.notification" | "client.share.floor-grant.cancel-request" | "client.share.floor-grant.notification" | "client.share.floor-grant.request" | "client.share.floor-granted.local" | "client.share.initiated" | "client.share.layout.displayed" | "client.share.paused" | "client.share.selected-app" | "client.share.stopped" | "client.sign-in.start" | "client.sign-in.end" | "client.started-after-shutdown" | "client.started-from-crash" | "client.stuntrace.failed" | "client.switch.app" | "client.terminate.app" | "client.unmuted" | "client.webexapp.start-launch" | "client.webexapp.launched" | "client.login.start" | "client.login.end" | "client.startup.start" | "client.startup.end" | "client.switch.environment" | "client.u2c.limited-catalog.request" | "client.u2c.limited-catalog.response" | "client.u2c.signin-catalog.request" | "client.u2c.signin-catalog.response" | "client.upgrade-window.accepted" | "client.upgrade-window.closed" | "client.upgrade-window.showed" | "client.waiting.user-action" | "client.warhol.downloaded" | "client.wdm.device-registration.request" | "client.wdm.device-registration.response" | "client.webapp-download.start" | "client.webapp-download.in-progress" | "client.webapp-download.end" | "client.whiteboard.loaded" | "client.call.survey.trigger" | "meeting.initiated" | "meeting.converged.initiated" | "meeting.joined" | "page.click.pre-join" | "page.client.abort.join" | "page.client.interstitial-window.launched" | "page.meeting.browser-reset" | "page.meeting.close-browser" | "page.meeting.extension.started" | "page.meeting.extension.app.starting" | "page.meeting.extension.app.started" | "page.meeting.join-fallback.dismiss" | "page.meeting.join-fallback" | "page.meeting.launch-thinclient" | "page.meeting.launched-duplicate.context" | "page.meeting.loading" | "page.meeting.mobile.call" | "page.meeting.mobile.download" | "page.meeting.mobile.join-link" | "page.meeting.plugin.launch-meeting" | "page.meeting.run-plugin" | "page.meeting.switch.to.webapp" | "page.meeting.testing-plugin" | "page.meeting.testing-plugin.finished" | "page.meeting.tfs.start-download" | "page.meeting.urlprotocol.detect" | "page.meeting.waiting.user-action" | "page.meeting.webexapp.launched" | "page.meeting.webinstaller.started" | "page.meeting.webinstaller.ended" | "client.feature.ptplugin.distribution">;
|
|
4
|
+
export declare const CONTENT_SHARE_PERMISSION_EVENTS: Set<"client.abort.join" | "client.alert.displayed" | "client.alert.removed" | "client.application.validate" | "client.audio.noise.removal" | "client.breakout-session.join.request" | "client.breakout-session.join.response" | "client.breakout-session.leave" | "client.breakout-session.move.request" | "client.breakout-session.move.response" | "client.call.aborted" | "client.call.declined" | "client.call.fallback" | "client.call.diagnostics" | "client.call.displayed" | "client.call.info" | "client.call.initiated" | "client.call.leave" | "client.call.move-media" | "client.call.remote-ended" | "client.call.remote-started" | "client.call.skip-locus-join" | "client.ci.exchange-token.request" | "client.ci.exchange-token.response" | "client.conversation.request" | "client.conversation.response" | "client.click.pre-join" | "client.crash" | "client.daemon.join.begin" | "client.daemon.job.done" | "client.daemon.launch-meeting-process" | "client.daemon.pending-on-existing-upgrade-job" | "client.daemon.query-site-info" | "client.daemon.upgrade-and-join" | "client.daemon.wakeup-meeting-client" | "client.duplicate.join" | "client.device.resource-room.joined" | "client.dialog-window.dismissed" | "client.dialog-window.selected" | "client.dialog-window.showed" | "client.e2ee.join.response" | "client.embedded-authorize-page.loaded" | "client.embedded-object-info" | "client.entering-background" | "client.entering-foreground" | "client.exit.app" | "client.gesture.recognition" | "client.hologram.initiated" | "client.hologram.stopped" | "client.hologram.remote.initiated" | "client.hologram.remote.stopped" | "client.hung" | "client.ice.end" | "client.ice.start" | "client.idbroker.authorize.request" | "client.idbroker.authorize.response" | "client.idbroker.client-credential.request" | "client.idbroker.client-credential.response" | "client.idbroker.cloud-reduced-scope.request" | "client.idbroker.direct-authorize.request" | "client.idbroker.direct-authorize.response" | "client.idbroker.cloud-reduced-scope.response" | "client.idbroker.exchange-token.request" | "client.idbroker.exchange-token.response" | "client.idbroker.kms-reduced-scope.request" | "client.idbroker.kms-reduced-scope.response" | "client.idbroker.scim.request" | "client.idbroker.scim.response" | "client.idbroker.user-invoke.request" | "client.idbroker.user-invoke.response" | "client.installer.start" | "client.installer.end" | "client.installer.download-app" | "client.installer.decompress-app" | "client.installer.fallback" | "client.installer.install-app" | "client.installer.launch-app" | "client.installer.switch.to.webapp" | "client.launcher.start" | "client.launcher.selfupgrade.start" | "client.launcher.selfupgrade.end" | "client.launcher.downloadapp.start" | "client.launcher.downloadapp.end" | "client.launcher.launchapp" | "client.launcher.end" | "client.launcher.restart.begin" | "client.launcher.restart.end" | "client.license.activations.request" | "client.license.activations.response" | "client.llm.connect.response" | "client.interstitial-window.launched" | "client.interstitial-window.start-launch" | "client.ivr.join.request" | "client.ivr.join.response" | "client.ivr.leave.request" | "client.ivr.leave.response" | "client.ivr.notify.request" | "client.ivr.notify.response" | "client.lobby.entered" | "client.lobby.exited" | "client.locus.decline.request" | "client.locus.join.request" | "client.locus.join.response" | "client.locus.leave.request" | "client.locus.leave.response" | "client.locus.media.request" | "client.locus.media.response" | "client.locus.sync.complete" | "client.media-engine.crash" | "client.media-engine.launched" | "client.media-engine.lost" | "client.media-engine.local-sdp-generated" | "client.media-engine.ready" | "client.media-engine.remote-sdp-received" | "client.media-engine.start-launch" | "client.media-device.ready" | "client.media-device.stop" | "client.media-device.error" | "client.media-status" | "client.media.capabilities" | "client.media.ready" | "client.media.reachability" | "client.media.reconnecting" | "client.media.recovered" | "client.media.render.start" | "client.media.render.stop" | "client.media.rx.start" | "client.media.rx.stop" | "client.media.share.csi.changed" | "client.media.tx.start" | "client.media.tx.stop" | "client.meetinginfo.request" | "client.meetinginfo.response" | "client.meetingmanagersdk.ipc.run" | "client.meeting.app-loaded" | "client.meeting.breakout-session.action" | "client.meeting.breakout-session.summary" | "client.meeting.browser-plugin.started" | "client.meeting.click.joinbutton" | "client.meeting.closed" | "client.meeting.disclaimer-window.accepted" | "client.meeting.disclaimer-window.closed" | "client.meeting.disclaimer-window.showed" | "client.meeting.docshow.request" | "client.meeting.docshow.response" | "client.meeting.e2e.u2c.response" | "client.meeting.e2e.wca.response" | "client.meeting.e2e.key.response" | "client.meeting.e2ee.u2c.response" | "client.meeting.e2ee.wca.response" | "client.meeting.e2ee.key.response" | "client.meeting.gpc.download" | "client.meeting.gpcparameter.request" | "client.meeting.gpcparameter.response" | "client.meeting.interstitial-window.closed" | "client.meeting.interstitial-window.showed" | "client.meeting.join.request" | "client.meeting.key-information" | "client.meeting.launched" | "client.meeting.login-window.clicked" | "client.meeting.login-window.closed" | "client.meeting.login-window.showed" | "client.meeting.login.response" | "client.meeting.people-insights.check.response" | "client.meeting.people-insights.query.response" | "client.meeting.ping.request" | "client.meeting.ping.response" | "client.meeting.plugin-extension.started" | "client.meeting.resume" | "client.meeting.report-log" | "client.meeting.session.connected" | "client.meeting.start-webexapp" | "client.meeting.start-launch" | "client.meeting.summary" | "client.meeting.user-action" | "client.meeting.validated" | "client.meeting.VDI.detect.plugin.response" | "client.meeting.VDI.connect.plugin.response" | "client.mercury.connection.lost" | "client.mercury.connection.restored" | "client.mercury.connection.start" | "client.mercury.connection.connected" | "client.multistream.sca.rx" | "client.multistream.sca.tx" | "client.multistream.scr.rx" | "client.multistream.scr.tx" | "client.muted" | "client.network.changed" | "client.notification.received" | "client.onboarding-window.start" | "client.onboarding-window.end" | "client.permission.closed" | "client.permission.prompted" | "client.pin.collected" | "client.pin.prompt" | "client.post.meeting.hook" | "client.pstnaudio.attempt.correlation" | "client.pstnaudio.attempt.finish" | "client.pstnaudio.attempt.skip" | "client.pstnaudio.attempt.start" | "client.roap-message.received" | "client.roap-message.sent" | "client.scheduling.initiate" | "client.scheduling.notification" | "client.share.floor-accept.notification" | "client.share.floor-grant.cancel-request" | "client.share.floor-grant.notification" | "client.share.floor-grant.request" | "client.share.floor-granted.local" | "client.share.initiated" | "client.share.layout.displayed" | "client.share.paused" | "client.share.selected-app" | "client.share.stopped" | "client.sign-in.start" | "client.sign-in.end" | "client.started-after-shutdown" | "client.started-from-crash" | "client.stuntrace.failed" | "client.switch.app" | "client.terminate.app" | "client.unmuted" | "client.webexapp.start-launch" | "client.webexapp.launched" | "client.login.start" | "client.login.end" | "client.startup.start" | "client.startup.end" | "client.switch.environment" | "client.u2c.limited-catalog.request" | "client.u2c.limited-catalog.response" | "client.u2c.signin-catalog.request" | "client.u2c.signin-catalog.response" | "client.upgrade-window.accepted" | "client.upgrade-window.closed" | "client.upgrade-window.showed" | "client.waiting.user-action" | "client.warhol.downloaded" | "client.wdm.device-registration.request" | "client.wdm.device-registration.response" | "client.webapp-download.start" | "client.webapp-download.in-progress" | "client.webapp-download.end" | "client.whiteboard.loaded" | "client.call.survey.trigger" | "meeting.initiated" | "meeting.converged.initiated" | "meeting.joined" | "page.click.pre-join" | "page.client.abort.join" | "page.client.interstitial-window.launched" | "page.meeting.browser-reset" | "page.meeting.close-browser" | "page.meeting.extension.started" | "page.meeting.extension.app.starting" | "page.meeting.extension.app.started" | "page.meeting.join-fallback.dismiss" | "page.meeting.join-fallback" | "page.meeting.launch-thinclient" | "page.meeting.launched-duplicate.context" | "page.meeting.loading" | "page.meeting.mobile.call" | "page.meeting.mobile.download" | "page.meeting.mobile.join-link" | "page.meeting.plugin.launch-meeting" | "page.meeting.run-plugin" | "page.meeting.switch.to.webapp" | "page.meeting.testing-plugin" | "page.meeting.testing-plugin.finished" | "page.meeting.tfs.start-download" | "page.meeting.urlprotocol.detect" | "page.meeting.waiting.user-action" | "page.meeting.webexapp.launched" | "page.meeting.webinstaller.started" | "page.meeting.webinstaller.ended" | "client.feature.ptplugin.distribution">;
|
|
5
|
+
export declare const FINAL_PERMISSION_EVENTS: Set<"client.abort.join" | "client.alert.displayed" | "client.alert.removed" | "client.application.validate" | "client.audio.noise.removal" | "client.breakout-session.join.request" | "client.breakout-session.join.response" | "client.breakout-session.leave" | "client.breakout-session.move.request" | "client.breakout-session.move.response" | "client.call.aborted" | "client.call.declined" | "client.call.fallback" | "client.call.diagnostics" | "client.call.displayed" | "client.call.info" | "client.call.initiated" | "client.call.leave" | "client.call.move-media" | "client.call.remote-ended" | "client.call.remote-started" | "client.call.skip-locus-join" | "client.ci.exchange-token.request" | "client.ci.exchange-token.response" | "client.conversation.request" | "client.conversation.response" | "client.click.pre-join" | "client.crash" | "client.daemon.join.begin" | "client.daemon.job.done" | "client.daemon.launch-meeting-process" | "client.daemon.pending-on-existing-upgrade-job" | "client.daemon.query-site-info" | "client.daemon.upgrade-and-join" | "client.daemon.wakeup-meeting-client" | "client.duplicate.join" | "client.device.resource-room.joined" | "client.dialog-window.dismissed" | "client.dialog-window.selected" | "client.dialog-window.showed" | "client.e2ee.join.response" | "client.embedded-authorize-page.loaded" | "client.embedded-object-info" | "client.entering-background" | "client.entering-foreground" | "client.exit.app" | "client.gesture.recognition" | "client.hologram.initiated" | "client.hologram.stopped" | "client.hologram.remote.initiated" | "client.hologram.remote.stopped" | "client.hung" | "client.ice.end" | "client.ice.start" | "client.idbroker.authorize.request" | "client.idbroker.authorize.response" | "client.idbroker.client-credential.request" | "client.idbroker.client-credential.response" | "client.idbroker.cloud-reduced-scope.request" | "client.idbroker.direct-authorize.request" | "client.idbroker.direct-authorize.response" | "client.idbroker.cloud-reduced-scope.response" | "client.idbroker.exchange-token.request" | "client.idbroker.exchange-token.response" | "client.idbroker.kms-reduced-scope.request" | "client.idbroker.kms-reduced-scope.response" | "client.idbroker.scim.request" | "client.idbroker.scim.response" | "client.idbroker.user-invoke.request" | "client.idbroker.user-invoke.response" | "client.installer.start" | "client.installer.end" | "client.installer.download-app" | "client.installer.decompress-app" | "client.installer.fallback" | "client.installer.install-app" | "client.installer.launch-app" | "client.installer.switch.to.webapp" | "client.launcher.start" | "client.launcher.selfupgrade.start" | "client.launcher.selfupgrade.end" | "client.launcher.downloadapp.start" | "client.launcher.downloadapp.end" | "client.launcher.launchapp" | "client.launcher.end" | "client.launcher.restart.begin" | "client.launcher.restart.end" | "client.license.activations.request" | "client.license.activations.response" | "client.llm.connect.response" | "client.interstitial-window.launched" | "client.interstitial-window.start-launch" | "client.ivr.join.request" | "client.ivr.join.response" | "client.ivr.leave.request" | "client.ivr.leave.response" | "client.ivr.notify.request" | "client.ivr.notify.response" | "client.lobby.entered" | "client.lobby.exited" | "client.locus.decline.request" | "client.locus.join.request" | "client.locus.join.response" | "client.locus.leave.request" | "client.locus.leave.response" | "client.locus.media.request" | "client.locus.media.response" | "client.locus.sync.complete" | "client.media-engine.crash" | "client.media-engine.launched" | "client.media-engine.lost" | "client.media-engine.local-sdp-generated" | "client.media-engine.ready" | "client.media-engine.remote-sdp-received" | "client.media-engine.start-launch" | "client.media-device.ready" | "client.media-device.stop" | "client.media-device.error" | "client.media-status" | "client.media.capabilities" | "client.media.ready" | "client.media.reachability" | "client.media.reconnecting" | "client.media.recovered" | "client.media.render.start" | "client.media.render.stop" | "client.media.rx.start" | "client.media.rx.stop" | "client.media.share.csi.changed" | "client.media.tx.start" | "client.media.tx.stop" | "client.meetinginfo.request" | "client.meetinginfo.response" | "client.meetingmanagersdk.ipc.run" | "client.meeting.app-loaded" | "client.meeting.breakout-session.action" | "client.meeting.breakout-session.summary" | "client.meeting.browser-plugin.started" | "client.meeting.click.joinbutton" | "client.meeting.closed" | "client.meeting.disclaimer-window.accepted" | "client.meeting.disclaimer-window.closed" | "client.meeting.disclaimer-window.showed" | "client.meeting.docshow.request" | "client.meeting.docshow.response" | "client.meeting.e2e.u2c.response" | "client.meeting.e2e.wca.response" | "client.meeting.e2e.key.response" | "client.meeting.e2ee.u2c.response" | "client.meeting.e2ee.wca.response" | "client.meeting.e2ee.key.response" | "client.meeting.gpc.download" | "client.meeting.gpcparameter.request" | "client.meeting.gpcparameter.response" | "client.meeting.interstitial-window.closed" | "client.meeting.interstitial-window.showed" | "client.meeting.join.request" | "client.meeting.key-information" | "client.meeting.launched" | "client.meeting.login-window.clicked" | "client.meeting.login-window.closed" | "client.meeting.login-window.showed" | "client.meeting.login.response" | "client.meeting.people-insights.check.response" | "client.meeting.people-insights.query.response" | "client.meeting.ping.request" | "client.meeting.ping.response" | "client.meeting.plugin-extension.started" | "client.meeting.resume" | "client.meeting.report-log" | "client.meeting.session.connected" | "client.meeting.start-webexapp" | "client.meeting.start-launch" | "client.meeting.summary" | "client.meeting.user-action" | "client.meeting.validated" | "client.meeting.VDI.detect.plugin.response" | "client.meeting.VDI.connect.plugin.response" | "client.mercury.connection.lost" | "client.mercury.connection.restored" | "client.mercury.connection.start" | "client.mercury.connection.connected" | "client.multistream.sca.rx" | "client.multistream.sca.tx" | "client.multistream.scr.rx" | "client.multistream.scr.tx" | "client.muted" | "client.network.changed" | "client.notification.received" | "client.onboarding-window.start" | "client.onboarding-window.end" | "client.permission.closed" | "client.permission.prompted" | "client.pin.collected" | "client.pin.prompt" | "client.post.meeting.hook" | "client.pstnaudio.attempt.correlation" | "client.pstnaudio.attempt.finish" | "client.pstnaudio.attempt.skip" | "client.pstnaudio.attempt.start" | "client.roap-message.received" | "client.roap-message.sent" | "client.scheduling.initiate" | "client.scheduling.notification" | "client.share.floor-accept.notification" | "client.share.floor-grant.cancel-request" | "client.share.floor-grant.notification" | "client.share.floor-grant.request" | "client.share.floor-granted.local" | "client.share.initiated" | "client.share.layout.displayed" | "client.share.paused" | "client.share.selected-app" | "client.share.stopped" | "client.sign-in.start" | "client.sign-in.end" | "client.started-after-shutdown" | "client.started-from-crash" | "client.stuntrace.failed" | "client.switch.app" | "client.terminate.app" | "client.unmuted" | "client.webexapp.start-launch" | "client.webexapp.launched" | "client.login.start" | "client.login.end" | "client.startup.start" | "client.startup.end" | "client.switch.environment" | "client.u2c.limited-catalog.request" | "client.u2c.limited-catalog.response" | "client.u2c.signin-catalog.request" | "client.u2c.signin-catalog.response" | "client.upgrade-window.accepted" | "client.upgrade-window.closed" | "client.upgrade-window.showed" | "client.waiting.user-action" | "client.warhol.downloaded" | "client.wdm.device-registration.request" | "client.wdm.device-registration.response" | "client.webapp-download.start" | "client.webapp-download.in-progress" | "client.webapp-download.end" | "client.whiteboard.loaded" | "client.call.survey.trigger" | "meeting.initiated" | "meeting.converged.initiated" | "meeting.joined" | "page.click.pre-join" | "page.client.abort.join" | "page.client.interstitial-window.launched" | "page.meeting.browser-reset" | "page.meeting.close-browser" | "page.meeting.extension.started" | "page.meeting.extension.app.starting" | "page.meeting.extension.app.started" | "page.meeting.join-fallback.dismiss" | "page.meeting.join-fallback" | "page.meeting.launch-thinclient" | "page.meeting.launched-duplicate.context" | "page.meeting.loading" | "page.meeting.mobile.call" | "page.meeting.mobile.download" | "page.meeting.mobile.join-link" | "page.meeting.plugin.launch-meeting" | "page.meeting.run-plugin" | "page.meeting.switch.to.webapp" | "page.meeting.testing-plugin" | "page.meeting.testing-plugin.finished" | "page.meeting.tfs.start-download" | "page.meeting.urlprotocol.detect" | "page.meeting.waiting.user-action" | "page.meeting.webexapp.launched" | "page.meeting.webinstaller.started" | "page.meeting.webinstaller.ended" | "client.feature.ptplugin.distribution">;
|
|
6
|
+
export declare const NO_PERMISSION_ENRICHMENT: PermissionEnrichmentPolicy;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ClientEventPayload, PrivacyAndSecurityPermission } from '../metrics.types';
|
|
2
|
+
import type { PermissionEnrichmentContext } from './types';
|
|
3
|
+
export declare const PERMISSION_ENRICHMENT_RULES: ({
|
|
4
|
+
events: Set<"client.abort.join" | "client.alert.displayed" | "client.alert.removed" | "client.application.validate" | "client.audio.noise.removal" | "client.breakout-session.join.request" | "client.breakout-session.join.response" | "client.breakout-session.leave" | "client.breakout-session.move.request" | "client.breakout-session.move.response" | "client.call.aborted" | "client.call.declined" | "client.call.fallback" | "client.call.diagnostics" | "client.call.displayed" | "client.call.info" | "client.call.initiated" | "client.call.leave" | "client.call.move-media" | "client.call.remote-ended" | "client.call.remote-started" | "client.call.skip-locus-join" | "client.ci.exchange-token.request" | "client.ci.exchange-token.response" | "client.conversation.request" | "client.conversation.response" | "client.click.pre-join" | "client.crash" | "client.daemon.join.begin" | "client.daemon.job.done" | "client.daemon.launch-meeting-process" | "client.daemon.pending-on-existing-upgrade-job" | "client.daemon.query-site-info" | "client.daemon.upgrade-and-join" | "client.daemon.wakeup-meeting-client" | "client.duplicate.join" | "client.device.resource-room.joined" | "client.dialog-window.dismissed" | "client.dialog-window.selected" | "client.dialog-window.showed" | "client.e2ee.join.response" | "client.embedded-authorize-page.loaded" | "client.embedded-object-info" | "client.entering-background" | "client.entering-foreground" | "client.exit.app" | "client.gesture.recognition" | "client.hologram.initiated" | "client.hologram.stopped" | "client.hologram.remote.initiated" | "client.hologram.remote.stopped" | "client.hung" | "client.ice.end" | "client.ice.start" | "client.idbroker.authorize.request" | "client.idbroker.authorize.response" | "client.idbroker.client-credential.request" | "client.idbroker.client-credential.response" | "client.idbroker.cloud-reduced-scope.request" | "client.idbroker.direct-authorize.request" | "client.idbroker.direct-authorize.response" | "client.idbroker.cloud-reduced-scope.response" | "client.idbroker.exchange-token.request" | "client.idbroker.exchange-token.response" | "client.idbroker.kms-reduced-scope.request" | "client.idbroker.kms-reduced-scope.response" | "client.idbroker.scim.request" | "client.idbroker.scim.response" | "client.idbroker.user-invoke.request" | "client.idbroker.user-invoke.response" | "client.installer.start" | "client.installer.end" | "client.installer.download-app" | "client.installer.decompress-app" | "client.installer.fallback" | "client.installer.install-app" | "client.installer.launch-app" | "client.installer.switch.to.webapp" | "client.launcher.start" | "client.launcher.selfupgrade.start" | "client.launcher.selfupgrade.end" | "client.launcher.downloadapp.start" | "client.launcher.downloadapp.end" | "client.launcher.launchapp" | "client.launcher.end" | "client.launcher.restart.begin" | "client.launcher.restart.end" | "client.license.activations.request" | "client.license.activations.response" | "client.llm.connect.response" | "client.interstitial-window.launched" | "client.interstitial-window.start-launch" | "client.ivr.join.request" | "client.ivr.join.response" | "client.ivr.leave.request" | "client.ivr.leave.response" | "client.ivr.notify.request" | "client.ivr.notify.response" | "client.lobby.entered" | "client.lobby.exited" | "client.locus.decline.request" | "client.locus.join.request" | "client.locus.join.response" | "client.locus.leave.request" | "client.locus.leave.response" | "client.locus.media.request" | "client.locus.media.response" | "client.locus.sync.complete" | "client.media-engine.crash" | "client.media-engine.launched" | "client.media-engine.lost" | "client.media-engine.local-sdp-generated" | "client.media-engine.ready" | "client.media-engine.remote-sdp-received" | "client.media-engine.start-launch" | "client.media-device.ready" | "client.media-device.stop" | "client.media-device.error" | "client.media-status" | "client.media.capabilities" | "client.media.ready" | "client.media.reachability" | "client.media.reconnecting" | "client.media.recovered" | "client.media.render.start" | "client.media.render.stop" | "client.media.rx.start" | "client.media.rx.stop" | "client.media.share.csi.changed" | "client.media.tx.start" | "client.media.tx.stop" | "client.meetinginfo.request" | "client.meetinginfo.response" | "client.meetingmanagersdk.ipc.run" | "client.meeting.app-loaded" | "client.meeting.breakout-session.action" | "client.meeting.breakout-session.summary" | "client.meeting.browser-plugin.started" | "client.meeting.click.joinbutton" | "client.meeting.closed" | "client.meeting.disclaimer-window.accepted" | "client.meeting.disclaimer-window.closed" | "client.meeting.disclaimer-window.showed" | "client.meeting.docshow.request" | "client.meeting.docshow.response" | "client.meeting.e2e.u2c.response" | "client.meeting.e2e.wca.response" | "client.meeting.e2e.key.response" | "client.meeting.e2ee.u2c.response" | "client.meeting.e2ee.wca.response" | "client.meeting.e2ee.key.response" | "client.meeting.gpc.download" | "client.meeting.gpcparameter.request" | "client.meeting.gpcparameter.response" | "client.meeting.interstitial-window.closed" | "client.meeting.interstitial-window.showed" | "client.meeting.join.request" | "client.meeting.key-information" | "client.meeting.launched" | "client.meeting.login-window.clicked" | "client.meeting.login-window.closed" | "client.meeting.login-window.showed" | "client.meeting.login.response" | "client.meeting.people-insights.check.response" | "client.meeting.people-insights.query.response" | "client.meeting.ping.request" | "client.meeting.ping.response" | "client.meeting.plugin-extension.started" | "client.meeting.resume" | "client.meeting.report-log" | "client.meeting.session.connected" | "client.meeting.start-webexapp" | "client.meeting.start-launch" | "client.meeting.summary" | "client.meeting.user-action" | "client.meeting.validated" | "client.meeting.VDI.detect.plugin.response" | "client.meeting.VDI.connect.plugin.response" | "client.mercury.connection.lost" | "client.mercury.connection.restored" | "client.mercury.connection.start" | "client.mercury.connection.connected" | "client.multistream.sca.rx" | "client.multistream.sca.tx" | "client.multistream.scr.rx" | "client.multistream.scr.tx" | "client.muted" | "client.network.changed" | "client.notification.received" | "client.onboarding-window.start" | "client.onboarding-window.end" | "client.permission.closed" | "client.permission.prompted" | "client.pin.collected" | "client.pin.prompt" | "client.post.meeting.hook" | "client.pstnaudio.attempt.correlation" | "client.pstnaudio.attempt.finish" | "client.pstnaudio.attempt.skip" | "client.pstnaudio.attempt.start" | "client.roap-message.received" | "client.roap-message.sent" | "client.scheduling.initiate" | "client.scheduling.notification" | "client.share.floor-accept.notification" | "client.share.floor-grant.cancel-request" | "client.share.floor-grant.notification" | "client.share.floor-grant.request" | "client.share.floor-granted.local" | "client.share.initiated" | "client.share.layout.displayed" | "client.share.paused" | "client.share.selected-app" | "client.share.stopped" | "client.sign-in.start" | "client.sign-in.end" | "client.started-after-shutdown" | "client.started-from-crash" | "client.stuntrace.failed" | "client.switch.app" | "client.terminate.app" | "client.unmuted" | "client.webexapp.start-launch" | "client.webexapp.launched" | "client.login.start" | "client.login.end" | "client.startup.start" | "client.startup.end" | "client.switch.environment" | "client.u2c.limited-catalog.request" | "client.u2c.limited-catalog.response" | "client.u2c.signin-catalog.request" | "client.u2c.signin-catalog.response" | "client.upgrade-window.accepted" | "client.upgrade-window.closed" | "client.upgrade-window.showed" | "client.waiting.user-action" | "client.warhol.downloaded" | "client.wdm.device-registration.request" | "client.wdm.device-registration.response" | "client.webapp-download.start" | "client.webapp-download.in-progress" | "client.webapp-download.end" | "client.whiteboard.loaded" | "client.call.survey.trigger" | "meeting.initiated" | "meeting.converged.initiated" | "meeting.joined" | "page.click.pre-join" | "page.client.abort.join" | "page.client.interstitial-window.launched" | "page.meeting.browser-reset" | "page.meeting.close-browser" | "page.meeting.extension.started" | "page.meeting.extension.app.starting" | "page.meeting.extension.app.started" | "page.meeting.join-fallback.dismiss" | "page.meeting.join-fallback" | "page.meeting.launch-thinclient" | "page.meeting.launched-duplicate.context" | "page.meeting.loading" | "page.meeting.mobile.call" | "page.meeting.mobile.download" | "page.meeting.mobile.join-link" | "page.meeting.plugin.launch-meeting" | "page.meeting.run-plugin" | "page.meeting.switch.to.webapp" | "page.meeting.testing-plugin" | "page.meeting.testing-plugin.finished" | "page.meeting.tfs.start-download" | "page.meeting.urlprotocol.detect" | "page.meeting.waiting.user-action" | "page.meeting.webexapp.launched" | "page.meeting.webinstaller.started" | "page.meeting.webinstaller.ended" | "client.feature.ptplugin.distribution">;
|
|
5
|
+
resolve: (payload: import("../metrics.types").RecursivePartial<import("@webex/event-dictionary-ts").ClientEvent>) => {
|
|
6
|
+
resources: ("additionalProperties" | "camera" | "microphone" | "contentShare")[];
|
|
7
|
+
terminal: false;
|
|
8
|
+
};
|
|
9
|
+
} | {
|
|
10
|
+
events: Set<"client.abort.join" | "client.alert.displayed" | "client.alert.removed" | "client.application.validate" | "client.audio.noise.removal" | "client.breakout-session.join.request" | "client.breakout-session.join.response" | "client.breakout-session.leave" | "client.breakout-session.move.request" | "client.breakout-session.move.response" | "client.call.aborted" | "client.call.declined" | "client.call.fallback" | "client.call.diagnostics" | "client.call.displayed" | "client.call.info" | "client.call.initiated" | "client.call.leave" | "client.call.move-media" | "client.call.remote-ended" | "client.call.remote-started" | "client.call.skip-locus-join" | "client.ci.exchange-token.request" | "client.ci.exchange-token.response" | "client.conversation.request" | "client.conversation.response" | "client.click.pre-join" | "client.crash" | "client.daemon.join.begin" | "client.daemon.job.done" | "client.daemon.launch-meeting-process" | "client.daemon.pending-on-existing-upgrade-job" | "client.daemon.query-site-info" | "client.daemon.upgrade-and-join" | "client.daemon.wakeup-meeting-client" | "client.duplicate.join" | "client.device.resource-room.joined" | "client.dialog-window.dismissed" | "client.dialog-window.selected" | "client.dialog-window.showed" | "client.e2ee.join.response" | "client.embedded-authorize-page.loaded" | "client.embedded-object-info" | "client.entering-background" | "client.entering-foreground" | "client.exit.app" | "client.gesture.recognition" | "client.hologram.initiated" | "client.hologram.stopped" | "client.hologram.remote.initiated" | "client.hologram.remote.stopped" | "client.hung" | "client.ice.end" | "client.ice.start" | "client.idbroker.authorize.request" | "client.idbroker.authorize.response" | "client.idbroker.client-credential.request" | "client.idbroker.client-credential.response" | "client.idbroker.cloud-reduced-scope.request" | "client.idbroker.direct-authorize.request" | "client.idbroker.direct-authorize.response" | "client.idbroker.cloud-reduced-scope.response" | "client.idbroker.exchange-token.request" | "client.idbroker.exchange-token.response" | "client.idbroker.kms-reduced-scope.request" | "client.idbroker.kms-reduced-scope.response" | "client.idbroker.scim.request" | "client.idbroker.scim.response" | "client.idbroker.user-invoke.request" | "client.idbroker.user-invoke.response" | "client.installer.start" | "client.installer.end" | "client.installer.download-app" | "client.installer.decompress-app" | "client.installer.fallback" | "client.installer.install-app" | "client.installer.launch-app" | "client.installer.switch.to.webapp" | "client.launcher.start" | "client.launcher.selfupgrade.start" | "client.launcher.selfupgrade.end" | "client.launcher.downloadapp.start" | "client.launcher.downloadapp.end" | "client.launcher.launchapp" | "client.launcher.end" | "client.launcher.restart.begin" | "client.launcher.restart.end" | "client.license.activations.request" | "client.license.activations.response" | "client.llm.connect.response" | "client.interstitial-window.launched" | "client.interstitial-window.start-launch" | "client.ivr.join.request" | "client.ivr.join.response" | "client.ivr.leave.request" | "client.ivr.leave.response" | "client.ivr.notify.request" | "client.ivr.notify.response" | "client.lobby.entered" | "client.lobby.exited" | "client.locus.decline.request" | "client.locus.join.request" | "client.locus.join.response" | "client.locus.leave.request" | "client.locus.leave.response" | "client.locus.media.request" | "client.locus.media.response" | "client.locus.sync.complete" | "client.media-engine.crash" | "client.media-engine.launched" | "client.media-engine.lost" | "client.media-engine.local-sdp-generated" | "client.media-engine.ready" | "client.media-engine.remote-sdp-received" | "client.media-engine.start-launch" | "client.media-device.ready" | "client.media-device.stop" | "client.media-device.error" | "client.media-status" | "client.media.capabilities" | "client.media.ready" | "client.media.reachability" | "client.media.reconnecting" | "client.media.recovered" | "client.media.render.start" | "client.media.render.stop" | "client.media.rx.start" | "client.media.rx.stop" | "client.media.share.csi.changed" | "client.media.tx.start" | "client.media.tx.stop" | "client.meetinginfo.request" | "client.meetinginfo.response" | "client.meetingmanagersdk.ipc.run" | "client.meeting.app-loaded" | "client.meeting.breakout-session.action" | "client.meeting.breakout-session.summary" | "client.meeting.browser-plugin.started" | "client.meeting.click.joinbutton" | "client.meeting.closed" | "client.meeting.disclaimer-window.accepted" | "client.meeting.disclaimer-window.closed" | "client.meeting.disclaimer-window.showed" | "client.meeting.docshow.request" | "client.meeting.docshow.response" | "client.meeting.e2e.u2c.response" | "client.meeting.e2e.wca.response" | "client.meeting.e2e.key.response" | "client.meeting.e2ee.u2c.response" | "client.meeting.e2ee.wca.response" | "client.meeting.e2ee.key.response" | "client.meeting.gpc.download" | "client.meeting.gpcparameter.request" | "client.meeting.gpcparameter.response" | "client.meeting.interstitial-window.closed" | "client.meeting.interstitial-window.showed" | "client.meeting.join.request" | "client.meeting.key-information" | "client.meeting.launched" | "client.meeting.login-window.clicked" | "client.meeting.login-window.closed" | "client.meeting.login-window.showed" | "client.meeting.login.response" | "client.meeting.people-insights.check.response" | "client.meeting.people-insights.query.response" | "client.meeting.ping.request" | "client.meeting.ping.response" | "client.meeting.plugin-extension.started" | "client.meeting.resume" | "client.meeting.report-log" | "client.meeting.session.connected" | "client.meeting.start-webexapp" | "client.meeting.start-launch" | "client.meeting.summary" | "client.meeting.user-action" | "client.meeting.validated" | "client.meeting.VDI.detect.plugin.response" | "client.meeting.VDI.connect.plugin.response" | "client.mercury.connection.lost" | "client.mercury.connection.restored" | "client.mercury.connection.start" | "client.mercury.connection.connected" | "client.multistream.sca.rx" | "client.multistream.sca.tx" | "client.multistream.scr.rx" | "client.multistream.scr.tx" | "client.muted" | "client.network.changed" | "client.notification.received" | "client.onboarding-window.start" | "client.onboarding-window.end" | "client.permission.closed" | "client.permission.prompted" | "client.pin.collected" | "client.pin.prompt" | "client.post.meeting.hook" | "client.pstnaudio.attempt.correlation" | "client.pstnaudio.attempt.finish" | "client.pstnaudio.attempt.skip" | "client.pstnaudio.attempt.start" | "client.roap-message.received" | "client.roap-message.sent" | "client.scheduling.initiate" | "client.scheduling.notification" | "client.share.floor-accept.notification" | "client.share.floor-grant.cancel-request" | "client.share.floor-grant.notification" | "client.share.floor-grant.request" | "client.share.floor-granted.local" | "client.share.initiated" | "client.share.layout.displayed" | "client.share.paused" | "client.share.selected-app" | "client.share.stopped" | "client.sign-in.start" | "client.sign-in.end" | "client.started-after-shutdown" | "client.started-from-crash" | "client.stuntrace.failed" | "client.switch.app" | "client.terminate.app" | "client.unmuted" | "client.webexapp.start-launch" | "client.webexapp.launched" | "client.login.start" | "client.login.end" | "client.startup.start" | "client.startup.end" | "client.switch.environment" | "client.u2c.limited-catalog.request" | "client.u2c.limited-catalog.response" | "client.u2c.signin-catalog.request" | "client.u2c.signin-catalog.response" | "client.upgrade-window.accepted" | "client.upgrade-window.closed" | "client.upgrade-window.showed" | "client.waiting.user-action" | "client.warhol.downloaded" | "client.wdm.device-registration.request" | "client.wdm.device-registration.response" | "client.webapp-download.start" | "client.webapp-download.in-progress" | "client.webapp-download.end" | "client.whiteboard.loaded" | "client.call.survey.trigger" | "meeting.initiated" | "meeting.converged.initiated" | "meeting.joined" | "page.click.pre-join" | "page.client.abort.join" | "page.client.interstitial-window.launched" | "page.meeting.browser-reset" | "page.meeting.close-browser" | "page.meeting.extension.started" | "page.meeting.extension.app.starting" | "page.meeting.extension.app.started" | "page.meeting.join-fallback.dismiss" | "page.meeting.join-fallback" | "page.meeting.launch-thinclient" | "page.meeting.launched-duplicate.context" | "page.meeting.loading" | "page.meeting.mobile.call" | "page.meeting.mobile.download" | "page.meeting.mobile.join-link" | "page.meeting.plugin.launch-meeting" | "page.meeting.run-plugin" | "page.meeting.switch.to.webapp" | "page.meeting.testing-plugin" | "page.meeting.testing-plugin.finished" | "page.meeting.tfs.start-download" | "page.meeting.urlprotocol.detect" | "page.meeting.waiting.user-action" | "page.meeting.webexapp.launched" | "page.meeting.webinstaller.started" | "page.meeting.webinstaller.ended" | "client.feature.ptplugin.distribution">;
|
|
11
|
+
resolve: () => {
|
|
12
|
+
resources: ("camera" | "microphone" | "contentShare")[];
|
|
13
|
+
terminal: true;
|
|
14
|
+
};
|
|
15
|
+
})[];
|
|
16
|
+
/**
|
|
17
|
+
* Enriches eligible client events with relevant browser permission changes.
|
|
18
|
+
*/
|
|
19
|
+
export default class PrivacyAndSecurityPermissionEnricher {
|
|
20
|
+
private permission?;
|
|
21
|
+
private lastReported;
|
|
22
|
+
private readonly onEnrichmentError;
|
|
23
|
+
/**
|
|
24
|
+
* Creates a permission enricher.
|
|
25
|
+
* @param {Function} onEnrichmentError permission enrichment error handler
|
|
26
|
+
*/
|
|
27
|
+
constructor(onEnrichmentError: (error: unknown) => void);
|
|
28
|
+
/**
|
|
29
|
+
* Stores the latest normalized browser permission state.
|
|
30
|
+
* @param {PrivacyAndSecurityPermission} permission permission snapshot
|
|
31
|
+
* @returns {void}
|
|
32
|
+
*/
|
|
33
|
+
setPermission(permission: PrivacyAndSecurityPermission): void;
|
|
34
|
+
/**
|
|
35
|
+
* Returns the original payload or a copy enriched with relevant permission changes.
|
|
36
|
+
* @param {PermissionEnrichmentContext} context event context and permission history scope
|
|
37
|
+
* @returns {ClientEventPayload | undefined}
|
|
38
|
+
*/
|
|
39
|
+
enrich({ name, payload, scope, }: PermissionEnrichmentContext): ClientEventPayload | undefined;
|
|
40
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ClientEvent, ClientEventPayload, PrivacyAndSecurityPermissionResource } from '../metrics.types';
|
|
2
|
+
export type PermissionEnrichmentPolicy = {
|
|
3
|
+
resources: readonly PrivacyAndSecurityPermissionResource[];
|
|
4
|
+
terminal: boolean;
|
|
5
|
+
};
|
|
6
|
+
export type PermissionEnrichmentRule = {
|
|
7
|
+
events: ReadonlySet<ClientEvent['name']>;
|
|
8
|
+
resolve: (payload?: ClientEventPayload) => PermissionEnrichmentPolicy;
|
|
9
|
+
};
|
|
10
|
+
export type PermissionEnrichmentContext = {
|
|
11
|
+
name: ClientEvent['name'];
|
|
12
|
+
payload?: ClientEventPayload;
|
|
13
|
+
scope: string;
|
|
14
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ClientEventPayload, PrivacyAndSecurityPermission, PrivacyAndSecurityPermissionResource } from '../metrics.types';
|
|
2
|
+
export declare const resolveMediaResources: (payload?: ClientEventPayload) => PrivacyAndSecurityPermissionResource[];
|
|
3
|
+
export declare const resolveContentShareResources: (payload?: ClientEventPayload) => PrivacyAndSecurityPermissionResource[];
|
|
4
|
+
export declare const projectPrivacyAndSecurityPermission: (permission: PrivacyAndSecurityPermission, resources: readonly PrivacyAndSecurityPermissionResource[]) => PrivacyAndSecurityPermission | undefined;
|
|
5
|
+
export declare const getChangedPermission: (current: PrivacyAndSecurityPermission, previous: PrivacyAndSecurityPermission) => PrivacyAndSecurityPermission | undefined;
|