@webex/plugin-meetings 3.9.0-next.2 → 3.9.0-next.21

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 (87) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/constants.js +2 -0
  4. package/dist/constants.js.map +1 -1
  5. package/dist/interpretation/index.js +1 -1
  6. package/dist/interpretation/siLanguage.js +1 -1
  7. package/dist/locus-info/index.js +38 -10
  8. package/dist/locus-info/index.js.map +1 -1
  9. package/dist/locus-info/parser.js +4 -1
  10. package/dist/locus-info/parser.js.map +1 -1
  11. package/dist/media/properties.js +53 -5
  12. package/dist/media/properties.js.map +1 -1
  13. package/dist/meeting/in-meeting-actions.js +2 -0
  14. package/dist/meeting/in-meeting-actions.js.map +1 -1
  15. package/dist/meeting/index.js +189 -122
  16. package/dist/meeting/index.js.map +1 -1
  17. package/dist/meeting/muteState.js +2 -5
  18. package/dist/meeting/muteState.js.map +1 -1
  19. package/dist/meeting/request.js +25 -0
  20. package/dist/meeting/request.js.map +1 -1
  21. package/dist/meeting/util.js +30 -11
  22. package/dist/meeting/util.js.map +1 -1
  23. package/dist/meeting-info/meeting-info-v2.js +29 -21
  24. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  25. package/dist/meetings/index.js +31 -25
  26. package/dist/meetings/index.js.map +1 -1
  27. package/dist/member/types.js.map +1 -1
  28. package/dist/members/collection.js +13 -0
  29. package/dist/members/collection.js.map +1 -1
  30. package/dist/members/index.js +42 -20
  31. package/dist/members/index.js.map +1 -1
  32. package/dist/members/util.js +7 -2
  33. package/dist/members/util.js.map +1 -1
  34. package/dist/metrics/constants.js +2 -1
  35. package/dist/metrics/constants.js.map +1 -1
  36. package/dist/reachability/index.js +3 -3
  37. package/dist/reachability/index.js.map +1 -1
  38. package/dist/types/constants.d.ts +2 -0
  39. package/dist/types/locus-info/index.d.ts +54 -1
  40. package/dist/types/media/properties.d.ts +21 -0
  41. package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
  42. package/dist/types/meeting/index.d.ts +11 -1
  43. package/dist/types/meeting/request.d.ts +9 -0
  44. package/dist/types/meeting/util.d.ts +10 -3
  45. package/dist/types/meeting-info/meeting-info-v2.d.ts +6 -3
  46. package/dist/types/meetings/index.d.ts +3 -1
  47. package/dist/types/member/types.d.ts +1 -0
  48. package/dist/types/members/collection.d.ts +6 -0
  49. package/dist/types/members/index.d.ts +12 -2
  50. package/dist/types/members/util.d.ts +6 -3
  51. package/dist/types/metrics/constants.d.ts +1 -0
  52. package/dist/webinar/index.js +1 -1
  53. package/package.json +17 -17
  54. package/src/constants.ts +2 -0
  55. package/src/locus-info/index.ts +84 -9
  56. package/src/locus-info/parser.ts +5 -1
  57. package/src/media/properties.ts +43 -0
  58. package/src/meeting/in-meeting-actions.ts +4 -0
  59. package/src/meeting/index.ts +91 -4
  60. package/src/meeting/muteState.ts +2 -6
  61. package/src/meeting/request.ts +23 -0
  62. package/src/meeting/util.ts +41 -20
  63. package/src/meeting-info/meeting-info-v2.ts +24 -5
  64. package/src/meetings/index.ts +9 -3
  65. package/src/member/types.ts +1 -0
  66. package/src/members/collection.ts +11 -0
  67. package/src/members/index.ts +38 -5
  68. package/src/members/util.ts +18 -2
  69. package/src/metrics/constants.ts +1 -0
  70. package/src/reachability/index.ts +3 -3
  71. package/test/unit/spec/common/browser-detection.js +0 -24
  72. package/test/unit/spec/locus-info/index.js +30 -15
  73. package/test/unit/spec/locus-info/parser.js +3 -2
  74. package/test/unit/spec/media/properties.ts +137 -0
  75. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
  76. package/test/unit/spec/meeting/index.js +255 -27
  77. package/test/unit/spec/meeting/muteState.js +32 -6
  78. package/test/unit/spec/meeting/request.js +21 -0
  79. package/test/unit/spec/meeting/utils.js +45 -16
  80. package/test/unit/spec/meeting-info/meetinginfov2.js +8 -3
  81. package/test/unit/spec/meetings/index.js +10 -5
  82. package/test/unit/spec/members/collection.js +120 -0
  83. package/test/unit/spec/members/index.js +72 -3
  84. package/test/unit/spec/members/request.js +55 -0
  85. package/test/unit/spec/members/utils.js +116 -14
  86. package/test/unit/spec/reachability/index.ts +158 -3
  87. package/test/unit/spec/roap/turnDiscovery.ts +3 -3
@@ -1 +1 @@
1
- {"version":3,"names":["_uuid","_interopRequireDefault","require","_lodash","_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","has","isInternalNumber","getAdmitMemberRequestBody","sessionLocusUrls","body","admit","participantIds","authorizingLocusUrl","getAdmitMemberRequestParams","format","baseUrl","mainLocusUrl","uri","concat","CONTROLS","method","HTTP_VERBS","PUT","getAddMemberRequestParams","requestParams","isInvalidInvitee","DIALER_REGEX","INTERNAL_NUMBER","test","E164_FORMAT","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_","cancelInviteByMemberIdOptions","generateCancelInviteByMemberIdRequestParams","_options$invitee","hasIsInternalNumberProp","_default","exports"],"sources":["util.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {has} from 'lodash';\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';\nimport {Invitee} from '../meeting/type';\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 ...(has(options.invitee, 'isInternalNumber')\n ? {isInternalNumber: options.invitee.isInternalNumber}\n : {}),\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: Invitee) => {\n if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {\n return true;\n }\n\n if (invitee.phoneNumber) {\n if (invitee.isInternalNumber) {\n return !DIALER_REGEX.INTERNAL_NUMBER.test(invitee.phoneNumber);\n }\n\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 cancelInviteByMemberIdOptions: (invitee, locusUrl) => ({\n invitee,\n locusUrl,\n }),\n\n generateCancelInviteByMemberIdRequestParams: (options) => {\n const {memberId, isInternalNumber} = options.invitee;\n const hasIsInternalNumberProp = has(options.invitee, 'isInternalNumber');\n const body = {\n actionType: _REMOVE_,\n invitees: [\n {\n address: memberId,\n ...(hasIsInternalNumberProp ? {isInternalNumber} : {}),\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","_lodash","_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","has","isInternalNumber","getAdmitMemberRequestBody","sessionLocusUrls","body","admit","participantIds","authorizingLocusUrl","getAdmitMemberRequestParams","format","baseUrl","mainLocusUrl","uri","concat","CONTROLS","method","HTTP_VERBS","PUT","getAddMemberRequestParams","requestParams","isInvalidInvitee","DIALER_REGEX","INTERNAL_NUMBER","test","E164_FORMAT","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","suffix","getMuteMemberRequestParams","property","PATCH","getMoveMemberToLobbyRequestBody","moveToLobby","getMoveMemberToLobbyRequestParams","getAddedRoleShape","role","roleShape","type","hasRole","hostKey","getRoleAssignmentMemberRequestParams","getRaiseHandMemberRequestParams","hand","getLowerAllHandsMemberRequestParams","editDisplayNameMemberRequestParams","aliasValue","suffixValue","ALIAS","POST","getTransferHostToMemberRequestParams","genderateSendDTMFOptions","url","tones","generateSendDTMFRequestParams","_ref","device","dtmf","correlationId","uuid","v4","direction","SEND_DTMF_ENDPOINT","cancelPhoneInviteOptions","generateCancelInviteRequestParams","actionType","_REMOVE_","cancelInviteByMemberIdOptions","generateCancelInviteByMemberIdRequestParams","_options$invitee","hasIsInternalNumberProp","_default","exports"],"sources":["util.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {has} from 'lodash';\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';\nimport {Invitee} from '../meeting/type';\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 ...(has(options.invitee, 'isInternalNumber')\n ? {isInternalNumber: options.invitee.isInternalNumber}\n : {}),\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: Invitee) => {\n if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {\n return true;\n }\n\n if (invitee.phoneNumber) {\n if (invitee.isInternalNumber) {\n return !DIALER_REGEX.INTERNAL_NUMBER.test(invitee.phoneNumber);\n }\n\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 * @param {String} suffix optional suffix\n * @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}\n */\n generateEditDisplayNameMemberOptions: (\n memberId,\n requestingParticipantId,\n alias,\n locusUrl,\n suffix\n ) => ({\n memberId,\n requestingParticipantId,\n alias,\n locusUrl,\n suffix,\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: string;\n requestingParticipantId: string;\n suffixValue?: string;\n } = {\n aliasValue: options.alias,\n requestingParticipantId: options.requestingParticipantId,\n };\n\n if (options.suffix !== undefined) {\n body.suffixValue = options.suffix;\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 cancelInviteByMemberIdOptions: (invitee, locusUrl) => ({\n invitee,\n locusUrl,\n }),\n\n generateCancelInviteByMemberIdRequestParams: (options) => {\n const {memberId, isInternalNumber} = options.invitee;\n const hasIsInternalNumberProp = has(options.invitee, 'isInternalNumber');\n const body = {\n actionType: _REMOVE_,\n invitees: [\n {\n address: memberId,\n ...(hasIsInternalNumberProp ? {isInternalNumber} : {}),\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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"}
@@ -91,6 +91,7 @@ var BEHAVIORAL_METRICS = exports.default = {
91
91
  GUEST_EXITED_LOBBY: 'js_sdk_guest_exited_lobby',
92
92
  VERIFY_REGISTRATION_ID_SUCCESS: 'js_sdk_verify_registrationId_success',
93
93
  VERIFY_REGISTRATION_ID_ERROR: 'js_sdk_verify_registrationId_error',
94
- JOIN_FORBIDDEN_ERROR: 'js_sdk_join_forbidden_error'
94
+ JOIN_FORBIDDEN_ERROR: 'js_sdk_join_forbidden_error',
95
+ MEDIA_ISSUE_DETECTED: 'js_sdk_media_issue_detected'
95
96
  };
96
97
  //# sourceMappingURL=constants.js.map
@@ -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","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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"}
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","MEDIA_ISSUE_DETECTED"],"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 MEDIA_ISSUE_DETECTED: 'js_sdk_media_issue_detected',\n};\n\nexport {BEHAVIORAL_METRICS as default};\n"],"mappings":"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"}
@@ -1115,10 +1115,10 @@ var Reachability = exports.default = /*#__PURE__*/function (_EventsScope) {
1115
1115
  };
