@webex/plugin-meetings 3.8.0-web-workers-keepalive.1 → 3.8.1-next.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 (168) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +70 -6
  3. package/dist/breakouts/index.js.map +1 -1
  4. package/dist/common/errors/webex-errors.js +12 -2
  5. package/dist/common/errors/webex-errors.js.map +1 -1
  6. package/dist/config.js +4 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/constants.js +22 -123
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controls-options-manager/enums.js +2 -0
  11. package/dist/controls-options-manager/enums.js.map +1 -1
  12. package/dist/controls-options-manager/types.js.map +1 -1
  13. package/dist/controls-options-manager/util.js +52 -0
  14. package/dist/controls-options-manager/util.js.map +1 -1
  15. package/dist/interpretation/index.js +1 -1
  16. package/dist/interpretation/siLanguage.js +1 -1
  17. package/dist/locus-info/controlsUtils.js +30 -10
  18. package/dist/locus-info/controlsUtils.js.map +1 -1
  19. package/dist/locus-info/index.js +83 -12
  20. package/dist/locus-info/index.js.map +1 -1
  21. package/dist/locus-info/selfUtils.js +432 -418
  22. package/dist/locus-info/selfUtils.js.map +1 -1
  23. package/dist/media/index.js +17 -17
  24. package/dist/media/index.js.map +1 -1
  25. package/dist/media/properties.js +94 -6
  26. package/dist/media/properties.js.map +1 -1
  27. package/dist/meeting/brbState.js +9 -2
  28. package/dist/meeting/brbState.js.map +1 -1
  29. package/dist/meeting/in-meeting-actions.js +17 -1
  30. package/dist/meeting/in-meeting-actions.js.map +1 -1
  31. package/dist/meeting/index.js +568 -328
  32. package/dist/meeting/index.js.map +1 -1
  33. package/dist/meeting/locusMediaRequest.js +0 -17
  34. package/dist/meeting/locusMediaRequest.js.map +1 -1
  35. package/dist/meeting/muteState.js +4 -4
  36. package/dist/meeting/muteState.js.map +1 -1
  37. package/dist/meeting/request.js +30 -0
  38. package/dist/meeting/request.js.map +1 -1
  39. package/dist/meeting/request.type.js.map +1 -1
  40. package/dist/meeting/util.js +9 -1
  41. package/dist/meeting/util.js.map +1 -1
  42. package/dist/meeting-info/meeting-info-v2.js +19 -13
  43. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  44. package/dist/meeting-info/utilv2.js +5 -1
  45. package/dist/meeting-info/utilv2.js.map +1 -1
  46. package/dist/meetings/index.js +76 -0
  47. package/dist/meetings/index.js.map +1 -1
  48. package/dist/meetings/util.js +14 -0
  49. package/dist/meetings/util.js.map +1 -1
  50. package/dist/member/index.js +45 -9
  51. package/dist/member/index.js.map +1 -1
  52. package/dist/member/types.js +3 -0
  53. package/dist/member/types.js.map +1 -1
  54. package/dist/member/util.js +335 -356
  55. package/dist/member/util.js.map +1 -1
  56. package/dist/members/collection.js.map +1 -1
  57. package/dist/members/index.js +137 -29
  58. package/dist/members/index.js.map +1 -1
  59. package/dist/members/request.js +38 -0
  60. package/dist/members/request.js.map +1 -1
  61. package/dist/members/util.js +36 -1
  62. package/dist/members/util.js.map +1 -1
  63. package/dist/metrics/constants.js +1 -0
  64. package/dist/metrics/constants.js.map +1 -1
  65. package/dist/reachability/clusterReachability.js +23 -31
  66. package/dist/reachability/clusterReachability.js.map +1 -1
  67. package/dist/reachability/index.js +42 -2
  68. package/dist/reachability/index.js.map +1 -1
  69. package/dist/reconnection-manager/index.js +2 -2
  70. package/dist/reconnection-manager/index.js.map +1 -1
  71. package/dist/roap/index.js.map +1 -1
  72. package/dist/roap/turnDiscovery.js +45 -27
  73. package/dist/roap/turnDiscovery.js.map +1 -1
  74. package/dist/roap/types.js +17 -0
  75. package/dist/roap/types.js.map +1 -0
  76. package/dist/types/common/errors/webex-errors.d.ts +7 -1
  77. package/dist/types/config.d.ts +2 -0
  78. package/dist/types/constants.d.ts +15 -85
  79. package/dist/types/controls-options-manager/enums.d.ts +3 -1
  80. package/dist/types/controls-options-manager/types.d.ts +7 -1
  81. package/dist/types/locus-info/index.d.ts +3 -3
  82. package/dist/types/locus-info/selfUtils.d.ts +216 -1
  83. package/dist/types/media/properties.d.ts +15 -0
  84. package/dist/types/meeting/in-meeting-actions.d.ts +16 -0
  85. package/dist/types/meeting/index.d.ts +35 -1
  86. package/dist/types/meeting/muteState.d.ts +0 -1
  87. package/dist/types/meeting/request.d.ts +12 -1
  88. package/dist/types/meeting/request.type.d.ts +6 -0
  89. package/dist/types/meeting/util.d.ts +3 -1
  90. package/dist/types/meeting-info/meeting-info-v2.d.ts +2 -1
  91. package/dist/types/meetings/index.d.ts +28 -0
  92. package/dist/types/member/index.d.ts +20 -6
  93. package/dist/types/member/types.d.ts +73 -14
  94. package/dist/types/member/util.d.ts +156 -1
  95. package/dist/types/members/collection.d.ts +6 -5
  96. package/dist/types/members/index.d.ts +32 -43
  97. package/dist/types/members/request.d.ts +26 -0
  98. package/dist/types/members/util.d.ts +27 -0
  99. package/dist/types/metrics/constants.d.ts +1 -0
  100. package/dist/types/reachability/clusterReachability.d.ts +2 -6
  101. package/dist/types/reachability/index.d.ts +8 -0
  102. package/dist/types/roap/index.d.ts +3 -2
  103. package/dist/types/roap/turnDiscovery.d.ts +5 -17
  104. package/dist/types/roap/types.d.ts +16 -0
  105. package/dist/webinar/index.js +1 -1
  106. package/package.json +24 -23
  107. package/src/breakouts/index.ts +69 -0
  108. package/src/common/errors/webex-errors.ts +8 -1
  109. package/src/config.ts +2 -0
  110. package/src/constants.ts +23 -90
  111. package/src/controls-options-manager/enums.ts +2 -0
  112. package/src/controls-options-manager/types.ts +11 -1
  113. package/src/controls-options-manager/util.ts +62 -0
  114. package/src/locus-info/controlsUtils.ts +48 -12
  115. package/src/locus-info/index.ts +88 -13
  116. package/src/locus-info/selfUtils.ts +496 -442
  117. package/src/media/index.ts +23 -21
  118. package/src/media/properties.ts +96 -0
  119. package/src/meeting/brbState.ts +11 -2
  120. package/src/meeting/in-meeting-actions.ts +32 -0
  121. package/src/meeting/index.ts +356 -87
  122. package/src/meeting/locusMediaRequest.ts +0 -18
  123. package/src/meeting/muteState.ts +4 -4
  124. package/src/meeting/request.ts +36 -1
  125. package/src/meeting/request.type.ts +7 -0
  126. package/src/meeting/util.ts +9 -1
  127. package/src/meeting-info/meeting-info-v2.ts +7 -2
  128. package/src/meeting-info/utilv2.ts +5 -0
  129. package/src/meetings/index.ts +76 -0
  130. package/src/meetings/util.ts +18 -0
  131. package/src/member/index.ts +57 -22
  132. package/src/member/types.ts +82 -16
  133. package/src/member/util.ts +357 -353
  134. package/src/members/collection.ts +4 -3
  135. package/src/members/index.ts +137 -18
  136. package/src/members/request.ts +44 -0
  137. package/src/members/util.ts +43 -1
  138. package/src/metrics/constants.ts +1 -0
  139. package/src/reachability/clusterReachability.ts +26 -25
  140. package/src/reachability/index.ts +55 -1
  141. package/src/reconnection-manager/index.ts +2 -2
  142. package/src/roap/index.ts +3 -7
  143. package/src/roap/turnDiscovery.ts +34 -39
  144. package/src/roap/types.ts +23 -0
  145. package/test/unit/spec/breakouts/index.ts +167 -95
  146. package/test/unit/spec/controls-options-manager/util.js +120 -0
  147. package/test/unit/spec/locus-info/controlsUtils.js +131 -9
  148. package/test/unit/spec/locus-info/index.js +195 -73
  149. package/test/unit/spec/locus-info/selfUtils.js +98 -24
  150. package/test/unit/spec/media/index.ts +150 -18
  151. package/test/unit/spec/media/properties.ts +130 -0
  152. package/test/unit/spec/meeting/brbState.ts +40 -2
  153. package/test/unit/spec/meeting/in-meeting-actions.ts +19 -4
  154. package/test/unit/spec/meeting/index.js +553 -36
  155. package/test/unit/spec/meeting/locusMediaRequest.ts +0 -30
  156. package/test/unit/spec/meeting/muteState.js +73 -2
  157. package/test/unit/spec/meeting/request.js +32 -1
  158. package/test/unit/spec/meeting/utils.js +79 -33
  159. package/test/unit/spec/meeting-info/meetinginfov2.js +41 -0
  160. package/test/unit/spec/meeting-info/utilv2.js +19 -0
  161. package/test/unit/spec/meetings/index.js +68 -1
  162. package/test/unit/spec/members/index.js +304 -78
  163. package/test/unit/spec/members/request.js +68 -22
  164. package/test/unit/spec/members/utils.js +75 -0
  165. package/test/unit/spec/reachability/clusterReachability.ts +41 -55
  166. package/test/unit/spec/reachability/index.ts +89 -0
  167. package/test/unit/spec/reconnection-manager/index.js +4 -4
  168. package/test/unit/spec/roap/turnDiscovery.ts +110 -28
