@webex/plugin-meetings 3.8.1-next.9 → 3.8.1

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 (230) hide show
  1. package/README.md +13 -26
  2. package/dist/annotation/annotation.types.d.ts +42 -0
  3. package/dist/annotation/constants.d.ts +31 -0
  4. package/dist/annotation/index.d.ts +117 -0
  5. package/dist/breakouts/breakout.d.ts +8 -0
  6. package/dist/breakouts/breakout.js +1 -1
  7. package/dist/breakouts/collection.d.ts +5 -0
  8. package/dist/breakouts/edit-lock-error.d.ts +15 -0
  9. package/dist/breakouts/events.d.ts +8 -0
  10. package/dist/breakouts/index.d.ts +5 -0
  11. package/dist/breakouts/index.js +1 -1
  12. package/dist/breakouts/request.d.ts +22 -0
  13. package/dist/breakouts/utils.d.ts +15 -0
  14. package/dist/common/browser-detection.d.ts +9 -0
  15. package/dist/common/collection.d.ts +48 -0
  16. package/dist/common/config.d.ts +2 -0
  17. package/dist/common/errors/captcha-error.d.ts +15 -0
  18. package/dist/common/errors/intent-to-join.d.ts +16 -0
  19. package/dist/common/errors/join-meeting.d.ts +17 -0
  20. package/dist/common/errors/media.d.ts +15 -0
  21. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  22. package/dist/common/errors/parameter.d.ts +15 -0
  23. package/dist/common/errors/password-error.d.ts +15 -0
  24. package/dist/common/errors/permission.d.ts +14 -0
  25. package/dist/common/errors/reclaim-host-role-error.d.ts +60 -0
  26. package/dist/common/errors/reclaim-host-role-error.js +158 -0
  27. package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
  28. package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
  29. package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
  30. package/dist/common/errors/reconnection-in-progress.js +35 -0
  31. package/dist/common/errors/reconnection-in-progress.js.map +1 -0
  32. package/dist/common/errors/reconnection.d.ts +15 -0
  33. package/dist/common/errors/stats.d.ts +15 -0
  34. package/dist/common/errors/webex-errors.d.ts +81 -0
  35. package/dist/common/errors/webex-meetings-error.d.ts +20 -0
  36. package/dist/common/events/events-scope.d.ts +17 -0
  37. package/dist/common/events/events.d.ts +12 -0
  38. package/dist/common/events/trigger-proxy.d.ts +2 -0
  39. package/dist/common/events/util.d.ts +2 -0
  40. package/dist/common/logs/logger-config.d.ts +2 -0
  41. package/dist/common/logs/logger-proxy.d.ts +2 -0
  42. package/dist/common/logs/request.d.ts +34 -0
  43. package/dist/common/queue.d.ts +32 -0
  44. package/dist/config.d.ts +73 -0
  45. package/dist/constants.d.ts +952 -0
  46. package/dist/constants.js +1 -8
  47. package/dist/constants.js.map +1 -1
  48. package/dist/controls-options-manager/constants.d.ts +4 -0
  49. package/dist/controls-options-manager/enums.d.ts +5 -0
  50. package/dist/controls-options-manager/enums.js +0 -1
  51. package/dist/controls-options-manager/enums.js.map +1 -1
  52. package/dist/controls-options-manager/index.d.ts +120 -0
  53. package/dist/controls-options-manager/types.d.ts +43 -0
  54. package/dist/controls-options-manager/types.js.map +1 -1
  55. package/dist/controls-options-manager/util.d.ts +7 -0
  56. package/dist/controls-options-manager/util.js +0 -26
  57. package/dist/controls-options-manager/util.js.map +1 -1
  58. package/dist/index.d.ts +4 -0
  59. package/dist/interceptors/index.d.ts +2 -0
  60. package/dist/interceptors/locusRetry.d.ts +27 -0
  61. package/dist/interpretation/collection.d.ts +5 -0
  62. package/dist/interpretation/index.d.ts +5 -0
  63. package/dist/interpretation/index.js +1 -1
  64. package/dist/interpretation/siLanguage.d.ts +5 -0
  65. package/dist/interpretation/siLanguage.js +1 -1
  66. package/dist/locus-info/controlsUtils.d.ts +2 -0
  67. package/dist/locus-info/controlsUtils.js +3 -11
  68. package/dist/locus-info/controlsUtils.js.map +1 -1
  69. package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
  70. package/dist/locus-info/fullState.d.ts +2 -0
  71. package/dist/locus-info/hostUtils.d.ts +2 -0
  72. package/dist/locus-info/index.d.ts +269 -0
  73. package/dist/locus-info/index.js +0 -30
  74. package/dist/locus-info/index.js.map +1 -1
  75. package/dist/locus-info/infoUtils.d.ts +2 -0
  76. package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
  77. package/dist/locus-info/parser.d.ts +212 -0
  78. package/dist/locus-info/selfUtils.d.ts +2 -0
  79. package/dist/media/index.d.ts +32 -0
  80. package/dist/media/properties.d.ts +108 -0
  81. package/dist/media/util.d.ts +2 -0
  82. package/dist/mediaQualityMetrics/config.d.ts +233 -0
  83. package/dist/mediaQualityMetrics/config.js +513 -0
  84. package/dist/mediaQualityMetrics/config.js.map +1 -0
  85. package/dist/meeting/brbState.js +2 -3
  86. package/dist/meeting/brbState.js.map +1 -1
  87. package/dist/meeting/effectsState.d.ts +42 -0
  88. package/dist/meeting/effectsState.js +260 -0
  89. package/dist/meeting/effectsState.js.map +1 -0
  90. package/dist/meeting/in-meeting-actions.d.ts +79 -0
  91. package/dist/meeting/in-meeting-actions.js +1 -5
  92. package/dist/meeting/in-meeting-actions.js.map +1 -1
  93. package/dist/meeting/index.d.ts +1622 -0
  94. package/dist/meeting/index.js +66 -88
  95. package/dist/meeting/index.js.map +1 -1
  96. package/dist/meeting/locusMediaRequest.d.ts +74 -0
  97. package/dist/meeting/muteState.d.ts +116 -0
  98. package/dist/meeting/request.d.ts +257 -0
  99. package/dist/meeting/request.type.d.ts +11 -0
  100. package/dist/meeting/state.d.ts +9 -0
  101. package/dist/meeting/util.d.ts +2 -0
  102. package/dist/meeting/voicea-meeting.d.ts +16 -0
  103. package/dist/meeting-info/collection.d.ts +20 -0
  104. package/dist/meeting-info/index.d.ts +57 -0
  105. package/dist/meeting-info/meeting-info-v2.d.ts +93 -0
  106. package/dist/meeting-info/request.d.ts +22 -0
  107. package/dist/meeting-info/util.d.ts +2 -0
  108. package/dist/meeting-info/utilv2.d.ts +2 -0
  109. package/dist/meetings/collection.d.ts +23 -0
  110. package/dist/meetings/index.d.ts +296 -0
  111. package/dist/meetings/meetings.types.d.ts +4 -0
  112. package/dist/meetings/request.d.ts +27 -0
  113. package/dist/meetings/util.d.ts +18 -0
  114. package/dist/member/index.d.ts +148 -0
  115. package/dist/member/member.types.d.ts +11 -0
  116. package/dist/member/member.types.js +18 -0
  117. package/dist/member/member.types.js.map +1 -0
  118. package/dist/member/types.d.ts +32 -0
  119. package/dist/member/util.d.ts +2 -0
  120. package/dist/members/collection.d.ts +24 -0
  121. package/dist/members/index.d.ts +308 -0
  122. package/dist/members/request.d.ts +58 -0
  123. package/dist/members/types.d.ts +25 -0
  124. package/dist/members/util.d.ts +2 -0
  125. package/dist/metrics/config.d.ts +169 -0
  126. package/dist/metrics/config.js +289 -0
  127. package/dist/metrics/config.js.map +1 -0
  128. package/dist/metrics/constants.d.ts +59 -0
  129. package/dist/metrics/constants.js +0 -1
  130. package/dist/metrics/constants.js.map +1 -1
  131. package/dist/metrics/index.d.ts +152 -0
  132. package/dist/multistream/mediaRequestManager.d.ts +119 -0
  133. package/dist/multistream/receiveSlot.d.ts +68 -0
  134. package/dist/multistream/receiveSlotManager.d.ts +56 -0
  135. package/dist/multistream/remoteMedia.d.ts +72 -0
  136. package/dist/multistream/remoteMediaGroup.d.ts +49 -0
  137. package/dist/multistream/remoteMediaManager.d.ts +300 -0
  138. package/dist/multistream/sendSlotManager.d.ts +69 -0
  139. package/dist/networkQualityMonitor/index.d.ts +70 -0
  140. package/dist/networkQualityMonitor/index.js +226 -0
  141. package/dist/networkQualityMonitor/index.js.map +1 -0
  142. package/dist/peer-connection-manager/index.d.ts +6 -0
  143. package/dist/peer-connection-manager/index.js +671 -0
  144. package/dist/peer-connection-manager/index.js.map +1 -0
  145. package/dist/peer-connection-manager/util.d.ts +6 -0
  146. package/dist/peer-connection-manager/util.js +110 -0
  147. package/dist/peer-connection-manager/util.js.map +1 -0
  148. package/dist/personal-meeting-room/index.d.ts +47 -0
  149. package/dist/personal-meeting-room/request.d.ts +14 -0
  150. package/dist/personal-meeting-room/util.d.ts +2 -0
  151. package/dist/reachability/clusterReachability.d.ts +109 -0
  152. package/dist/reachability/index.d.ts +139 -0
  153. package/dist/reachability/index.js +10 -5
  154. package/dist/reachability/index.js.map +1 -1
  155. package/dist/reachability/request.d.ts +35 -0
  156. package/dist/reachability/util.d.ts +8 -0
  157. package/dist/reactions/constants.d.ts +3 -0
  158. package/dist/reactions/reactions.d.ts +4 -0
  159. package/dist/reactions/reactions.type.d.ts +32 -0
  160. package/dist/reconnection-manager/index.d.ts +112 -0
  161. package/dist/recording-controller/enums.d.ts +7 -0
  162. package/dist/recording-controller/index.d.ts +193 -0
  163. package/dist/recording-controller/util.d.ts +13 -0
  164. package/dist/roap/collection.d.ts +10 -0
  165. package/dist/roap/collection.js +63 -0
  166. package/dist/roap/collection.js.map +1 -0
  167. package/dist/roap/handler.d.ts +47 -0
  168. package/dist/roap/handler.js +279 -0
  169. package/dist/roap/handler.js.map +1 -0
  170. package/dist/roap/index.d.ts +116 -0
  171. package/dist/roap/request.d.ts +35 -0
  172. package/dist/roap/state.d.ts +9 -0
  173. package/dist/roap/state.js +127 -0
  174. package/dist/roap/state.js.map +1 -0
  175. package/dist/roap/turnDiscovery.d.ts +81 -0
  176. package/dist/roap/util.d.ts +2 -0
  177. package/dist/roap/util.js +76 -0
  178. package/dist/roap/util.js.map +1 -0
  179. package/dist/rtcMetrics/constants.d.ts +4 -0
  180. package/dist/rtcMetrics/constants.js +11 -0
  181. package/dist/rtcMetrics/constants.js.map +1 -0
  182. package/dist/rtcMetrics/index.d.ts +61 -0
  183. package/dist/rtcMetrics/index.js +197 -0
  184. package/dist/rtcMetrics/index.js.map +1 -0
  185. package/dist/statsAnalyzer/global.d.ts +118 -0
  186. package/dist/statsAnalyzer/global.js +127 -0
  187. package/dist/statsAnalyzer/global.js.map +1 -0
  188. package/dist/statsAnalyzer/index.d.ts +193 -0
  189. package/dist/statsAnalyzer/index.js +1019 -0
  190. package/dist/statsAnalyzer/index.js.map +1 -0
  191. package/dist/statsAnalyzer/mqaUtil.d.ts +22 -0
  192. package/dist/statsAnalyzer/mqaUtil.js +181 -0
  193. package/dist/statsAnalyzer/mqaUtil.js.map +1 -0
  194. package/dist/transcription/index.d.ts +64 -0
  195. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  196. package/dist/types/constants.d.ts +0 -6
  197. package/dist/types/controls-options-manager/enums.d.ts +1 -2
  198. package/dist/types/controls-options-manager/types.d.ts +1 -4
  199. package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
  200. package/dist/types/meeting/in-meeting-actions.d.ts +0 -4
  201. package/dist/types/metrics/constants.d.ts +0 -1
  202. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  203. package/dist/types/reachability/index.d.ts +2 -2
  204. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  205. package/dist/types/rtcMetrics/index.d.ts +71 -0
  206. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  207. package/dist/types/statsAnalyzer/index.d.ts +217 -0
  208. package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
  209. package/dist/webinar/collection.d.ts +16 -0
  210. package/dist/webinar/index.d.ts +5 -0
  211. package/dist/webinar/index.js +1 -1
  212. package/package.json +23 -23
  213. package/src/constants.ts +0 -9
  214. package/src/controls-options-manager/enums.ts +0 -1
  215. package/src/controls-options-manager/types.ts +1 -6
  216. package/src/controls-options-manager/util.ts +0 -31
  217. package/src/locus-info/controlsUtils.ts +0 -15
  218. package/src/locus-info/index.ts +0 -41
  219. package/src/meeting/brbState.ts +2 -4
  220. package/src/meeting/in-meeting-actions.ts +0 -8
  221. package/src/meeting/index.ts +29 -62
  222. package/src/metrics/constants.ts +0 -1
  223. package/src/reachability/index.ts +13 -5
  224. package/test/unit/spec/controls-options-manager/util.js +0 -58
  225. package/test/unit/spec/locus-info/controlsUtils.js +0 -52
  226. package/test/unit/spec/locus-info/index.js +0 -42
  227. package/test/unit/spec/meeting/brbState.ts +2 -21
  228. package/test/unit/spec/meeting/in-meeting-actions.ts +0 -4
  229. package/test/unit/spec/meeting/index.js +27 -130
  230. package/test/unit/spec/reachability/index.ts +6 -2