1116
1116
 
1117
1117
  // update expected results counters to include this cluster
1118
- _this4.expectedResultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'].udp += cluster.udp.length;
1118
+ _this4.expectedResultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'].udp += cluster.udp.length > 0 ? 1 : 0;
1119
1119
  if (!cluster.isVideoMesh) {
1120
- _this4.expectedResultsCount.public.tcp += cluster.tcp.length;
1121
- _this4.expectedResultsCount.public.xtls += cluster.xtls.length;
1120
+ _this4.expectedResultsCount.public.tcp += cluster.tcp.length > 0 ? 1 : 0;
1121
+ _this4.expectedResultsCount.public.xtls += cluster.xtls.length > 0 ? 1 : 0;
1122
1122
  }
1123
1123
  });
1124
1124
  isFirstResult = {
@@ -1 +1 @@
1
- {"version":3,"names":["_lodash","require","_common","_loggerProxy","_interopRequireDefault","_util","_constants","_request","_reachability","_clusterReachability","_eventsScope","_constants2","_metrics","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","OVERALL_TIMEOUT","Reachability","exports","_EventsScope","_inherits2","_super","webex","_this","_classCallCheck2","_assertThisInitialized2","REACHABILITY","namespace","videoMesh","udp","public","tcp","xtls","undefined","NatType","Unknown","reachabilityRequest","ReachabilityRequest","clusterReachability","_createClass2","key","value","_getClusters","_asyncToGenerator2","_regenerator","mark","_callee","trigger","previousReport","isRetry","_yield$this$reachabil","clusters","joinCookie","discoveryOptions","_args","wrap","_callee$","_context","prev","next","getClusters","MeetingUtil","getIpVersion","sent","minRequiredClusters","orpheusApiVersion","boundedStorage","put","localStorageJoinCookie","_stringify","abrupt","t0","LoggerProxy","logger","error","concat","stop","_x","_x2","isSubnetReachable","selectedSubnetFirstOctet","info","matchingReachedClusters","_values","reduce","acc","cluster","reachedSubnetsArray","_from","reachedSubnets","logMessage","name","i","subnet","reachedSubnetFirstOctet","split","add","_set","size","_gatherReachability","_callee2","_yield$this$getCluste","_callee2$","_context2","config","meetings","enableReachabilityChecks","Error","lastTrigger","internal","device","ipNetworkDetector","detect","reachabilityDefer","Defer","performReachabilityChecks","promise","gatherReachability","_x3","_getJoinCookie","_callee3","joinCookieRaw","_callee3$","_context3","get","catch","JSON","parse","getJoinCookie","_getReachabilityReport","_callee4","reachabilityResult","_callee4$","_context4","getReachabilityResults","reachability","version","usedDiscoveryOptions","metrics","totalDuration","tests","getReachabilityReport","_gatherReachabilityFallback","_callee5","reachabilityReport","_yield$this$getCluste2","_callee5$","_context5","abortCurrentChecks","gatherReachabilityFallback","stopReachability","overallTimer","log","emit","file","function","sendMetric","resolveReachabilityPromise","_getReachabilityMetrics","_callee6","stats","updateStats","resultsJson","results","_callee6$","_context6","reachability_public_udp_success","reachability_public_udp_failed","reachability_public_tcp_success","reachability_public_tcp_failed","reachability_public_xtls_success","reachability_public_xtls_failed","reachability_vmn_udp_success","reachability_vmn_udp_failed","reachability_vmn_tcp_success","reachability_vmn_tcp_failed","reachability_vmn_xtls_success","reachability_vmn_xtls_failed","natType","clusterType","outcome","localStorageResult","isVideoMesh","warn","getReachabilityMetrics","mapTransportResultToBackendDataFormat","transportResult","output","_i","_Object$entries","_entries","_Object$entries$_i","_slicedToArray2","reachable","untested","latencyInMilliseconds","toString","_getReachabilityResults","_callee7","_this2","allClusterResults","_callee7$","_context7","mapValues","clusterResult","_isAnyPublicClusterReachable","_callee8","reachabilityData","reachabilityResults","_callee8$","_context8","some","_result$udp","_result$tcp","isAnyPublicClusterReachable","_isWebexMediaBackendUnreachable","_callee9","unreachable","protocols","_callee9$","_context9","tested","_keys","protocol","_result$protocol","_result$protocol2","every","isWebexMediaBackendUnreachable","getUnreachableClusters","unreachableList","_ref","_ref2","getResult","getNumberOfReachableClusters","count","_ref3","_ref4","logUnreachableClusters","list","_ref5","areAllPublicClusterResultsReady","isEqual","expectedResultsCount","resultsCount","areAllResultsReady","_this$reachabilityDef","checkMinRequiredClusters","performance","now","startTime","clearTimer","resolve","numReachableClusters","abortClusterReachability","abort","getStatistics","values","map","min","max","average","Math","_toConsumableArray2","mean","_sendMetric","_callee10","aborted","_args10","_callee10$","_context10","vmn","ipver","firstIpV4","firstIpV6","firstMdns","totalTime","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","REACHABILITY_COMPLETED","prepareMetricFields","startTimers","_this3","vmnTimer","setTimeout","publicCloudTimer","_storeResults","_callee11","_callee11$","_context11","storeResults","_x4","resetResultCounters","timer","clearTimeout","_performReachabilityChecks","_callee15","clusterList","_this4","isFirstResult","_callee15$","_context15","experimental","enableTcpReachability","enableTlsReachability","includeTcpReachability","includeTlsReachability","ClusterReachability","on","Events","resultReady","_ref6","_callee12","data","clientMediaIPs","_callee12$","_context12","_x6","clientMediaIpsUpdated","_ref7","_callee13","_callee13$","_context13","_x7","natTypeUpdated","_ref8","_callee14","_callee14$","_context14","_x8","start","_x5","_getClientMediaPreferences","_callee16","isMultistream","_callee16$","_context16","t1","t2","preferTranscoding","getClientMediaPreferences","_x9","_x10","_getReachabilityReportToAttachToRoap","_callee17","_callee17$","_context17","getReachabilityReportToAttachToRoap","EventsScope"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable class-methods-use-this */\nimport {isEqual, mapValues, mean} from 'lodash';\n\nimport {Defer} from '@webex/common';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport {IP_VERSION, REACHABILITY} from '../constants';\n\nimport ReachabilityRequest, {ClusterList} from './request';\nimport {\n ClusterReachabilityResult,\n TransportResult,\n ClientMediaPreferences,\n ReachabilityMetrics,\n ReachabilityReportV0,\n ReachabilityReportV1,\n ReachabilityResults,\n ReachabilityResultsForBackend,\n TransportResultForBackend,\n GetClustersTrigger,\n NatType,\n} from './reachability.types';\nimport {\n ClientMediaIpsUpdatedEventData,\n ClusterReachability,\n Events,\n NatTypeUpdatedEventData,\n ResultEventData,\n} from './clusterReachability';\nimport EventsScope from '../common/events/events-scope';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport Metrics from '../metrics';\n\n// timeouts in seconds\nconst DEFAULT_TIMEOUT = 3;\nconst VIDEO_MESH_TIMEOUT = 1;\nconst OVERALL_TIMEOUT = 15;\n\n/**\n * @class Reachability\n * @export\n */\nexport default class Reachability extends EventsScope {\n namespace = REACHABILITY.namespace;\n webex: object;\n reachabilityRequest: ReachabilityRequest;\n clusterReachability: {\n [key: string]: ClusterReachability;\n };\n\n minRequiredClusters?: number;\n orpheusApiVersion?: number;\n\n reachabilityDefer?: Defer;\n\n vmnTimer?: ReturnType<typeof setTimeout>;\n publicCloudTimer?: ReturnType<typeof setTimeout>;\n overallTimer?: ReturnType<typeof setTimeout>;\n\n expectedResultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n resultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n startTime = undefined;\n totalDuration = undefined;\n natType = NatType.Unknown;\n\n protected lastTrigger?: string;\n\n /**\n * Creates an instance of Reachability.\n * @param {object} webex\n * @memberof Reachability\n */\n constructor(webex: object) {\n super();\n this.webex = webex;\n\n /**\n * internal request object for the server\n * @instance\n * @type {Array}\n * @private\n * @memberof Reachability\n */\n this.reachabilityRequest = new ReachabilityRequest(this.webex);\n\n this.clusterReachability = {};\n }\n\n /**\n * Fetches the list of media clusters from the backend\n * @param {string} trigger - explains the reason for starting reachability, used by Orpheus\n * @param {Object} previousReport - last reachability report\n * @param {boolean} isRetry\n * @private\n * @returns {Promise<{clusters: ClusterList, joinCookie: any}>}\n */\n async getClusters(\n trigger: GetClustersTrigger,\n previousReport?: any,\n isRetry = false\n ): Promise<{\n clusters: ClusterList;\n joinCookie: any;\n }> {\n try {\n const {clusters, joinCookie, discoveryOptions} = await this.reachabilityRequest.getClusters(\n trigger,\n MeetingUtil.getIpVersion(this.webex),\n previousReport\n );\n\n this.minRequiredClusters = discoveryOptions?.['early-call-min-clusters'];\n this.orpheusApiVersion = discoveryOptions?.['report-version'];\n\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageJoinCookie,\n JSON.stringify(joinCookie)\n );\n\n return {clusters, joinCookie};\n } catch (error) {\n if (isRetry) {\n throw error;\n }\n\n LoggerProxy.logger.error(\n `Reachability:index#getClusters --> Failed with error: ${error}, retrying...`\n );\n\n return this.getClusters(trigger, previousReport, true);\n }\n }\n\n /**\n * Checks if the given subnet is reachable\n * @param {string} selectedSubnetFirstOctet - selected subnet first octet, e.g. \"10\" for \"10.X.X.X\"\n * @returns {boolean | null} true if reachable, false if not reachable, null if mediaServerIp is not provided\n * @public\n * @memberof Reachability\n */\n public isSubnetReachable(selectedSubnetFirstOctet: string): boolean | null {\n LoggerProxy.logger.info(\n `Reachability:index#isSubnetReachable --> Looking for subnet: ${selectedSubnetFirstOctet}.X.X.X`\n );\n\n const matchingReachedClusters = Object.values(this.clusterReachability).reduce(\n (acc, cluster) => {\n const reachedSubnetsArray = Array.from(cluster.reachedSubnets);\n\n let logMessage = `Reachability:index#isSubnetReachable --> Cluster ${cluster.name} reached [`;\n for (let i = 0; i < reachedSubnetsArray.length; i += 1) {\n const subnet = reachedSubnetsArray[i];\n const reachedSubnetFirstOctet = subnet.split('.')[0];\n\n if (selectedSubnetFirstOctet === reachedSubnetFirstOctet) {\n acc.add(cluster.name);\n }\n\n logMessage += `${subnet}`;\n if (i < reachedSubnetsArray.length - 1) {\n logMessage += ',';\n }\n }\n logMessage += `]`;\n\n LoggerProxy.logger.info(logMessage);\n\n return acc;\n },\n new Set<string>()\n );\n\n LoggerProxy.logger.info(\n `Reachability:index#isSubnetReachable --> Found ${matchingReachedClusters.size} clusters that use the subnet ${selectedSubnetFirstOctet}.X.X.X`\n );\n\n return matchingReachedClusters.size > 0;\n }\n\n /**\n * Gets a list of media clusters from the backend and performs reachability checks on all the clusters\n * @param {string} trigger - explains the reason for starting reachability\n * @returns {Promise<ReachabilityResults>} reachability results\n * @public\n * @memberof Reachability\n */\n public async gatherReachability(trigger: string): Promise<ReachabilityResults> {\n // @ts-ignore\n if (!this.webex.config.meetings.enableReachabilityChecks) {\n throw new Error('enableReachabilityChecks is disabled in config');\n }\n // Fetch clusters and measure latency\n try {\n this.lastTrigger = trigger;\n\n // kick off ip version detection. We don't await it, as we don't want to waste time\n // and if it fails, that's ok we can still carry on\n // @ts-ignore\n this.webex.internal.device.ipNetworkDetector.detect(true);\n\n const {clusters} = await this.getClusters('startup');\n\n this.reachabilityDefer = new Defer();\n\n // Perform Reachability Check\n await this.performReachabilityChecks(clusters);\n\n return this.reachabilityDefer.promise;\n } catch (error) {\n LoggerProxy.logger.error(`Reachability:index#gatherReachability --> Error:`, error);\n\n return {};\n }\n }\n\n /**\n * Gets the last join cookie we got from Orpheus\n *\n * @returns {Promise<Object>} join cookie\n */\n async getJoinCookie() {\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n let joinCookie;\n\n if (joinCookieRaw) {\n try {\n joinCookie = JSON.parse(joinCookieRaw);\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return joinCookie;\n }\n\n /**\n * Returns the reachability report that needs to be attached to the ROAP messages\n * that we send to the backend.\n *\n * @returns {Promise<Object>}\n */\n async getReachabilityReport(): Promise<\n | {\n joinCookie: any;\n reachability?: ReachabilityReportV1;\n }\n | {\n reachability: ReachabilityReportV0;\n }\n > {\n const reachabilityResult = await this.getReachabilityResults();\n const joinCookie = await this.getJoinCookie();\n\n // Orpheus API version 0\n if (!this.orpheusApiVersion) {\n return {\n reachability: reachabilityResult,\n };\n }\n\n // Orpheus API version 1\n return {\n reachability: {\n version: 1,\n result: {\n usedDiscoveryOptions: {\n 'early-call-min-clusters': this.minRequiredClusters,\n },\n metrics: {\n 'total-duration-ms': this.totalDuration,\n },\n tests: reachabilityResult,\n },\n },\n joinCookie,\n };\n }\n\n /**\n * This method is called when we don't succeed in reaching the minimum number of clusters\n * required by Orpheus. It sends the results to Orpheus and gets a new list that it tries to reach again.\n * @returns {Promise<ReachabilityResults>} reachability results\n * @public\n * @memberof Reachability\n */\n public async gatherReachabilityFallback(): Promise<void> {\n try {\n const reachabilityReport = await this.getReachabilityReport();\n\n const {clusters} = await this.getClusters('early-call/no-min-reached', reachabilityReport);\n\n // stop all previous reachability checks that might still be going on in the background\n this.abortCurrentChecks();\n\n // Perform Reachability Check\n await this.performReachabilityChecks(clusters);\n } catch (error) {\n LoggerProxy.logger.error(`Reachability:index#gatherReachabilityFallback --> Error:`, error);\n }\n }\n\n /**\n * Stops all reachability checks that are in progress\n * @public\n * @memberof Reachability\n * @returns {void}\n */\n public stopReachability() {\n // overallTimer is always there only if there is reachability in progress\n if (this.overallTimer) {\n LoggerProxy.logger.log(\n 'Reachability:index#stopReachability --> stopping reachability checks'\n );\n this.abortCurrentChecks();\n this.emit(\n {\n file: 'reachability',\n function: 'stopReachability',\n },\n 'reachability:stopped',\n {}\n );\n this.sendMetric(true);\n this.resolveReachabilityPromise(false);\n }\n }\n\n /**\n * Returns statistics about last reachability results. The returned value is an object\n * with a flat list of properties so that it can be easily sent with metrics\n *\n * @returns {Promise} Promise with metrics values, it never rejects/throws.\n */\n async getReachabilityMetrics(): Promise<ReachabilityMetrics> {\n const stats: ReachabilityMetrics = {\n reachability_public_udp_success: 0,\n reachability_public_udp_failed: 0,\n reachability_public_tcp_success: 0,\n reachability_public_tcp_failed: 0,\n reachability_public_xtls_success: 0,\n reachability_public_xtls_failed: 0,\n reachability_vmn_udp_success: 0,\n reachability_vmn_udp_failed: 0,\n reachability_vmn_tcp_success: 0,\n reachability_vmn_tcp_failed: 0,\n reachability_vmn_xtls_success: 0,\n reachability_vmn_xtls_failed: 0,\n natType: this.natType,\n };\n\n const updateStats = (clusterType: 'public' | 'vmn', result: ClusterReachabilityResult) => {\n if (result.udp && result.udp.result !== 'untested') {\n const outcome = result.udp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_udp_${outcome}`] += 1;\n }\n if (result.tcp && result.tcp.result !== 'untested') {\n const outcome = result.tcp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_tcp_${outcome}`] += 1;\n }\n if (result.xtls && result.xtls.result !== 'untested') {\n const outcome = result.xtls.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_xtls_${outcome}`] += 1;\n }\n };\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const results: ReachabilityResults = JSON.parse(resultsJson);\n\n Object.values(results).forEach((result) => {\n updateStats(result.isVideoMesh ? 'vmn' : 'public', result);\n });\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Roap:request#getReachabilityMetrics --> Error parsing reachability data: ',\n e\n );\n }\n\n return stats;\n }\n\n /**\n * Maps our internal transport result to the format that backend expects\n * @param {TransportResult} transportResult\n * @returns {TransportResultForBackend}\n */\n private mapTransportResultToBackendDataFormat(\n transportResult: TransportResult\n ): TransportResultForBackend {\n const output: TransportResultForBackend = {};\n\n for (const [key, value] of Object.entries(transportResult)) {\n switch (key) {\n case 'result':\n switch (value) {\n case 'reachable':\n output.reachable = 'true';\n break;\n case 'unreachable':\n output.reachable = 'false';\n break;\n case 'untested':\n output.untested = 'true';\n break;\n }\n break;\n case 'latencyInMilliseconds':\n output.latencyInMilliseconds = value.toString();\n break;\n default:\n output[key] = value;\n }\n }\n\n return output;\n }\n\n /**\n * Reachability results as an object in the format that backend expects\n *\n * @returns {any} reachability results that need to be sent to the backend\n */\n async getReachabilityResults(): Promise<ReachabilityResultsForBackend | undefined> {\n let results: ReachabilityResultsForBackend;\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const allClusterResults: ReachabilityResults = JSON.parse(resultsJson);\n\n results = mapValues(allClusterResults, (clusterResult) => ({\n udp: this.mapTransportResultToBackendDataFormat(clusterResult.udp || {result: 'untested'}),\n tcp: this.mapTransportResultToBackendDataFormat(clusterResult.tcp || {result: 'untested'}),\n xtls: this.mapTransportResultToBackendDataFormat(\n clusterResult.xtls || {result: 'untested'}\n ),\n }));\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Reachability:index#getReachabilityResults --> Error parsing reachability data: ',\n e\n );\n }\n\n return results;\n }\n\n /**\n * fetches reachability data and checks for cluster reachability\n * @returns {boolean}\n * @public\n * @memberof Reachability\n */\n async isAnyPublicClusterReachable() {\n let reachable = false;\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n reachable = Object.values(reachabilityResults).some(\n (result) =>\n !result.isVideoMesh &&\n (result.udp?.result === 'reachable' || result.tcp?.result === 'reachable')\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Reachability:index#isAnyPublicClusterReachable --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return reachable;\n }\n\n /**\n * Returns true only if ALL protocols (UDP, TCP and TLS) have been tested and none\n * of the media clusters where reachable with any of the protocols. This is done\n * irrespective of the config, so for example:\n * if config.meetings.experimental.enableTlsReachability === false,\n * it will return false, because TLS reachability won't be tested,\n * so we can't say for sure that media backend is unreachable over TLS.\n *\n * @returns {boolean}\n */\n async isWebexMediaBackendUnreachable() {\n let unreachable = false;\n\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n const protocols = {\n udp: {tested: false, reachable: undefined},\n tcp: {tested: false, reachable: undefined},\n xtls: {tested: false, reachable: undefined},\n };\n\n Object.values(reachabilityResults).forEach((result) => {\n Object.keys(protocols).forEach((protocol) => {\n if (\n result[protocol]?.result === 'reachable' ||\n result[protocol]?.result === 'unreachable'\n ) {\n protocols[protocol].tested = true;\n\n // we need at least 1 'reachable' result to mark the whole protocol as reachable\n if (result[protocol].result === 'reachable') {\n protocols[protocol].reachable = true;\n }\n }\n });\n });\n\n unreachable = Object.values(protocols).every(\n (protocol) => protocol.tested && !protocol.reachable\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Reachability:index#isWebexMediaBackendUnreachable --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return unreachable;\n }\n\n /**\n * Get list of all unreachable clusters\n * @returns {array} Unreachable clusters\n * @private\n * @memberof Reachability\n */\n private getUnreachableClusters(): Array<{name: string; protocol: string}> {\n const unreachableList = [];\n\n Object.entries(this.clusterReachability).forEach(([key, clusterReachability]) => {\n const result = clusterReachability.getResult();\n\n if (result.udp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'udp'});\n }\n if (result.tcp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'tcp'});\n }\n if (result.xtls.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'xtls'});\n }\n });\n\n return unreachableList;\n }\n\n /**\n * Gets the number of reachable clusters from last run reachability check\n * @returns {number} reachable clusters count\n * @private\n * @memberof Reachability\n */\n private getNumberOfReachableClusters(): number {\n let count = 0;\n\n Object.entries(this.clusterReachability).forEach(([key, clusterReachability]) => {\n const result = clusterReachability.getResult();\n\n if (\n result.udp.result === 'reachable' ||\n result.tcp.result === 'reachable' ||\n result.xtls.result === 'reachable'\n ) {\n count += 1;\n }\n });\n\n return count;\n }\n\n /**\n * Make a log of unreachable clusters.\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private logUnreachableClusters() {\n const list = this.getUnreachableClusters();\n\n list.forEach(({name, protocol}) => {\n LoggerProxy.logger.log(\n `Reachability:index#logUnreachableClusters --> failed to reach ${name} over ${protocol}`\n );\n });\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the public clusters\n * In other words, it means that all public clusters are reachable over each protocol,\n * because we only get a \"result\" if we managed to reach a cluster\n *\n * @returns {boolean}\n */\n private areAllPublicClusterResultsReady() {\n return isEqual(this.expectedResultsCount.public, this.resultsCount.public);\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the clusters\n *\n * @returns {boolean}\n */\n private areAllResultsReady() {\n return isEqual(this.expectedResultsCount, this.resultsCount);\n }\n\n /**\n * Resolves the promise returned by gatherReachability() method\n * @param {boolean} checkMinRequiredClusters - if true, it will check if we have reached the minimum required clusters and do a fallback if needed\n * @returns {void}\n */\n private resolveReachabilityPromise(checkMinRequiredClusters = true) {\n this.totalDuration = performance.now() - this.startTime;\n\n this.clearTimer('vmnTimer');\n this.clearTimer('publicCloudTimer');\n\n this.logUnreachableClusters();\n this.reachabilityDefer?.resolve();\n\n if (checkMinRequiredClusters) {\n const numReachableClusters = this.getNumberOfReachableClusters();\n if (this.minRequiredClusters && numReachableClusters < this.minRequiredClusters) {\n LoggerProxy.logger.log(\n `Reachability:index#resolveReachabilityPromise --> minRequiredClusters not reached (${numReachableClusters} < ${this.minRequiredClusters}), doing reachability fallback`\n );\n this.gatherReachabilityFallback();\n }\n }\n }\n\n /**\n * Aborts all cluster reachability checks that are in progress\n *\n * @returns {void}\n */\n private abortClusterReachability() {\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n clusterReachability.abort();\n });\n }\n\n /**\n * Helper function for calculating min/max/average values of latency\n *\n * @param {Array<any>} results\n * @param {string} protocol\n * @param {boolean} isVideoMesh\n * @returns {{min:number, max: number, average: number}}\n */\n protected getStatistics(\n results: Array<ClusterReachabilityResult & {isVideoMesh: boolean}>,\n protocol: 'udp' | 'tcp' | 'xtls',\n isVideoMesh: boolean\n ) {\n const values = results\n .filter((result) => result.isVideoMesh === isVideoMesh)\n .filter((result) => result[protocol].result === 'reachable')\n .map((result) => result[protocol].latencyInMilliseconds);\n\n if (values.length === 0) {\n return {\n min: -1,\n max: -1,\n average: -1,\n };\n }\n\n return {\n min: Math.min(...values),\n max: Math.max(...values),\n average: mean(values),\n };\n }\n\n /**\n * Sends a metric with all the statistics about how long reachability took\n *\n * @param {boolean} aborted true if the reachability checks were aborted\n * @returns {void}\n */\n protected async sendMetric(aborted = false) {\n const results = [];\n\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n results.push({\n ...clusterReachability.getResult(),\n isVideoMesh: clusterReachability.isVideoMesh,\n });\n });\n\n const stats = {\n aborted,\n vmn: {\n udp: this.getStatistics(results, 'udp', true),\n },\n public: {\n udp: this.getStatistics(results, 'udp', false),\n tcp: this.getStatistics(results, 'tcp', false),\n xtls: this.getStatistics(results, 'xtls', false),\n },\n ipver: {\n // @ts-ignore\n firstIpV4: this.webex.internal.device.ipNetworkDetector.firstIpV4,\n // @ts-ignore\n firstIpV6: this.webex.internal.device.ipNetworkDetector.firstIpV6,\n // @ts-ignore\n firstMdns: this.webex.internal.device.ipNetworkDetector.firstMdns,\n // @ts-ignore\n totalTime: this.webex.internal.device.ipNetworkDetector.totalTime,\n },\n trigger: this.lastTrigger,\n };\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.REACHABILITY_COMPLETED,\n Metrics.prepareMetricFields(stats)\n );\n }\n\n /**\n * Starts all the timers used for various timeouts\n *\n * @returns {void}\n */\n private startTimers() {\n this.vmnTimer = setTimeout(() => {\n this.vmnTimer = undefined;\n // if we are only missing VMN results, then we don't want to wait for them any longer\n // as they are likely to fail if users are not on corporate network\n if (this.areAllPublicClusterResultsReady()) {\n LoggerProxy.logger.log(\n 'Reachability:index#startTimers --> Reachability checks timed out (VMN timeout)'\n );\n\n this.resolveReachabilityPromise();\n }\n }, VIDEO_MESH_TIMEOUT * 1000);\n\n this.publicCloudTimer = setTimeout(() => {\n this.publicCloudTimer = undefined;\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks timed out (${DEFAULT_TIMEOUT}s)`\n );\n\n // check against minimum required clusters, do a new call if we don't have enough\n\n // resolve the promise, so that the client won't be blocked waiting on meetings.register() for too long\n this.resolveReachabilityPromise();\n }, DEFAULT_TIMEOUT * 1000);\n\n this.overallTimer = setTimeout(() => {\n this.overallTimer = undefined;\n this.abortClusterReachability();\n this.emit(\n {\n file: 'reachability',\n function: 'overallTimer timeout',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks fully timed out (${OVERALL_TIMEOUT}s)`\n );\n }, OVERALL_TIMEOUT * 1000);\n }\n\n /**\n * Stores given reachability results in local storage\n *\n * @param {ReachabilityResults} results\n * @returns {Promise<void>}\n */\n private async storeResults(results: ReachabilityResults) {\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageResult,\n JSON.stringify(results)\n );\n }\n\n /**\n * Resets all the internal counters that keep track of the results\n *\n * @returns {void}\n */\n private resetResultCounters() {\n this.expectedResultsCount.videoMesh.udp = 0;\n this.expectedResultsCount.public.udp = 0;\n this.expectedResultsCount.public.tcp = 0;\n this.expectedResultsCount.public.xtls = 0;\n\n this.resultsCount.videoMesh.udp = 0;\n this.resultsCount.public.udp = 0;\n this.resultsCount.public.tcp = 0;\n this.resultsCount.public.xtls = 0;\n }\n\n /**\n * Clears the timer\n *\n * @param {string} timer name of the timer to clear\n * @returns {void}\n */\n private clearTimer(timer: string) {\n if (this[timer]) {\n clearTimeout(this[timer]);\n this[timer] = undefined;\n }\n }\n\n /**\n * Aborts current checks that are in progress\n *\n * @returns {void}\n */\n private abortCurrentChecks() {\n this.clearTimer('vmnTimer');\n this.clearTimer('publicCloudTimer');\n this.clearTimer('overallTimer');\n\n this.abortClusterReachability();\n }\n\n /**\n * Performs reachability checks for all clusters\n * @param {ClusterList} clusterList\n * @returns {Promise<void>} promise that's resolved as soon as the checks are started\n */\n private async performReachabilityChecks(clusterList: ClusterList) {\n const results: ReachabilityResults = {};\n\n this.clusterReachability = {};\n\n this.startTime = performance.now();\n\n LoggerProxy.logger.log(\n `Reachability:index#performReachabilityChecks --> doing UDP${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability ? ',TCP' : ''\n }${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability ? ',TLS' : ''\n } reachability checks`\n );\n\n this.resetResultCounters();\n\n // sanitize the urls in the clusterList\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n // Linus doesn't support TCP reachability checks on video mesh nodes\n const includeTcpReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability && !cluster.isVideoMesh;\n\n if (!includeTcpReachability) {\n cluster.tcp = [];\n }\n\n // Linus doesn't support xTLS reachability checks on video mesh nodes\n const includeTlsReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability && !cluster.isVideoMesh;\n\n if (!includeTlsReachability) {\n cluster.xtls = [];\n }\n\n // initialize the result for this cluster\n results[key] = {\n udp: {result: cluster.udp.length > 0 ? 'unreachable' : 'untested'},\n tcp: {result: cluster.tcp.length > 0 ? 'unreachable' : 'untested'},\n xtls: {result: cluster.xtls.length > 0 ? 'unreachable' : 'untested'},\n isVideoMesh: cluster.isVideoMesh,\n };\n\n // update expected results counters to include this cluster\n this.expectedResultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'].udp +=\n cluster.udp.length;\n if (!cluster.isVideoMesh) {\n this.expectedResultsCount.public.tcp += cluster.tcp.length;\n this.expectedResultsCount.public.xtls += cluster.xtls.length;\n }\n });\n\n const isFirstResult = {\n udp: true,\n tcp: true,\n xtls: true,\n };\n\n // save the initialized results (in case we don't get any \"resultReady\" events at all)\n await this.storeResults(results);\n\n if (!clusterList || !Object.keys(clusterList).length) {\n // nothing to do, finish immediately\n this.resolveReachabilityPromise(false);\n\n this.emit(\n {\n file: 'reachability',\n function: 'performReachabilityChecks',\n },\n 'reachability:done',\n {}\n );\n\n return;\n }\n\n this.startTimers();\n\n // now start the reachability on all the clusters\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n this.clusterReachability[key] = new ClusterReachability(key, cluster);\n this.clusterReachability[key].on(Events.resultReady, async (data: ResultEventData) => {\n const {protocol, result, clientMediaIPs, latencyInMilliseconds} = data;\n\n if (isFirstResult[protocol]) {\n this.emit(\n {\n file: 'reachability',\n function: 'resultReady event handler',\n },\n 'reachability:firstResultAvailable',\n {\n protocol,\n }\n );\n isFirstResult[protocol] = false;\n }\n this.resultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'][protocol] += 1;\n\n const areAllResultsReady = this.areAllResultsReady();\n\n results[key][protocol].result = result;\n results[key][protocol].clientMediaIPs = clientMediaIPs;\n results[key][protocol].latencyInMilliseconds = latencyInMilliseconds;\n\n await this.storeResults(results);\n\n if (areAllResultsReady) {\n this.clearTimer('overallTimer');\n this.emit(\n {\n file: 'reachability',\n function: 'performReachabilityChecks',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#gatherReachability --> Reachability checks fully completed`\n );\n this.resolveReachabilityPromise();\n }\n });\n\n // clientMediaIps can be updated independently from the results, so we need to listen for them too\n this.clusterReachability[key].on(\n Events.clientMediaIpsUpdated,\n async (data: ClientMediaIpsUpdatedEventData) => {\n results[key][data.protocol].clientMediaIPs = data.clientMediaIPs;\n\n await this.storeResults(results);\n }\n );\n\n this.clusterReachability[key].on(\n Events.natTypeUpdated,\n async (data: NatTypeUpdatedEventData) => {\n this.natType = data.natType;\n }\n );\n\n this.clusterReachability[key].start(); // not awaiting on purpose\n });\n }\n\n /**\n * Returns the clientMediaPreferences object that needs to be sent to the backend\n * when joining a meeting\n *\n * @param {boolean} isMultistream\n * @param {IP_VERSION} ipver\n * @returns {Object}\n */\n async getClientMediaPreferences(\n isMultistream: boolean,\n ipver?: IP_VERSION\n ): Promise<ClientMediaPreferences> {\n // if 0 or undefined, we assume version 0 and don't send any reachability in clientMediaPreferences\n if (!this.orpheusApiVersion) {\n return {\n ipver,\n joinCookie: await this.getJoinCookie(),\n preferTranscoding: !isMultistream,\n };\n }\n\n // must be version 1\n\n // for version 1, the reachability report goes into clientMediaPreferences (and it contains joinCookie)\n const reachabilityReport = (await this.getReachabilityReport()) as {\n joinCookie: any;\n reachability?: ReachabilityReportV1;\n };\n\n return {\n ipver,\n preferTranscoding: !isMultistream,\n ...reachabilityReport,\n };\n }\n\n /**\n * Returns the reachability report that needs to be attached to the ROAP messages\n * that we send to the backend.\n * It may return undefined, if reachability is not needed to be attached to ROAP messages (that's the case for v1 or Orpheus API)\n *\n * @returns {Promise<ReachabilityReportV0>} object that needs to be attached to Roap messages\n */\n async getReachabilityReportToAttachToRoap(): Promise<ReachabilityReportV0 | undefined> {\n // version 0\n if (!this.orpheusApiVersion) {\n return this.getReachabilityResults();\n }\n\n // version 1\n\n // for version 1 we don't attach anything to Roap messages, reachability report is sent inside clientMediaPreferences\n return undefined;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_lodash","require","_common","_loggerProxy","_interopRequireDefault","_util","_constants","_request","_reachability","_clusterReachability","_eventsScope","_constants2","_metrics","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","OVERALL_TIMEOUT","Reachability","exports","_EventsScope","_inherits2","_super","webex","_this","_classCallCheck2","_assertThisInitialized2","REACHABILITY","namespace","videoMesh","udp","public","tcp","xtls","undefined","NatType","Unknown","reachabilityRequest","ReachabilityRequest","clusterReachability","_createClass2","key","value","_getClusters","_asyncToGenerator2","_regenerator","mark","_callee","trigger","previousReport","isRetry","_yield$this$reachabil","clusters","joinCookie","discoveryOptions","_args","wrap","_callee$","_context","prev","next","getClusters","MeetingUtil","getIpVersion","sent","minRequiredClusters","orpheusApiVersion","boundedStorage","put","localStorageJoinCookie","_stringify","abrupt","t0","LoggerProxy","logger","error","concat","stop","_x","_x2","isSubnetReachable","selectedSubnetFirstOctet","info","matchingReachedClusters","_values","reduce","acc","cluster","reachedSubnetsArray","_from","reachedSubnets","logMessage","name","i","subnet","reachedSubnetFirstOctet","split","add","_set","size","_gatherReachability","_callee2","_yield$this$getCluste","_callee2$","_context2","config","meetings","enableReachabilityChecks","Error","lastTrigger","internal","device","ipNetworkDetector","detect","reachabilityDefer","Defer","performReachabilityChecks","promise","gatherReachability","_x3","_getJoinCookie","_callee3","joinCookieRaw","_callee3$","_context3","get","catch","JSON","parse","getJoinCookie","_getReachabilityReport","_callee4","reachabilityResult","_callee4$","_context4","getReachabilityResults","reachability","version","usedDiscoveryOptions","metrics","totalDuration","tests","getReachabilityReport","_gatherReachabilityFallback","_callee5","reachabilityReport","_yield$this$getCluste2","_callee5$","_context5","abortCurrentChecks","gatherReachabilityFallback","stopReachability","overallTimer","log","emit","file","function","sendMetric","resolveReachabilityPromise","_getReachabilityMetrics","_callee6","stats","updateStats","resultsJson","results","_callee6$","_context6","reachability_public_udp_success","reachability_public_udp_failed","reachability_public_tcp_success","reachability_public_tcp_failed","reachability_public_xtls_success","reachability_public_xtls_failed","reachability_vmn_udp_success","reachability_vmn_udp_failed","reachability_vmn_tcp_success","reachability_vmn_tcp_failed","reachability_vmn_xtls_success","reachability_vmn_xtls_failed","natType","clusterType","outcome","localStorageResult","isVideoMesh","warn","getReachabilityMetrics","mapTransportResultToBackendDataFormat","transportResult","output","_i","_Object$entries","_entries","_Object$entries$_i","_slicedToArray2","reachable","untested","latencyInMilliseconds","toString","_getReachabilityResults","_callee7","_this2","allClusterResults","_callee7$","_context7","mapValues","clusterResult","_isAnyPublicClusterReachable","_callee8","reachabilityData","reachabilityResults","_callee8$","_context8","some","_result$udp","_result$tcp","isAnyPublicClusterReachable","_isWebexMediaBackendUnreachable","_callee9","unreachable","protocols","_callee9$","_context9","tested","_keys","protocol","_result$protocol","_result$protocol2","every","isWebexMediaBackendUnreachable","getUnreachableClusters","unreachableList","_ref","_ref2","getResult","getNumberOfReachableClusters","count","_ref3","_ref4","logUnreachableClusters","list","_ref5","areAllPublicClusterResultsReady","isEqual","expectedResultsCount","resultsCount","areAllResultsReady","_this$reachabilityDef","checkMinRequiredClusters","performance","now","startTime","clearTimer","resolve","numReachableClusters","abortClusterReachability","abort","getStatistics","values","map","min","max","average","Math","_toConsumableArray2","mean","_sendMetric","_callee10","aborted","_args10","_callee10$","_context10","vmn","ipver","firstIpV4","firstIpV6","firstMdns","totalTime","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","REACHABILITY_COMPLETED","prepareMetricFields","startTimers","_this3","vmnTimer","setTimeout","publicCloudTimer","_storeResults","_callee11","_callee11$","_context11","storeResults","_x4","resetResultCounters","timer","clearTimeout","_performReachabilityChecks","_callee15","clusterList","_this4","isFirstResult","_callee15$","_context15","experimental","enableTcpReachability","enableTlsReachability","includeTcpReachability","includeTlsReachability","ClusterReachability","on","Events","resultReady","_ref6","_callee12","data","clientMediaIPs","_callee12$","_context12","_x6","clientMediaIpsUpdated","_ref7","_callee13","_callee13$","_context13","_x7","natTypeUpdated","_ref8","_callee14","_callee14$","_context14","_x8","start","_x5","_getClientMediaPreferences","_callee16","isMultistream","_callee16$","_context16","t1","t2","preferTranscoding","getClientMediaPreferences","_x9","_x10","_getReachabilityReportToAttachToRoap","_callee17","_callee17$","_context17","getReachabilityReportToAttachToRoap","EventsScope"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable class-methods-use-this */\nimport {isEqual, mapValues, mean} from 'lodash';\n\nimport {Defer} from '@webex/common';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport {IP_VERSION, REACHABILITY} from '../constants';\n\nimport ReachabilityRequest, {ClusterList} from './request';\nimport {\n ClusterReachabilityResult,\n TransportResult,\n ClientMediaPreferences,\n ReachabilityMetrics,\n ReachabilityReportV0,\n ReachabilityReportV1,\n ReachabilityResults,\n ReachabilityResultsForBackend,\n TransportResultForBackend,\n GetClustersTrigger,\n NatType,\n} from './reachability.types';\nimport {\n ClientMediaIpsUpdatedEventData,\n ClusterReachability,\n Events,\n NatTypeUpdatedEventData,\n ResultEventData,\n} from './clusterReachability';\nimport EventsScope from '../common/events/events-scope';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport Metrics from '../metrics';\n\n// timeouts in seconds\nconst DEFAULT_TIMEOUT = 3;\nconst VIDEO_MESH_TIMEOUT = 1;\nconst OVERALL_TIMEOUT = 15;\n\n/**\n * @class Reachability\n * @export\n */\nexport default class Reachability extends EventsScope {\n namespace = REACHABILITY.namespace;\n webex: object;\n reachabilityRequest: ReachabilityRequest;\n clusterReachability: {\n [key: string]: ClusterReachability;\n };\n\n minRequiredClusters?: number;\n orpheusApiVersion?: number;\n\n reachabilityDefer?: Defer;\n\n vmnTimer?: ReturnType<typeof setTimeout>;\n publicCloudTimer?: ReturnType<typeof setTimeout>;\n overallTimer?: ReturnType<typeof setTimeout>;\n\n expectedResultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n resultsCount = {videoMesh: {udp: 0}, public: {udp: 0, tcp: 0, xtls: 0}};\n startTime = undefined;\n totalDuration = undefined;\n natType = NatType.Unknown;\n\n protected lastTrigger?: string;\n\n /**\n * Creates an instance of Reachability.\n * @param {object} webex\n * @memberof Reachability\n */\n constructor(webex: object) {\n super();\n this.webex = webex;\n\n /**\n * internal request object for the server\n * @instance\n * @type {Array}\n * @private\n * @memberof Reachability\n */\n this.reachabilityRequest = new ReachabilityRequest(this.webex);\n\n this.clusterReachability = {};\n }\n\n /**\n * Fetches the list of media clusters from the backend\n * @param {string} trigger - explains the reason for starting reachability, used by Orpheus\n * @param {Object} previousReport - last reachability report\n * @param {boolean} isRetry\n * @private\n * @returns {Promise<{clusters: ClusterList, joinCookie: any}>}\n */\n async getClusters(\n trigger: GetClustersTrigger,\n previousReport?: any,\n isRetry = false\n ): Promise<{\n clusters: ClusterList;\n joinCookie: any;\n }> {\n try {\n const {clusters, joinCookie, discoveryOptions} = await this.reachabilityRequest.getClusters(\n trigger,\n MeetingUtil.getIpVersion(this.webex),\n previousReport\n );\n\n this.minRequiredClusters = discoveryOptions?.['early-call-min-clusters'];\n this.orpheusApiVersion = discoveryOptions?.['report-version'];\n\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageJoinCookie,\n JSON.stringify(joinCookie)\n );\n\n return {clusters, joinCookie};\n } catch (error) {\n if (isRetry) {\n throw error;\n }\n\n LoggerProxy.logger.error(\n `Reachability:index#getClusters --> Failed with error: ${error}, retrying...`\n );\n\n return this.getClusters(trigger, previousReport, true);\n }\n }\n\n /**\n * Checks if the given subnet is reachable\n * @param {string} selectedSubnetFirstOctet - selected subnet first octet, e.g. \"10\" for \"10.X.X.X\"\n * @returns {boolean | null} true if reachable, false if not reachable, null if mediaServerIp is not provided\n * @public\n * @memberof Reachability\n */\n public isSubnetReachable(selectedSubnetFirstOctet: string): boolean | null {\n LoggerProxy.logger.info(\n `Reachability:index#isSubnetReachable --> Looking for subnet: ${selectedSubnetFirstOctet}.X.X.X`\n );\n\n const matchingReachedClusters = Object.values(this.clusterReachability).reduce(\n (acc, cluster) => {\n const reachedSubnetsArray = Array.from(cluster.reachedSubnets);\n\n let logMessage = `Reachability:index#isSubnetReachable --> Cluster ${cluster.name} reached [`;\n for (let i = 0; i < reachedSubnetsArray.length; i += 1) {\n const subnet = reachedSubnetsArray[i];\n const reachedSubnetFirstOctet = subnet.split('.')[0];\n\n if (selectedSubnetFirstOctet === reachedSubnetFirstOctet) {\n acc.add(cluster.name);\n }\n\n logMessage += `${subnet}`;\n if (i < reachedSubnetsArray.length - 1) {\n logMessage += ',';\n }\n }\n logMessage += `]`;\n\n LoggerProxy.logger.info(logMessage);\n\n return acc;\n },\n new Set<string>()\n );\n\n LoggerProxy.logger.info(\n `Reachability:index#isSubnetReachable --> Found ${matchingReachedClusters.size} clusters that use the subnet ${selectedSubnetFirstOctet}.X.X.X`\n );\n\n return matchingReachedClusters.size > 0;\n }\n\n /**\n * Gets a list of media clusters from the backend and performs reachability checks on all the clusters\n * @param {string} trigger - explains the reason for starting reachability\n * @returns {Promise<ReachabilityResults>} reachability results\n * @public\n * @memberof Reachability\n */\n public async gatherReachability(trigger: string): Promise<ReachabilityResults> {\n // @ts-ignore\n if (!this.webex.config.meetings.enableReachabilityChecks) {\n throw new Error('enableReachabilityChecks is disabled in config');\n }\n // Fetch clusters and measure latency\n try {\n this.lastTrigger = trigger;\n\n // kick off ip version detection. We don't await it, as we don't want to waste time\n // and if it fails, that's ok we can still carry on\n // @ts-ignore\n this.webex.internal.device.ipNetworkDetector.detect(true);\n\n const {clusters} = await this.getClusters('startup');\n\n this.reachabilityDefer = new Defer();\n\n // Perform Reachability Check\n await this.performReachabilityChecks(clusters);\n\n return this.reachabilityDefer.promise;\n } catch (error) {\n LoggerProxy.logger.error(`Reachability:index#gatherReachability --> Error:`, error);\n\n return {};\n }\n }\n\n /**\n * Gets the last join cookie we got from Orpheus\n *\n * @returns {Promise<Object>} join cookie\n */\n async getJoinCookie() {\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n let joinCookie;\n\n if (joinCookieRaw) {\n try {\n joinCookie = JSON.parse(joinCookieRaw);\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return joinCookie;\n }\n\n /**\n * Returns the reachability report that needs to be attached to the ROAP messages\n * that we send to the backend.\n *\n * @returns {Promise<Object>}\n */\n async getReachabilityReport(): Promise<\n | {\n joinCookie: any;\n reachability?: ReachabilityReportV1;\n }\n | {\n reachability: ReachabilityReportV0;\n }\n > {\n const reachabilityResult = await this.getReachabilityResults();\n const joinCookie = await this.getJoinCookie();\n\n // Orpheus API version 0\n if (!this.orpheusApiVersion) {\n return {\n reachability: reachabilityResult,\n };\n }\n\n // Orpheus API version 1\n return {\n reachability: {\n version: 1,\n result: {\n usedDiscoveryOptions: {\n 'early-call-min-clusters': this.minRequiredClusters,\n },\n metrics: {\n 'total-duration-ms': this.totalDuration,\n },\n tests: reachabilityResult,\n },\n },\n joinCookie,\n };\n }\n\n /**\n * This method is called when we don't succeed in reaching the minimum number of clusters\n * required by Orpheus. It sends the results to Orpheus and gets a new list that it tries to reach again.\n * @returns {Promise<ReachabilityResults>} reachability results\n * @public\n * @memberof Reachability\n */\n public async gatherReachabilityFallback(): Promise<void> {\n try {\n const reachabilityReport = await this.getReachabilityReport();\n\n const {clusters} = await this.getClusters('early-call/no-min-reached', reachabilityReport);\n\n // stop all previous reachability checks that might still be going on in the background\n this.abortCurrentChecks();\n\n // Perform Reachability Check\n await this.performReachabilityChecks(clusters);\n } catch (error) {\n LoggerProxy.logger.error(`Reachability:index#gatherReachabilityFallback --> Error:`, error);\n }\n }\n\n /**\n * Stops all reachability checks that are in progress\n * @public\n * @memberof Reachability\n * @returns {void}\n */\n public stopReachability() {\n // overallTimer is always there only if there is reachability in progress\n if (this.overallTimer) {\n LoggerProxy.logger.log(\n 'Reachability:index#stopReachability --> stopping reachability checks'\n );\n this.abortCurrentChecks();\n this.emit(\n {\n file: 'reachability',\n function: 'stopReachability',\n },\n 'reachability:stopped',\n {}\n );\n this.sendMetric(true);\n this.resolveReachabilityPromise(false);\n }\n }\n\n /**\n * Returns statistics about last reachability results. The returned value is an object\n * with a flat list of properties so that it can be easily sent with metrics\n *\n * @returns {Promise} Promise with metrics values, it never rejects/throws.\n */\n async getReachabilityMetrics(): Promise<ReachabilityMetrics> {\n const stats: ReachabilityMetrics = {\n reachability_public_udp_success: 0,\n reachability_public_udp_failed: 0,\n reachability_public_tcp_success: 0,\n reachability_public_tcp_failed: 0,\n reachability_public_xtls_success: 0,\n reachability_public_xtls_failed: 0,\n reachability_vmn_udp_success: 0,\n reachability_vmn_udp_failed: 0,\n reachability_vmn_tcp_success: 0,\n reachability_vmn_tcp_failed: 0,\n reachability_vmn_xtls_success: 0,\n reachability_vmn_xtls_failed: 0,\n natType: this.natType,\n };\n\n const updateStats = (clusterType: 'public' | 'vmn', result: ClusterReachabilityResult) => {\n if (result.udp && result.udp.result !== 'untested') {\n const outcome = result.udp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_udp_${outcome}`] += 1;\n }\n if (result.tcp && result.tcp.result !== 'untested') {\n const outcome = result.tcp.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_tcp_${outcome}`] += 1;\n }\n if (result.xtls && result.xtls.result !== 'untested') {\n const outcome = result.xtls.result === 'reachable' ? 'success' : 'failed';\n stats[`reachability_${clusterType}_xtls_${outcome}`] += 1;\n }\n };\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const results: ReachabilityResults = JSON.parse(resultsJson);\n\n Object.values(results).forEach((result) => {\n updateStats(result.isVideoMesh ? 'vmn' : 'public', result);\n });\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Roap:request#getReachabilityMetrics --> Error parsing reachability data: ',\n e\n );\n }\n\n return stats;\n }\n\n /**\n * Maps our internal transport result to the format that backend expects\n * @param {TransportResult} transportResult\n * @returns {TransportResultForBackend}\n */\n private mapTransportResultToBackendDataFormat(\n transportResult: TransportResult\n ): TransportResultForBackend {\n const output: TransportResultForBackend = {};\n\n for (const [key, value] of Object.entries(transportResult)) {\n switch (key) {\n case 'result':\n switch (value) {\n case 'reachable':\n output.reachable = 'true';\n break;\n case 'unreachable':\n output.reachable = 'false';\n break;\n case 'untested':\n output.untested = 'true';\n break;\n }\n break;\n case 'latencyInMilliseconds':\n output.latencyInMilliseconds = value.toString();\n break;\n default:\n output[key] = value;\n }\n }\n\n return output;\n }\n\n /**\n * Reachability results as an object in the format that backend expects\n *\n * @returns {any} reachability results that need to be sent to the backend\n */\n async getReachabilityResults(): Promise<ReachabilityResultsForBackend | undefined> {\n let results: ReachabilityResultsForBackend;\n\n try {\n // @ts-ignore\n const resultsJson = await this.webex.boundedStorage.get(\n REACHABILITY.namespace,\n REACHABILITY.localStorageResult\n );\n\n const allClusterResults: ReachabilityResults = JSON.parse(resultsJson);\n\n results = mapValues(allClusterResults, (clusterResult) => ({\n udp: this.mapTransportResultToBackendDataFormat(clusterResult.udp || {result: 'untested'}),\n tcp: this.mapTransportResultToBackendDataFormat(clusterResult.tcp || {result: 'untested'}),\n xtls: this.mapTransportResultToBackendDataFormat(\n clusterResult.xtls || {result: 'untested'}\n ),\n }));\n } catch (e) {\n // empty storage, that's ok\n LoggerProxy.logger.warn(\n 'Reachability:index#getReachabilityResults --> Error parsing reachability data: ',\n e\n );\n }\n\n return results;\n }\n\n /**\n * fetches reachability data and checks for cluster reachability\n * @returns {boolean}\n * @public\n * @memberof Reachability\n */\n async isAnyPublicClusterReachable() {\n let reachable = false;\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n reachable = Object.values(reachabilityResults).some(\n (result) =>\n !result.isVideoMesh &&\n (result.udp?.result === 'reachable' || result.tcp?.result === 'reachable')\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Reachability:index#isAnyPublicClusterReachable --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return reachable;\n }\n\n /**\n * Returns true only if ALL protocols (UDP, TCP and TLS) have been tested and none\n * of the media clusters where reachable with any of the protocols. This is done\n * irrespective of the config, so for example:\n * if config.meetings.experimental.enableTlsReachability === false,\n * it will return false, because TLS reachability won't be tested,\n * so we can't say for sure that media backend is unreachable over TLS.\n *\n * @returns {boolean}\n */\n async isWebexMediaBackendUnreachable() {\n let unreachable = false;\n\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(this.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResults: ReachabilityResults = JSON.parse(reachabilityData);\n\n const protocols = {\n udp: {tested: false, reachable: undefined},\n tcp: {tested: false, reachable: undefined},\n xtls: {tested: false, reachable: undefined},\n };\n\n Object.values(reachabilityResults).forEach((result) => {\n Object.keys(protocols).forEach((protocol) => {\n if (\n result[protocol]?.result === 'reachable' ||\n result[protocol]?.result === 'unreachable'\n ) {\n protocols[protocol].tested = true;\n\n // we need at least 1 'reachable' result to mark the whole protocol as reachable\n if (result[protocol].result === 'reachable') {\n protocols[protocol].reachable = true;\n }\n }\n });\n });\n\n unreachable = Object.values(protocols).every(\n (protocol) => protocol.tested && !protocol.reachable\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Reachability:index#isWebexMediaBackendUnreachable --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return unreachable;\n }\n\n /**\n * Get list of all unreachable clusters\n * @returns {array} Unreachable clusters\n * @private\n * @memberof Reachability\n */\n private getUnreachableClusters(): Array<{name: string; protocol: string}> {\n const unreachableList = [];\n\n Object.entries(this.clusterReachability).forEach(([key, clusterReachability]) => {\n const result = clusterReachability.getResult();\n\n if (result.udp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'udp'});\n }\n if (result.tcp.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'tcp'});\n }\n if (result.xtls.result === 'unreachable') {\n unreachableList.push({name: key, protocol: 'xtls'});\n }\n });\n\n return unreachableList;\n }\n\n /**\n * Gets the number of reachable clusters from last run reachability check\n * @returns {number} reachable clusters count\n * @private\n * @memberof Reachability\n */\n private getNumberOfReachableClusters(): number {\n let count = 0;\n\n Object.entries(this.clusterReachability).forEach(([key, clusterReachability]) => {\n const result = clusterReachability.getResult();\n\n if (\n result.udp.result === 'reachable' ||\n result.tcp.result === 'reachable' ||\n result.xtls.result === 'reachable'\n ) {\n count += 1;\n }\n });\n\n return count;\n }\n\n /**\n * Make a log of unreachable clusters.\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private logUnreachableClusters() {\n const list = this.getUnreachableClusters();\n\n list.forEach(({name, protocol}) => {\n LoggerProxy.logger.log(\n `Reachability:index#logUnreachableClusters --> failed to reach ${name} over ${protocol}`\n );\n });\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the public clusters\n * In other words, it means that all public clusters are reachable over each protocol,\n * because we only get a \"result\" if we managed to reach a cluster\n *\n * @returns {boolean}\n */\n private areAllPublicClusterResultsReady() {\n return isEqual(this.expectedResultsCount.public, this.resultsCount.public);\n }\n\n /**\n * Returns true if we've obtained all the reachability results for all the clusters\n *\n * @returns {boolean}\n */\n private areAllResultsReady() {\n return isEqual(this.expectedResultsCount, this.resultsCount);\n }\n\n /**\n * Resolves the promise returned by gatherReachability() method\n * @param {boolean} checkMinRequiredClusters - if true, it will check if we have reached the minimum required clusters and do a fallback if needed\n * @returns {void}\n */\n private resolveReachabilityPromise(checkMinRequiredClusters = true) {\n this.totalDuration = performance.now() - this.startTime;\n\n this.clearTimer('vmnTimer');\n this.clearTimer('publicCloudTimer');\n\n this.logUnreachableClusters();\n this.reachabilityDefer?.resolve();\n\n if (checkMinRequiredClusters) {\n const numReachableClusters = this.getNumberOfReachableClusters();\n if (this.minRequiredClusters && numReachableClusters < this.minRequiredClusters) {\n LoggerProxy.logger.log(\n `Reachability:index#resolveReachabilityPromise --> minRequiredClusters not reached (${numReachableClusters} < ${this.minRequiredClusters}), doing reachability fallback`\n );\n this.gatherReachabilityFallback();\n }\n }\n }\n\n /**\n * Aborts all cluster reachability checks that are in progress\n *\n * @returns {void}\n */\n private abortClusterReachability() {\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n clusterReachability.abort();\n });\n }\n\n /**\n * Helper function for calculating min/max/average values of latency\n *\n * @param {Array<any>} results\n * @param {string} protocol\n * @param {boolean} isVideoMesh\n * @returns {{min:number, max: number, average: number}}\n */\n protected getStatistics(\n results: Array<ClusterReachabilityResult & {isVideoMesh: boolean}>,\n protocol: 'udp' | 'tcp' | 'xtls',\n isVideoMesh: boolean\n ) {\n const values = results\n .filter((result) => result.isVideoMesh === isVideoMesh)\n .filter((result) => result[protocol].result === 'reachable')\n .map((result) => result[protocol].latencyInMilliseconds);\n\n if (values.length === 0) {\n return {\n min: -1,\n max: -1,\n average: -1,\n };\n }\n\n return {\n min: Math.min(...values),\n max: Math.max(...values),\n average: mean(values),\n };\n }\n\n /**\n * Sends a metric with all the statistics about how long reachability took\n *\n * @param {boolean} aborted true if the reachability checks were aborted\n * @returns {void}\n */\n protected async sendMetric(aborted = false) {\n const results = [];\n\n Object.values(this.clusterReachability).forEach((clusterReachability) => {\n results.push({\n ...clusterReachability.getResult(),\n isVideoMesh: clusterReachability.isVideoMesh,\n });\n });\n\n const stats = {\n aborted,\n vmn: {\n udp: this.getStatistics(results, 'udp', true),\n },\n public: {\n udp: this.getStatistics(results, 'udp', false),\n tcp: this.getStatistics(results, 'tcp', false),\n xtls: this.getStatistics(results, 'xtls', false),\n },\n ipver: {\n // @ts-ignore\n firstIpV4: this.webex.internal.device.ipNetworkDetector.firstIpV4,\n // @ts-ignore\n firstIpV6: this.webex.internal.device.ipNetworkDetector.firstIpV6,\n // @ts-ignore\n firstMdns: this.webex.internal.device.ipNetworkDetector.firstMdns,\n // @ts-ignore\n totalTime: this.webex.internal.device.ipNetworkDetector.totalTime,\n },\n trigger: this.lastTrigger,\n };\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.REACHABILITY_COMPLETED,\n Metrics.prepareMetricFields(stats)\n );\n }\n\n /**\n * Starts all the timers used for various timeouts\n *\n * @returns {void}\n */\n private startTimers() {\n this.vmnTimer = setTimeout(() => {\n this.vmnTimer = undefined;\n // if we are only missing VMN results, then we don't want to wait for them any longer\n // as they are likely to fail if users are not on corporate network\n if (this.areAllPublicClusterResultsReady()) {\n LoggerProxy.logger.log(\n 'Reachability:index#startTimers --> Reachability checks timed out (VMN timeout)'\n );\n\n this.resolveReachabilityPromise();\n }\n }, VIDEO_MESH_TIMEOUT * 1000);\n\n this.publicCloudTimer = setTimeout(() => {\n this.publicCloudTimer = undefined;\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks timed out (${DEFAULT_TIMEOUT}s)`\n );\n\n // check against minimum required clusters, do a new call if we don't have enough\n\n // resolve the promise, so that the client won't be blocked waiting on meetings.register() for too long\n this.resolveReachabilityPromise();\n }, DEFAULT_TIMEOUT * 1000);\n\n this.overallTimer = setTimeout(() => {\n this.overallTimer = undefined;\n this.abortClusterReachability();\n this.emit(\n {\n file: 'reachability',\n function: 'overallTimer timeout',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#startTimers --> Reachability checks fully timed out (${OVERALL_TIMEOUT}s)`\n );\n }, OVERALL_TIMEOUT * 1000);\n }\n\n /**\n * Stores given reachability results in local storage\n *\n * @param {ReachabilityResults} results\n * @returns {Promise<void>}\n */\n private async storeResults(results: ReachabilityResults) {\n // @ts-ignore\n await this.webex.boundedStorage.put(\n this.namespace,\n REACHABILITY.localStorageResult,\n JSON.stringify(results)\n );\n }\n\n /**\n * Resets all the internal counters that keep track of the results\n *\n * @returns {void}\n */\n private resetResultCounters() {\n this.expectedResultsCount.videoMesh.udp = 0;\n this.expectedResultsCount.public.udp = 0;\n this.expectedResultsCount.public.tcp = 0;\n this.expectedResultsCount.public.xtls = 0;\n\n this.resultsCount.videoMesh.udp = 0;\n this.resultsCount.public.udp = 0;\n this.resultsCount.public.tcp = 0;\n this.resultsCount.public.xtls = 0;\n }\n\n /**\n * Clears the timer\n *\n * @param {string} timer name of the timer to clear\n * @returns {void}\n */\n private clearTimer(timer: string) {\n if (this[timer]) {\n clearTimeout(this[timer]);\n this[timer] = undefined;\n }\n }\n\n /**\n * Aborts current checks that are in progress\n *\n * @returns {void}\n */\n private abortCurrentChecks() {\n this.clearTimer('vmnTimer');\n this.clearTimer('publicCloudTimer');\n this.clearTimer('overallTimer');\n\n this.abortClusterReachability();\n }\n\n /**\n * Performs reachability checks for all clusters\n * @param {ClusterList} clusterList\n * @returns {Promise<void>} promise that's resolved as soon as the checks are started\n */\n private async performReachabilityChecks(clusterList: ClusterList) {\n const results: ReachabilityResults = {};\n\n this.clusterReachability = {};\n\n this.startTime = performance.now();\n\n LoggerProxy.logger.log(\n `Reachability:index#performReachabilityChecks --> doing UDP${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability ? ',TCP' : ''\n }${\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability ? ',TLS' : ''\n } reachability checks`\n );\n\n this.resetResultCounters();\n\n // sanitize the urls in the clusterList\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n // Linus doesn't support TCP reachability checks on video mesh nodes\n const includeTcpReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTcpReachability && !cluster.isVideoMesh;\n\n if (!includeTcpReachability) {\n cluster.tcp = [];\n }\n\n // Linus doesn't support xTLS reachability checks on video mesh nodes\n const includeTlsReachability =\n // @ts-ignore\n this.webex.config.meetings.experimental.enableTlsReachability && !cluster.isVideoMesh;\n\n if (!includeTlsReachability) {\n cluster.xtls = [];\n }\n\n // initialize the result for this cluster\n results[key] = {\n udp: {result: cluster.udp.length > 0 ? 'unreachable' : 'untested'},\n tcp: {result: cluster.tcp.length > 0 ? 'unreachable' : 'untested'},\n xtls: {result: cluster.xtls.length > 0 ? 'unreachable' : 'untested'},\n isVideoMesh: cluster.isVideoMesh,\n };\n\n // update expected results counters to include this cluster\n this.expectedResultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'].udp +=\n cluster.udp.length > 0 ? 1 : 0;\n if (!cluster.isVideoMesh) {\n this.expectedResultsCount.public.tcp += cluster.tcp.length > 0 ? 1 : 0;\n this.expectedResultsCount.public.xtls += cluster.xtls.length > 0 ? 1 : 0;\n }\n });\n\n const isFirstResult = {\n udp: true,\n tcp: true,\n xtls: true,\n };\n\n // save the initialized results (in case we don't get any \"resultReady\" events at all)\n await this.storeResults(results);\n\n if (!clusterList || !Object.keys(clusterList).length) {\n // nothing to do, finish immediately\n this.resolveReachabilityPromise(false);\n\n this.emit(\n {\n file: 'reachability',\n function: 'performReachabilityChecks',\n },\n 'reachability:done',\n {}\n );\n\n return;\n }\n\n this.startTimers();\n\n // now start the reachability on all the clusters\n Object.keys(clusterList).forEach((key) => {\n const cluster = clusterList[key];\n\n this.clusterReachability[key] = new ClusterReachability(key, cluster);\n this.clusterReachability[key].on(Events.resultReady, async (data: ResultEventData) => {\n const {protocol, result, clientMediaIPs, latencyInMilliseconds} = data;\n\n if (isFirstResult[protocol]) {\n this.emit(\n {\n file: 'reachability',\n function: 'resultReady event handler',\n },\n 'reachability:firstResultAvailable',\n {\n protocol,\n }\n );\n isFirstResult[protocol] = false;\n }\n this.resultsCount[cluster.isVideoMesh ? 'videoMesh' : 'public'][protocol] += 1;\n\n const areAllResultsReady = this.areAllResultsReady();\n\n results[key][protocol].result = result;\n results[key][protocol].clientMediaIPs = clientMediaIPs;\n results[key][protocol].latencyInMilliseconds = latencyInMilliseconds;\n\n await this.storeResults(results);\n\n if (areAllResultsReady) {\n this.clearTimer('overallTimer');\n this.emit(\n {\n file: 'reachability',\n function: 'performReachabilityChecks',\n },\n 'reachability:done',\n {}\n );\n this.sendMetric();\n\n LoggerProxy.logger.log(\n `Reachability:index#gatherReachability --> Reachability checks fully completed`\n );\n this.resolveReachabilityPromise();\n }\n });\n\n // clientMediaIps can be updated independently from the results, so we need to listen for them too\n this.clusterReachability[key].on(\n Events.clientMediaIpsUpdated,\n async (data: ClientMediaIpsUpdatedEventData) => {\n results[key][data.protocol].clientMediaIPs = data.clientMediaIPs;\n\n await this.storeResults(results);\n }\n );\n\n this.clusterReachability[key].on(\n Events.natTypeUpdated,\n async (data: NatTypeUpdatedEventData) => {\n this.natType = data.natType;\n }\n );\n\n this.clusterReachability[key].start(); // not awaiting on purpose\n });\n }\n\n /**\n * Returns the clientMediaPreferences object that needs to be sent to the backend\n * when joining a meeting\n *\n * @param {boolean} isMultistream\n * @param {IP_VERSION} ipver\n * @returns {Object}\n */\n async getClientMediaPreferences(\n isMultistream: boolean,\n ipver?: IP_VERSION\n ): Promise<ClientMediaPreferences> {\n // if 0 or undefined, we assume version 0 and don't send any reachability in clientMediaPreferences\n if (!this.orpheusApiVersion) {\n return {\n ipver,\n joinCookie: await this.getJoinCookie(),\n preferTranscoding: !isMultistream,\n };\n }\n\n // must be version 1\n\n // for version 1, the reachability report goes into clientMediaPreferences (and it contains joinCookie)\n const reachabilityReport = (await this.getReachabilityReport()) as {\n joinCookie: any;\n reachability?: ReachabilityReportV1;\n };\n\n return {\n ipver,\n preferTranscoding: !isMultistream,\n ...reachabilityReport,\n };\n }\n\n /**\n * Returns the reachability report that needs to be attached to the ROAP messages\n * that we send to the backend.\n * It may return undefined, if reachability is not needed to be attached to ROAP messages (that's the case for v1 or Orpheus API)\n *\n * @returns {Promise<ReachabilityReportV0>} object that needs to be attached to Roap messages\n */\n async getReachabilityReportToAttachToRoap(): Promise<ReachabilityReportV0 | undefined> {\n // version 0\n if (!this.orpheusApiVersion) {\n return this.getReachabilityResults();\n }\n\n // version 1\n\n // for version 1 we don't attach anything to Roap messages, reachability report is sent inside clientMediaPreferences\n return undefined;\n }\n}\n"],"mappings":"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"}
@@ -258,6 +258,7 @@ export declare const EVENT_TRIGGERS: {
258
258
  MEETING_SELF_LEFT: string;
259
259
  NETWORK_QUALITY: string;
260
260
  MEDIA_NEGOTIATED: string;
261
+ MEDIA_INBOUND_AUDIO_ISSUE_DETECTED: string;
261
262
  ACTIVE_SPEAKER_CHANGED: string;
262
263
  REMOTE_VIDEO_SOURCE_COUNT_CHANGED: string;
263
264
  REMOTE_AUDIO_SOURCE_COUNT_CHANGED: string;
@@ -797,6 +798,7 @@ export declare const DISPLAY_HINTS: {
797
798
  MANUAL_CAPTION_STOP: string;
798
799
  MANUAL_CAPTION_STATUS_ACTIVE: string;
799
800
  DISPLAY_REAL_TIME_TRANSLATION: string;
801
+ SPOKEN_LANGUAGE_AUTO_DETECTION_ENABLED: string;
800
802
  ENABLE_CAPTION_PANEL: string;
801
803
  DISPLAY_NON_ENGLISH_ASR: string;
802
804
  TRANSCRIPTION_CONTROL_START: string;