@@ -1 +1 @@
1
- {"version":3,"names":["_uuid","_interopRequireDefault","require","_constants","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","MembersUtil","generateAddMemberOptions","invitee","locusUrl","alertIfActive","generateAdmitMemberOptions","memberIds","getAddMemberBody","options","invitees","address","emailAddress","email","phoneNumber","roles","getAdmitMemberRequestBody","sessionLocusUrls","body","admit","participantIds","authorizingLocusUrl","getAdmitMemberRequestParams","format","baseUrl","mainLocusUrl","uri","concat","CONTROLS","method","HTTP_VERBS","PUT","getAddMemberRequestParams","requestParams","isInvalidInvitee","DIALER_REGEX","E164_FORMAT","test","VALID_EMAIL_ADDRESS","getRemoveMemberRequestParams","reason","PARTICIPANT","memberId","LEAVE","generateTransferHostMemberOptions","transfer","moderator","generateRemoveMemberOptions","removal","_FORCED_","generateMuteMemberOptions","status","isAudio","muted","generateRaiseHandMemberOptions","raised","generateRoleAssignmentMemberOptions","generateLowerAllHandsMemberOptions","requestingParticipantId","undefined","generateEditDisplayNameMemberOptions","alias","getMuteMemberRequestParams","property","PATCH","getAddedRoleShape","role","roleShape","type","hasRole","hostKey","getRoleAssignmentMemberRequestParams","getRaiseHandMemberRequestParams","hand","getLowerAllHandsMemberRequestParams","editDisplayNameMemberRequestParams","aliasValue","ALIAS","POST","getTransferHostToMemberRequestParams","genderateSendDTMFOptions","url","tones","generateSendDTMFRequestParams","_ref","device","dtmf","correlationId","uuid","v4","direction","SEND_DTMF_ENDPOINT","cancelPhoneInviteOptions","generateCancelInviteRequestParams","actionType","_REMOVE_","_default","exports"],"sources":["util.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {\n HTTP_VERBS,\n CONTROLS,\n _FORCED_,\n LEAVE,\n PARTICIPANT,\n VALID_EMAIL_ADDRESS,\n DIALER_REGEX,\n SEND_DTMF_ENDPOINT,\n _REMOVE_,\n ALIAS,\n} from '../constants';\n\nimport {RoleAssignmentOptions, RoleAssignmentRequest, ServerRoleShape} from './types';\n\nconst MembersUtil = {\n /**\n * @param {Object} invitee with emailAddress, email or phoneNumber\n * @param {String} locusUrl\n * @param {Boolean} alertIfActive\n * @returns {Object} the format object\n */\n generateAddMemberOptions: (invitee: object, locusUrl: string, alertIfActive: boolean) => ({\n invitee,\n locusUrl,\n alertIfActive,\n }),\n\n /**\n * @param {Array} memberIds\n * @param {String} locusUrl\n * @returns {Object} the format object\n */\n generateAdmitMemberOptions: (memberIds: Array<any>, locusUrl: string) => ({\n locusUrl,\n memberIds,\n }),\n\n /**\n * @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}\n * @returns {Object} with {invitees: [{address}], alertIfActive}\n */\n getAddMemberBody: (options: any) => ({\n invitees: [\n {\n address:\n options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber,\n ...(options.invitee.roles ? {roles: options.invitee.roles} : {}),\n },\n ],\n alertIfActive: options.alertIfActive,\n }),\n\n /**\n * @param {Object} options with {memberIds, authorizingLocusUrl}\n * @returns {Object} admit with {memberIds}\n */\n getAdmitMemberRequestBody: (options: any) => {\n const {memberIds, sessionLocusUrls} = options;\n const body: any = {admit: {participantIds: memberIds}};\n if (sessionLocusUrls) {\n const {authorizingLocusUrl} = sessionLocusUrls;\n\n return {authorizingLocusUrl, ...body};\n }\n\n return body;\n },\n\n /**\n * @param {Object} format with {memberIds, locusUrl, sessionLocusUrls}\n * @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request\n * if a host/cohost is in a breakout session, the locus url should be the main session locus url\n */\n getAdmitMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAdmitMemberRequestBody(format);\n const {locusUrl, sessionLocusUrls} = format;\n const baseUrl = sessionLocusUrls?.mainLocusUrl || locusUrl;\n const uri = `${baseUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}\n * @returns {Object} the request parameters (method, uri, body) needed to make a addMember request\n */\n getAddMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAddMemberBody(format);\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: format.locusUrl,\n body,\n };\n\n return requestParams;\n },\n\n isInvalidInvitee: (invitee) => {\n if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {\n return true;\n }\n\n if (invitee.phoneNumber) {\n return !DIALER_REGEX.E164_FORMAT.test(invitee.phoneNumber);\n }\n\n return !VALID_EMAIL_ADDRESS.test(invitee.email || invitee.emailAddress);\n },\n\n getRemoveMemberRequestParams: (options) => {\n const body = {\n reason: options.reason,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${LEAVE}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n generateTransferHostMemberOptions: (transfer, moderator, locusUrl) => ({\n moderator,\n locusUrl,\n memberId: transfer,\n }),\n\n generateRemoveMemberOptions: (removal, locusUrl) => ({\n reason: _FORCED_,\n memberId: removal,\n locusUrl,\n }),\n\n generateMuteMemberOptions: (memberId, status, locusUrl, isAudio) => ({\n memberId,\n muted: status,\n locusUrl,\n isAudio,\n }),\n\n generateRaiseHandMemberOptions: (memberId, status, locusUrl) => ({\n memberId,\n raised: status,\n locusUrl,\n }),\n\n /**\n * @param {String} memberId\n * @param {[ServerRoleShape]} roles\n * @param {String} locusUrl\n * @returns {RoleAssignmentOptions}\n */\n generateRoleAssignmentMemberOptions: (\n memberId: string,\n roles: Array<ServerRoleShape>,\n locusUrl: string\n ): RoleAssignmentOptions => ({\n memberId,\n roles,\n locusUrl,\n }),\n\n generateLowerAllHandsMemberOptions: (requestingParticipantId, locusUrl, roles) => ({\n requestingParticipantId,\n locusUrl,\n ...(roles !== undefined && {roles}),\n }),\n\n /**\n * @param {String} memberId id of the participant who is receiving request\n * @param {String} requestingParticipantId id of the participant who is sending request (optional)\n * @param {String} alias alias name\n * @param {String} locusUrl url\n * @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}\n */\n generateEditDisplayNameMemberOptions: (memberId, requestingParticipantId, alias, locusUrl) => ({\n memberId,\n requestingParticipantId,\n alias,\n locusUrl,\n }),\n\n getMuteMemberRequestParams: (options) => {\n const property = options.isAudio === false ? 'video' : 'audio';\n const body = {\n [property]: {\n muted: options.muted,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {ServerRoleShape} role\n * @returns {ServerRoleShape} the role shape to be added to the body\n */\n getAddedRoleShape: (role: ServerRoleShape): ServerRoleShape => {\n const roleShape: ServerRoleShape = {type: role.type, hasRole: role.hasRole};\n\n if (role.hostKey) {\n roleShape.hostKey = role.hostKey;\n }\n\n return roleShape;\n },\n\n /**\n * @param {RoleAssignmentOptions} options\n * @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request\n */\n getRoleAssignmentMemberRequestParams: (options: RoleAssignmentOptions): RoleAssignmentRequest => {\n const body = {role: {roles: []}};\n options.roles.forEach((role) => {\n body.role.roles.push(MembersUtil.getAddedRoleShape(role));\n });\n\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getRaiseHandMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: options.raised,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getLowerAllHandsMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: false,\n ...(options.roles !== undefined && {roles: options.roles}),\n },\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}\n * @returns {Object} request parameters (method, uri, body) needed to make a editDisplayName request\n */\n editDisplayNameMemberRequestParams: (options) => {\n const body = {\n aliasValue: options.alias,\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${ALIAS}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n getTransferHostToMemberRequestParams: (options) => {\n const body = {\n role: {\n moderator: options.moderator,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n genderateSendDTMFOptions: (url, tones, memberId, locusUrl) => ({\n url,\n tones,\n memberId,\n locusUrl,\n }),\n\n generateSendDTMFRequestParams: ({url, tones, memberId, locusUrl}) => {\n const body = {\n device: {\n url,\n },\n memberId,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n direction: 'transmit',\n },\n };\n const uri = `${locusUrl}/${PARTICIPANT}/${memberId}/${SEND_DTMF_ENDPOINT}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n cancelPhoneInviteOptions: (invitee, locusUrl) => ({\n invitee,\n locusUrl,\n }),\n\n generateCancelInviteRequestParams: (options) => {\n const body = {\n actionType: _REMOVE_,\n invitees: [\n {\n address: options.invitee.phoneNumber,\n },\n ],\n };\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: options.locusUrl,\n body,\n };\n\n return requestParams;\n },\n};\n\nexport default MembersUtil;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_uuid","_interopRequireDefault","require","_constants","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","MembersUtil","generateAddMemberOptions","invitee","locusUrl","alertIfActive","generateAdmitMemberOptions","memberIds","getAddMemberBody","options","invitees","address","emailAddress","email","phoneNumber","roles","getAdmitMemberRequestBody","sessionLocusUrls","body","admit","participantIds","authorizingLocusUrl","getAdmitMemberRequestParams","format","baseUrl","mainLocusUrl","uri","concat","CONTROLS","method","HTTP_VERBS","PUT","getAddMemberRequestParams","requestParams","isInvalidInvitee","DIALER_REGEX","E164_FORMAT","test","VALID_EMAIL_ADDRESS","SIP_ADDRESS","getRemoveMemberRequestParams","reason","PARTICIPANT","memberId","LEAVE","generateTransferHostMemberOptions","transfer","moderator","generateRemoveMemberOptions","removal","_FORCED_","generateMuteMemberOptions","status","isAudio","muted","generateRaiseHandMemberOptions","raised","generateRoleAssignmentMemberOptions","generateLowerAllHandsMemberOptions","requestingParticipantId","undefined","generateEditDisplayNameMemberOptions","alias","getMuteMemberRequestParams","property","PATCH","getMoveMemberToLobbyRequestBody","moveToLobby","getMoveMemberToLobbyRequestParams","getAddedRoleShape","role","roleShape","type","hasRole","hostKey","getRoleAssignmentMemberRequestParams","getRaiseHandMemberRequestParams","hand","getLowerAllHandsMemberRequestParams","editDisplayNameMemberRequestParams","aliasValue","ALIAS","POST","getTransferHostToMemberRequestParams","genderateSendDTMFOptions","url","tones","generateSendDTMFRequestParams","_ref","device","dtmf","correlationId","uuid","v4","direction","SEND_DTMF_ENDPOINT","cancelPhoneInviteOptions","generateCancelInviteRequestParams","actionType","_REMOVE_","cancelSIPInviteOptions","generateCancelSIPInviteRequestParams","_default","exports"],"sources":["util.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {\n HTTP_VERBS,\n CONTROLS,\n _FORCED_,\n LEAVE,\n PARTICIPANT,\n VALID_EMAIL_ADDRESS,\n DIALER_REGEX,\n SEND_DTMF_ENDPOINT,\n _REMOVE_,\n ALIAS,\n} from '../constants';\n\nimport {RoleAssignmentOptions, RoleAssignmentRequest, ServerRoleShape} from './types';\n\nconst MembersUtil = {\n /**\n * @param {Object} invitee with emailAddress, email or phoneNumber\n * @param {String} locusUrl\n * @param {Boolean} alertIfActive\n * @returns {Object} the format object\n */\n generateAddMemberOptions: (invitee: object, locusUrl: string, alertIfActive: boolean) => ({\n invitee,\n locusUrl,\n alertIfActive,\n }),\n\n /**\n * @param {Array} memberIds\n * @param {String} locusUrl\n * @returns {Object} the format object\n */\n generateAdmitMemberOptions: (memberIds: Array<any>, locusUrl: string) => ({\n locusUrl,\n memberIds,\n }),\n\n /**\n * @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}\n * @returns {Object} with {invitees: [{address}], alertIfActive}\n */\n getAddMemberBody: (options: any) => ({\n invitees: [\n {\n address:\n options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber,\n ...(options.invitee.roles ? {roles: options.invitee.roles} : {}),\n },\n ],\n alertIfActive: options.alertIfActive,\n }),\n\n /**\n * @param {Object} options with {memberIds, authorizingLocusUrl}\n * @returns {Object} admit with {memberIds}\n */\n getAdmitMemberRequestBody: (options: any) => {\n const {memberIds, sessionLocusUrls} = options;\n const body: any = {admit: {participantIds: memberIds}};\n if (sessionLocusUrls) {\n const {authorizingLocusUrl} = sessionLocusUrls;\n\n return {authorizingLocusUrl, ...body};\n }\n\n return body;\n },\n\n /**\n * @param {Object} format with {memberIds, locusUrl, sessionLocusUrls}\n * @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request\n * if a host/cohost is in a breakout session, the locus url should be the main session locus url\n */\n getAdmitMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAdmitMemberRequestBody(format);\n const {locusUrl, sessionLocusUrls} = format;\n const baseUrl = sessionLocusUrls?.mainLocusUrl || locusUrl;\n const uri = `${baseUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}\n * @returns {Object} the request parameters (method, uri, body) needed to make a addMember request\n */\n getAddMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAddMemberBody(format);\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: format.locusUrl,\n body,\n };\n\n return requestParams;\n },\n\n isInvalidInvitee: (invitee) => {\n if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {\n return true;\n }\n\n if (invitee.phoneNumber) {\n return !DIALER_REGEX.E164_FORMAT.test(invitee.phoneNumber);\n }\n\n return !(\n VALID_EMAIL_ADDRESS.test(invitee.email || invitee.emailAddress) ||\n DIALER_REGEX.SIP_ADDRESS.test(invitee.email || invitee.emailAddress)\n );\n },\n\n getRemoveMemberRequestParams: (options) => {\n const body = {\n reason: options.reason,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${LEAVE}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n generateTransferHostMemberOptions: (transfer, moderator, locusUrl) => ({\n moderator,\n locusUrl,\n memberId: transfer,\n }),\n\n generateRemoveMemberOptions: (removal, locusUrl) => ({\n reason: _FORCED_,\n memberId: removal,\n locusUrl,\n }),\n\n generateMuteMemberOptions: (memberId, status, locusUrl, isAudio) => ({\n memberId,\n muted: status,\n locusUrl,\n isAudio,\n }),\n\n generateRaiseHandMemberOptions: (memberId, status, locusUrl) => ({\n memberId,\n raised: status,\n locusUrl,\n }),\n\n /**\n * @param {String} memberId\n * @param {[ServerRoleShape]} roles\n * @param {String} locusUrl\n * @returns {RoleAssignmentOptions}\n */\n generateRoleAssignmentMemberOptions: (\n memberId: string,\n roles: Array<ServerRoleShape>,\n locusUrl: string\n ): RoleAssignmentOptions => ({\n memberId,\n roles,\n locusUrl,\n }),\n\n generateLowerAllHandsMemberOptions: (requestingParticipantId, locusUrl, roles) => ({\n requestingParticipantId,\n locusUrl,\n ...(roles !== undefined && {roles}),\n }),\n\n /**\n * @param {String} memberId id of the participant who is receiving request\n * @param {String} requestingParticipantId id of the participant who is sending request (optional)\n * @param {String} alias alias name\n * @param {String} locusUrl url\n * @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}\n */\n generateEditDisplayNameMemberOptions: (memberId, requestingParticipantId, alias, locusUrl) => ({\n memberId,\n requestingParticipantId,\n alias,\n locusUrl,\n }),\n\n getMuteMemberRequestParams: (options) => {\n const property = options.isAudio === false ? 'video' : 'audio';\n const body = {\n [property]: {\n muted: options.muted,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getMoveMemberToLobbyRequestBody: (memberId: string) => ({\n moveToLobby: {\n participantIds: [memberId],\n },\n }),\n\n getMoveMemberToLobbyRequestParams: (options: {memberId: string; locusUrl: string}, body) => {\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {ServerRoleShape} role\n * @returns {ServerRoleShape} the role shape to be added to the body\n */\n getAddedRoleShape: (role: ServerRoleShape): ServerRoleShape => {\n const roleShape: ServerRoleShape = {type: role.type, hasRole: role.hasRole};\n\n if (role.hostKey) {\n roleShape.hostKey = role.hostKey;\n }\n\n return roleShape;\n },\n\n /**\n * @param {RoleAssignmentOptions} options\n * @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request\n */\n getRoleAssignmentMemberRequestParams: (options: RoleAssignmentOptions): RoleAssignmentRequest => {\n const body = {role: {roles: []}};\n options.roles.forEach((role) => {\n body.role.roles.push(MembersUtil.getAddedRoleShape(role));\n });\n\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getRaiseHandMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: options.raised,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getLowerAllHandsMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: false,\n ...(options.roles !== undefined && {roles: options.roles}),\n },\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}\n * @returns {Object} request parameters (method, uri, body) needed to make a editDisplayName request\n */\n editDisplayNameMemberRequestParams: (options) => {\n const body = {\n aliasValue: options.alias,\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${ALIAS}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n getTransferHostToMemberRequestParams: (options) => {\n const body = {\n role: {\n moderator: options.moderator,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n genderateSendDTMFOptions: (url, tones, memberId, locusUrl) => ({\n url,\n tones,\n memberId,\n locusUrl,\n }),\n\n generateSendDTMFRequestParams: ({url, tones, memberId, locusUrl}) => {\n const body = {\n device: {\n url,\n },\n memberId,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n direction: 'transmit',\n },\n };\n const uri = `${locusUrl}/${PARTICIPANT}/${memberId}/${SEND_DTMF_ENDPOINT}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n cancelPhoneInviteOptions: (invitee, locusUrl) => ({\n invitee,\n locusUrl,\n }),\n\n generateCancelInviteRequestParams: (options) => {\n const body = {\n actionType: _REMOVE_,\n invitees: [\n {\n address: options.invitee.phoneNumber,\n },\n ],\n };\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: options.locusUrl,\n body,\n };\n\n return requestParams;\n },\n\n cancelSIPInviteOptions: (invitee, locusUrl) => ({\n invitee,\n locusUrl,\n }),\n\n generateCancelSIPInviteRequestParams: (options) => {\n const body = {\n actionType: _REMOVE_,\n invitees: [\n {\n address: options.invitee.memberId,\n },\n ],\n };\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: options.locusUrl,\n body,\n };\n\n return requestParams;\n },\n};\n\nexport default MembersUtil;\n"],"mappings":"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"}
@@ -78,6 +78,7 @@ var BEHAVIORAL_METRICS = exports.default = {
78
78
  MEETING_INFO_POLICY_ERROR: 'js_sdk_meeting_info_policy_error',
79
79
  LOCUS_DELTA_SYNC_FAILED: 'js_sdk_locus_delta_sync_failed',
80
80
  LOCUS_DELTA_OUT_OF_ORDER: 'js_sdk_locus_delta_ooo',
81
+ LOCUS_SYNC_HANDLING_FAILED: 'js_sdk_locus_sync_handling_failed',
81
82
  PERMISSION_TOKEN_REFRESH: 'js_sdk_permission_token_refresh',
82
83
  PERMISSION_TOKEN_REFRESH_ERROR: 'js_sdk_permission_token_refresh_error',
83
84
  TURN_DISCOVERY_LATENCY: 'js_sdk_turn_discovery_latency',
@@ -1 +1 @@
1
- {"version":3,"names":["BEHAVIORAL_METRICS","exports","default","MEETINGS_REGISTRATION_FAILED","MEETINGS_REGISTRATION_SUCCESS","MEETINGS_REGISTRATION_STEP","MERCURY_CONNECTION_FAILURE","MERCURY_CONNECTION_RESTORED","JOIN_SUCCESS","JOIN_FAILURE","ADD_MEDIA_SUCCESS","ADD_MEDIA_FAILURE","ADD_MEDIA_RETRY","ROAP_MERCURY_EVENT_RECEIVED","CONNECTION_SUCCESS","CONNECTION_FAILURE","MEETING_LEAVE_FAILURE","MEETING_END_ALL_FAILURE","MEETING_END_ALL_INITIATED","GET_USER_MEDIA_FAILURE","GET_DISPLAY_MEDIA_FAILURE","JOIN_WITH_MEDIA_FAILURE","LLM_CONNECTION_AFTER_JOIN_FAILURE","RECEIVE_TRANSCRIPTION_AFTER_JOIN_FAILURE","DISCONNECT_DUE_TO_INACTIVITY","MEETING_MEDIA_INACTIVE","MEETING_RECONNECT_FAILURE","MEETING_MAX_REJOIN_FAILURE","MEETING_SHARE_SUCCESS","MEETING_SHARE_FAILURE","MEETING_START_WHITEBOARD_SHARE_FAILURE","MEETING_STOP_WHITEBOARD_SHARE_FAILURE","MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE","MUTE_AUDIO_FAILURE","MUTE_VIDEO_FAILURE","SET_MEETING_QUALITY_FAILURE","STOP_FLOOR_REQUEST_FAILURE","ADD_DIAL_IN_FAILURE","ADD_DIAL_OUT_FAILURE","UPDATE_MEDIA_FAILURE","UNMUTE_AUDIO_FAILURE","UNMUTE_VIDEO_FAILURE","ROAP_ANSWER_FAILURE","ROAP_GLARE_CONDITION","PEERCONNECTION_FAILURE","INVALID_ICE_CANDIDATE","UPLOAD_LOGS_FAILURE","UPLOAD_LOGS_SUCCESS","RECEIVE_TRANSCRIPTION_FAILURE","MEETING_IS_IN_PROGRESS_ERROR","STATIC_MEETING_LINK_ALREADY_EXISTS_ERROR","FETCH_MEETING_INFO_V1_SUCCESS","FETCH_MEETING_INFO_V1_FAILURE","ENABLE_STATIC_METTING_LINK_SUCCESS","ENABLE_STATIC_METTING_LINK_FAILURE","DISABLE_STATIC_MEETING_LINK_SUCCESS","DISABLE_STATIC_MEETING_LINK_FAILURE","ADHOC_MEETING_SUCCESS","ADHOC_MEETING_FAILURE","FETCH_STATIC_MEETING_LINK_SUCCESS","FETCH_STATIC_MEETING_LINK_FAILURE","MEETING_LINK_DOES_NOT_EXIST_ERROR","VERIFY_PASSWORD_SUCCESS","VERIFY_PASSWORD_ERROR","VERIFY_CAPTCHA_ERROR","MOVE_TO_SUCCESS","MOVE_TO_FAILURE","MOVE_FROM_SUCCESS","MOVE_FROM_FAILURE","TURN_DISCOVERY_FAILURE","MEETING_INFO_POLICY_ERROR","LOCUS_DELTA_SYNC_FAILED","LOCUS_DELTA_OUT_OF_ORDER","PERMISSION_TOKEN_REFRESH","PERMISSION_TOKEN_REFRESH_ERROR","TURN_DISCOVERY_LATENCY","ROAP_OFFER_TO_ANSWER_LATENCY","ROAP_HTTP_RESPONSE_MISSING","TURN_DISCOVERY_REQUIRES_OK","REACHABILITY_COMPLETED","JOIN_WEBINAR_ERROR","GUEST_ENTERED_LOBBY","GUEST_EXITED_LOBBY","VERIFY_REGISTRATION_ID_SUCCESS","VERIFY_REGISTRATION_ID_ERROR","JOIN_FORBIDDEN_ERROR"],"sources":["constants.ts"],"sourcesContent":["// Metrics constants ----------------------------------------------------------\n\nconst BEHAVIORAL_METRICS = {\n MEETINGS_REGISTRATION_FAILED: 'js_sdk_meetings_registration_failed',\n MEETINGS_REGISTRATION_SUCCESS: 'js_sdk_meetings_registration_success',\n MEETINGS_REGISTRATION_STEP: 'meetings_registration_step',\n MERCURY_CONNECTION_FAILURE: 'js_sdk_mercury_connection_failure',\n MERCURY_CONNECTION_RESTORED: 'js_sdk_mercury_connection_restored',\n JOIN_SUCCESS: 'js_sdk_join_success',\n JOIN_FAILURE: 'js_sdk_join_failures',\n ADD_MEDIA_SUCCESS: 'js_sdk_add_media_success',\n ADD_MEDIA_FAILURE: 'js_sdk_add_media_failures',\n ADD_MEDIA_RETRY: 'js_sdk_add_media_retry',\n ROAP_MERCURY_EVENT_RECEIVED: 'js_sdk_roap_mercury_received',\n CONNECTION_SUCCESS: 'js_sdk_connection_success',\n CONNECTION_FAILURE: 'js_sdk_connection_failures',\n MEETING_LEAVE_FAILURE: 'js_sdk_meeting_leave_failure',\n MEETING_END_ALL_FAILURE: 'js_sdk_meeting_end_for_all_failure',\n MEETING_END_ALL_INITIATED: 'js_sdk_meeting_end_for_all_initiated',\n GET_USER_MEDIA_FAILURE: 'js_sdk_get_user_media_failures',\n GET_DISPLAY_MEDIA_FAILURE: 'js_sdk_get_display_media_failures',\n JOIN_WITH_MEDIA_FAILURE: 'js_sdk_join_with_media_failures',\n LLM_CONNECTION_AFTER_JOIN_FAILURE: 'js_sdk_llm_connection_after_join_failure',\n RECEIVE_TRANSCRIPTION_AFTER_JOIN_FAILURE: 'js_sdk_receive_transcription_after_join_failure',\n\n DISCONNECT_DUE_TO_INACTIVITY: 'js_sdk_disconnect_due_to_inactivity',\n MEETING_MEDIA_INACTIVE: 'js_sdk_meeting_media_inactive',\n MEETING_RECONNECT_FAILURE: 'js_sdk_meeting_reconnect_failures',\n MEETING_MAX_REJOIN_FAILURE: 'js_sdk_meeting_max_rejoin_failure',\n MEETING_SHARE_SUCCESS: 'js_sdk_meeting_share_success',\n MEETING_SHARE_FAILURE: 'js_sdk_meeting_share_failures',\n MEETING_START_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_start_whiteboard_share_failures',\n MEETING_STOP_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_stop_whiteboard_share_failures',\n MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE: 'js_sdk_meeting_share_video_mute_state_change',\n MUTE_AUDIO_FAILURE: 'js_sdk_mute_audio_failures',\n MUTE_VIDEO_FAILURE: 'js_sdk_mute_video_failures',\n SET_MEETING_QUALITY_FAILURE: 'js_sdk_set_meeting_quality_failures',\n STOP_FLOOR_REQUEST_FAILURE: 'js_sdk_stop_floor_request_failures',\n ADD_DIAL_IN_FAILURE: 'js_sdk_add_dial_in_failure',\n ADD_DIAL_OUT_FAILURE: 'js_sdk_add_dial_out_failure',\n UPDATE_MEDIA_FAILURE: 'js_sdk_update_media_failures',\n UNMUTE_AUDIO_FAILURE: 'js_sdk_unmute_audio_failures',\n UNMUTE_VIDEO_FAILURE: 'js_sdk_unmute_video_failures',\n ROAP_ANSWER_FAILURE: 'js_sdk_roap_answer_failures',\n ROAP_GLARE_CONDITION: 'js_sdk_roap_glar_condition',\n PEERCONNECTION_FAILURE: 'js_sdk_peerConnection_failures',\n INVALID_ICE_CANDIDATE: 'js_sdk_invalid_ice_candidate',\n UPLOAD_LOGS_FAILURE: 'js_sdk_upload_logs_failure',\n UPLOAD_LOGS_SUCCESS: 'js_sdk_upload_logs_success',\n RECEIVE_TRANSCRIPTION_FAILURE: 'js_sdk_receive_transcription_failure',\n MEETING_IS_IN_PROGRESS_ERROR: 'js_sdk_meeting_is_in_progress_error',\n STATIC_MEETING_LINK_ALREADY_EXISTS_ERROR: 'js_sdk_static_meeting_link_already_exists_error',\n FETCH_MEETING_INFO_V1_SUCCESS: 'js_sdk_fetch_meeting_info_v1_success',\n FETCH_MEETING_INFO_V1_FAILURE: 'js_sdk_fetch_meeting_info_v1_failure',\n ENABLE_STATIC_METTING_LINK_SUCCESS: 'js_sdk_enable_static_meeting_link_success',\n ENABLE_STATIC_METTING_LINK_FAILURE: 'js_sdk_enable_static_meeting_link_failure',\n DISABLE_STATIC_MEETING_LINK_SUCCESS: 'js_sdk_disable_static_meeting_link_success',\n DISABLE_STATIC_MEETING_LINK_FAILURE: 'js_sdk_disable_static_meeting_link_failure',\n ADHOC_MEETING_SUCCESS: 'js_sdk_adhoc_meeting_success',\n ADHOC_MEETING_FAILURE: 'js_sdk_adhoc_meeting_failure',\n FETCH_STATIC_MEETING_LINK_SUCCESS: 'js_sdk_fetch_static_meeting_link_success',\n FETCH_STATIC_MEETING_LINK_FAILURE: 'js_sdk_fetch_static_meeting_link_failure',\n MEETING_LINK_DOES_NOT_EXIST_ERROR: 'js_sdk_meeting_link_does_not_exist_error',\n VERIFY_PASSWORD_SUCCESS: 'js_sdk_verify_password_success',\n VERIFY_PASSWORD_ERROR: 'js_sdk_verify_password_error',\n VERIFY_CAPTCHA_ERROR: 'js_sdk_verify_captcha_error',\n MOVE_TO_SUCCESS: 'js_sdk_move_to_success',\n MOVE_TO_FAILURE: 'js_sdk_move_to_failure',\n MOVE_FROM_SUCCESS: 'js_sdk_move_from_success',\n MOVE_FROM_FAILURE: 'js_sdk_move_from_failure',\n TURN_DISCOVERY_FAILURE: 'js_sdk_turn_discovery_failure',\n MEETING_INFO_POLICY_ERROR: 'js_sdk_meeting_info_policy_error',\n LOCUS_DELTA_SYNC_FAILED: 'js_sdk_locus_delta_sync_failed',\n LOCUS_DELTA_OUT_OF_ORDER: 'js_sdk_locus_delta_ooo',\n PERMISSION_TOKEN_REFRESH: 'js_sdk_permission_token_refresh',\n PERMISSION_TOKEN_REFRESH_ERROR: 'js_sdk_permission_token_refresh_error',\n TURN_DISCOVERY_LATENCY: 'js_sdk_turn_discovery_latency',\n ROAP_OFFER_TO_ANSWER_LATENCY: 'js_sdk_roap_offer_to_answer_latency',\n ROAP_HTTP_RESPONSE_MISSING: 'js_sdk_roap_http_response_missing',\n TURN_DISCOVERY_REQUIRES_OK: 'js_sdk_turn_discovery_requires_ok',\n REACHABILITY_COMPLETED: 'js_sdk_reachability_completed',\n JOIN_WEBINAR_ERROR: 'js_sdk_join_webinar_error',\n GUEST_ENTERED_LOBBY: 'js_sdk_guest_entered_lobby',\n GUEST_EXITED_LOBBY: 'js_sdk_guest_exited_lobby',\n VERIFY_REGISTRATION_ID_SUCCESS: 'js_sdk_verify_registrationId_success',\n VERIFY_REGISTRATION_ID_ERROR: 'js_sdk_verify_registrationId_error',\n JOIN_FORBIDDEN_ERROR: 'js_sdk_join_forbidden_error',\n};\n\nexport {BEHAVIORAL_METRICS as default};\n"],"mappings":"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"}
1
+ {"version":3,"names":["BEHAVIORAL_METRICS","exports","default","MEETINGS_REGISTRATION_FAILED","MEETINGS_REGISTRATION_SUCCESS","MEETINGS_REGISTRATION_STEP","MERCURY_CONNECTION_FAILURE","MERCURY_CONNECTION_RESTORED","JOIN_SUCCESS","JOIN_FAILURE","ADD_MEDIA_SUCCESS","ADD_MEDIA_FAILURE","ADD_MEDIA_RETRY","ROAP_MERCURY_EVENT_RECEIVED","CONNECTION_SUCCESS","CONNECTION_FAILURE","MEETING_LEAVE_FAILURE","MEETING_END_ALL_FAILURE","MEETING_END_ALL_INITIATED","GET_USER_MEDIA_FAILURE","GET_DISPLAY_MEDIA_FAILURE","JOIN_WITH_MEDIA_FAILURE","LLM_CONNECTION_AFTER_JOIN_FAILURE","RECEIVE_TRANSCRIPTION_AFTER_JOIN_FAILURE","DISCONNECT_DUE_TO_INACTIVITY","MEETING_MEDIA_INACTIVE","MEETING_RECONNECT_FAILURE","MEETING_MAX_REJOIN_FAILURE","MEETING_SHARE_SUCCESS","MEETING_SHARE_FAILURE","MEETING_START_WHITEBOARD_SHARE_FAILURE","MEETING_STOP_WHITEBOARD_SHARE_FAILURE","MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE","MUTE_AUDIO_FAILURE","MUTE_VIDEO_FAILURE","SET_MEETING_QUALITY_FAILURE","STOP_FLOOR_REQUEST_FAILURE","ADD_DIAL_IN_FAILURE","ADD_DIAL_OUT_FAILURE","UPDATE_MEDIA_FAILURE","UNMUTE_AUDIO_FAILURE","UNMUTE_VIDEO_FAILURE","ROAP_ANSWER_FAILURE","ROAP_GLARE_CONDITION","PEERCONNECTION_FAILURE","INVALID_ICE_CANDIDATE","UPLOAD_LOGS_FAILURE","UPLOAD_LOGS_SUCCESS","RECEIVE_TRANSCRIPTION_FAILURE","MEETING_IS_IN_PROGRESS_ERROR","STATIC_MEETING_LINK_ALREADY_EXISTS_ERROR","FETCH_MEETING_INFO_V1_SUCCESS","FETCH_MEETING_INFO_V1_FAILURE","ENABLE_STATIC_METTING_LINK_SUCCESS","ENABLE_STATIC_METTING_LINK_FAILURE","DISABLE_STATIC_MEETING_LINK_SUCCESS","DISABLE_STATIC_MEETING_LINK_FAILURE","ADHOC_MEETING_SUCCESS","ADHOC_MEETING_FAILURE","FETCH_STATIC_MEETING_LINK_SUCCESS","FETCH_STATIC_MEETING_LINK_FAILURE","MEETING_LINK_DOES_NOT_EXIST_ERROR","VERIFY_PASSWORD_SUCCESS","VERIFY_PASSWORD_ERROR","VERIFY_CAPTCHA_ERROR","MOVE_TO_SUCCESS","MOVE_TO_FAILURE","MOVE_FROM_SUCCESS","MOVE_FROM_FAILURE","TURN_DISCOVERY_FAILURE","MEETING_INFO_POLICY_ERROR","LOCUS_DELTA_SYNC_FAILED","LOCUS_DELTA_OUT_OF_ORDER","LOCUS_SYNC_HANDLING_FAILED","PERMISSION_TOKEN_REFRESH","PERMISSION_TOKEN_REFRESH_ERROR","TURN_DISCOVERY_LATENCY","ROAP_OFFER_TO_ANSWER_LATENCY","ROAP_HTTP_RESPONSE_MISSING","TURN_DISCOVERY_REQUIRES_OK","REACHABILITY_COMPLETED","JOIN_WEBINAR_ERROR","GUEST_ENTERED_LOBBY","GUEST_EXITED_LOBBY","VERIFY_REGISTRATION_ID_SUCCESS","VERIFY_REGISTRATION_ID_ERROR","JOIN_FORBIDDEN_ERROR"],"sources":["constants.ts"],"sourcesContent":["// Metrics constants ----------------------------------------------------------\n\nconst BEHAVIORAL_METRICS = {\n MEETINGS_REGISTRATION_FAILED: 'js_sdk_meetings_registration_failed',\n MEETINGS_REGISTRATION_SUCCESS: 'js_sdk_meetings_registration_success',\n MEETINGS_REGISTRATION_STEP: 'meetings_registration_step',\n MERCURY_CONNECTION_FAILURE: 'js_sdk_mercury_connection_failure',\n MERCURY_CONNECTION_RESTORED: 'js_sdk_mercury_connection_restored',\n JOIN_SUCCESS: 'js_sdk_join_success',\n JOIN_FAILURE: 'js_sdk_join_failures',\n ADD_MEDIA_SUCCESS: 'js_sdk_add_media_success',\n ADD_MEDIA_FAILURE: 'js_sdk_add_media_failures',\n ADD_MEDIA_RETRY: 'js_sdk_add_media_retry',\n ROAP_MERCURY_EVENT_RECEIVED: 'js_sdk_roap_mercury_received',\n CONNECTION_SUCCESS: 'js_sdk_connection_success',\n CONNECTION_FAILURE: 'js_sdk_connection_failures',\n MEETING_LEAVE_FAILURE: 'js_sdk_meeting_leave_failure',\n MEETING_END_ALL_FAILURE: 'js_sdk_meeting_end_for_all_failure',\n MEETING_END_ALL_INITIATED: 'js_sdk_meeting_end_for_all_initiated',\n GET_USER_MEDIA_FAILURE: 'js_sdk_get_user_media_failures',\n GET_DISPLAY_MEDIA_FAILURE: 'js_sdk_get_display_media_failures',\n JOIN_WITH_MEDIA_FAILURE: 'js_sdk_join_with_media_failures',\n LLM_CONNECTION_AFTER_JOIN_FAILURE: 'js_sdk_llm_connection_after_join_failure',\n RECEIVE_TRANSCRIPTION_AFTER_JOIN_FAILURE: 'js_sdk_receive_transcription_after_join_failure',\n\n DISCONNECT_DUE_TO_INACTIVITY: 'js_sdk_disconnect_due_to_inactivity',\n MEETING_MEDIA_INACTIVE: 'js_sdk_meeting_media_inactive',\n MEETING_RECONNECT_FAILURE: 'js_sdk_meeting_reconnect_failures',\n MEETING_MAX_REJOIN_FAILURE: 'js_sdk_meeting_max_rejoin_failure',\n MEETING_SHARE_SUCCESS: 'js_sdk_meeting_share_success',\n MEETING_SHARE_FAILURE: 'js_sdk_meeting_share_failures',\n MEETING_START_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_start_whiteboard_share_failures',\n MEETING_STOP_WHITEBOARD_SHARE_FAILURE: 'js_sdk_meeting_stop_whiteboard_share_failures',\n MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE: 'js_sdk_meeting_share_video_mute_state_change',\n MUTE_AUDIO_FAILURE: 'js_sdk_mute_audio_failures',\n MUTE_VIDEO_FAILURE: 'js_sdk_mute_video_failures',\n SET_MEETING_QUALITY_FAILURE: 'js_sdk_set_meeting_quality_failures',\n STOP_FLOOR_REQUEST_FAILURE: 'js_sdk_stop_floor_request_failures',\n ADD_DIAL_IN_FAILURE: 'js_sdk_add_dial_in_failure',\n ADD_DIAL_OUT_FAILURE: 'js_sdk_add_dial_out_failure',\n UPDATE_MEDIA_FAILURE: 'js_sdk_update_media_failures',\n UNMUTE_AUDIO_FAILURE: 'js_sdk_unmute_audio_failures',\n UNMUTE_VIDEO_FAILURE: 'js_sdk_unmute_video_failures',\n ROAP_ANSWER_FAILURE: 'js_sdk_roap_answer_failures',\n ROAP_GLARE_CONDITION: 'js_sdk_roap_glar_condition',\n PEERCONNECTION_FAILURE: 'js_sdk_peerConnection_failures',\n INVALID_ICE_CANDIDATE: 'js_sdk_invalid_ice_candidate',\n UPLOAD_LOGS_FAILURE: 'js_sdk_upload_logs_failure',\n UPLOAD_LOGS_SUCCESS: 'js_sdk_upload_logs_success',\n RECEIVE_TRANSCRIPTION_FAILURE: 'js_sdk_receive_transcription_failure',\n MEETING_IS_IN_PROGRESS_ERROR: 'js_sdk_meeting_is_in_progress_error',\n STATIC_MEETING_LINK_ALREADY_EXISTS_ERROR: 'js_sdk_static_meeting_link_already_exists_error',\n FETCH_MEETING_INFO_V1_SUCCESS: 'js_sdk_fetch_meeting_info_v1_success',\n FETCH_MEETING_INFO_V1_FAILURE: 'js_sdk_fetch_meeting_info_v1_failure',\n ENABLE_STATIC_METTING_LINK_SUCCESS: 'js_sdk_enable_static_meeting_link_success',\n ENABLE_STATIC_METTING_LINK_FAILURE: 'js_sdk_enable_static_meeting_link_failure',\n DISABLE_STATIC_MEETING_LINK_SUCCESS: 'js_sdk_disable_static_meeting_link_success',\n DISABLE_STATIC_MEETING_LINK_FAILURE: 'js_sdk_disable_static_meeting_link_failure',\n ADHOC_MEETING_SUCCESS: 'js_sdk_adhoc_meeting_success',\n ADHOC_MEETING_FAILURE: 'js_sdk_adhoc_meeting_failure',\n FETCH_STATIC_MEETING_LINK_SUCCESS: 'js_sdk_fetch_static_meeting_link_success',\n FETCH_STATIC_MEETING_LINK_FAILURE: 'js_sdk_fetch_static_meeting_link_failure',\n MEETING_LINK_DOES_NOT_EXIST_ERROR: 'js_sdk_meeting_link_does_not_exist_error',\n VERIFY_PASSWORD_SUCCESS: 'js_sdk_verify_password_success',\n VERIFY_PASSWORD_ERROR: 'js_sdk_verify_password_error',\n VERIFY_CAPTCHA_ERROR: 'js_sdk_verify_captcha_error',\n MOVE_TO_SUCCESS: 'js_sdk_move_to_success',\n MOVE_TO_FAILURE: 'js_sdk_move_to_failure',\n MOVE_FROM_SUCCESS: 'js_sdk_move_from_success',\n MOVE_FROM_FAILURE: 'js_sdk_move_from_failure',\n TURN_DISCOVERY_FAILURE: 'js_sdk_turn_discovery_failure',\n MEETING_INFO_POLICY_ERROR: 'js_sdk_meeting_info_policy_error',\n LOCUS_DELTA_SYNC_FAILED: 'js_sdk_locus_delta_sync_failed',\n LOCUS_DELTA_OUT_OF_ORDER: 'js_sdk_locus_delta_ooo',\n LOCUS_SYNC_HANDLING_FAILED: 'js_sdk_locus_sync_handling_failed',\n PERMISSION_TOKEN_REFRESH: 'js_sdk_permission_token_refresh',\n PERMISSION_TOKEN_REFRESH_ERROR: 'js_sdk_permission_token_refresh_error',\n TURN_DISCOVERY_LATENCY: 'js_sdk_turn_discovery_latency',\n ROAP_OFFER_TO_ANSWER_LATENCY: 'js_sdk_roap_offer_to_answer_latency',\n ROAP_HTTP_RESPONSE_MISSING: 'js_sdk_roap_http_response_missing',\n TURN_DISCOVERY_REQUIRES_OK: 'js_sdk_turn_discovery_requires_ok',\n REACHABILITY_COMPLETED: 'js_sdk_reachability_completed',\n JOIN_WEBINAR_ERROR: 'js_sdk_join_webinar_error',\n GUEST_ENTERED_LOBBY: 'js_sdk_guest_entered_lobby',\n GUEST_EXITED_LOBBY: 'js_sdk_guest_exited_lobby',\n VERIFY_REGISTRATION_ID_SUCCESS: 'js_sdk_verify_registrationId_success',\n VERIFY_REGISTRATION_ID_ERROR: 'js_sdk_verify_registrationId_error',\n JOIN_FORBIDDEN_ERROR: 'js_sdk_join_forbidden_error',\n};\n\nexport {BEHAVIORAL_METRICS as default};\n"],"mappings":"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"}
@@ -73,6 +73,7 @@ var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_
73
73
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "srflxIceCandidates", []);
74
74
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isVideoMesh", void 0);
75
75
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "name", void 0);
76
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "reachedSubnets", new _set.default());
76
77
  _this.name = name;