@@ -0,0 +1,193 @@
1
+ import MeetingRequest from '../meeting/request';
2
+ /**
3
+ * @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting
4
+ * @export
5
+ * @private
6
+ * @class Recording
7
+ */
8
+ export default class RecordingController {
9
+ /**
10
+ * @instance
11
+ * @type {MeetingRequest}
12
+ * @private
13
+ * @memberof RecordingController
14
+ */
15
+ private request;
16
+ /**
17
+ * @instance
18
+ * @type {Array}
19
+ * @private
20
+ * @memberof RecordingInfo
21
+ */
22
+ private displayHints;
23
+ /**
24
+ * @instance
25
+ * @type {string}
26
+ * @private
27
+ * @memberof RecordingInfo
28
+ */
29
+ private serviceUrl;
30
+ /**
31
+ * @instance
32
+ * @type {string}
33
+ * @private
34
+ * @memberof RecordingInfo
35
+ */
36
+ private sessionId;
37
+ /**
38
+ * @instance
39
+ * @type {string}
40
+ * @private
41
+ * @memberof RecordingInfo
42
+ */
43
+ private locusUrl;
44
+ /**
45
+ * @instance
46
+ * @type {string}
47
+ * @private
48
+ * @memberof RecordingInfo
49
+ */
50
+ private locusId;
51
+ /**
52
+ * @param {MeetingRequest} request
53
+ * @param {Object} options
54
+ * @constructor
55
+ * @memberof RecordingController
56
+ */
57
+ constructor(request: MeetingRequest, options?: {
58
+ serviceUrl?: string;
59
+ sessionId: string;
60
+ locusUrl: string;
61
+ displayHints?: Array<string>;
62
+ });
63
+ /**
64
+ * @param {MeetingRequest} request
65
+ * @param {LocusInfo} info
66
+ * @returns {void}
67
+ * @private
68
+ * @memberof RecordingController
69
+ */
70
+ private initialize;
71
+ /**
72
+ * @param {Object} options
73
+ * @returns {void}
74
+ * @public
75
+ * @memberof RecordingController
76
+ */
77
+ set(options?: {
78
+ serviceUrl?: string;
79
+ sessionId: string;
80
+ locusUrl: string;
81
+ displayHints?: Array<string>;
82
+ }): void;
83
+ /**
84
+ * @param {string} url
85
+ * @returns {void}
86
+ * @public
87
+ * @memberof RecordingController
88
+ */
89
+ setLocusUrl(url: string): void;
90
+ /**
91
+ * @param {Array} hints
92
+ * @returns {void}
93
+ * @public
94
+ * @memberof RecordingController
95
+ */
96
+ setDisplayHints(hints: Array<string>): void;
97
+ /**
98
+ * @param {string} id
99
+ * @returns {void}
100
+ * @public
101
+ * @memberof RecordingController
102
+ */
103
+ setSessionId(id: string): void;
104
+ /**
105
+ * @param {string} url
106
+ * @returns {void}
107
+ * @public
108
+ * @memberof RecordingController
109
+ */
110
+ setServiceUrl(url: string): void;
111
+ /**
112
+ * @returns {string}
113
+ * @public
114
+ * @memberof RecordingController
115
+ */
116
+ getLocusUrl(): string;
117
+ /**
118
+ * @returns {string}
119
+ * @public
120
+ * @memberof RecordingController
121
+ */
122
+ getLocusId(): string;
123
+ /**
124
+ * @returns {string}
125
+ * @public
126
+ * @memberof RecordingController
127
+ */
128
+ getSessionId(): string;
129
+ /**
130
+ * @returns {string}
131
+ * @public
132
+ * @memberof RecordingController
133
+ */
134
+ getServiceUrl(): string;
135
+ /**
136
+ * @returns {Array}
137
+ * @public
138
+ * @memberof RecordingController
139
+ */
140
+ getDisplayHints(): string[];
141
+ /**
142
+ * @param {Object} options
143
+ * @returns {void}
144
+ * @private
145
+ * @memberof RecordingController
146
+ */
147
+ private extract;
148
+ /**
149
+ * @param {RecordingAction} action
150
+ * @private
151
+ * @memberof RecordingController
152
+ * @returns {Promise}
153
+ */
154
+ private recordingService;
155
+ /**
156
+ * @param {RecordingAction} action
157
+ * @private
158
+ * @memberof RecordingController
159
+ * @returns {Promise}
160
+ */
161
+ private recordingControls;
162
+ /**
163
+ * @param {RecordingAction} action
164
+ * @private
165
+ * @memberof RecordingController
166
+ * @returns {Promise}
167
+ */
168
+ private recordingFacade;
169
+ /**
170
+ * @private
171
+ * @memberof RecordingController
172
+ * @returns {Promise}
173
+ */
174
+ startRecording(): Promise<any>;
175
+ /**
176
+ * @private
177
+ * @memberof RecordingController
178
+ * @returns {Promise}
179
+ */
180
+ stopRecording(): Promise<any>;
181
+ /**
182
+ * @private
183
+ * @memberof RecordingController
184
+ * @returns {Promise}
185
+ */
186
+ pauseRecording(): Promise<any>;
187
+ /**
188
+ * @private
189
+ * @memberof RecordingController
190
+ * @returns {Promise}
191
+ */
192
+ resumeRecording(): Promise<any>;
193
+ }
@@ -0,0 +1,13 @@
1
+ import RecordingAction from './enums';
2
+ declare const _default: {
3
+ canUserStart: (displayHints: string[]) => boolean;
4
+ canUserPause: (displayHints: string[]) => boolean;
5
+ canUserResume: (displayHints: string[]) => boolean;
6
+ canUserStop: (displayHints: string[]) => boolean;
7
+ deriveRecordingStates: (action: RecordingAction) => {
8
+ recording: boolean;
9
+ paused: boolean;
10
+ };
11
+ extractLocusId: (url: string) => string;
12
+ };
13
+ export default _default;
@@ -0,0 +1,10 @@
1
+ declare const RoapCollection: {
2
+ sessions: {};
3
+ getSession(id: any): any;
4
+ deleteSession(id: any): void;
5
+ getSessionSequence(id: any, seqId: any): any;
6
+ deleteSessionSequence(id: any, seqId: any): void;
7
+ isBusy(id: any): boolean;
8
+ onSessionSequenceFinish(id: any, seqId: any): void;
9
+ };
10
+ export default RoapCollection;
@@ -0,0 +1,63 @@
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.default = void 0;
9
+ var _state = _interopRequireDefault(require("./state"));
10
+ /* eslint-disable */
11
+ var RoapCollection = {
12
+ sessions: {},
13
+ getSession: function getSession(id) {
14
+ if (!this.sessions[id]) {
15
+ this.sessions[id] = {
16
+ activeSequences: 0
17
+ };
18
+ }
19
+ return this.sessions[id];
20
+ },
21
+ deleteSession: function deleteSession(id) {
22
+ if (this.getSession(id)) {
23
+ delete this.sessions[id];
24
+ }
25
+ },
26
+ getSessionSequence: function getSessionSequence(id, seqId) {
27
+ var session = this.getSession(id);
28
+ if (!session[seqId]) {
29
+ session[seqId] = {
30
+ state: _state.default.createState(),
31
+ finished: false
32
+ };
33
+ session.activeSequences += 1;
34
+ }
35
+ return session[seqId];
36
+ },
37
+ deleteSessionSequence: function deleteSessionSequence(id, seqId) {
38
+ var seq = this.getSessionSequence(id, seqId);
39
+ if (seq) {
40
+ if (!seq.finished) {
41
+ // @ts-ignore
42
+ session.activeSequences -= 1;
43
+ }
44
+ delete this.sessions[id][seqId];
45
+ }
46
+ },
47
+ isBusy: function isBusy(id) {
48
+ var session = this.getSession(id);
49
+ if (!session) return false;
50
+ return session.activeSequences > 0;
51
+ },
52
+ onSessionSequenceFinish: function onSessionSequenceFinish(id, seqId) {
53
+ var session = this.getSession(id);
54
+ var seq = session[seqId];
55
+ if (seq && !seq.finished) {
56
+ seq.finished = true;
57
+ session.activeSequences -= 1;
58
+ }
59
+ }
60
+ };
61
+ var _default = RoapCollection;
62
+ exports.default = _default;
63
+ //# sourceMappingURL=collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_state","_interopRequireDefault","require","RoapCollection","sessions","getSession","id","activeSequences","deleteSession","getSessionSequence","seqId","session","state","RoapStateMachine","createState","finished","deleteSessionSequence","seq","isBusy","onSessionSequenceFinish","_default","exports","default"],"sources":["collection.ts"],"sourcesContent":["import RoapStateMachine from './state';\n\n/* eslint-disable */\nconst RoapCollection = {\n sessions: {},\n\n getSession(id) {\n if (!this.sessions[id]) {\n this.sessions[id] = {\n activeSequences: 0,\n };\n }\n return this.sessions[id];\n },\n\n deleteSession(id) {\n if (this.getSession(id)) {\n delete this.sessions[id];\n }\n },\n\n getSessionSequence(id, seqId) {\n const session = this.getSession(id);\n if (!session[seqId]) {\n session[seqId] = {\n state: RoapStateMachine.createState(),\n finished: false,\n };\n session.activeSequences += 1;\n }\n return session[seqId];\n },\n\n deleteSessionSequence(id, seqId) {\n const seq = this.getSessionSequence(id, seqId);\n if (seq) {\n if (!seq.finished) {\n // @ts-ignore\n session.activeSequences -= 1;\n }\n delete this.sessions[id][seqId];\n }\n },\n\n isBusy(id) {\n const session = this.getSession(id);\n if (!session) return false;\n\n return session.activeSequences > 0;\n },\n\n onSessionSequenceFinish(id, seqId) {\n const session = this.getSession(id);\n const seq = session[seqId];\n if (seq && !seq.finished) {\n seq.finished = true;\n session.activeSequences -= 1;\n }\n },\n};\n\nexport default RoapCollection;\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA;AACA,IAAMC,cAAc,GAAG;EACrBC,QAAQ,EAAE,CAAC,CAAC;EAEZC,UAAU,WAAAA,WAACC,EAAE,EAAE;IACb,IAAI,CAAC,IAAI,CAACF,QAAQ,CAACE,EAAE,CAAC,EAAE;MACtB,IAAI,CAACF,QAAQ,CAACE,EAAE,CAAC,GAAG;QAClBC,eAAe,EAAE;MACnB,CAAC;IACH;IACA,OAAO,IAAI,CAACH,QAAQ,CAACE,EAAE,CAAC;EAC1B,CAAC;EAEDE,aAAa,WAAAA,cAACF,EAAE,EAAE;IAChB,IAAI,IAAI,CAACD,UAAU,CAACC,EAAE,CAAC,EAAE;MACvB,OAAO,IAAI,CAACF,QAAQ,CAACE,EAAE,CAAC;IAC1B;EACF,CAAC;EAEDG,kBAAkB,WAAAA,mBAACH,EAAE,EAAEI,KAAK,EAAE;IAC5B,IAAMC,OAAO,GAAG,IAAI,CAACN,UAAU,CAACC,EAAE,CAAC;IACnC,IAAI,CAACK,OAAO,CAACD,KAAK,CAAC,EAAE;MACnBC,OAAO,CAACD,KAAK,CAAC,GAAG;QACfE,KAAK,EAAEC,cAAgB,CAACC,WAAW,EAAE;QACrCC,QAAQ,EAAE;MACZ,CAAC;MACDJ,OAAO,CAACJ,eAAe,IAAI,CAAC;IAC9B;IACA,OAAOI,OAAO,CAACD,KAAK,CAAC;EACvB,CAAC;EAEDM,qBAAqB,WAAAA,sBAACV,EAAE,EAAEI,KAAK,EAAE;IAC/B,IAAMO,GAAG,GAAG,IAAI,CAACR,kBAAkB,CAACH,EAAE,EAAEI,KAAK,CAAC;IAC9C,IAAIO,GAAG,EAAE;MACP,IAAI,CAACA,GAAG,CAACF,QAAQ,EAAE;QACjB;QACAJ,OAAO,CAACJ,eAAe,IAAI,CAAC;MAC9B;MACA,OAAO,IAAI,CAACH,QAAQ,CAACE,EAAE,CAAC,CAACI,KAAK,CAAC;IACjC;EACF,CAAC;EAEDQ,MAAM,WAAAA,OAACZ,EAAE,EAAE;IACT,IAAMK,OAAO,GAAG,IAAI,CAACN,UAAU,CAACC,EAAE,CAAC;IACnC,IAAI,CAACK,OAAO,EAAE,OAAO,KAAK;IAE1B,OAAOA,OAAO,CAACJ,eAAe,GAAG,CAAC;EACpC,CAAC;EAEDY,uBAAuB,WAAAA,wBAACb,EAAE,EAAEI,KAAK,EAAE;IACjC,IAAMC,OAAO,GAAG,IAAI,CAACN,UAAU,CAACC,EAAE,CAAC;IACnC,IAAMW,GAAG,GAAGN,OAAO,CAACD,KAAK,CAAC;IAC1B,IAAIO,GAAG,IAAI,CAACA,GAAG,CAACF,QAAQ,EAAE;MACxBE,GAAG,CAACF,QAAQ,GAAG,IAAI;MACnBJ,OAAO,CAACJ,eAAe,IAAI,CAAC;IAC9B;EACF;AACF,CAAC;AAAC,IAAAa,QAAA,GAEajB,cAAc;AAAAkB,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -0,0 +1,47 @@
1
+ import { StatelessWebexPlugin } from '@webex/webex-core';
2
+ import Meeting from '../meeting';
3
+ /**
4
+ * @class RoapHandler
5
+ */
6
+ export default class RoapHandler extends StatelessWebexPlugin {
7
+ attrs: any;
8
+ lastRoapMessage: any;
9
+ options: any;
10
+ roapAnswer: any;
11
+ roapFinished: any;
12
+ roapOk: any;
13
+ constructor(attrs: any, options: any, roapOk: any, roapAnswer: any, roapFinished: any);
14
+ /**
15
+ *
16
+ * @param {Object} session
17
+ * @param {Meeting} meeting
18
+ * @param {Object} action
19
+ * @returns {null}
20
+ */
21
+ perform(session: any, meeting: any, action: any): void;
22
+ /**
23
+ *
24
+ * @param {String} signal
25
+ * @param {Object} session
26
+ * @param {Object} action
27
+ * @param {Meeting} meeting
28
+ * @param {String} prefix
29
+ * @returns {null}
30
+ */
31
+ execute(signal: string, session: any, action: any, meeting: Meeting, prefix: string): void;
32
+ /**
33
+ *
34
+ * @param {Object} session
35
+ * @param {Object} action
36
+ * @param {Meeting} meeting
37
+ * @param {String} correlationId
38
+ * @returns {Boolean}
39
+ */
40
+ handleAction(session: object, action: any, meeting: Meeting, correlationId: string): boolean;
41
+ /**
42
+ *
43
+ * @param {Object} action
44
+ * @returns {Boolean}
45
+ */
46
+ submit(action: any): boolean;
47
+ }
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+
3
+ var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
5
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
+ _Object$defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.default = void 0;
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
12
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
14
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
15
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
17
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
18
+ var _webexCore = require("@webex/webex-core");
19
+ var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
20
+ var _constants = require("../constants");
21
+ var _metrics = _interopRequireDefault(require("../metrics"));
22
+ var _constants2 = _interopRequireDefault(require("../metrics/constants"));
23
+ var _util = _interopRequireDefault(require("./util"));
24
+ var _collection = _interopRequireDefault(require("./collection"));
25
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
26
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
27
+ var checkForAndHandleErrors = function checkForAndHandleErrors(action, meeting, correlationId) {
28
+ if (action && action.type) {
29
+ if (action.msg && action.msg.messageType && action.msg.errorType) {
30
+ if (_util.default.findError(action.msg.messageType, action.msg.errorType, action.type)) {
31
+ _util.default.handleError(meeting.mediaProperties.peerConnection).then(function (res) {
32
+ if (res) {
33
+ _collection.default.deleteSessionSequence(correlationId, action.msg.seq);
34
+ }
35
+ }).catch(function (err) {
36
+ _loggerProxy.default.logger.warn("Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ".concat(err));
37
+ });
38
+ return true;
39
+ }
40
+ }
41
+ if (!_util.default.ensureMeeting(meeting, action.type)) {
42
+ return true;
43
+ }
44
+ }
45
+ return false;
46
+ };
47
+ var compareWithLastRoapMessage = function compareWithLastRoapMessage(lastRoapMessage, currentRoapMessage) {
48
+ var _lastRoapMessage$msg, _lastRoapMessage$msg2;
49
+ return (lastRoapMessage === null || lastRoapMessage === void 0 ? void 0 : (_lastRoapMessage$msg = lastRoapMessage.msg) === null || _lastRoapMessage$msg === void 0 ? void 0 : _lastRoapMessage$msg.seq) === currentRoapMessage.msg.seq && (lastRoapMessage === null || lastRoapMessage === void 0 ? void 0 : (_lastRoapMessage$msg2 = lastRoapMessage.msg) === null || _lastRoapMessage$msg2 === void 0 ? void 0 : _lastRoapMessage$msg2.messageType) === currentRoapMessage.msg.messageType;
50
+ };
51
+ var handleSessionStep = function handleSessionStep(_ref) {
52
+ var roap = _ref.roap,
53
+ session = _ref.session,
54
+ locusUrl = _ref.locusUrl,
55
+ correlationId = _ref.correlationId;
56
+ var _roap$msg = roap.msg,
57
+ sequenceId = _roap$msg.seq,
58
+ messageType = _roap$msg.messageType;
59
+ if (session.OFFER && messageType === _constants._OFFER_) {
60
+ session.GLARE_OFFER = roap.msg;
61
+ session.GLARE_OFFER.remote = !!roap.remote;
62
+ var metricName = _constants2.default.ROAP_GLARE_CONDITION;
63
+ var data = {
64
+ correlation_id: correlationId,
65
+ locus_id: locusUrl.split('/').pop(),
66
+ sequence: sequenceId
67
+ };
68
+ _metrics.default.sendBehavioralMetric(metricName, data);
69
+ _loggerProxy.default.logger.warn("Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ".concat(sequenceId));
70
+ } else {
71
+ _loggerProxy.default.logger.info("Roap:handler#handleSessionStep --> Save OFFER/ANSWER seq:".concat(sequenceId, " new mercury event ").concat(messageType, "local state: ").concat((0, _stringify.default)(session.state.state, null, 2)));
72
+ session[messageType] = roap.msg;
73
+ session[messageType].remote = !!roap.remote;
74
+ }
75
+ };
76
+
77
+ /**
78
+ * @class RoapHandler
79
+ */
80
+ var RoapHandler = /*#__PURE__*/function (_StatelessWebexPlugin) {
81
+ (0, _inherits2.default)(RoapHandler, _StatelessWebexPlugin);
82
+ var _super = _createSuper(RoapHandler);
83
+ function RoapHandler(attrs, options, roapOk, roapAnswer, roapFinished) {
84
+ var _this;
85
+ (0, _classCallCheck2.default)(this, RoapHandler);
86
+ _this = _super.call(this, {}, options);
87
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "attrs", void 0);
88
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastRoapMessage", void 0);
89
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "options", void 0);
90
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roapAnswer", void 0);
91
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roapFinished", void 0);
92
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "roapOk", void 0);
93
+ _this.attrs = attrs;
94
+ _this.options = options;
95
+ _this.roapOk = roapOk;
96
+ _this.roapFinished = roapFinished;
97
+ _this.roapAnswer = roapAnswer;
98
+ _this.lastRoapMessage = null;
99
+ return _this;
100
+ }
101
+
102
+ /**
103
+ *
104
+ * @param {Object} session
105
+ * @param {Meeting} meeting
106
+ * @param {Object} action
107
+ * @returns {null}
108
+ */
109
+ (0, _createClass2.default)(RoapHandler, [{
110
+ key: "perform",
111
+ value: function perform(session, meeting, action) {
112
+ var _this2 = this;
113
+ switch (session.state.state) {
114
+ case _constants.ROAP.ROAP_STATE.INIT:
115
+ this.roapFinished(meeting.correlationId, action.msg.seq);
116
+ break;
117
+
118
+ // TODO: (important )handle roap state for sending offers as well
119
+ // case ROAP.ROAP_STATE.WAIT_RX_OFFER:
120
+ // case ROAP.ROAP_STATE.WAIT_RX_ANSWER:
121
+ // case ROAP.ROAP_STATE.WAIT_RX_OK:
122
+ case _constants.ROAP.ROAP_STATE.WAIT_TX_ANSWER:
123
+ // eslint-disable-next-line no-warning-comments
124
+ // TODO: sometime the you get an answer while you are creating an offer so SKIP
125
+ // Server will send the mercury event comes back
126
+ if (_util.default.shouldHandleMedia(meeting)) {
127
+ _util.default.updatePeerConnection(meeting, session).then(function (answerSdps) {
128
+ _this2.roapAnswer({
129
+ mediaId: meeting.mediaId,
130
+ sdps: answerSdps,
131
+ seq: session.OFFER.seq,
132
+ correlationId: meeting.correlationId,
133
+ audioMuted: meeting.isAudioMuted(),
134
+ videoMuted: meeting.isVideoMuted()
135
+ });
136
+ }).catch(function (error) {
137
+ var metricName = _constants2.default.ROAP_ANSWER_FAILURE;
138
+ var data = {
139
+ correlation_id: meeting.correlationId,
140
+ locus_id: meeting.locusUrl.split('/').pop(),
141
+ reason: error.message,
142
+ stack: error.stack
143
+ };
144
+ var metadata = {
145
+ type: error.name
146
+ };
147
+ _metrics.default.sendBehavioralMetric(metricName, data, metadata);
148
+ _loggerProxy.default.logger.error("Roap:handler#perform --> Error occured during wait receive answer, continuing, ".concat(error));
149
+ });
150
+ }
151
+ break;
152
+ case _constants.ROAP.ROAP_STATE.WAIT_TX_OK:
153
+ if (!_util.default.shouldHandleMedia(meeting)) {
154
+ _util.default.setRemoteDescription(meeting, session).then(function (res) {
155
+ _this2.roapOk(res);
156
+ });
157
+ }
158
+ break;
159
+ // case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:
160
+ case _constants.ROAP.ROAP_STATE.ERROR:
161
+ _loggerProxy.default.logger.error("Roap:handler#perform --> Roap State ERROR for session: ".concat(session));
162
+ break;
163
+ case _constants.ROAP.ROAP_STATE.GLARE:
164
+ session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;
165
+ session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;
166
+ _loggerProxy.default.logger.warn('Roap:handler#perform --> Roap State resolved the GLARE condition.');
167
+ if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {
168
+ // 2
169
+ _loggerProxy.default.logger.log('Roap:handler#perform --> Roap State local offer won after GLARE.');
170
+ } else {
171
+ _loggerProxy.default.logger.log('Roap:handler#perform --> Roap State remote offer won after GLARE.');
172
+ }
173
+ session.state.step(_constants.ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);
174
+ // @ts-ignore
175
+ this.perform(session, meeting);
176
+ break;
177
+ default:
178
+ break;
179
+ }
180
+ }
181
+
182
+ /**
183
+ *
184
+ * @param {String} signal
185
+ * @param {Object} session
186
+ * @param {Object} action
187
+ * @param {Meeting} meeting
188
+ * @param {String} prefix
189
+ * @returns {null}
190
+ */
191
+ }, {
192
+ key: "execute",
193
+ value: function execute(signal, session, action, meeting, prefix) {
194
+ if (session && session.state) {
195
+ handleSessionStep({
196
+ roap: action,
197
+ locusUrl: meeting.locusUrl,
198
+ correlationId: meeting.correlationId,
199
+ session: session
200
+ });
201
+ signal = _constants.ROAP.ROAP_SIGNAL["".concat(prefix).concat(action.msg.messageType)];
202
+ session.state.step(signal, meeting, action);
203
+ this.perform(session, meeting, action);
204
+ }
205
+ }
206
+
207
+ /**
208
+ *
209
+ * @param {Object} session
210
+ * @param {Object} action
211
+ * @param {Meeting} meeting
212
+ * @param {String} correlationId
213
+ * @returns {Boolean}
214
+ */
215
+ }, {
216
+ key: "handleAction",
217
+ value: function handleAction(session, action, meeting, correlationId) {
218
+ var signal;
219
+ switch (action.type) {
220
+ case _constants.ROAP.RECEIVE_ROAP_MSG:
221
+ _loggerProxy.default.logger.log("Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ".concat((0, _stringify.default)(action)));
222
+ if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {
223
+ _loggerProxy.default.logger.warn("Roap:handler#handleAction --> duplicate roap offer from server: ".concat(action.msg.seq));
224
+ } else {
225
+ this.lastRoapMessage = action;
226
+ action.remote = true;
227
+ this.execute(signal, session, action, meeting, _constants.ROAP.RX_);
228
+ }
229
+ break;
230
+ case _constants.ROAP.SEND_ROAP_MSG:
231
+ _loggerProxy.default.logger.log("Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ".concat((0, _stringify.default)(action)));
232
+ action.local = true;
233
+ this.execute(signal, session, action, meeting, _constants.ROAP.TX_);
234
+ break;
235
+ case _constants.ROAP.SEND_ROAP_MSG_SUCCESS:
236
+ // NOTE: When server send back an answer via mercury the
237
+ // remote SDP is already saved sent and ok message is sent back
238
+ // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS
239
+ break;
240
+ case _constants.ROAP.RECEIVE_CALL_LEAVE:
241
+ _collection.default.deleteSession(correlationId);
242
+ _loggerProxy.default.logger.log("Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ".concat(correlationId));
243
+ break;
244
+ case _constants.ROAP.RESET_ROAP_STATE:
245
+ _collection.default.deleteSessionSequence(correlationId, action.msg.seq);
246
+ _loggerProxy.default.logger.log("Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ".concat(action.msg.seq));
247
+ break;
248
+ default:
249
+ return true;
250
+ }
251
+ return true;
252
+ }
253
+
254
+ /**
255
+ *
256
+ * @param {Object} action
257
+ * @returns {Boolean}
258
+ */
259
+ }, {
260
+ key: "submit",
261
+ value: function submit(action) {
262
+ var correlationId = action.correlationId;
263
+ var seq = action.seq;
264
+ if (!seq && action.msg) {
265
+ seq = action.msg.seq;
266
+ }
267
+ var session = _collection.default.getSessionSequence(correlationId, seq);
268
+ // @ts-ignore
269
+ var meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);
270
+ if (checkForAndHandleErrors(action, meeting, correlationId)) {
271
+ return true;
272
+ }
273
+ return this.handleAction(session, action, meeting, correlationId);
274
+ }
275
+ }]);
276
+ return RoapHandler;
277
+ }(_webexCore.StatelessWebexPlugin);
278
+ exports.default = RoapHandler;
279
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_webexCore","require","_loggerProxy","_interopRequireDefault","_constants","_metrics","_constants2","_util","_collection","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","checkForAndHandleErrors","action","meeting","correlationId","type","msg","messageType","errorType","RoapUtil","findError","handleError","mediaProperties","peerConnection","then","res","RoapCollection","deleteSessionSequence","seq","catch","err","LoggerProxy","logger","warn","concat","ensureMeeting","compareWithLastRoapMessage","lastRoapMessage","currentRoapMessage","_lastRoapMessage$msg","_lastRoapMessage$msg2","handleSessionStep","_ref","roap","session","locusUrl","_roap$msg","sequenceId","OFFER","_OFFER_","GLARE_OFFER","remote","metricName","BEHAVIORAL_METRICS","ROAP_GLARE_CONDITION","data","correlation_id","locus_id","split","pop","sequence","Metrics","sendBehavioralMetric","info","_stringify","state","RoapHandler","_StatelessWebexPlugin","_inherits2","_super","attrs","options","roapOk","roapAnswer","roapFinished","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","_createClass2","key","value","perform","_this2","ROAP","ROAP_STATE","INIT","WAIT_TX_ANSWER","shouldHandleMedia","updatePeerConnection","answerSdps","mediaId","sdps","audioMuted","isAudioMuted","videoMuted","isVideoMuted","error","ROAP_ANSWER_FAILURE","reason","message","stack","metadata","name","WAIT_TX_OK","setRemoteDescription","ERROR","GLARE","tieBreaker","log","step","ROAP_SIGNAL","GLARE_RESOLVED","execute","signal","prefix","handleAction","RECEIVE_ROAP_MSG","RX_","SEND_ROAP_MSG","local","TX_","SEND_ROAP_MSG_SUCCESS","RECEIVE_CALL_LEAVE","deleteSession","RESET_ROAP_STATE","submit","getSessionSequence","webex","meetings","meetingCollection","getByKey","StatelessWebexPlugin","exports"],"sources":["handler.ts"],"sourcesContent":["/* no-param-reassign */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, _OFFER_} from '../constants';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nimport RoapUtil from './util';\nimport RoapCollection from './collection';\nimport Meeting from '../meeting';\n\nconst checkForAndHandleErrors = (action, meeting, correlationId) => {\n if (action && action.type) {\n if (action.msg && action.msg.messageType && action.msg.errorType) {\n if (RoapUtil.findError(action.msg.messageType, action.msg.errorType, action.type)) {\n RoapUtil.handleError(meeting.mediaProperties.peerConnection)\n .then((res) => {\n if (res) {\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n }\n })\n .catch((err) => {\n LoggerProxy.logger.warn(\n `Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ${err}`\n );\n });\n\n return true;\n }\n }\n if (!RoapUtil.ensureMeeting(meeting, action.type)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst compareWithLastRoapMessage = (lastRoapMessage, currentRoapMessage) =>\n lastRoapMessage?.msg?.seq === currentRoapMessage.msg.seq &&\n lastRoapMessage?.msg?.messageType === currentRoapMessage.msg.messageType;\n\nconst handleSessionStep = ({roap, session, locusUrl, correlationId}) => {\n const {seq: sequenceId, messageType} = roap.msg;\n\n if (session.OFFER && messageType === _OFFER_) {\n session.GLARE_OFFER = roap.msg;\n session.GLARE_OFFER.remote = !!roap.remote;\n const metricName = BEHAVIORAL_METRICS.ROAP_GLARE_CONDITION;\n const data = {\n correlation_id: correlationId,\n locus_id: locusUrl.split('/').pop(),\n sequence: sequenceId,\n };\n\n Metrics.sendBehavioralMetric(metricName, data);\n\n LoggerProxy.logger.warn(\n `Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ${sequenceId}`\n );\n } else {\n LoggerProxy.logger.info(\n `Roap:handler#handleSessionStep --> Save OFFER/ANSWER seq:${sequenceId} new mercury event ${messageType}local state: ${JSON.stringify(\n session.state.state,\n null,\n 2\n )}`\n );\n session[messageType] = roap.msg;\n session[messageType].remote = !!roap.remote;\n }\n};\n\n/**\n * @class RoapHandler\n */\nexport default class RoapHandler extends StatelessWebexPlugin {\n attrs: any;\n lastRoapMessage: any;\n options: any;\n roapAnswer: any;\n roapFinished: any;\n roapOk: any;\n\n constructor(attrs, options, roapOk, roapAnswer, roapFinished) {\n super({}, options);\n this.attrs = attrs;\n this.options = options;\n this.roapOk = roapOk;\n this.roapFinished = roapFinished;\n this.roapAnswer = roapAnswer;\n this.lastRoapMessage = null;\n }\n\n /**\n *\n * @param {Object} session\n * @param {Meeting} meeting\n * @param {Object} action\n * @returns {null}\n */\n perform(session: any, meeting: any, action: any) {\n switch (session.state.state) {\n case ROAP.ROAP_STATE.INIT:\n this.roapFinished(meeting.correlationId, action.msg.seq);\n break;\n\n // TODO: (important )handle roap state for sending offers as well\n // case ROAP.ROAP_STATE.WAIT_RX_OFFER:\n // case ROAP.ROAP_STATE.WAIT_RX_ANSWER:\n // case ROAP.ROAP_STATE.WAIT_RX_OK:\n case ROAP.ROAP_STATE.WAIT_TX_ANSWER:\n // eslint-disable-next-line no-warning-comments\n // TODO: sometime the you get an answer while you are creating an offer so SKIP\n // Server will send the mercury event comes back\n if (RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.updatePeerConnection(meeting, session)\n .then((answerSdps) => {\n this.roapAnswer({\n mediaId: meeting.mediaId,\n sdps: answerSdps,\n seq: session.OFFER.seq,\n correlationId: meeting.correlationId,\n audioMuted: meeting.isAudioMuted(),\n videoMuted: meeting.isVideoMuted(),\n });\n })\n .catch((error) => {\n const metricName = BEHAVIORAL_METRICS.ROAP_ANSWER_FAILURE;\n const data = {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n };\n const metadata = {\n type: error.name,\n };\n\n Metrics.sendBehavioralMetric(metricName, data, metadata);\n LoggerProxy.logger.error(\n `Roap:handler#perform --> Error occured during wait receive answer, continuing, ${error}`\n );\n });\n }\n break;\n case ROAP.ROAP_STATE.WAIT_TX_OK:\n if (!RoapUtil.shouldHandleMedia(meeting)) {\n RoapUtil.setRemoteDescription(meeting, session).then((res) => {\n this.roapOk(res);\n });\n }\n break;\n // case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:\n case ROAP.ROAP_STATE.ERROR:\n LoggerProxy.logger.error(\n `Roap:handler#perform --> Roap State ERROR for session: ${session}`\n );\n break;\n case ROAP.ROAP_STATE.GLARE:\n session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;\n session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;\n LoggerProxy.logger.warn(\n 'Roap:handler#perform --> Roap State resolved the GLARE condition.'\n );\n if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {\n // 2\n LoggerProxy.logger.log(\n 'Roap:handler#perform --> Roap State local offer won after GLARE.'\n );\n } else {\n LoggerProxy.logger.log(\n 'Roap:handler#perform --> Roap State remote offer won after GLARE.'\n );\n }\n session.state.step(ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);\n // @ts-ignore\n this.perform(session, meeting);\n break;\n default:\n break;\n }\n }\n\n /**\n *\n * @param {String} signal\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} prefix\n * @returns {null}\n */\n execute(signal: string, session: any, action: any, meeting: Meeting, prefix: string) {\n if (session && session.state) {\n handleSessionStep({\n roap: action,\n locusUrl: meeting.locusUrl,\n correlationId: meeting.correlationId,\n session,\n });\n signal = ROAP.ROAP_SIGNAL[`${prefix}${action.msg.messageType}`];\n session.state.step(signal, meeting, action);\n this.perform(session, meeting, action);\n }\n }\n\n /**\n *\n * @param {Object} session\n * @param {Object} action\n * @param {Meeting} meeting\n * @param {String} correlationId\n * @returns {Boolean}\n */\n handleAction(session: object, action: any, meeting: Meeting, correlationId: string) {\n let signal;\n\n switch (action.type) {\n case ROAP.RECEIVE_ROAP_MSG:\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ${JSON.stringify(\n action\n )}`\n );\n if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {\n LoggerProxy.logger.warn(\n `Roap:handler#handleAction --> duplicate roap offer from server: ${action.msg.seq}`\n );\n } else {\n this.lastRoapMessage = action;\n action.remote = true;\n this.execute(signal, session, action, meeting, ROAP.RX_);\n }\n break;\n case ROAP.SEND_ROAP_MSG:\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ${JSON.stringify(\n action\n )}`\n );\n\n action.local = true;\n this.execute(signal, session, action, meeting, ROAP.TX_);\n break;\n case ROAP.SEND_ROAP_MSG_SUCCESS:\n // NOTE: When server send back an answer via mercury the\n // remote SDP is already saved sent and ok message is sent back\n // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS\n break;\n case ROAP.RECEIVE_CALL_LEAVE:\n RoapCollection.deleteSession(correlationId);\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ${correlationId}`\n );\n break;\n case ROAP.RESET_ROAP_STATE:\n RoapCollection.deleteSessionSequence(correlationId, action.msg.seq);\n LoggerProxy.logger.log(\n `Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ${action.msg.seq}`\n );\n break;\n default:\n return true;\n }\n\n return true;\n }\n\n /**\n *\n * @param {Object} action\n * @returns {Boolean}\n */\n submit(action: any) {\n const {correlationId} = action;\n let {seq} = action;\n\n if (!seq && action.msg) {\n seq = action.msg.seq;\n }\n const session = RoapCollection.getSessionSequence(correlationId, seq);\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n if (checkForAndHandleErrors(action, meeting, correlationId)) {\n return true;\n }\n\n return this.handleAction(session, action, meeting, correlationId);\n }\n}\n"],"mappings":"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"}