@webex/plugin-meetings 3.7.0-wxcc.1 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/dist/annotation/annotation.types.d.ts +42 -0
  2. package/dist/annotation/constants.d.ts +31 -0
  3. package/dist/annotation/index.d.ts +117 -0
  4. package/dist/breakouts/breakout.d.ts +8 -0
  5. package/dist/breakouts/breakout.js +1 -1
  6. package/dist/breakouts/collection.d.ts +5 -0
  7. package/dist/breakouts/edit-lock-error.d.ts +15 -0
  8. package/dist/breakouts/events.d.ts +8 -0
  9. package/dist/breakouts/index.d.ts +5 -0
  10. package/dist/breakouts/index.js +1 -1
  11. package/dist/breakouts/request.d.ts +22 -0
  12. package/dist/breakouts/utils.d.ts +15 -0
  13. package/dist/common/browser-detection.d.ts +9 -0
  14. package/dist/common/collection.d.ts +48 -0
  15. package/dist/common/config.d.ts +2 -0
  16. package/dist/common/errors/captcha-error.d.ts +15 -0
  17. package/dist/common/errors/intent-to-join.d.ts +16 -0
  18. package/dist/common/errors/join-meeting.d.ts +17 -0
  19. package/dist/common/errors/media.d.ts +15 -0
  20. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  21. package/dist/common/errors/parameter.d.ts +15 -0
  22. package/dist/common/errors/password-error.d.ts +15 -0
  23. package/dist/common/errors/permission.d.ts +14 -0
  24. package/dist/common/errors/reclaim-host-role-error.js +149 -0
  25. package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
  26. package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
  27. package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
  28. package/dist/common/errors/reconnection-in-progress.js +33 -0
  29. package/dist/common/errors/reconnection-in-progress.js.map +1 -0
  30. package/dist/common/errors/reconnection.d.ts +15 -0
  31. package/dist/common/errors/stats.d.ts +15 -0
  32. package/dist/common/errors/webex-errors.d.ts +93 -0
  33. package/dist/common/errors/webex-meetings-error.d.ts +20 -0
  34. package/dist/common/events/events-scope.d.ts +17 -0
  35. package/dist/common/events/events.d.ts +12 -0
  36. package/dist/common/events/trigger-proxy.d.ts +2 -0
  37. package/dist/common/events/util.d.ts +2 -0
  38. package/dist/common/logs/logger-config.d.ts +2 -0
  39. package/dist/common/logs/logger-proxy.d.ts +2 -0
  40. package/dist/common/logs/request.d.ts +36 -0
  41. package/dist/common/queue.d.ts +34 -0
  42. package/dist/config.d.ts +72 -0
  43. package/dist/constants.d.ts +1088 -0
  44. package/dist/constants.js +15 -3
  45. package/dist/constants.js.map +1 -1
  46. package/dist/controls-options-manager/constants.d.ts +4 -0
  47. package/dist/controls-options-manager/enums.d.ts +15 -0
  48. package/dist/controls-options-manager/index.d.ts +136 -0
  49. package/dist/controls-options-manager/types.d.ts +43 -0
  50. package/dist/controls-options-manager/util.d.ts +1 -0
  51. package/dist/index.d.ts +7 -0
  52. package/dist/interceptors/index.d.ts +2 -0
  53. package/dist/interceptors/locusRetry.d.ts +27 -0
  54. package/dist/interpretation/collection.d.ts +5 -0
  55. package/dist/interpretation/index.d.ts +5 -0
  56. package/dist/interpretation/index.js +1 -1
  57. package/dist/interpretation/siLanguage.d.ts +5 -0
  58. package/dist/interpretation/siLanguage.js +1 -1
  59. package/dist/locus-info/controlsUtils.d.ts +2 -0
  60. package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
  61. package/dist/locus-info/fullState.d.ts +2 -0
  62. package/dist/locus-info/hostUtils.d.ts +2 -0
  63. package/dist/locus-info/index.d.ts +322 -0
  64. package/dist/locus-info/infoUtils.d.ts +2 -0
  65. package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
  66. package/dist/locus-info/parser.d.ts +272 -0
  67. package/dist/locus-info/selfUtils.d.ts +2 -0
  68. package/dist/locus-info/selfUtils.js +5 -0
  69. package/dist/locus-info/selfUtils.js.map +1 -1
  70. package/dist/media/MediaConnectionAwaiter.js +1 -0
  71. package/dist/media/MediaConnectionAwaiter.js.map +1 -1
  72. package/dist/media/index.d.ts +34 -0
  73. package/dist/media/properties.d.ts +93 -0
  74. package/dist/media/properties.js +30 -16
  75. package/dist/media/properties.js.map +1 -1
  76. package/dist/media/util.d.ts +2 -0
  77. package/dist/mediaQualityMetrics/config.d.ts +241 -0
  78. package/dist/mediaQualityMetrics/config.js +502 -0
  79. package/dist/mediaQualityMetrics/config.js.map +1 -0
  80. package/dist/meeting/brbState.js +167 -0
  81. package/dist/meeting/brbState.js.map +1 -0
  82. package/dist/meeting/effectsState.js +260 -0
  83. package/dist/meeting/effectsState.js.map +1 -0
  84. package/dist/meeting/in-meeting-actions.d.ts +167 -0
  85. package/dist/meeting/index.d.ts +1825 -0
  86. package/dist/meeting/index.js +363 -295
  87. package/dist/meeting/index.js.map +1 -1
  88. package/dist/meeting/locusMediaRequest.d.ts +74 -0
  89. package/dist/meeting/muteState.d.ts +178 -0
  90. package/dist/meeting/muteState.js +1 -6
  91. package/dist/meeting/muteState.js.map +1 -1
  92. package/dist/meeting/request.d.ts +295 -0
  93. package/dist/meeting/request.type.d.ts +11 -0
  94. package/dist/meeting/state.d.ts +9 -0
  95. package/dist/meeting/util.d.ts +119 -0
  96. package/dist/meeting/voicea-meeting.d.ts +16 -0
  97. package/dist/meeting-info/collection.d.ts +20 -0
  98. package/dist/meeting-info/index.d.ts +69 -0
  99. package/dist/meeting-info/meeting-info-v2.d.ts +123 -0
  100. package/dist/meeting-info/meeting-info-v2.js +19 -12
  101. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  102. package/dist/meeting-info/request.d.ts +22 -0
  103. package/dist/meeting-info/util.d.ts +2 -0
  104. package/dist/meeting-info/utilv2.d.ts +2 -0
  105. package/dist/meeting-info/utilv2.js +5 -1
  106. package/dist/meeting-info/utilv2.js.map +1 -1
  107. package/dist/meetings/collection.d.ts +40 -0
  108. package/dist/meetings/index.d.ts +390 -0
  109. package/dist/meetings/meetings.types.d.ts +4 -0
  110. package/dist/meetings/request.d.ts +27 -0
  111. package/dist/meetings/util.d.ts +18 -0
  112. package/dist/member/index.d.ts +160 -0
  113. package/dist/member/member.types.js +17 -0
  114. package/dist/member/member.types.js.map +1 -0
  115. package/dist/member/types.d.ts +32 -0
  116. package/dist/member/util.d.ts +2 -0
  117. package/dist/members/collection.d.ts +29 -0
  118. package/dist/members/index.d.ts +353 -0
  119. package/dist/members/request.d.ts +114 -0
  120. package/dist/members/types.d.ts +25 -0
  121. package/dist/members/util.d.ts +215 -0
  122. package/dist/metrics/config.js +276 -0
  123. package/dist/metrics/config.js.map +1 -0
  124. package/dist/metrics/constants.d.ts +70 -0
  125. package/dist/metrics/constants.js +2 -0
  126. package/dist/metrics/constants.js.map +1 -1
  127. package/dist/metrics/index.d.ts +45 -0
  128. package/dist/multistream/mediaRequestManager.d.ts +119 -0
  129. package/dist/multistream/receiveSlot.d.ts +68 -0
  130. package/dist/multistream/receiveSlotManager.d.ts +56 -0
  131. package/dist/multistream/remoteMedia.d.ts +72 -0
  132. package/dist/multistream/remoteMediaGroup.d.ts +49 -0
  133. package/dist/multistream/remoteMediaManager.d.ts +300 -0
  134. package/dist/multistream/sendSlotManager.d.ts +69 -0
  135. package/dist/networkQualityMonitor/index.d.ts +70 -0
  136. package/dist/networkQualityMonitor/index.js +221 -0
  137. package/dist/networkQualityMonitor/index.js.map +1 -0
  138. package/dist/peer-connection-manager/index.js +671 -0
  139. package/dist/peer-connection-manager/index.js.map +1 -0
  140. package/dist/peer-connection-manager/util.js +109 -0
  141. package/dist/peer-connection-manager/util.js.map +1 -0
  142. package/dist/personal-meeting-room/index.d.ts +47 -0
  143. package/dist/personal-meeting-room/request.d.ts +14 -0
  144. package/dist/personal-meeting-room/util.d.ts +2 -0
  145. package/dist/reachability/clusterReachability.d.ts +109 -0
  146. package/dist/reachability/index.d.ts +105 -0
  147. package/dist/reachability/index.js +31 -3
  148. package/dist/reachability/index.js.map +1 -1
  149. package/dist/reachability/request.d.ts +39 -0
  150. package/dist/reachability/util.d.ts +8 -0
  151. package/dist/reactions/constants.d.ts +3 -0
  152. package/dist/reactions/reactions.d.ts +4 -0
  153. package/dist/reactions/reactions.type.d.ts +52 -0
  154. package/dist/reconnection-manager/index.d.ts +136 -0
  155. package/dist/recording-controller/enums.d.ts +7 -0
  156. package/dist/recording-controller/index.d.ts +207 -0
  157. package/dist/recording-controller/util.d.ts +14 -0
  158. package/dist/roap/collection.js +62 -0
  159. package/dist/roap/collection.js.map +1 -0
  160. package/dist/roap/handler.js +275 -0
  161. package/dist/roap/handler.js.map +1 -0
  162. package/dist/roap/index.d.ts +86 -0
  163. package/dist/roap/request.d.ts +39 -0
  164. package/dist/roap/state.js +126 -0
  165. package/dist/roap/state.js.map +1 -0
  166. package/dist/roap/turnDiscovery.d.ts +155 -0
  167. package/dist/roap/util.js +75 -0
  168. package/dist/roap/util.js.map +1 -0
  169. package/dist/rtcMetrics/constants.d.ts +4 -0
  170. package/dist/rtcMetrics/constants.js +11 -0
  171. package/dist/rtcMetrics/constants.js.map +1 -0
  172. package/dist/rtcMetrics/index.d.ts +61 -0
  173. package/dist/rtcMetrics/index.js +197 -0
  174. package/dist/rtcMetrics/index.js.map +1 -0
  175. package/dist/statsAnalyzer/global.d.ts +36 -0
  176. package/dist/statsAnalyzer/global.js +126 -0
  177. package/dist/statsAnalyzer/global.js.map +1 -0
  178. package/dist/statsAnalyzer/index.d.ts +217 -0
  179. package/dist/statsAnalyzer/index.js +1013 -0
  180. package/dist/statsAnalyzer/index.js.map +1 -0
  181. package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
  182. package/dist/statsAnalyzer/mqaUtil.js +179 -0
  183. package/dist/statsAnalyzer/mqaUtil.js.map +1 -0
  184. package/dist/transcription/index.d.ts +64 -0
  185. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  186. package/dist/types/constants.d.ts +9 -2
  187. package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
  188. package/dist/types/meeting/brbState.d.ts +54 -0
  189. package/dist/types/meeting/index.d.ts +23 -0
  190. package/dist/types/meeting-info/meeting-info-v2.d.ts +3 -1
  191. package/dist/types/metrics/constants.d.ts +2 -0
  192. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  193. package/dist/types/reachability/index.d.ts +9 -1
  194. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  195. package/dist/types/rtcMetrics/index.d.ts +71 -0
  196. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  197. package/dist/types/statsAnalyzer/index.d.ts +217 -0
  198. package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
  199. package/dist/webinar/collection.d.ts +16 -0
  200. package/dist/webinar/index.d.ts +5 -0
  201. package/dist/webinar/index.js +1 -1
  202. package/package.json +23 -23
  203. package/src/constants.ts +10 -2
  204. package/src/locus-info/selfUtils.ts +5 -0
  205. package/src/media/MediaConnectionAwaiter.ts +2 -0
  206. package/src/media/properties.ts +34 -13
  207. package/src/meeting/brbState.ts +169 -0
  208. package/src/meeting/index.ts +112 -26
  209. package/src/meeting/muteState.ts +1 -6
  210. package/src/meeting-info/meeting-info-v2.ts +9 -1
  211. package/src/meeting-info/utilv2.ts +14 -2
  212. package/src/metrics/constants.ts +2 -0
  213. package/src/reachability/index.ts +29 -1
  214. package/test/unit/spec/locus-info/selfUtils.js +10 -0
  215. package/test/unit/spec/media/properties.ts +15 -0
  216. package/test/unit/spec/meeting/brbState.ts +114 -0
  217. package/test/unit/spec/meeting/index.js +92 -30
  218. package/test/unit/spec/meeting/muteState.js +0 -24
  219. package/test/unit/spec/meeting-info/utilv2.js +9 -0
  220. package/test/unit/spec/reachability/index.ts +120 -10