77
78
  _this.isVideoMesh = clusterInfo.isVideoMesh;
78
79
  _this.numUdpUrls = clusterInfo.udp.length;
@@ -253,28 +254,13 @@ var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_
253
254
  value: function registerIceGatheringStateChangeListener() {
254
255
  var _this2 = this;
255
256
  this.pc.onicegatheringstatechange = function () {
256
- var COMPLETE = _constants.ICE_GATHERING_STATE.COMPLETE;
257
- if (_this2.pc.iceConnectionState === COMPLETE) {
257
+ if (_this2.pc.iceGatheringState === _constants.ICE_GATHERING_STATE.COMPLETE) {
258
258
  _this2.closePeerConnection();
259
259
  _this2.finishReachabilityCheck();
260
260
  }
261
261
  };
262
262
  }
263
263
 
264
- /**
265
- * Checks if we have the results for all the protocols (UDP and TCP)
266
- *
267
- * @returns {boolean} true if we have all results, false otherwise
268
- */
269
- }, {
270
- key: "haveWeGotAllResults",
271
- value: function haveWeGotAllResults() {
272
- var _this3 = this;
273
- return ['udp', 'tcp', 'xtls'].every(function (protocol) {
274
- return _this3.result[protocol].result === 'reachable' || _this3.result[protocol].result === 'untested';
275
- });
276
- }
277
-
278
264
  /**
279
265
  * Saves the latency in the result for the given protocol and marks it as reachable,
280
266
  * emits the "resultReady" event if this is the first result for that protocol,
@@ -284,11 +270,12 @@ var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_
284
270
  * @param {string} protocol
285
271
  * @param {number} latency
286
272
  * @param {string|null} [publicIp]
273
+ * @param {string|null} [serverIp]
287
274
  * @returns {void}
288
275
  */
289
276
  }, {
290
277
  key: "saveResult",
291
- value: function saveResult(protocol, latency, publicIp) {
278
+ value: function saveResult(protocol, latency, publicIp, serverIp) {
292
279
  var result = this.result[protocol];
293
280
  if (result.latencyInMilliseconds === undefined) {
294
281
  _loggerProxy.default.logger.log( // @ts-ignore
@@ -307,6 +294,9 @@ var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_
307
294
  } else {
308
295
  this.addPublicIP(protocol, publicIp);
309
296
  }
297
+ if (serverIp) {
298
+ this.reachedSubnets.add(serverIp);
299
+ }
310
300
  }
311
301
 
312
302
  /**
@@ -318,7 +308,7 @@ var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_
318
308
  }, {
319
309
  key: "determineNatType",
320
310
  value: function determineNatType(candidate) {
321
- var _this4 = this;
311
+ var _this3 = this;
322
312
  this.srflxIceCandidates.push(candidate);
323
313
  if (this.srflxIceCandidates.length > 1) {
324
314
  var portsFound = {};
@@ -334,7 +324,7 @@ var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_
334
324
  ports = _ref2[1];
335
325
  if (ports.size > 1) {
336
326
  // Found candidates with the same address and relatedPort, but different ports
337
- _this4.emit({
327
+ _this3.emit({
338
328
  file: 'clusterReachability',
339
329
  function: 'determineNatType'
340
330
  }, Events.natTypeUpdated, {
@@ -353,29 +343,31 @@ var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_
353
343
  }, {
354
344
  key: "registerIceCandidateListener",
355
345
  value: function registerIceCandidateListener() {
356
- var _this5 = this;
346
+ var _this4 = this;
357
347
  this.pc.onicecandidate = function (e) {
358
348
  var TURN_TLS_PORT = 443;
359
349
  var CANDIDATE_TYPES = {
360
350
  SERVER_REFLEXIVE: 'srflx',
361
351
  RELAY: 'relay'
362
352
  };
363
- var latencyInMilliseconds = _this5.getElapsedTime();
353
+ var latencyInMilliseconds = _this4.getElapsedTime();
364
354
  if (e.candidate) {
365
355
  if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {
366
- _this5.saveResult('udp', latencyInMilliseconds, e.candidate.address);
367
- _this5.determineNatType(e.candidate);
356
+ var serverIp = null;
357
+ if ('url' in e.candidate) {
358
+ var stunServerUrlRegex = /stun:([\d.]+):\d+/;
359
+ var match = e.candidate.url.match(stunServerUrlRegex);
360
+ if (match) {
361
+ // eslint-disable-next-line prefer-destructuring
362
+ serverIp = match[1];
363
+ }
364
+ }
365
+ _this4.saveResult('udp', latencyInMilliseconds, e.candidate.address, serverIp);
366
+ _this4.determineNatType(e.candidate);
368
367
  }
369
368
  if (e.candidate.type === CANDIDATE_TYPES.RELAY) {
370
369
  var protocol = e.candidate.port === TURN_TLS_PORT ? 'xtls' : 'tcp';
371
- _this5.saveResult(protocol, latencyInMilliseconds);
372
- // we don't add public IP for TCP, because in the case of relay candidates
373
- // e.candidate.address is the TURN server address, not the client's public IP
374
- }
375
-
376
- if (_this5.haveWeGotAllResults()) {
377
- _this5.closePeerConnection();
378
- _this5.finishReachabilityCheck();
370
+ _this4.saveResult(protocol, latencyInMilliseconds, null, e.candidate.address);
379
371
  }
380
372
  }
381
373
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_common","require","_loggerProxy","_interopRequireDefault","_util","_eventsScope","_constants","_reachability","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","Events","exports","resultReady","clientMediaIpsUpdated","natTypeUpdated","ClusterReachability","_EventsScope","_inherits2","_super","name","clusterInfo","_this","_classCallCheck2","_assertThisInitialized2","isVideoMesh","numUdpUrls","udp","numTcpUrls","tcp","numXTlsUrls","xtls","pc","createPeerConnection","defer","Defer","_createClass2","key","value","getElapsedTime","Math","round","performance","now","startTimestamp","buildPeerConnectionConfig","cluster","udpIceServers","map","url","username","credential","urls","tcpIceServers","urlString","convertStunUrlToTurn","turnTlsIceServers","convertStunUrlToTurnTls","iceServers","concat","_toConsumableArray2","iceCandidatePoolSize","iceTransportPolicy","config","peerConnection","RTCPeerConnection","peerConnectionError","LoggerProxy","logger","warn","undefined","getResult","closePeerConnection","onicecandidate","onicegatheringstatechange","close","finishReachabilityCheck","resolve","abort","CLOSED","CONNECTION_STATE","connectionState","addPublicIP","protocol","publicIP","ipAdded","clientMediaIPs","includes","emit","file","function","registerIceGatheringStateChangeListener","_this2","COMPLETE","ICE_GATHERING_STATE","iceConnectionState","haveWeGotAllResults","_this3","every","saveResult","latency","publicIp","latencyInMilliseconds","log","determineNatType","candidate","_this4","srflxIceCandidates","portsFound","c","address","relatedPort","_set","add","port","_entries","_ref","_ref2","_slicedToArray2","ports","size","natType","NatType","SymmetricNat","registerIceCandidateListener","_this5","TURN_TLS_PORT","CANDIDATE_TYPES","SERVER_REFLEXIVE","RELAY","type","_start","_asyncToGenerator2","_regenerator","mark","_callee","offer","gatherIceCandidatePromise","wrap","_callee$","_context","prev","next","abrupt","createOffer","offerToReceiveAudio","sent","gatherIceCandidates","setLocalDescription","t0","stop","start","promise","EventsScope"],"sources":["clusterReachability.ts"],"sourcesContent":["import {Defer} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ClusterNode} from './request';\nimport {convertStunUrlToTurn, convertStunUrlToTurnTls} from './util';\nimport EventsScope from '../common/events/events-scope';\n\nimport {CONNECTION_STATE, Enum, ICE_GATHERING_STATE} from '../constants';\nimport {ClusterReachabilityResult, NatType} from './reachability.types';\n\n// data for the Events.resultReady event\nexport type ResultEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n result: 'reachable' | 'unreachable' | 'untested';\n latencyInMilliseconds: number; // amount of time it took to get the ICE candidate\n clientMediaIPs?: string[];\n};\n\n// data for the Events.clientMediaIpsUpdated event\nexport type ClientMediaIpsUpdatedEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n clientMediaIPs: string[];\n};\n\nexport type NatTypeUpdatedEventData = {\n natType: NatType;\n};\n\nexport const Events = {\n resultReady: 'resultReady', // emitted when a cluster is reached successfully using specific protocol\n clientMediaIpsUpdated: 'clientMediaIpsUpdated', // emitted when more public IPs are found after resultReady was already sent for a given protocol\n natTypeUpdated: 'natTypeUpdated', // emitted when NAT type is determined\n} as const;\n\nexport type Events = Enum<typeof Events>;\n\n/**\n * A class that handles reachability checks for a single cluster.\n * It emits events from Events enum\n */\nexport class ClusterReachability extends EventsScope {\n private numUdpUrls: number;\n private numTcpUrls: number;\n private numXTlsUrls: number;\n private result: ClusterReachabilityResult;\n private pc?: RTCPeerConnection;\n private defer: Defer; // this defer is resolved once reachability checks for this cluster are completed\n private startTimestamp: number;\n private srflxIceCandidates: RTCIceCandidate[] = [];\n public readonly isVideoMesh: boolean;\n public readonly name;\n\n /**\n * Constructor for ClusterReachability\n * @param {string} name cluster name\n * @param {ClusterNode} clusterInfo information about the media cluster\n */\n constructor(name: string, clusterInfo: ClusterNode) {\n super();\n this.name = name;\n this.isVideoMesh = clusterInfo.isVideoMesh;\n this.numUdpUrls = clusterInfo.udp.length;\n this.numTcpUrls = clusterInfo.tcp.length;\n this.numXTlsUrls = clusterInfo.xtls.length;\n\n this.pc = this.createPeerConnection(clusterInfo);\n\n this.defer = new Defer();\n this.result = {\n udp: {\n result: 'untested',\n },\n tcp: {\n result: 'untested',\n },\n xtls: {\n result: 'untested',\n },\n };\n }\n\n /**\n * Gets total elapsed time, can be called only after start() is called\n * @returns {Number} Milliseconds\n */\n private getElapsedTime() {\n return Math.round(performance.now() - this.startTimestamp);\n }\n\n /**\n * Generate peerConnection config settings\n * @param {ClusterNode} cluster\n * @returns {RTCConfiguration} peerConnectionConfig\n */\n private buildPeerConnectionConfig(cluster: ClusterNode): RTCConfiguration {\n const udpIceServers = cluster.udp.map((url) => ({\n username: '',\n credential: '',\n urls: [url],\n }));\n\n // STUN servers are contacted only using UDP, so in order to test TCP reachability\n // we pretend that Linus is a TURN server, because we can explicitly say \"transport=tcp\" in TURN urls.\n // We then check for relay candidates to know if TURN-TCP worked (see registerIceCandidateListener()).\n const tcpIceServers = cluster.tcp.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurn(urlString, 'tcp')],\n };\n });\n\n const turnTlsIceServers = cluster.xtls.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurnTls(urlString)],\n };\n });\n\n return {\n iceServers: [...udpIceServers, ...tcpIceServers, ...turnTlsIceServers],\n iceCandidatePoolSize: 0,\n iceTransportPolicy: 'all',\n };\n }\n\n /**\n * Creates an RTCPeerConnection\n * @param {ClusterNode} clusterInfo information about the media cluster\n * @returns {RTCPeerConnection} peerConnection\n */\n private createPeerConnection(clusterInfo: ClusterNode) {\n try {\n const config = this.buildPeerConnectionConfig(clusterInfo);\n\n const peerConnection = new RTCPeerConnection(config);\n\n return peerConnection;\n } catch (peerConnectionError) {\n LoggerProxy.logger.warn(\n `Reachability:index#createPeerConnection --> Error creating peerConnection:`,\n peerConnectionError\n );\n\n return undefined;\n }\n }\n\n /**\n * @returns {ClusterReachabilityResult} reachability result for this cluster\n */\n getResult() {\n return this.result;\n }\n\n /**\n * Closes the peerConnection\n *\n * @returns {void}\n */\n private closePeerConnection() {\n if (this.pc) {\n this.pc.onicecandidate = null;\n this.pc.onicegatheringstatechange = null;\n this.pc.close();\n }\n }\n\n /**\n * Resolves the defer, indicating that reachability checks for this cluster are completed\n *\n * @returns {void}\n */\n private finishReachabilityCheck() {\n this.defer.resolve();\n }\n\n /**\n * Aborts the cluster reachability checks by closing the peer connection\n *\n * @returns {void}\n */\n public abort() {\n const {CLOSED} = CONNECTION_STATE;\n\n if (this.pc.connectionState !== CLOSED) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n\n /**\n * Adds public IP (client media IPs)\n * @param {string} protocol\n * @param {string} publicIP\n * @returns {void}\n */\n private addPublicIP(protocol: 'udp' | 'tcp' | 'xtls', publicIP?: string | null) {\n const result = this.result[protocol];\n\n if (publicIP) {\n let ipAdded = false;\n\n if (result.clientMediaIPs) {\n if (!result.clientMediaIPs.includes(publicIP)) {\n result.clientMediaIPs.push(publicIP);\n ipAdded = true;\n }\n } else {\n result.clientMediaIPs = [publicIP];\n ipAdded = true;\n }\n\n if (ipAdded)\n this.emit(\n {\n file: 'clusterReachability',\n function: 'addPublicIP',\n },\n Events.clientMediaIpsUpdated,\n {\n protocol,\n clientMediaIPs: result.clientMediaIPs,\n }\n );\n }\n }\n\n /**\n * Registers a listener for the iceGatheringStateChange event\n *\n * @returns {void}\n */\n private registerIceGatheringStateChangeListener() {\n this.pc.onicegatheringstatechange = () => {\n const {COMPLETE} = ICE_GATHERING_STATE;\n\n if (this.pc.iceConnectionState === COMPLETE) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n };\n }\n\n /**\n * Checks if we have the results for all the protocols (UDP and TCP)\n *\n * @returns {boolean} true if we have all results, false otherwise\n */\n private haveWeGotAllResults(): boolean {\n return ['udp', 'tcp', 'xtls'].every(\n (protocol) =>\n this.result[protocol].result === 'reachable' || this.result[protocol].result === 'untested'\n );\n }\n\n /**\n * Saves the latency in the result for the given protocol and marks it as reachable,\n * emits the \"resultReady\" event if this is the first result for that protocol,\n * emits the \"clientMediaIpsUpdated\" event if we already had a result and only found\n * a new client IP\n *\n * @param {string} protocol\n * @param {number} latency\n * @param {string|null} [publicIp]\n * @returns {void}\n */\n private saveResult(protocol: 'udp' | 'tcp' | 'xtls', latency: number, publicIp?: string | null) {\n const result = this.result[protocol];\n\n if (result.latencyInMilliseconds === undefined) {\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#saveResult --> Successfully reached ${this.name} over ${protocol}: ${latency}ms`\n );\n result.latencyInMilliseconds = latency;\n result.result = 'reachable';\n if (publicIp) {\n result.clientMediaIPs = [publicIp];\n }\n\n this.emit(\n {\n file: 'clusterReachability',\n function: 'saveResult',\n },\n Events.resultReady,\n {\n protocol,\n ...result,\n }\n );\n } else {\n this.addPublicIP(protocol, publicIp);\n }\n }\n\n /**\n * Determines NAT Type.\n *\n * @param {RTCIceCandidate} candidate\n * @returns {void}\n */\n private determineNatType(candidate: RTCIceCandidate) {\n this.srflxIceCandidates.push(candidate);\n\n if (this.srflxIceCandidates.length > 1) {\n const portsFound: Record<string, Set<number>> = {};\n\n this.srflxIceCandidates.forEach((c) => {\n const key = `${c.address}:${c.relatedPort}`;\n if (!portsFound[key]) {\n portsFound[key] = new Set();\n }\n portsFound[key].add(c.port);\n });\n\n Object.entries(portsFound).forEach(([, ports]) => {\n if (ports.size > 1) {\n // Found candidates with the same address and relatedPort, but different ports\n this.emit(\n {\n file: 'clusterReachability',\n function: 'determineNatType',\n },\n Events.natTypeUpdated,\n {\n natType: NatType.SymmetricNat,\n }\n );\n }\n });\n }\n }\n\n /**\n * Registers a listener for the icecandidate event\n *\n * @returns {void}\n */\n private registerIceCandidateListener() {\n this.pc.onicecandidate = (e) => {\n const TURN_TLS_PORT = 443;\n const CANDIDATE_TYPES = {\n SERVER_REFLEXIVE: 'srflx',\n RELAY: 'relay',\n };\n\n const latencyInMilliseconds = this.getElapsedTime();\n\n if (e.candidate) {\n if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {\n this.saveResult('udp', latencyInMilliseconds, e.candidate.address);\n\n this.determineNatType(e.candidate);\n }\n\n if (e.candidate.type === CANDIDATE_TYPES.RELAY) {\n const protocol = e.candidate.port === TURN_TLS_PORT ? 'xtls' : 'tcp';\n this.saveResult(protocol, latencyInMilliseconds);\n // we don't add public IP for TCP, because in the case of relay candidates\n // e.candidate.address is the TURN server address, not the client's public IP\n }\n\n if (this.haveWeGotAllResults()) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n };\n }\n\n /**\n * Starts the process of doing UDP and TCP reachability checks on the media cluster.\n * XTLS reachability checking is not supported.\n *\n * @returns {Promise}\n */\n async start(): Promise<ClusterReachabilityResult> {\n if (!this.pc) {\n LoggerProxy.logger.warn(\n `Reachability:ClusterReachability#start --> Error: peerConnection is undefined`\n );\n\n return this.result;\n }\n\n // Initialize this.result as saying that nothing is reachable.\n // It will get updated as we go along and successfully gather ICE candidates.\n this.result.udp = {\n result: this.numUdpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.tcp = {\n result: this.numTcpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.xtls = {\n result: this.numXTlsUrls > 0 ? 'unreachable' : 'untested',\n };\n\n try {\n const offer = await this.pc.createOffer({offerToReceiveAudio: true});\n\n this.startTimestamp = performance.now();\n\n // Set up the state change listeners before triggering the ICE gathering\n const gatherIceCandidatePromise = this.gatherIceCandidates();\n\n // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer\n // we just need to make this call to trigger the ICE gathering process\n this.pc.setLocalDescription(offer);\n\n await gatherIceCandidatePromise;\n } catch (error) {\n LoggerProxy.logger.warn(`Reachability:ClusterReachability#start --> Error: `, error);\n }\n\n return this.result;\n }\n\n /**\n * Starts the process of gathering ICE candidates\n *\n * @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached\n */\n private gatherIceCandidates() {\n this.registerIceGatheringStateChangeListener();\n this.registerIceCandidateListener();\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_common","require","_loggerProxy","_interopRequireDefault","_util","_eventsScope","_constants","_reachability","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","Events","exports","resultReady","clientMediaIpsUpdated","natTypeUpdated","ClusterReachability","_EventsScope","_inherits2","_super","name","clusterInfo","_this","_classCallCheck2","_assertThisInitialized2","_set","isVideoMesh","numUdpUrls","udp","numTcpUrls","tcp","numXTlsUrls","xtls","pc","createPeerConnection","defer","Defer","_createClass2","key","value","getElapsedTime","Math","round","performance","now","startTimestamp","buildPeerConnectionConfig","cluster","udpIceServers","map","url","username","credential","urls","tcpIceServers","urlString","convertStunUrlToTurn","turnTlsIceServers","convertStunUrlToTurnTls","iceServers","concat","_toConsumableArray2","iceCandidatePoolSize","iceTransportPolicy","config","peerConnection","RTCPeerConnection","peerConnectionError","LoggerProxy","logger","warn","undefined","getResult","closePeerConnection","onicecandidate","onicegatheringstatechange","close","finishReachabilityCheck","resolve","abort","CLOSED","CONNECTION_STATE","connectionState","addPublicIP","protocol","publicIP","ipAdded","clientMediaIPs","includes","emit","file","function","registerIceGatheringStateChangeListener","_this2","iceGatheringState","ICE_GATHERING_STATE","COMPLETE","saveResult","latency","publicIp","serverIp","latencyInMilliseconds","log","reachedSubnets","add","determineNatType","candidate","_this3","srflxIceCandidates","portsFound","c","address","relatedPort","port","_entries","_ref","_ref2","_slicedToArray2","ports","size","natType","NatType","SymmetricNat","registerIceCandidateListener","_this4","TURN_TLS_PORT","CANDIDATE_TYPES","SERVER_REFLEXIVE","RELAY","type","stunServerUrlRegex","match","_start","_asyncToGenerator2","_regenerator","mark","_callee","offer","gatherIceCandidatePromise","wrap","_callee$","_context","prev","next","abrupt","createOffer","offerToReceiveAudio","sent","gatherIceCandidates","setLocalDescription","t0","stop","start","promise","EventsScope"],"sources":["clusterReachability.ts"],"sourcesContent":["import {Defer} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ClusterNode} from './request';\nimport {convertStunUrlToTurn, convertStunUrlToTurnTls} from './util';\nimport EventsScope from '../common/events/events-scope';\n\nimport {CONNECTION_STATE, Enum, ICE_GATHERING_STATE} from '../constants';\nimport {ClusterReachabilityResult, NatType} from './reachability.types';\n\n// data for the Events.resultReady event\nexport type ResultEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n result: 'reachable' | 'unreachable' | 'untested';\n latencyInMilliseconds: number; // amount of time it took to get the ICE candidate\n clientMediaIPs?: string[];\n};\n\n// data for the Events.clientMediaIpsUpdated event\nexport type ClientMediaIpsUpdatedEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n clientMediaIPs: string[];\n};\n\nexport type NatTypeUpdatedEventData = {\n natType: NatType;\n};\n\nexport const Events = {\n resultReady: 'resultReady', // emitted when a cluster is reached successfully using specific protocol\n clientMediaIpsUpdated: 'clientMediaIpsUpdated', // emitted when more public IPs are found after resultReady was already sent for a given protocol\n natTypeUpdated: 'natTypeUpdated', // emitted when NAT type is determined\n} as const;\n\nexport type Events = Enum<typeof Events>;\n\n/**\n * A class that handles reachability checks for a single cluster.\n * It emits events from Events enum\n */\nexport class ClusterReachability extends EventsScope {\n private numUdpUrls: number;\n private numTcpUrls: number;\n private numXTlsUrls: number;\n private result: ClusterReachabilityResult;\n private pc?: RTCPeerConnection;\n private defer: Defer; // this defer is resolved once reachability checks for this cluster are completed\n private startTimestamp: number;\n private srflxIceCandidates: RTCIceCandidate[] = [];\n public readonly isVideoMesh: boolean;\n public readonly name;\n public readonly reachedSubnets: Set<string> = new Set();\n\n /**\n * Constructor for ClusterReachability\n * @param {string} name cluster name\n * @param {ClusterNode} clusterInfo information about the media cluster\n */\n constructor(name: string, clusterInfo: ClusterNode) {\n super();\n this.name = name;\n this.isVideoMesh = clusterInfo.isVideoMesh;\n this.numUdpUrls = clusterInfo.udp.length;\n this.numTcpUrls = clusterInfo.tcp.length;\n this.numXTlsUrls = clusterInfo.xtls.length;\n\n this.pc = this.createPeerConnection(clusterInfo);\n\n this.defer = new Defer();\n this.result = {\n udp: {\n result: 'untested',\n },\n tcp: {\n result: 'untested',\n },\n xtls: {\n result: 'untested',\n },\n };\n }\n\n /**\n * Gets total elapsed time, can be called only after start() is called\n * @returns {Number} Milliseconds\n */\n private getElapsedTime() {\n return Math.round(performance.now() - this.startTimestamp);\n }\n\n /**\n * Generate peerConnection config settings\n * @param {ClusterNode} cluster\n * @returns {RTCConfiguration} peerConnectionConfig\n */\n private buildPeerConnectionConfig(cluster: ClusterNode): RTCConfiguration {\n const udpIceServers = cluster.udp.map((url) => ({\n username: '',\n credential: '',\n urls: [url],\n }));\n\n // STUN servers are contacted only using UDP, so in order to test TCP reachability\n // we pretend that Linus is a TURN server, because we can explicitly say \"transport=tcp\" in TURN urls.\n // We then check for relay candidates to know if TURN-TCP worked (see registerIceCandidateListener()).\n const tcpIceServers = cluster.tcp.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurn(urlString, 'tcp')],\n };\n });\n\n const turnTlsIceServers = cluster.xtls.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurnTls(urlString)],\n };\n });\n\n return {\n iceServers: [...udpIceServers, ...tcpIceServers, ...turnTlsIceServers],\n iceCandidatePoolSize: 0,\n iceTransportPolicy: 'all',\n };\n }\n\n /**\n * Creates an RTCPeerConnection\n * @param {ClusterNode} clusterInfo information about the media cluster\n * @returns {RTCPeerConnection} peerConnection\n */\n private createPeerConnection(clusterInfo: ClusterNode) {\n try {\n const config = this.buildPeerConnectionConfig(clusterInfo);\n\n const peerConnection = new RTCPeerConnection(config);\n\n return peerConnection;\n } catch (peerConnectionError) {\n LoggerProxy.logger.warn(\n `Reachability:index#createPeerConnection --> Error creating peerConnection:`,\n peerConnectionError\n );\n\n return undefined;\n }\n }\n\n /**\n * @returns {ClusterReachabilityResult} reachability result for this cluster\n */\n getResult() {\n return this.result;\n }\n\n /**\n * Closes the peerConnection\n *\n * @returns {void}\n */\n private closePeerConnection() {\n if (this.pc) {\n this.pc.onicecandidate = null;\n this.pc.onicegatheringstatechange = null;\n this.pc.close();\n }\n }\n\n /**\n * Resolves the defer, indicating that reachability checks for this cluster are completed\n *\n * @returns {void}\n */\n private finishReachabilityCheck() {\n this.defer.resolve();\n }\n\n /**\n * Aborts the cluster reachability checks by closing the peer connection\n *\n * @returns {void}\n */\n public abort() {\n const {CLOSED} = CONNECTION_STATE;\n\n if (this.pc.connectionState !== CLOSED) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n\n /**\n * Adds public IP (client media IPs)\n * @param {string} protocol\n * @param {string} publicIP\n * @returns {void}\n */\n private addPublicIP(protocol: 'udp' | 'tcp' | 'xtls', publicIP?: string | null) {\n const result = this.result[protocol];\n\n if (publicIP) {\n let ipAdded = false;\n\n if (result.clientMediaIPs) {\n if (!result.clientMediaIPs.includes(publicIP)) {\n result.clientMediaIPs.push(publicIP);\n ipAdded = true;\n }\n } else {\n result.clientMediaIPs = [publicIP];\n ipAdded = true;\n }\n\n if (ipAdded)\n this.emit(\n {\n file: 'clusterReachability',\n function: 'addPublicIP',\n },\n Events.clientMediaIpsUpdated,\n {\n protocol,\n clientMediaIPs: result.clientMediaIPs,\n }\n );\n }\n }\n\n /**\n * Registers a listener for the iceGatheringStateChange event\n *\n * @returns {void}\n */\n private registerIceGatheringStateChangeListener() {\n this.pc.onicegatheringstatechange = () => {\n if (this.pc.iceGatheringState === ICE_GATHERING_STATE.COMPLETE) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n };\n }\n\n /**\n * Saves the latency in the result for the given protocol and marks it as reachable,\n * emits the \"resultReady\" event if this is the first result for that protocol,\n * emits the \"clientMediaIpsUpdated\" event if we already had a result and only found\n * a new client IP\n *\n * @param {string} protocol\n * @param {number} latency\n * @param {string|null} [publicIp]\n * @param {string|null} [serverIp]\n * @returns {void}\n */\n private saveResult(\n protocol: 'udp' | 'tcp' | 'xtls',\n latency: number,\n publicIp?: string | null,\n serverIp?: string | null\n ) {\n const result = this.result[protocol];\n\n if (result.latencyInMilliseconds === undefined) {\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#saveResult --> Successfully reached ${this.name} over ${protocol}: ${latency}ms`\n );\n result.latencyInMilliseconds = latency;\n result.result = 'reachable';\n if (publicIp) {\n result.clientMediaIPs = [publicIp];\n }\n\n this.emit(\n {\n file: 'clusterReachability',\n function: 'saveResult',\n },\n Events.resultReady,\n {\n protocol,\n ...result,\n }\n );\n } else {\n this.addPublicIP(protocol, publicIp);\n }\n\n if (serverIp) {\n this.reachedSubnets.add(serverIp);\n }\n }\n\n /**\n * Determines NAT Type.\n *\n * @param {RTCIceCandidate} candidate\n * @returns {void}\n */\n private determineNatType(candidate: RTCIceCandidate) {\n this.srflxIceCandidates.push(candidate);\n\n if (this.srflxIceCandidates.length > 1) {\n const portsFound: Record<string, Set<number>> = {};\n\n this.srflxIceCandidates.forEach((c) => {\n const key = `${c.address}:${c.relatedPort}`;\n if (!portsFound[key]) {\n portsFound[key] = new Set();\n }\n portsFound[key].add(c.port);\n });\n\n Object.entries(portsFound).forEach(([, ports]) => {\n if (ports.size > 1) {\n // Found candidates with the same address and relatedPort, but different ports\n this.emit(\n {\n file: 'clusterReachability',\n function: 'determineNatType',\n },\n Events.natTypeUpdated,\n {\n natType: NatType.SymmetricNat,\n }\n );\n }\n });\n }\n }\n\n /**\n * Registers a listener for the icecandidate event\n *\n * @returns {void}\n */\n private registerIceCandidateListener() {\n this.pc.onicecandidate = (e) => {\n const TURN_TLS_PORT = 443;\n const CANDIDATE_TYPES = {\n SERVER_REFLEXIVE: 'srflx',\n RELAY: 'relay',\n };\n\n const latencyInMilliseconds = this.getElapsedTime();\n\n if (e.candidate) {\n if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {\n let serverIp = null;\n if ('url' in e.candidate) {\n const stunServerUrlRegex = /stun:([\\d.]+):\\d+/;\n\n const match = (e.candidate as any).url.match(stunServerUrlRegex);\n if (match) {\n // eslint-disable-next-line prefer-destructuring\n serverIp = match[1];\n }\n }\n\n this.saveResult('udp', latencyInMilliseconds, e.candidate.address, serverIp);\n\n this.determineNatType(e.candidate);\n }\n\n if (e.candidate.type === CANDIDATE_TYPES.RELAY) {\n const protocol = e.candidate.port === TURN_TLS_PORT ? 'xtls' : 'tcp';\n this.saveResult(protocol, latencyInMilliseconds, null, e.candidate.address);\n }\n }\n };\n }\n\n /**\n * Starts the process of doing UDP and TCP reachability checks on the media cluster.\n * XTLS reachability checking is not supported.\n *\n * @returns {Promise}\n */\n async start(): Promise<ClusterReachabilityResult> {\n if (!this.pc) {\n LoggerProxy.logger.warn(\n `Reachability:ClusterReachability#start --> Error: peerConnection is undefined`\n );\n\n return this.result;\n }\n\n // Initialize this.result as saying that nothing is reachable.\n // It will get updated as we go along and successfully gather ICE candidates.\n this.result.udp = {\n result: this.numUdpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.tcp = {\n result: this.numTcpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.xtls = {\n result: this.numXTlsUrls > 0 ? 'unreachable' : 'untested',\n };\n\n try {\n const offer = await this.pc.createOffer({offerToReceiveAudio: true});\n\n this.startTimestamp = performance.now();\n\n // Set up the state change listeners before triggering the ICE gathering\n const gatherIceCandidatePromise = this.gatherIceCandidates();\n\n // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer\n // we just need to make this call to trigger the ICE gathering process\n this.pc.setLocalDescription(offer);\n\n await gatherIceCandidatePromise;\n } catch (error) {\n LoggerProxy.logger.warn(`Reachability:ClusterReachability#start --> Error: `, error);\n }\n\n return this.result;\n }\n\n /**\n * Starts the process of gathering ICE candidates\n *\n * @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached\n */\n private gatherIceCandidates() {\n this.registerIceGatheringStateChangeListener();\n this.registerIceCandidateListener();\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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"}
@@ -15,6 +15,8 @@ exports.default = void 0;
15
15
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
16
16
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
17
17
  var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
18
+ var _from = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/from"));
19
+ var _set = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/set"));
18
20
  var _entries = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/entries"));
19
21
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
20
22
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
@@ -176,6 +178,45 @@ var Reachability = exports.default = /*#__PURE__*/function (_EventsScope) {
176
178
  }
177
179
  return getClusters;
178
180
  }()
181
+ /**
182
+ * Checks if the given subnet is reachable
183
+ * @param {string} mediaServerIp - media server ip
184
+ * @returns {boolean | null} true if reachable, false if not reachable, null if mediaServerIp is not provided
185
+ * @public
186
+ * @memberof Reachability
187
+ */
188
+ )
189
+ }, {
190
+ key: "isSubnetReachable",
191
+ value: function isSubnetReachable(mediaServerIp) {
192
+ if (!mediaServerIp) {
193
+ _loggerProxy.default.logger.error("Reachability:index#isSubnetReachable --> mediaServerIp is null");
194
+ return null;
195
+ }
196
+ var subnetFirstOctet = mediaServerIp.split('.')[0];
197
+ _loggerProxy.default.logger.info("Reachability:index#isSubnetReachable --> Looking for subnet: ".concat(subnetFirstOctet, ".X.X.X"));
198
+ var matchingReachedClusters = (0, _values.default)(this.clusterReachability).reduce(function (acc, cluster) {
199
+ var reachedSubnetsArray = (0, _from.default)(cluster.reachedSubnets);
200
+ var logMessage = "Reachability:index#isSubnetReachable --> Cluster ".concat(cluster.name, " reached [");
201
+ for (var i = 0; i < reachedSubnetsArray.length; i += 1) {
202
+ var subnet = reachedSubnetsArray[i];
203
+ var reachedSubnetFirstOctet = subnet.split('.')[0];
204
+ if (subnetFirstOctet === reachedSubnetFirstOctet) {
205
+ acc.add(cluster.name);
206
+ }
207
+ logMessage += "".concat(subnet);
208
+ if (i < reachedSubnetsArray.length - 1) {
209
+ logMessage += ',';
210
+ }
211
+ }
212
+ logMessage += "]";
213
+ _loggerProxy.default.logger.info(logMessage);
214
+ return acc;
215
+ }, new _set.default());
216
+ _loggerProxy.default.logger.info("Reachability:index#isSubnetReachable --> Found ".concat(matchingReachedClusters.size, " clusters that use the subnet ").concat(subnetFirstOctet, ".X.X.X"));
217
+ return matchingReachedClusters.size > 0;
218
+ }
219
+
179
220
  /**
180
221
  * Gets a list of media clusters from the backend and performs reachability checks on all the clusters
181
222
  * @param {string} trigger - explains the reason for starting reachability
@@ -183,7 +224,6 @@ var Reachability = exports.default = /*#__PURE__*/function (_EventsScope) {
183
224
  * @public
184
225
  * @memberof Reachability
185
226
  */
186
- )
187
227
  }, {
188
228
  key: "gatherReachability",
189
229
  value: (function () {
@@ -396,7 +436,7 @@ var Reachability = exports.default = /*#__PURE__*/function (_EventsScope) {
396
436
  function: 'stopReachability'
397
437
  }, 'reachability:stopped', {});
398
438
  this.sendMetric(true);
399
- this.resolveReachabilityPromise();
439
+ this.resolveReachabilityPromise(false);
400
440
  }
401
441
  }
402
442