@@ -0,0 +1,207 @@
1
+ import { SELF_POLICY } from '../constants';
2
+ import MeetingRequest from '../meeting/request';
3
+ /**
4
+ * @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting
5
+ * @export
6
+ * @private
7
+ * @class Recording
8
+ */
9
+ export default class RecordingController {
10
+ /**
11
+ * @instance
12
+ * @type {MeetingRequest}
13
+ * @private
14
+ * @memberof RecordingController
15
+ */
16
+ private request;
17
+ /**
18
+ * @instance
19
+ * @type {Array}
20
+ * @private
21
+ * @memberof RecordingInfo
22
+ */
23
+ private displayHints;
24
+ /**
25
+ * @instance
26
+ * @type {Object}
27
+ * @private
28
+ * @memberof RecordingInfo
29
+ */
30
+ private selfUserPolicies;
31
+ /**
32
+ * @instance
33
+ * @type {string}
34
+ * @private
35
+ * @memberof RecordingInfo
36
+ */
37
+ private serviceUrl;
38
+ /**
39
+ * @instance
40
+ * @type {string}
41
+ * @private
42
+ * @memberof RecordingInfo
43
+ */
44
+ private sessionId;
45
+ /**
46
+ * @instance
47
+ * @type {string}
48
+ * @private
49
+ * @memberof RecordingInfo
50
+ */
51
+ private locusUrl;
52
+ /**
53
+ * @instance
54
+ * @type {string}
55
+ * @private
56
+ * @memberof RecordingInfo
57
+ */
58
+ private locusId;
59
+ /**
60
+ * @param {MeetingRequest} request
61
+ * @param {Object} options
62
+ * @constructor
63
+ * @memberof RecordingController
64
+ */
65
+ constructor(request: MeetingRequest, options?: {
66
+ serviceUrl?: string;
67
+ sessionId: string;
68
+ locusUrl: string;
69
+ displayHints?: Array<string>;
70
+ });
71
+ /**
72
+ * @param {MeetingRequest} request
73
+ * @returns {void}
74
+ * @private
75
+ * @memberof RecordingController
76
+ */
77
+ private initialize;
78
+ /**
79
+ * @param {Object} options
80
+ * @returns {void}
81
+ * @public
82
+ * @memberof RecordingController
83
+ */
84
+ set(options?: {
85
+ serviceUrl?: string;
86
+ sessionId: string;
87
+ locusUrl: string;
88
+ displayHints?: Array<string>;
89
+ }): void;
90
+ /**
91
+ * @param {string} url
92
+ * @returns {void}
93
+ * @public
94
+ * @memberof RecordingController
95
+ */
96
+ setLocusUrl(url: string): void;
97
+ /**
98
+ * @param {Array} hints
99
+ * @returns {void}
100
+ * @public
101
+ * @memberof RecordingController
102
+ */
103
+ setDisplayHints(hints: Array<string>): void;
104
+ /**
105
+ * @param {Object} selfUserPolicies
106
+ * @returns {void}
107
+ * @public
108
+ * @memberof RecordingController
109
+ */
110
+ setUserPolicy(selfUserPolicies: Record<SELF_POLICY, boolean>): void;
111
+ /**
112
+ * @param {string} id
113
+ * @returns {void}
114
+ * @public
115
+ * @memberof RecordingController
116
+ */
117
+ setSessionId(id: string): void;
118
+ /**
119
+ * @param {string} url
120
+ * @returns {void}
121
+ * @public
122
+ * @memberof RecordingController
123
+ */
124
+ setServiceUrl(url: string): void;
125
+ /**
126
+ * @returns {string}
127
+ * @public
128
+ * @memberof RecordingController
129
+ */
130
+ getLocusUrl(): string;
131
+ /**
132
+ * @returns {string}
133
+ * @public
134
+ * @memberof RecordingController
135
+ */
136
+ getLocusId(): string;
137
+ /**
138
+ * @returns {string}
139
+ * @public
140
+ * @memberof RecordingController
141
+ */
142
+ getSessionId(): string;
143
+ /**
144
+ * @returns {string}
145
+ * @public
146
+ * @memberof RecordingController
147
+ */
148
+ getServiceUrl(): string;
149
+ /**
150
+ * @returns {Array}
151
+ * @public
152
+ * @memberof RecordingController
153
+ */
154
+ getDisplayHints(): string[];
155
+ /**
156
+ * @param {Object} options
157
+ * @returns {void}
158
+ * @private
159
+ * @memberof RecordingController
160
+ */
161
+ private extract;
162
+ /**
163
+ * @param {RecordingAction} action
164
+ * @private
165
+ * @memberof RecordingController
166
+ * @returns {Promise}
167
+ */
168
+ private recordingService;
169
+ /**
170
+ * @param {RecordingAction} action
171
+ * @private
172
+ * @memberof RecordingController
173
+ * @returns {Promise}
174
+ */
175
+ private recordingControls;
176
+ /**
177
+ * @param {RecordingAction} action
178
+ * @private
179
+ * @memberof RecordingController
180
+ * @returns {Promise}
181
+ */
182
+ private recordingFacade;
183
+ /**
184
+ * @private
185
+ * @memberof RecordingController
186
+ * @returns {Promise}
187
+ */
188
+ startRecording(): Promise<any>;
189
+ /**
190
+ * @private
191
+ * @memberof RecordingController
192
+ * @returns {Promise}
193
+ */
194
+ stopRecording(): Promise<any>;
195
+ /**
196
+ * @private
197
+ * @memberof RecordingController
198
+ * @returns {Promise}
199
+ */
200
+ pauseRecording(): Promise<any>;
201
+ /**
202
+ * @private
203
+ * @memberof RecordingController
204
+ * @returns {Promise}
205
+ */
206
+ resumeRecording(): Promise<any>;
207
+ }
@@ -0,0 +1,14 @@
1
+ import { SELF_POLICY } from '../constants';
2
+ import RecordingAction from './enums';
3
+ declare const _default: {
4
+ canUserStart: (displayHints: string[], userPolicies: Record<SELF_POLICY, boolean>) => boolean;
5
+ canUserPause: (displayHints: string[], userPolicies: Record<SELF_POLICY, boolean>) => boolean;
6
+ canUserResume: (displayHints: string[], userPolicies: Record<SELF_POLICY, boolean>) => boolean;
7
+ canUserStop: (displayHints: string[], userPolicies: Record<SELF_POLICY, boolean>) => boolean;
8
+ deriveRecordingStates: (action: RecordingAction) => {
9
+ recording: boolean;
10
+ paused: boolean;
11
+ };
12
+ extractLocusId: (url: string) => string;
13
+ };
14
+ export default _default;
@@ -0,0 +1,62 @@
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 = exports.default = RoapCollection;
62
+ //# 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,WAAVA,UAAUA,CAACC,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,WAAbA,aAAaA,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,WAAlBA,kBAAkBA,CAACH,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,CAAC,CAAC;QACrCC,QAAQ,EAAE;MACZ,CAAC;MACDJ,OAAO,CAACJ,eAAe,IAAI,CAAC;IAC9B;IACA,OAAOI,OAAO,CAACD,KAAK,CAAC;EACvB,CAAC;EAEDM,qBAAqB,WAArBA,qBAAqBA,CAACV,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,WAANA,MAAMA,CAACZ,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,WAAvBA,uBAAuBA,CAACb,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,GAAAC,OAAA,CAAAC,OAAA,GAEanB,cAAc","ignoreList":[]}
@@ -0,0 +1,275 @@
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 _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
13
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
16
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
17
+ var _webexCore = require("@webex/webex-core");
18
+ var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
19
+ var _constants = require("../constants");
20
+ var _metrics = _interopRequireDefault(require("../metrics"));
21
+ var _constants2 = _interopRequireDefault(require("../metrics/constants"));
22
+ var _util = _interopRequireDefault(require("./util"));
23
+ var _collection = _interopRequireDefault(require("./collection"));
24
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
25
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /* no-param-reassign */ // @ts-ignore
26
+ var checkForAndHandleErrors = function checkForAndHandleErrors(action, meeting, correlationId) {
27
+ if (action && action.type) {
28
+ if (action.msg && action.msg.messageType && action.msg.errorType) {
29
+ if (_util.default.findError(action.msg.messageType, action.msg.errorType, action.type)) {
30
+ _util.default.handleError(meeting.mediaProperties.peerConnection).then(function (res) {
31
+ if (res) {
32
+ _collection.default.deleteSessionSequence(correlationId, action.msg.seq);
33
+ }
34
+ }).catch(function (err) {
35
+ _loggerProxy.default.logger.warn("Roap:handler#checkForAndHandleErrors --> Cannot reset the peer connection with error: ".concat(err));
36
+ });
37
+ return true;
38
+ }
39
+ }
40
+ if (!_util.default.ensureMeeting(meeting, action.type)) {
41
+ return true;
42
+ }
43
+ }
44
+ return false;
45
+ };
46
+ var compareWithLastRoapMessage = function compareWithLastRoapMessage(lastRoapMessage, currentRoapMessage) {
47
+ var _lastRoapMessage$msg, _lastRoapMessage$msg2;
48
+ 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;
49
+ };
50
+ var handleSessionStep = function handleSessionStep(_ref) {
51
+ var roap = _ref.roap,
52
+ session = _ref.session,
53
+ locusUrl = _ref.locusUrl,
54
+ correlationId = _ref.correlationId;
55
+ var _roap$msg = roap.msg,
56
+ sequenceId = _roap$msg.seq,
57
+ messageType = _roap$msg.messageType;
58
+ if (session.OFFER && messageType === _constants._OFFER_) {
59
+ session.GLARE_OFFER = roap.msg;
60
+ session.GLARE_OFFER.remote = !!roap.remote;
61
+ var metricName = _constants2.default.ROAP_GLARE_CONDITION;
62
+ var data = {
63
+ correlation_id: correlationId,
64
+ locus_id: locusUrl.split('/').pop(),
65
+ sequence: sequenceId
66
+ };
67
+ _metrics.default.sendBehavioralMetric(metricName, data);
68
+ _loggerProxy.default.logger.warn("Roap:handler#handleSessionStep --> Glare condition occurred with new mercury event, sequenceId: ".concat(sequenceId));
69
+ } else {
70
+ _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)));
71
+ session[messageType] = roap.msg;
72
+ session[messageType].remote = !!roap.remote;
73
+ }
74
+ };
75
+
76
+ /**
77
+ * @class RoapHandler
78
+ */
79
+ var RoapHandler = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
80
+ function RoapHandler(attrs, options, roapOk, roapAnswer, roapFinished) {
81
+ var _this;
82
+ (0, _classCallCheck2.default)(this, RoapHandler);
83
+ _this = _callSuper(this, RoapHandler, [{}, options]);
84
+ (0, _defineProperty2.default)(_this, "attrs", void 0);
85
+ (0, _defineProperty2.default)(_this, "lastRoapMessage", void 0);
86
+ (0, _defineProperty2.default)(_this, "options", void 0);
87
+ (0, _defineProperty2.default)(_this, "roapAnswer", void 0);
88
+ (0, _defineProperty2.default)(_this, "roapFinished", void 0);
89
+ (0, _defineProperty2.default)(_this, "roapOk", void 0);
90
+ _this.attrs = attrs;
91
+ _this.options = options;
92
+ _this.roapOk = roapOk;
93
+ _this.roapFinished = roapFinished;
94
+ _this.roapAnswer = roapAnswer;
95
+ _this.lastRoapMessage = null;
96
+ return _this;
97
+ }
98
+
99
+ /**
100
+ *
101
+ * @param {Object} session
102
+ * @param {Meeting} meeting
103
+ * @param {Object} action
104
+ * @returns {null}
105
+ */
106
+ (0, _inherits2.default)(RoapHandler, _StatelessWebexPlugin);
107
+ return (0, _createClass2.default)(RoapHandler, [{
108
+ key: "perform",
109
+ value: function perform(session, meeting, action) {
110
+ var _this2 = this;
111
+ switch (session.state.state) {
112
+ case _constants.ROAP.ROAP_STATE.INIT:
113
+ this.roapFinished(meeting.correlationId, action.msg.seq);
114
+ break;
115
+
116
+ // TODO: (important )handle roap state for sending offers as well
117
+ // case ROAP.ROAP_STATE.WAIT_RX_OFFER:
118
+ // case ROAP.ROAP_STATE.WAIT_RX_ANSWER:
119
+ // case ROAP.ROAP_STATE.WAIT_RX_OK:
120
+ case _constants.ROAP.ROAP_STATE.WAIT_TX_ANSWER:
121
+ // eslint-disable-next-line no-warning-comments
122
+ // TODO: sometime the you get an answer while you are creating an offer so SKIP
123
+ // Server will send the mercury event comes back
124
+ if (_util.default.shouldHandleMedia(meeting)) {
125
+ _util.default.updatePeerConnection(meeting, session).then(function (answerSdps) {
126
+ _this2.roapAnswer({
127
+ mediaId: meeting.mediaId,
128
+ sdps: answerSdps,
129
+ seq: session.OFFER.seq,
130
+ correlationId: meeting.correlationId,
131
+ audioMuted: meeting.isAudioMuted(),
132
+ videoMuted: meeting.isVideoMuted()
133
+ });
134
+ }).catch(function (error) {
135
+ var metricName = _constants2.default.ROAP_ANSWER_FAILURE;
136
+ var data = {
137
+ correlation_id: meeting.correlationId,
138
+ locus_id: meeting.locusUrl.split('/').pop(),
139
+ reason: error.message,
140
+ stack: error.stack
141
+ };
142
+ var metadata = {
143
+ type: error.name
144
+ };
145
+ _metrics.default.sendBehavioralMetric(metricName, data, metadata);
146
+ _loggerProxy.default.logger.error("Roap:handler#perform --> Error occured during wait receive answer, continuing, ".concat(error));
147
+ });
148
+ }
149
+ break;
150
+ case _constants.ROAP.ROAP_STATE.WAIT_TX_OK:
151
+ if (!_util.default.shouldHandleMedia(meeting)) {
152
+ _util.default.setRemoteDescription(meeting, session).then(function (res) {
153
+ _this2.roapOk(res);
154
+ });
155
+ }
156
+ break;
157
+ // case ROAP.ROAP_STATE.IDLE_LOCAL_OFFER:
158
+ case _constants.ROAP.ROAP_STATE.ERROR:
159
+ _loggerProxy.default.logger.error("Roap:handler#perform --> Roap State ERROR for session: ".concat(session));
160
+ break;
161
+ case _constants.ROAP.ROAP_STATE.GLARE:
162
+ session.GLARE_OFFER.tieBreaker = session.GLARE_OFFER.tieBreaker || 0;
163
+ session.OFFER.tieBreaker = session.OFFER.tieBreaker || 0;
164
+ _loggerProxy.default.logger.warn('Roap:handler#perform --> Roap State resolved the GLARE condition.');
165
+ if (session.GLARE_OFFER.tieBreaker < session.OFFER.tieBreaker) {
166
+ // 2
167
+ _loggerProxy.default.logger.log('Roap:handler#perform --> Roap State local offer won after GLARE.');
168
+ } else {
169
+ _loggerProxy.default.logger.log('Roap:handler#perform --> Roap State remote offer won after GLARE.');
170
+ }
171
+ session.state.step(_constants.ROAP.ROAP_SIGNAL.GLARE_RESOLVED, meeting, action);
172
+ // @ts-ignore
173
+ this.perform(session, meeting);
174
+ break;
175
+ default:
176
+ break;
177
+ }
178
+ }
179
+
180
+ /**
181
+ *
182
+ * @param {String} signal
183
+ * @param {Object} session
184
+ * @param {Object} action
185
+ * @param {Meeting} meeting
186
+ * @param {String} prefix
187
+ * @returns {null}
188
+ */
189
+ }, {
190
+ key: "execute",
191
+ value: function execute(signal, session, action, meeting, prefix) {
192
+ if (session && session.state) {
193
+ handleSessionStep({
194
+ roap: action,
195
+ locusUrl: meeting.locusUrl,
196
+ correlationId: meeting.correlationId,
197
+ session: session
198
+ });
199
+ signal = _constants.ROAP.ROAP_SIGNAL["".concat(prefix).concat(action.msg.messageType)];
200
+ session.state.step(signal, meeting, action);
201
+ this.perform(session, meeting, action);
202
+ }
203
+ }
204
+
205
+ /**
206
+ *
207
+ * @param {Object} session
208
+ * @param {Object} action
209
+ * @param {Meeting} meeting
210
+ * @param {String} correlationId
211
+ * @returns {Boolean}
212
+ */
213
+ }, {
214
+ key: "handleAction",
215
+ value: function handleAction(session, action, meeting, correlationId) {
216
+ var signal;
217
+ switch (action.type) {
218
+ case _constants.ROAP.RECEIVE_ROAP_MSG:
219
+ _loggerProxy.default.logger.log("Roap:handler#handleAction --> RECEIVE_ROAP_MSG event captured, reciving a roap message : ".concat((0, _stringify.default)(action)));
220
+ if (compareWithLastRoapMessage(this.lastRoapMessage, action)) {
221
+ _loggerProxy.default.logger.warn("Roap:handler#handleAction --> duplicate roap offer from server: ".concat(action.msg.seq));
222
+ } else {
223
+ this.lastRoapMessage = action;
224
+ action.remote = true;
225
+ this.execute(signal, session, action, meeting, _constants.ROAP.RX_);
226
+ }
227
+ break;
228
+ case _constants.ROAP.SEND_ROAP_MSG:
229
+ _loggerProxy.default.logger.log("Roap:handler#handleAction --> SEND_ROAP_MSG event captured, sending roap message ".concat((0, _stringify.default)(action)));
230
+ action.local = true;
231
+ this.execute(signal, session, action, meeting, _constants.ROAP.TX_);
232
+ break;
233
+ case _constants.ROAP.SEND_ROAP_MSG_SUCCESS:
234
+ // NOTE: When server send back an answer via mercury the
235
+ // remote SDP is already saved sent and ok message is sent back
236
+ // We dont have to indicate the roapHandler about the RX_ANSWER via SEND_ROAP_MSG_SUCCESS
237
+ break;
238
+ case _constants.ROAP.RECEIVE_CALL_LEAVE:
239
+ _collection.default.deleteSession(correlationId);
240
+ _loggerProxy.default.logger.log("Roap:handler#handleAction --> RECEIVE_CALL_LEAVE event captured, cleaning up the RoapHandler for correlationId: ".concat(correlationId));
241
+ break;
242
+ case _constants.ROAP.RESET_ROAP_STATE:
243
+ _collection.default.deleteSessionSequence(correlationId, action.msg.seq);
244
+ _loggerProxy.default.logger.log("Roap:handler#handleAction --> RESET_ROAP_STATE event captured, resetting the RoapHandler state based on sequenceId: ".concat(action.msg.seq));
245
+ break;
246
+ default:
247
+ return true;
248
+ }
249
+ return true;
250
+ }
251
+
252
+ /**
253
+ *
254
+ * @param {Object} action
255
+ * @returns {Boolean}
256
+ */
257
+ }, {
258
+ key: "submit",
259
+ value: function submit(action) {
260
+ var correlationId = action.correlationId;
261
+ var seq = action.seq;
262
+ if (!seq && action.msg) {
263
+ seq = action.msg.seq;
264
+ }
265
+ var session = _collection.default.getSessionSequence(correlationId, seq);
266
+ // @ts-ignore
267
+ var meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);
268
+ if (checkForAndHandleErrors(action, meeting, correlationId)) {
269
+ return true;
270
+ }
271
+ return this.handleAction(session, action, meeting, correlationId);
272
+ }
273
+ }]);
274
+ }(_webexCore.StatelessWebexPlugin);
275
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_webexCore","require","_loggerProxy","_interopRequireDefault","_constants","_metrics","_constants2","_util","_collection","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","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","exports","_StatelessWebexPlugin","attrs","options","roapOk","roapAnswer","roapFinished","_this","_classCallCheck2","_defineProperty2","_inherits2","_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"],"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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","ignoreList":[]}