@webex/plugin-meetings 3.7.0-next.2 → 3.7.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.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/common/errors/{webinar-registration-error.js → join-webinar-error.js} +12 -12
- package/dist/common/errors/join-webinar-error.js.map +1 -0
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +29 -6
- package/dist/constants.js.map +1 -1
- package/dist/index.js +8 -15
- package/dist/index.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/index.js +5 -2
- package/dist/locus-info/index.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +11 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +115 -150
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +3 -8
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +29 -17
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meetings/index.js +6 -3
- package/dist/meetings/index.js.map +1 -1
- package/dist/members/util.js +4 -2
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +3 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/remoteMedia.js +30 -15
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/reachability/clusterReachability.js +12 -11
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/recording-controller/enums.js +8 -4
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.js +18 -9
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +13 -9
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/types/common/errors/{webinar-registration-error.d.ts → join-webinar-error.d.ts} +2 -2
- package/dist/types/constants.d.ts +21 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/locus-info/index.d.ts +2 -1
- package/dist/types/meeting/in-meeting-actions.d.ts +10 -0
- package/dist/types/meeting/index.d.ts +1 -10
- package/dist/types/meeting/util.d.ts +1 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +4 -4
- package/dist/types/meetings/index.d.ts +3 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/constants.d.ts +3 -1
- package/dist/types/recording-controller/enums.d.ts +5 -2
- package/dist/types/recording-controller/index.d.ts +1 -0
- package/dist/types/recording-controller/util.d.ts +2 -1
- package/dist/webinar/index.js +390 -7
- package/dist/webinar/index.js.map +1 -1
- package/package.json +22 -22
- package/src/common/errors/join-webinar-error.ts +24 -0
- package/src/config.ts +1 -1
- package/src/constants.ts +26 -3
- package/src/index.ts +2 -3
- package/src/locus-info/index.ts +4 -2
- package/src/meeting/in-meeting-actions.ts +21 -0
- package/src/meeting/index.ts +86 -54
- package/src/meeting/util.ts +3 -9
- package/src/meeting-info/meeting-info-v2.ts +23 -11
- package/src/meetings/index.ts +8 -2
- package/src/members/util.ts +1 -0
- package/src/metrics/constants.ts +3 -1
- package/src/multistream/remoteMedia.ts +28 -15
- package/src/reachability/clusterReachability.ts +4 -1
- package/src/recording-controller/enums.ts +5 -2
- package/src/recording-controller/index.ts +17 -4
- package/src/recording-controller/util.ts +20 -5
- package/src/webinar/index.ts +235 -9
- package/test/unit/spec/locus-info/index.js +129 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +13 -1
- package/test/unit/spec/meeting/index.js +179 -81
- package/test/unit/spec/meeting/utils.js +11 -19
- package/test/unit/spec/meeting-info/meetinginfov2.js +9 -4
- package/test/unit/spec/meetings/index.js +9 -5
- package/test/unit/spec/members/utils.js +95 -0
- package/test/unit/spec/multistream/remoteMedia.ts +11 -7
- package/test/unit/spec/reachability/clusterReachability.ts +7 -0
- package/test/unit/spec/recording-controller/index.js +61 -5
- package/test/unit/spec/recording-controller/util.js +39 -3
- package/test/unit/spec/webinar/index.ts +504 -0
- package/dist/common/errors/webinar-registration-error.js.map +0 -1
- package/src/common/errors/webinar-registration-error.ts +0 -27
package/dist/members/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","_interopRequireDefault","require","_constants","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","MembersUtil","generateAddMemberOptions","invitee","locusUrl","alertIfActive","generateAdmitMemberOptions","memberIds","getAddMemberBody","options","invitees","address","emailAddress","email","phoneNumber","getAdmitMemberRequestBody","sessionLocusUrls","body","admit","participantIds","authorizingLocusUrl","getAdmitMemberRequestParams","format","baseUrl","mainLocusUrl","uri","concat","CONTROLS","method","HTTP_VERBS","PUT","getAddMemberRequestParams","requestParams","isInvalidInvitee","DIALER_REGEX","E164_FORMAT","test","VALID_EMAIL_ADDRESS","getRemoveMemberRequestParams","reason","PARTICIPANT","memberId","LEAVE","generateTransferHostMemberOptions","transfer","moderator","generateRemoveMemberOptions","removal","_FORCED_","generateMuteMemberOptions","status","isAudio","muted","generateRaiseHandMemberOptions","raised","generateRoleAssignmentMemberOptions","roles","generateLowerAllHandsMemberOptions","requestingParticipantId","undefined","generateEditDisplayNameMemberOptions","alias","getMuteMemberRequestParams","property","PATCH","getAddedRoleShape","role","roleShape","type","hasRole","hostKey","getRoleAssignmentMemberRequestParams","getRaiseHandMemberRequestParams","hand","getLowerAllHandsMemberRequestParams","editDisplayNameMemberRequestParams","aliasValue","ALIAS","POST","getTransferHostToMemberRequestParams","genderateSendDTMFOptions","url","tones","generateSendDTMFRequestParams","_ref","device","dtmf","correlationId","uuid","v4","direction","SEND_DTMF_ENDPOINT","cancelPhoneInviteOptions","generateCancelInviteRequestParams","actionType","_REMOVE_","_default","exports"],"sources":["util.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {\n HTTP_VERBS,\n CONTROLS,\n _FORCED_,\n LEAVE,\n PARTICIPANT,\n VALID_EMAIL_ADDRESS,\n DIALER_REGEX,\n SEND_DTMF_ENDPOINT,\n _REMOVE_,\n ALIAS,\n} from '../constants';\n\nimport {RoleAssignmentOptions, RoleAssignmentRequest, ServerRoleShape} from './types';\n\nconst MembersUtil = {\n /**\n * @param {Object} invitee with emailAddress, email or phoneNumber\n * @param {String} locusUrl\n * @param {Boolean} alertIfActive\n * @returns {Object} the format object\n */\n generateAddMemberOptions: (invitee: object, locusUrl: string, alertIfActive: boolean) => ({\n invitee,\n locusUrl,\n alertIfActive,\n }),\n\n /**\n * @param {Array} memberIds\n * @param {String} locusUrl\n * @returns {Object} the format object\n */\n generateAdmitMemberOptions: (memberIds: Array<any>, locusUrl: string) => ({\n locusUrl,\n memberIds,\n }),\n\n /**\n * @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}\n * @returns {Object} with {invitees: [{address}], alertIfActive}\n */\n getAddMemberBody: (options: any) => ({\n invitees: [\n {\n address:\n options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber,\n },\n ],\n alertIfActive: options.alertIfActive,\n }),\n\n /**\n * @param {Object} options with {memberIds, authorizingLocusUrl}\n * @returns {Object} admit with {memberIds}\n */\n getAdmitMemberRequestBody: (options: any) => {\n const {memberIds, sessionLocusUrls} = options;\n const body: any = {admit: {participantIds: memberIds}};\n if (sessionLocusUrls) {\n const {authorizingLocusUrl} = sessionLocusUrls;\n\n return {authorizingLocusUrl, ...body};\n }\n\n return body;\n },\n\n /**\n * @param {Object} format with {memberIds, locusUrl, sessionLocusUrls}\n * @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request\n * if a host/cohost is in a breakout session, the locus url should be the main session locus url\n */\n getAdmitMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAdmitMemberRequestBody(format);\n const {locusUrl, sessionLocusUrls} = format;\n const baseUrl = sessionLocusUrls?.mainLocusUrl || locusUrl;\n const uri = `${baseUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}\n * @returns {Object} the request parameters (method, uri, body) needed to make a addMember request\n */\n getAddMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAddMemberBody(format);\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: format.locusUrl,\n body,\n };\n\n return requestParams;\n },\n\n isInvalidInvitee: (invitee) => {\n if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {\n return true;\n }\n\n if (invitee.phoneNumber) {\n return !DIALER_REGEX.E164_FORMAT.test(invitee.phoneNumber);\n }\n\n return !VALID_EMAIL_ADDRESS.test(invitee.email || invitee.emailAddress);\n },\n\n getRemoveMemberRequestParams: (options) => {\n const body = {\n reason: options.reason,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${LEAVE}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n generateTransferHostMemberOptions: (transfer, moderator, locusUrl) => ({\n moderator,\n locusUrl,\n memberId: transfer,\n }),\n\n generateRemoveMemberOptions: (removal, locusUrl) => ({\n reason: _FORCED_,\n memberId: removal,\n locusUrl,\n }),\n\n generateMuteMemberOptions: (memberId, status, locusUrl, isAudio) => ({\n memberId,\n muted: status,\n locusUrl,\n isAudio,\n }),\n\n generateRaiseHandMemberOptions: (memberId, status, locusUrl) => ({\n memberId,\n raised: status,\n locusUrl,\n }),\n\n /**\n * @param {String} memberId\n * @param {[ServerRoleShape]} roles\n * @param {String} locusUrl\n * @returns {RoleAssignmentOptions}\n */\n generateRoleAssignmentMemberOptions: (\n memberId: string,\n roles: Array<ServerRoleShape>,\n locusUrl: string\n ): RoleAssignmentOptions => ({\n memberId,\n roles,\n locusUrl,\n }),\n\n generateLowerAllHandsMemberOptions: (requestingParticipantId, locusUrl, roles) => ({\n requestingParticipantId,\n locusUrl,\n ...(roles !== undefined && {roles}),\n }),\n\n /**\n * @param {String} memberId id of the participant who is receiving request\n * @param {String} requestingParticipantId id of the participant who is sending request (optional)\n * @param {String} alias alias name\n * @param {String} locusUrl url\n * @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}\n */\n generateEditDisplayNameMemberOptions: (memberId, requestingParticipantId, alias, locusUrl) => ({\n memberId,\n requestingParticipantId,\n alias,\n locusUrl,\n }),\n\n getMuteMemberRequestParams: (options) => {\n const property = options.isAudio === false ? 'video' : 'audio';\n const body = {\n [property]: {\n muted: options.muted,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {ServerRoleShape} role\n * @returns {ServerRoleShape} the role shape to be added to the body\n */\n getAddedRoleShape: (role: ServerRoleShape): ServerRoleShape => {\n const roleShape: ServerRoleShape = {type: role.type, hasRole: role.hasRole};\n\n if (role.hostKey) {\n roleShape.hostKey = role.hostKey;\n }\n\n return roleShape;\n },\n\n /**\n * @param {RoleAssignmentOptions} options\n * @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request\n */\n getRoleAssignmentMemberRequestParams: (options: RoleAssignmentOptions): RoleAssignmentRequest => {\n const body = {role: {roles: []}};\n options.roles.forEach((role) => {\n body.role.roles.push(MembersUtil.getAddedRoleShape(role));\n });\n\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getRaiseHandMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: options.raised,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getLowerAllHandsMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: false,\n ...(options.roles !== undefined && {roles: options.roles}),\n },\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}\n * @returns {Object} request parameters (method, uri, body) needed to make a editDisplayName request\n */\n editDisplayNameMemberRequestParams: (options) => {\n const body = {\n aliasValue: options.alias,\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${ALIAS}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n getTransferHostToMemberRequestParams: (options) => {\n const body = {\n role: {\n moderator: options.moderator,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n genderateSendDTMFOptions: (url, tones, memberId, locusUrl) => ({\n url,\n tones,\n memberId,\n locusUrl,\n }),\n\n generateSendDTMFRequestParams: ({url, tones, memberId, locusUrl}) => {\n const body = {\n device: {\n url,\n },\n memberId,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n direction: 'transmit',\n },\n };\n const uri = `${locusUrl}/${PARTICIPANT}/${memberId}/${SEND_DTMF_ENDPOINT}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n cancelPhoneInviteOptions: (invitee, locusUrl) => ({\n invitee,\n locusUrl,\n }),\n\n generateCancelInviteRequestParams: (options) => {\n const body = {\n actionType: _REMOVE_,\n invitees: [\n {\n address: options.invitee.phoneNumber,\n },\n ],\n };\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: options.locusUrl,\n body,\n };\n\n return requestParams;\n },\n};\n\nexport default MembersUtil;\n"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAWsB,SAAAE,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,gCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,gCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAItB,IAAMqB,WAAW,GAAG;EAClB;AACF;AACA;AACA;AACA;AACA;EACEC,wBAAwB,EAAE,SAAAA,yBAACC,OAAe,EAAEC,QAAgB,EAAEC,aAAsB;IAAA,OAAM;MACxFF,OAAO,EAAPA,OAAO;MACPC,QAAQ,EAARA,QAAQ;MACRC,aAAa,EAAbA;IACF,CAAC;EAAA,CAAC;EAEF;AACF;AACA;AACA;AACA;EACEC,0BAA0B,EAAE,SAAAA,2BAACC,SAAqB,EAAEH,QAAgB;IAAA,OAAM;MACxEA,QAAQ,EAARA,QAAQ;MACRG,SAAS,EAATA;IACF,CAAC;EAAA,CAAC;EAEF;AACF;AACA;AACA;EACEC,gBAAgB,EAAE,SAAAA,iBAACC,OAAY;IAAA,OAAM;MACnCC,QAAQ,EAAE,CACR;QACEC,OAAO,EACLF,OAAO,CAACN,OAAO,CAACS,YAAY,IAAIH,OAAO,CAACN,OAAO,CAACU,KAAK,IAAIJ,OAAO,CAACN,OAAO,CAACW;MAC7E,CAAC,CACF;MACDT,aAAa,EAAEI,OAAO,CAACJ;IACzB,CAAC;EAAA,CAAC;EAEF;AACF;AACA;AACA;EACEU,yBAAyB,EAAE,SAAAA,0BAACN,OAAY,EAAK;IAC3C,IAAOF,SAAS,GAAsBE,OAAO,CAAtCF,SAAS;MAAES,gBAAgB,GAAIP,OAAO,CAA3BO,gBAAgB;IAClC,IAAMC,IAAS,GAAG;MAACC,KAAK,EAAE;QAACC,cAAc,EAAEZ;MAAS;IAAC,CAAC;IACtD,IAAIS,gBAAgB,EAAE;MACpB,IAAOI,mBAAmB,GAAIJ,gBAAgB,CAAvCI,mBAAmB;MAE1B,OAAA7B,aAAA;QAAQ6B,mBAAmB,EAAnBA;MAAmB,GAAKH,IAAI;IACtC;IAEA,OAAOA,IAAI;EACb,CAAC;EAED;AACF;AACA;AACA;AACA;EACEI,2BAA2B,EAAE,SAAAA,4BAACC,MAAW,EAAK;IAC5C,IAAML,IAAI,GAAGhB,WAAW,CAACc,yBAAyB,CAACO,MAAM,CAAC;IAC1D,IAAOlB,QAAQ,GAAsBkB,MAAM,CAApClB,QAAQ;MAAEY,gBAAgB,GAAIM,MAAM,CAA1BN,gBAAgB;IACjC,IAAMO,OAAO,GAAG,CAAAP,gBAAgB,aAAhBA,gBAAgB,uBAAhBA,gBAAgB,CAAEQ,YAAY,KAAIpB,QAAQ;IAC1D,IAAMqB,GAAG,MAAAC,MAAA,CAAMH,OAAO,OAAAG,MAAA,CAAIC,mBAAQ,CAAE;IAEpC,OAAO;MACLC,MAAM,EAAEC,qBAAU,CAACC,GAAG;MACtBL,GAAG,EAAHA,GAAG;MACHR,IAAI,EAAJA;IACF,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;EACEc,yBAAyB,EAAE,SAAAA,0BAACT,MAAW,EAAK;IAC1C,IAAML,IAAI,GAAGhB,WAAW,CAACO,gBAAgB,CAACc,MAAM,CAAC;IACjD,IAAMU,aAAa,GAAG;MACpBJ,MAAM,EAAEC,qBAAU,CAACC,GAAG;MACtBL,GAAG,EAAEH,MAAM,CAAClB,QAAQ;MACpBa,IAAI,EAAJA;IACF,CAAC;IAED,OAAOe,aAAa;EACtB,CAAC;EAEDC,gBAAgB,EAAE,SAAAA,iBAAC9B,OAAO,EAAK;IAC7B,IAAI,EAAEA,OAAO,KAAKA,OAAO,CAACU,KAAK,IAAIV,OAAO,CAACS,YAAY,IAAIT,OAAO,CAACW,WAAW,CAAC,CAAC,EAAE;MAChF,OAAO,IAAI;IACb;IAEA,IAAIX,OAAO,CAACW,WAAW,EAAE;MACvB,OAAO,CAACoB,uBAAY,CAACC,WAAW,CAACC,IAAI,CAACjC,OAAO,CAACW,WAAW,CAAC;IAC5D;IAEA,OAAO,CAACuB,8BAAmB,CAACD,IAAI,CAACjC,OAAO,CAACU,KAAK,IAAIV,OAAO,CAACS,YAAY,CAAC;EACzE,CAAC;EAED0B,4BAA4B,EAAE,SAAAA,6BAAC7B,OAAO,EAAK;IACzC,IAAMQ,IAAI,GAAG;MACXsB,MAAM,EAAE9B,OAAO,CAAC8B;IAClB,CAAC;IACD,IAAMd,GAAG,MAAAC,MAAA,CAAMjB,OAAO,CAACL,QAAQ,OAAAsB,MAAA,CAAIc,sBAAW,OAAAd,MAAA,CAAIjB,OAAO,CAACgC,QAAQ,OAAAf,MAAA,CAAIgB,gBAAK,CAAE;IAE7E,OAAO;MACLd,MAAM,EAAEC,qBAAU,CAACC,GAAG;MACtBL,GAAG,EAAHA,GAAG;MACHR,IAAI,EAAJA;IACF,CAAC;EACH,CAAC;EAED0B,iCAAiC,EAAE,SAAAA,kCAACC,QAAQ,EAAEC,SAAS,EAAEzC,QAAQ;IAAA,OAAM;MACrEyC,SAAS,EAATA,SAAS;MACTzC,QAAQ,EAARA,QAAQ;MACRqC,QAAQ,EAAEG;IACZ,CAAC;EAAA,CAAC;EAEFE,2BAA2B,EAAE,SAAAA,4BAACC,OAAO,EAAE3C,QAAQ;IAAA,OAAM;MACnDmC,MAAM,EAAES,mBAAQ;MAChBP,QAAQ,EAAEM,OAAO;MACjB3C,QAAQ,EAARA;IACF,CAAC;EAAA,CAAC;EAEF6C,yBAAyB,EAAE,SAAAA,0BAACR,QAAQ,EAAES,MAAM,EAAE9C,QAAQ,EAAE+C,OAAO;IAAA,OAAM;MACnEV,QAAQ,EAARA,QAAQ;MACRW,KAAK,EAAEF,MAAM;MACb9C,QAAQ,EAARA,QAAQ;MACR+C,OAAO,EAAPA;IACF,CAAC;EAAA,CAAC;EAEFE,8BAA8B,EAAE,SAAAA,+BAACZ,QAAQ,EAAES,MAAM,EAAE9C,QAAQ;IAAA,OAAM;MAC/DqC,QAAQ,EAARA,QAAQ;MACRa,MAAM,EAAEJ,MAAM;MACd9C,QAAQ,EAARA;IACF,CAAC;EAAA,CAAC;EAEF;AACF;AACA;AACA;AACA;AACA;EACEmD,mCAAmC,EAAE,SAAAA,oCACnCd,QAAgB,EAChBe,KAA6B,EAC7BpD,QAAgB;IAAA,OACW;MAC3BqC,QAAQ,EAARA,QAAQ;MACRe,KAAK,EAALA,KAAK;MACLpD,QAAQ,EAARA;IACF,CAAC;EAAA,CAAC;EAEFqD,kCAAkC,EAAE,SAAAA,mCAACC,uBAAuB,EAAEtD,QAAQ,EAAEoD,KAAK;IAAA,OAAAjE,aAAA;MAC3EmE,uBAAuB,EAAvBA,uBAAuB;MACvBtD,QAAQ,EAARA;IAAQ,GACJoD,KAAK,KAAKG,SAAS,IAAI;MAACH,KAAK,EAALA;IAAK,CAAC;EAAA,CAClC;EAEF;AACF;AACA;AACA;AACA;AACA;AACA;EACEI,oCAAoC,EAAE,SAAAA,qCAACnB,QAAQ,EAAEiB,uBAAuB,EAAEG,KAAK,EAAEzD,QAAQ;IAAA,OAAM;MAC7FqC,QAAQ,EAARA,QAAQ;MACRiB,uBAAuB,EAAvBA,uBAAuB;MACvBG,KAAK,EAALA,KAAK;MACLzD,QAAQ,EAARA;IACF,CAAC;EAAA,CAAC;EAEF0D,0BAA0B,EAAE,SAAAA,2BAACrD,OAAO,EAAK;IACvC,IAAMsD,QAAQ,GAAGtD,OAAO,CAAC0C,OAAO,KAAK,KAAK,GAAG,OAAO,GAAG,OAAO;IAC9D,IAAMlC,IAAI,OAAArB,gBAAA,CAAAC,OAAA,MACPkE,QAAQ,EAAG;MACVX,KAAK,EAAE3C,OAAO,CAAC2C;IACjB,CAAC,CACF;IACD,IAAM3B,GAAG,MAAAC,MAAA,CAAMjB,OAAO,CAACL,QAAQ,OAAAsB,MAAA,CAAIc,sBAAW,OAAAd,MAAA,CAAIjB,OAAO,CAACgC,QAAQ,OAAAf,MAAA,CAAIC,mBAAQ,CAAE;IAEhF,OAAO;MACLC,MAAM,EAAEC,qBAAU,CAACmC,KAAK;MACxBvC,GAAG,EAAHA,GAAG;MACHR,IAAI,EAAJA;IACF,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;EACEgD,iBAAiB,EAAE,SAAAA,kBAACC,IAAqB,EAAsB;IAC7D,IAAMC,SAA0B,GAAG;MAACC,IAAI,EAAEF,IAAI,CAACE,IAAI;MAAEC,OAAO,EAAEH,IAAI,CAACG;IAAO,CAAC;IAE3E,IAAIH,IAAI,CAACI,OAAO,EAAE;MAChBH,SAAS,CAACG,OAAO,GAAGJ,IAAI,CAACI,OAAO;IAClC;IAEA,OAAOH,SAAS;EAClB,CAAC;EAED;AACF;AACA;AACA;EACEI,oCAAoC,EAAE,SAAAA,qCAAC9D,OAA8B,EAA4B;IAC/F,IAAMQ,IAAI,GAAG;MAACiD,IAAI,EAAE;QAACV,KAAK,EAAE;MAAE;IAAC,CAAC;IAChC/C,OAAO,CAAC+C,KAAK,CAAC7D,OAAO,CAAC,UAACuE,IAAI,EAAK;MAC9BjD,IAAI,CAACiD,IAAI,CAACV,KAAK,CAACnE,IAAI,CAACY,WAAW,CAACgE,iBAAiB,CAACC,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF,IAAMzC,GAAG,MAAAC,MAAA,CAAMjB,OAAO,CAACL,QAAQ,OAAAsB,MAAA,CAAIc,sBAAW,OAAAd,MAAA,CAAIjB,OAAO,CAACgC,QAAQ,OAAAf,MAAA,CAAIC,mBAAQ,CAAE;IAEhF,OAAO;MACLC,MAAM,EAAEC,qBAAU,CAACmC,KAAK;MACxBvC,GAAG,EAAHA,GAAG;MACHR,IAAI,EAAJA;IACF,CAAC;EACH,CAAC;EAEDuD,+BAA+B,EAAE,SAAAA,gCAAC/D,OAAO,EAAK;IAC5C,IAAMQ,IAAI,GAAG;MACXwD,IAAI,EAAE;QACJnB,MAAM,EAAE7C,OAAO,CAAC6C;MAClB;IACF,CAAC;IACD,IAAM7B,GAAG,MAAAC,MAAA,CAAMjB,OAAO,CAACL,QAAQ,OAAAsB,MAAA,CAAIc,sBAAW,OAAAd,MAAA,CAAIjB,OAAO,CAACgC,QAAQ,OAAAf,MAAA,CAAIC,mBAAQ,CAAE;IAEhF,OAAO;MACLC,MAAM,EAAEC,qBAAU,CAACmC,KAAK;MACxBvC,GAAG,EAAHA,GAAG;MACHR,IAAI,EAAJA;IACF,CAAC;EACH,CAAC;EAEDyD,mCAAmC,EAAE,SAAAA,oCAACjE,OAAO,EAAK;IAChD,IAAMQ,IAAI,GAAG;MACXwD,IAAI,EAAAlF,aAAA;QACF+D,MAAM,EAAE;MAAK,GACT7C,OAAO,CAAC+C,KAAK,KAAKG,SAAS,IAAI;QAACH,KAAK,EAAE/C,OAAO,CAAC+C;MAAK,CAAC,CAC1D;MACDE,uBAAuB,EAAEjD,OAAO,CAACiD;IACnC,CAAC;IACD,IAAMjC,GAAG,MAAAC,MAAA,CAAMjB,OAAO,CAACL,QAAQ,OAAAsB,MAAA,CAAIC,mBAAQ,CAAE;IAE7C,OAAO;MACLC,MAAM,EAAEC,qBAAU,CAACmC,KAAK;MACxBvC,GAAG,EAAHA,GAAG;MACHR,IAAI,EAAJA;IACF,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;EACE0D,kCAAkC,EAAE,SAAAA,mCAAClE,OAAO,EAAK;IAC/C,IAAMQ,IAAI,GAAG;MACX2D,UAAU,EAAEnE,OAAO,CAACoD,KAAK;MACzBH,uBAAuB,EAAEjD,OAAO,CAACiD;IACnC,CAAC;IACD,IAAMjC,GAAG,MAAAC,MAAA,CAAMjB,OAAO,CAACL,QAAQ,OAAAsB,MAAA,CAAIc,sBAAW,OAAAd,MAAA,CAAIjB,OAAO,CAACgC,QAAQ,OAAAf,MAAA,CAAImD,gBAAK,CAAE;IAE7E,OAAO;MACLjD,MAAM,EAAEC,qBAAU,CAACiD,IAAI;MACvBrD,GAAG,EAAHA,GAAG;MACHR,IAAI,EAAJA;IACF,CAAC;EACH,CAAC;EAED8D,oCAAoC,EAAE,SAAAA,qCAACtE,OAAO,EAAK;IACjD,IAAMQ,IAAI,GAAG;MACXiD,IAAI,EAAE;QACJrB,SAAS,EAAEpC,OAAO,CAACoC;MACrB;IACF,CAAC;IACD,IAAMpB,GAAG,MAAAC,MAAA,CAAMjB,OAAO,CAACL,QAAQ,OAAAsB,MAAA,CAAIc,sBAAW,OAAAd,MAAA,CAAIjB,OAAO,CAACgC,QAAQ,OAAAf,MAAA,CAAIC,mBAAQ,CAAE;IAEhF,OAAO;MACLC,MAAM,EAAEC,qBAAU,CAACmC,KAAK;MACxBvC,GAAG,EAAHA,GAAG;MACHR,IAAI,EAAJA;IACF,CAAC;EACH,CAAC;EAED+D,wBAAwB,EAAE,SAAAA,yBAACC,GAAG,EAAEC,KAAK,EAAEzC,QAAQ,EAAErC,QAAQ;IAAA,OAAM;MAC7D6E,GAAG,EAAHA,GAAG;MACHC,KAAK,EAALA,KAAK;MACLzC,QAAQ,EAARA,QAAQ;MACRrC,QAAQ,EAARA;IACF,CAAC;EAAA,CAAC;EAEF+E,6BAA6B,EAAE,SAAAA,8BAAAC,IAAA,EAAsC;IAAA,IAApCH,GAAG,GAAAG,IAAA,CAAHH,GAAG;MAAEC,KAAK,GAAAE,IAAA,CAALF,KAAK;MAAEzC,QAAQ,GAAA2C,IAAA,CAAR3C,QAAQ;MAAErC,QAAQ,GAAAgF,IAAA,CAARhF,QAAQ;IAC7D,IAAMa,IAAI,GAAG;MACXoE,MAAM,EAAE;QACNJ,GAAG,EAAHA;MACF,CAAC;MACDxC,QAAQ,EAARA,QAAQ;MACR6C,IAAI,EAAE;QACJC,aAAa,EAAEC,aAAI,CAACC,EAAE,CAAC,CAAC;QACxBP,KAAK,EAALA,KAAK;QACLQ,SAAS,EAAE;MACb;IACF,CAAC;IACD,IAAMjE,GAAG,MAAAC,MAAA,CAAMtB,QAAQ,OAAAsB,MAAA,CAAIc,sBAAW,OAAAd,MAAA,CAAIe,QAAQ,OAAAf,MAAA,CAAIiE,6BAAkB,CAAE;IAE1E,OAAO;MACL/D,MAAM,EAAEC,qBAAU,CAACiD,IAAI;MACvBrD,GAAG,EAAHA,GAAG;MACHR,IAAI,EAAJA;IACF,CAAC;EACH,CAAC;EAED2E,wBAAwB,EAAE,SAAAA,yBAACzF,OAAO,EAAEC,QAAQ;IAAA,OAAM;MAChDD,OAAO,EAAPA,OAAO;MACPC,QAAQ,EAARA;IACF,CAAC;EAAA,CAAC;EAEFyF,iCAAiC,EAAE,SAAAA,kCAACpF,OAAO,EAAK;IAC9C,IAAMQ,IAAI,GAAG;MACX6E,UAAU,EAAEC,mBAAQ;MACpBrF,QAAQ,EAAE,CACR;QACEC,OAAO,EAAEF,OAAO,CAACN,OAAO,CAACW;MAC3B,CAAC;IAEL,CAAC;IACD,IAAMkB,aAAa,GAAG;MACpBJ,MAAM,EAAEC,qBAAU,CAACC,GAAG;MACtBL,GAAG,EAAEhB,OAAO,CAACL,QAAQ;MACrBa,IAAI,EAAJA;IACF,CAAC;IAED,OAAOe,aAAa;EACtB;AACF,CAAC;AAAC,IAAAgE,QAAA,GAAAC,OAAA,CAAApG,OAAA,GAEaI,WAAW"}
|
|
1
|
+
{"version":3,"names":["_uuid","_interopRequireDefault","require","_constants","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","MembersUtil","generateAddMemberOptions","invitee","locusUrl","alertIfActive","generateAdmitMemberOptions","memberIds","getAddMemberBody","options","invitees","address","emailAddress","email","phoneNumber","roles","getAdmitMemberRequestBody","sessionLocusUrls","body","admit","participantIds","authorizingLocusUrl","getAdmitMemberRequestParams","format","baseUrl","mainLocusUrl","uri","concat","CONTROLS","method","HTTP_VERBS","PUT","getAddMemberRequestParams","requestParams","isInvalidInvitee","DIALER_REGEX","E164_FORMAT","test","VALID_EMAIL_ADDRESS","getRemoveMemberRequestParams","reason","PARTICIPANT","memberId","LEAVE","generateTransferHostMemberOptions","transfer","moderator","generateRemoveMemberOptions","removal","_FORCED_","generateMuteMemberOptions","status","isAudio","muted","generateRaiseHandMemberOptions","raised","generateRoleAssignmentMemberOptions","generateLowerAllHandsMemberOptions","requestingParticipantId","undefined","generateEditDisplayNameMemberOptions","alias","getMuteMemberRequestParams","property","PATCH","getAddedRoleShape","role","roleShape","type","hasRole","hostKey","getRoleAssignmentMemberRequestParams","getRaiseHandMemberRequestParams","hand","getLowerAllHandsMemberRequestParams","editDisplayNameMemberRequestParams","aliasValue","ALIAS","POST","getTransferHostToMemberRequestParams","genderateSendDTMFOptions","url","tones","generateSendDTMFRequestParams","_ref","device","dtmf","correlationId","uuid","v4","direction","SEND_DTMF_ENDPOINT","cancelPhoneInviteOptions","generateCancelInviteRequestParams","actionType","_REMOVE_","_default","exports"],"sources":["util.ts"],"sourcesContent":["import uuid from 'uuid';\nimport {\n HTTP_VERBS,\n CONTROLS,\n _FORCED_,\n LEAVE,\n PARTICIPANT,\n VALID_EMAIL_ADDRESS,\n DIALER_REGEX,\n SEND_DTMF_ENDPOINT,\n _REMOVE_,\n ALIAS,\n} from '../constants';\n\nimport {RoleAssignmentOptions, RoleAssignmentRequest, ServerRoleShape} from './types';\n\nconst MembersUtil = {\n /**\n * @param {Object} invitee with emailAddress, email or phoneNumber\n * @param {String} locusUrl\n * @param {Boolean} alertIfActive\n * @returns {Object} the format object\n */\n generateAddMemberOptions: (invitee: object, locusUrl: string, alertIfActive: boolean) => ({\n invitee,\n locusUrl,\n alertIfActive,\n }),\n\n /**\n * @param {Array} memberIds\n * @param {String} locusUrl\n * @returns {Object} the format object\n */\n generateAdmitMemberOptions: (memberIds: Array<any>, locusUrl: string) => ({\n locusUrl,\n memberIds,\n }),\n\n /**\n * @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}\n * @returns {Object} with {invitees: [{address}], alertIfActive}\n */\n getAddMemberBody: (options: any) => ({\n invitees: [\n {\n address:\n options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber,\n ...(options.invitee.roles ? {roles: options.invitee.roles} : {}),\n },\n ],\n alertIfActive: options.alertIfActive,\n }),\n\n /**\n * @param {Object} options with {memberIds, authorizingLocusUrl}\n * @returns {Object} admit with {memberIds}\n */\n getAdmitMemberRequestBody: (options: any) => {\n const {memberIds, sessionLocusUrls} = options;\n const body: any = {admit: {participantIds: memberIds}};\n if (sessionLocusUrls) {\n const {authorizingLocusUrl} = sessionLocusUrls;\n\n return {authorizingLocusUrl, ...body};\n }\n\n return body;\n },\n\n /**\n * @param {Object} format with {memberIds, locusUrl, sessionLocusUrls}\n * @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request\n * if a host/cohost is in a breakout session, the locus url should be the main session locus url\n */\n getAdmitMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAdmitMemberRequestBody(format);\n const {locusUrl, sessionLocusUrls} = format;\n const baseUrl = sessionLocusUrls?.mainLocusUrl || locusUrl;\n const uri = `${baseUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}\n * @returns {Object} the request parameters (method, uri, body) needed to make a addMember request\n */\n getAddMemberRequestParams: (format: any) => {\n const body = MembersUtil.getAddMemberBody(format);\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: format.locusUrl,\n body,\n };\n\n return requestParams;\n },\n\n isInvalidInvitee: (invitee) => {\n if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {\n return true;\n }\n\n if (invitee.phoneNumber) {\n return !DIALER_REGEX.E164_FORMAT.test(invitee.phoneNumber);\n }\n\n return !VALID_EMAIL_ADDRESS.test(invitee.email || invitee.emailAddress);\n },\n\n getRemoveMemberRequestParams: (options) => {\n const body = {\n reason: options.reason,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${LEAVE}`;\n\n return {\n method: HTTP_VERBS.PUT,\n uri,\n body,\n };\n },\n\n generateTransferHostMemberOptions: (transfer, moderator, locusUrl) => ({\n moderator,\n locusUrl,\n memberId: transfer,\n }),\n\n generateRemoveMemberOptions: (removal, locusUrl) => ({\n reason: _FORCED_,\n memberId: removal,\n locusUrl,\n }),\n\n generateMuteMemberOptions: (memberId, status, locusUrl, isAudio) => ({\n memberId,\n muted: status,\n locusUrl,\n isAudio,\n }),\n\n generateRaiseHandMemberOptions: (memberId, status, locusUrl) => ({\n memberId,\n raised: status,\n locusUrl,\n }),\n\n /**\n * @param {String} memberId\n * @param {[ServerRoleShape]} roles\n * @param {String} locusUrl\n * @returns {RoleAssignmentOptions}\n */\n generateRoleAssignmentMemberOptions: (\n memberId: string,\n roles: Array<ServerRoleShape>,\n locusUrl: string\n ): RoleAssignmentOptions => ({\n memberId,\n roles,\n locusUrl,\n }),\n\n generateLowerAllHandsMemberOptions: (requestingParticipantId, locusUrl, roles) => ({\n requestingParticipantId,\n locusUrl,\n ...(roles !== undefined && {roles}),\n }),\n\n /**\n * @param {String} memberId id of the participant who is receiving request\n * @param {String} requestingParticipantId id of the participant who is sending request (optional)\n * @param {String} alias alias name\n * @param {String} locusUrl url\n * @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}\n */\n generateEditDisplayNameMemberOptions: (memberId, requestingParticipantId, alias, locusUrl) => ({\n memberId,\n requestingParticipantId,\n alias,\n locusUrl,\n }),\n\n getMuteMemberRequestParams: (options) => {\n const property = options.isAudio === false ? 'video' : 'audio';\n const body = {\n [property]: {\n muted: options.muted,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {ServerRoleShape} role\n * @returns {ServerRoleShape} the role shape to be added to the body\n */\n getAddedRoleShape: (role: ServerRoleShape): ServerRoleShape => {\n const roleShape: ServerRoleShape = {type: role.type, hasRole: role.hasRole};\n\n if (role.hostKey) {\n roleShape.hostKey = role.hostKey;\n }\n\n return roleShape;\n },\n\n /**\n * @param {RoleAssignmentOptions} options\n * @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request\n */\n getRoleAssignmentMemberRequestParams: (options: RoleAssignmentOptions): RoleAssignmentRequest => {\n const body = {role: {roles: []}};\n options.roles.forEach((role) => {\n body.role.roles.push(MembersUtil.getAddedRoleShape(role));\n });\n\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getRaiseHandMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: options.raised,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n getLowerAllHandsMemberRequestParams: (options) => {\n const body = {\n hand: {\n raised: false,\n ...(options.roles !== undefined && {roles: options.roles}),\n },\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n /**\n * @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}\n * @returns {Object} request parameters (method, uri, body) needed to make a editDisplayName request\n */\n editDisplayNameMemberRequestParams: (options) => {\n const body = {\n aliasValue: options.alias,\n requestingParticipantId: options.requestingParticipantId,\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${ALIAS}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n getTransferHostToMemberRequestParams: (options) => {\n const body = {\n role: {\n moderator: options.moderator,\n },\n };\n const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;\n\n return {\n method: HTTP_VERBS.PATCH,\n uri,\n body,\n };\n },\n\n genderateSendDTMFOptions: (url, tones, memberId, locusUrl) => ({\n url,\n tones,\n memberId,\n locusUrl,\n }),\n\n generateSendDTMFRequestParams: ({url, tones, memberId, locusUrl}) => {\n const body = {\n device: {\n url,\n },\n memberId,\n dtmf: {\n correlationId: uuid.v4(),\n tones,\n direction: 'transmit',\n },\n };\n const uri = `${locusUrl}/${PARTICIPANT}/${memberId}/${SEND_DTMF_ENDPOINT}`;\n\n return {\n method: HTTP_VERBS.POST,\n uri,\n body,\n };\n },\n\n cancelPhoneInviteOptions: (invitee, locusUrl) => ({\n invitee,\n locusUrl,\n }),\n\n generateCancelInviteRequestParams: (options) => {\n const body = {\n actionType: _REMOVE_,\n invitees: [\n {\n address: options.invitee.phoneNumber,\n },\n ],\n };\n const requestParams = {\n method: HTTP_VERBS.PUT,\n uri: options.locusUrl,\n body,\n };\n\n return requestParams;\n },\n};\n\nexport default MembersUtil;\n"],"mappings":"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"}
|
|
@@ -76,6 +76,8 @@ var BEHAVIORAL_METRICS = exports.default = {
|
|
|
76
76
|
ROAP_HTTP_RESPONSE_MISSING: 'js_sdk_roap_http_response_missing',
|
|
77
77
|
TURN_DISCOVERY_REQUIRES_OK: 'js_sdk_turn_discovery_requires_ok',
|
|
78
78
|
REACHABILITY_COMPLETED: 'js_sdk_reachability_completed',
|
|
79
|
-
|
|
79
|
+
JOIN_WEBINAR_ERROR: 'js_sdk_join_webinar_error',
|
|
80
|
+
GUEST_ENTERED_LOBBY: 'js_sdk_guest_entered_lobby',
|
|
81
|
+
GUEST_EXITED_LOBBY: 'js_sdk_guest_exited_lobby'
|
|
80
82
|
};
|
|
81
83
|
//# 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","FETCH_MEETING_INFO_V1_SUCCESS","FETCH_MEETING_INFO_V1_FAILURE","ADHOC_MEETING_SUCCESS","ADHOC_MEETING_FAILURE","VERIFY_PASSWORD_SUCCESS","VERIFY_PASSWORD_ERROR","VERIFY_CAPTCHA_ERROR","MOVE_TO_SUCCESS","MOVE_TO_FAILURE","MOVE_FROM_SUCCESS","MOVE_FROM_FAILURE","TURN_DISCOVERY_FAILURE","MEETING_INFO_POLICY_ERROR","LOCUS_DELTA_SYNC_FAILED","LOCUS_DELTA_OUT_OF_ORDER","PERMISSION_TOKEN_REFRESH","PERMISSION_TOKEN_REFRESH_ERROR","TURN_DISCOVERY_LATENCY","ROAP_OFFER_TO_ANSWER_LATENCY","ROAP_HTTP_RESPONSE_MISSING","TURN_DISCOVERY_REQUIRES_OK","REACHABILITY_COMPLETED","
|
|
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","FETCH_MEETING_INFO_V1_SUCCESS","FETCH_MEETING_INFO_V1_FAILURE","ADHOC_MEETING_SUCCESS","ADHOC_MEETING_FAILURE","VERIFY_PASSWORD_SUCCESS","VERIFY_PASSWORD_ERROR","VERIFY_CAPTCHA_ERROR","MOVE_TO_SUCCESS","MOVE_TO_FAILURE","MOVE_FROM_SUCCESS","MOVE_FROM_FAILURE","TURN_DISCOVERY_FAILURE","MEETING_INFO_POLICY_ERROR","LOCUS_DELTA_SYNC_FAILED","LOCUS_DELTA_OUT_OF_ORDER","PERMISSION_TOKEN_REFRESH","PERMISSION_TOKEN_REFRESH_ERROR","TURN_DISCOVERY_LATENCY","ROAP_OFFER_TO_ANSWER_LATENCY","ROAP_HTTP_RESPONSE_MISSING","TURN_DISCOVERY_REQUIRES_OK","REACHABILITY_COMPLETED","JOIN_WEBINAR_ERROR","GUEST_ENTERED_LOBBY","GUEST_EXITED_LOBBY"],"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 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 ADHOC_MEETING_SUCCESS: 'js_sdk_adhoc_meeting_success',\n ADHOC_MEETING_FAILURE: 'js_sdk_adhoc_meeting_failure',\n VERIFY_PASSWORD_SUCCESS: 'js_sdk_verify_password_success',\n VERIFY_PASSWORD_ERROR: 'js_sdk_verify_password_error',\n VERIFY_CAPTCHA_ERROR: 'js_sdk_verify_captcha_error',\n MOVE_TO_SUCCESS: 'js_sdk_move_to_success',\n MOVE_TO_FAILURE: 'js_sdk_move_to_failure',\n MOVE_FROM_SUCCESS: 'js_sdk_move_from_success',\n MOVE_FROM_FAILURE: 'js_sdk_move_from_failure',\n TURN_DISCOVERY_FAILURE: 'js_sdk_turn_discovery_failure',\n MEETING_INFO_POLICY_ERROR: 'js_sdk_meeting_info_policy_error',\n LOCUS_DELTA_SYNC_FAILED: 'js_sdk_locus_delta_sync_failed',\n LOCUS_DELTA_OUT_OF_ORDER: 'js_sdk_locus_delta_ooo',\n PERMISSION_TOKEN_REFRESH: 'js_sdk_permission_token_refresh',\n PERMISSION_TOKEN_REFRESH_ERROR: 'js_sdk_permission_token_refresh_error',\n TURN_DISCOVERY_LATENCY: 'js_sdk_turn_discovery_latency',\n ROAP_OFFER_TO_ANSWER_LATENCY: 'js_sdk_roap_offer_to_answer_latency',\n ROAP_HTTP_RESPONSE_MISSING: 'js_sdk_roap_http_response_missing',\n TURN_DISCOVERY_REQUIRES_OK: 'js_sdk_turn_discovery_requires_ok',\n REACHABILITY_COMPLETED: 'js_sdk_reachability_completed',\n JOIN_WEBINAR_ERROR: 'js_sdk_join_webinar_error',\n GUEST_ENTERED_LOBBY: 'js_sdk_guest_entered_lobby',\n GUEST_EXITED_LOBBY: 'js_sdk_guest_exited_lobby',\n};\n\nexport {BEHAVIORAL_METRICS as default};\n"],"mappings":";;;;;;;AAAA;;AAEA,IAAMA,kBAAkB,GAAAC,OAAA,CAAAC,OAAA,GAAG;EACzBC,4BAA4B,EAAE,qCAAqC;EACnEC,6BAA6B,EAAE,sCAAsC;EACrEC,0BAA0B,EAAE,4BAA4B;EACxDC,0BAA0B,EAAE,mCAAmC;EAC/DC,2BAA2B,EAAE,oCAAoC;EACjEC,YAAY,EAAE,qBAAqB;EACnCC,YAAY,EAAE,sBAAsB;EACpCC,iBAAiB,EAAE,0BAA0B;EAC7CC,iBAAiB,EAAE,2BAA2B;EAC9CC,eAAe,EAAE,wBAAwB;EACzCC,2BAA2B,EAAE,8BAA8B;EAC3DC,kBAAkB,EAAE,2BAA2B;EAC/CC,kBAAkB,EAAE,4BAA4B;EAChDC,qBAAqB,EAAE,8BAA8B;EACrDC,uBAAuB,EAAE,oCAAoC;EAC7DC,yBAAyB,EAAE,sCAAsC;EACjEC,sBAAsB,EAAE,gCAAgC;EACxDC,yBAAyB,EAAE,mCAAmC;EAC9DC,uBAAuB,EAAE,iCAAiC;EAC1DC,iCAAiC,EAAE,0CAA0C;EAC7EC,wCAAwC,EAAE,iDAAiD;EAE3FC,4BAA4B,EAAE,qCAAqC;EACnEC,sBAAsB,EAAE,+BAA+B;EACvDC,yBAAyB,EAAE,mCAAmC;EAC9DC,0BAA0B,EAAE,mCAAmC;EAC/DC,qBAAqB,EAAE,8BAA8B;EACrDC,qBAAqB,EAAE,+BAA+B;EACtDC,sCAAsC,EAAE,gDAAgD;EACxFC,qCAAqC,EAAE,+CAA+C;EACtFC,qCAAqC,EAAE,8CAA8C;EACrFC,kBAAkB,EAAE,4BAA4B;EAChDC,kBAAkB,EAAE,4BAA4B;EAChDC,2BAA2B,EAAE,qCAAqC;EAClEC,0BAA0B,EAAE,oCAAoC;EAChEC,mBAAmB,EAAE,4BAA4B;EACjDC,oBAAoB,EAAE,6BAA6B;EACnDC,oBAAoB,EAAE,8BAA8B;EACpDC,oBAAoB,EAAE,8BAA8B;EACpDC,oBAAoB,EAAE,8BAA8B;EACpDC,mBAAmB,EAAE,6BAA6B;EAClDC,oBAAoB,EAAE,4BAA4B;EAClDC,sBAAsB,EAAE,gCAAgC;EACxDC,qBAAqB,EAAE,8BAA8B;EACrDC,mBAAmB,EAAE,4BAA4B;EACjDC,mBAAmB,EAAE,4BAA4B;EACjDC,6BAA6B,EAAE,sCAAsC;EACrEC,6BAA6B,EAAE,sCAAsC;EACrEC,6BAA6B,EAAE,sCAAsC;EACrEC,qBAAqB,EAAE,8BAA8B;EACrDC,qBAAqB,EAAE,8BAA8B;EACrDC,uBAAuB,EAAE,gCAAgC;EACzDC,qBAAqB,EAAE,8BAA8B;EACrDC,oBAAoB,EAAE,6BAA6B;EACnDC,eAAe,EAAE,wBAAwB;EACzCC,eAAe,EAAE,wBAAwB;EACzCC,iBAAiB,EAAE,0BAA0B;EAC7CC,iBAAiB,EAAE,0BAA0B;EAC7CC,sBAAsB,EAAE,+BAA+B;EACvDC,yBAAyB,EAAE,kCAAkC;EAC7DC,uBAAuB,EAAE,gCAAgC;EACzDC,wBAAwB,EAAE,wBAAwB;EAClDC,wBAAwB,EAAE,iCAAiC;EAC3DC,8BAA8B,EAAE,uCAAuC;EACvEC,sBAAsB,EAAE,+BAA+B;EACvDC,4BAA4B,EAAE,qCAAqC;EACnEC,0BAA0B,EAAE,mCAAmC;EAC/DC,0BAA0B,EAAE,mCAAmC;EAC/DC,sBAAsB,EAAE,+BAA+B;EACvDC,kBAAkB,EAAE,2BAA2B;EAC/CC,mBAAmB,EAAE,4BAA4B;EACjDC,kBAAkB,EAAE;AACtB,CAAC"}
|
|
@@ -26,6 +26,14 @@ var RemoteMediaEvents = exports.RemoteMediaEvents = {
|
|
|
26
26
|
};
|
|
27
27
|
// highest possible resolution
|
|
28
28
|
|
|
29
|
+
var MAX_FS_VALUES = {
|
|
30
|
+
'90p': 60,
|
|
31
|
+
'180p': 240,
|
|
32
|
+
'360p': 920,
|
|
33
|
+
'720p': 3600,
|
|
34
|
+
'1080p': 8192
|
|
35
|
+
};
|
|
36
|
+
|
|
29
37
|
/**
|
|
30
38
|
* Converts pane size into h264 maxFs
|
|
31
39
|
* @param {PaneSize} paneSize
|
|
@@ -35,26 +43,26 @@ function getMaxFs(paneSize) {
|
|
|
35
43
|
var maxFs;
|
|
36
44
|
switch (paneSize) {
|
|
37
45
|
case 'thumbnail':
|
|
38
|
-
maxFs =
|
|
46
|
+
maxFs = MAX_FS_VALUES['90p'];
|
|
39
47
|
break;
|
|
40
48
|
case 'very small':
|
|
41
|
-
maxFs =
|
|
49
|
+
maxFs = MAX_FS_VALUES['180p'];
|
|
42
50
|
break;
|
|
43
51
|
case 'small':
|
|
44
|
-
maxFs =
|
|
52
|
+
maxFs = MAX_FS_VALUES['360p'];
|
|
45
53
|
break;
|
|
46
54
|
case 'medium':
|
|
47
|
-
maxFs =
|
|
55
|
+
maxFs = MAX_FS_VALUES['720p'];
|
|
48
56
|
break;
|
|
49
57
|
case 'large':
|
|
50
|
-
maxFs =
|
|
58
|
+
maxFs = MAX_FS_VALUES['1080p'];
|
|
51
59
|
break;
|
|
52
60
|
case 'best':
|
|
53
|
-
maxFs =
|
|
61
|
+
maxFs = MAX_FS_VALUES['1080p']; // for now 'best' is 1080p, so same as 'large'
|
|
54
62
|
break;
|
|
55
63
|
default:
|
|
56
64
|
_loggerProxy.default.logger.warn("RemoteMedia#getMaxFs --> unsupported paneSize: ".concat(paneSize, ", using \"medium\" instead"));
|
|
57
|
-
maxFs =
|
|
65
|
+
maxFs = MAX_FS_VALUES['720p'];
|
|
58
66
|
}
|
|
59
67
|
return maxFs;
|
|
60
68
|
}
|
|
@@ -110,16 +118,23 @@ var RemoteMedia = exports.RemoteMedia = /*#__PURE__*/function (_EventsScope) {
|
|
|
110
118
|
if (width === 0 || height === 0) {
|
|
111
119
|
return;
|
|
112
120
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
121
|
+
|
|
122
|
+
// we switch to the next resolution level when the height is 10% more than the current resolution height
|
|
123
|
+
// except for 1080p - we switch to it immediately when the height is more than 720p
|
|
124
|
+
var threshold = 1.1;
|
|
125
|
+
var getThresholdHeight = function getThresholdHeight(h) {
|
|
126
|
+
return Math.round(h * threshold);
|
|
127
|
+
};
|
|
128
|
+
if (height < getThresholdHeight(90)) {
|
|
129
|
+
fs = MAX_FS_VALUES['90p'];
|
|
130
|
+
} else if (height < getThresholdHeight(180)) {
|
|
131
|
+
fs = MAX_FS_VALUES['180p'];
|
|
132
|
+
} else if (height < getThresholdHeight(360)) {
|
|
133
|
+
fs = MAX_FS_VALUES['360p'];
|
|
119
134
|
} else if (height <= 720) {
|
|
120
|
-
fs =
|
|
135
|
+
fs = MAX_FS_VALUES['720p'];
|
|
121
136
|
} else {
|
|
122
|
-
fs =
|
|
137
|
+
fs = MAX_FS_VALUES['1080p'];
|
|
123
138
|
}
|
|
124
139
|
(_this$receiveSlot = this.receiveSlot) === null || _this$receiveSlot === void 0 ? void 0 : _this$receiveSlot.setMaxFs(fs);
|
|
125
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_eventsScope","_receiveSlot","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","RemoteMediaEvents","exports","SourceUpdate","ReceiveSlotEvents","Stopped","getMaxFs","paneSize","maxFs","LoggerProxy","logger","warn","concat","remoteMediaCounter","RemoteMedia","_EventsScope","_inherits2","_super","receiveSlot","mediaRequestManager","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","setupEventListeners","id","_createClass2","key","value","setSizeHint","width","height","_this$receiveSlot","fs","setMaxFs","stop","_this$receiveSlot2","commit","length","undefined","cancelMediaRequest","removeAllListeners","emit","file","function","sendMediaRequest","csi","mediaRequestId","Error","addRequest","policyInfo","policy","receiveSlots","codecInfo","resolution","codec","cancelRequest","_this2","scope","on","data","get","_this$receiveSlot3","mediaType","_this$receiveSlot4","memberId","_this$receiveSlot5","_this$receiveSlot6","sourceState","_this$receiveSlot7","stream","getUnderlyingReceiveSlot","EventsScope"],"sources":["remoteMedia.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\nimport {MediaType, StreamState} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\n\nimport {MediaRequestId, MediaRequestManager} from './mediaRequestManager';\nimport {CSI, ReceiveSlot, ReceiveSlotEvents} from './receiveSlot';\n\nexport const RemoteMediaEvents = {\n SourceUpdate: ReceiveSlotEvents.SourceUpdate,\n Stopped: 'stopped',\n};\n\nexport type RemoteVideoResolution =\n | 'thumbnail' // the smallest possible resolution, 90p or less\n | 'very small' // 180p or less\n | 'small' // 360p or less\n | 'medium' // 720p or less\n | 'large' // 1080p or less\n | 'best'; // highest possible resolution\n\n/**\n * Converts pane size into h264 maxFs\n * @param {PaneSize} paneSize\n * @returns {number}\n */\nexport function getMaxFs(paneSize: RemoteVideoResolution): number {\n let maxFs;\n\n switch (paneSize) {\n case 'thumbnail':\n maxFs = 60;\n break;\n case 'very small':\n maxFs = 240;\n break;\n case 'small':\n maxFs = 920;\n break;\n case 'medium':\n maxFs = 3600;\n break;\n case 'large':\n maxFs = 8192;\n break;\n case 'best':\n maxFs = 8192; // for now 'best' is 1080p, so same as 'large'\n break;\n default:\n LoggerProxy.logger.warn(\n `RemoteMedia#getMaxFs --> unsupported paneSize: ${paneSize}, using \"medium\" instead`\n );\n maxFs = 3600;\n }\n\n return maxFs;\n}\n\ntype Options = {\n resolution?: RemoteVideoResolution; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides\n};\n\nexport type RemoteMediaId = string;\n\nlet remoteMediaCounter = 0;\n\n/**\n * Class representing a remote audio/video stream.\n *\n * Internally it is associated with a specific receive slot\n * and a media request for it.\n */\nexport class RemoteMedia extends EventsScope {\n private receiveSlot?: ReceiveSlot;\n\n private readonly mediaRequestManager: MediaRequestManager;\n\n private readonly options: Options;\n\n private mediaRequestId?: MediaRequestId;\n\n public readonly id: RemoteMediaId;\n\n /**\n * Constructs RemoteMedia instance\n *\n * @param receiveSlot\n * @param mediaRequestManager\n * @param options\n */\n constructor(\n receiveSlot: ReceiveSlot,\n mediaRequestManager: MediaRequestManager,\n options?: Options\n ) {\n super();\n remoteMediaCounter += 1;\n this.receiveSlot = receiveSlot;\n this.mediaRequestManager = mediaRequestManager;\n this.options = options || {};\n this.setupEventListeners();\n this.id = `RM${remoteMediaCounter}-${this.receiveSlot.id}`;\n }\n\n /**\n * Supply the width and height of the video element\n * to restrict the requested resolution to this size\n * @param width width of the video element\n * @param height height of the video element\n * @note width/height of 0 will be ignored\n */\n public setSizeHint(width, height) {\n // only base on height for now\n let fs: number;\n\n if (width === 0 || height === 0) {\n return;\n }\n\n if (height < 135) {\n fs = 60;\n } else if (height < 270) {\n fs = 240;\n } else if (height < 540) {\n fs = 920;\n } else if (height <= 720) {\n fs = 3600;\n } else {\n fs = 8192;\n }\n\n this.receiveSlot?.setMaxFs(fs);\n }\n\n /**\n * Invalidates the remote media by clearing the reference to a receive slot and\n * cancelling the media request.\n * After this call the remote media is unusable.\n *\n * @param {boolean} commit - whether to commit the cancellation of the media request\n * @internal\n */\n public stop(commit = true) {\n this.cancelMediaRequest(commit);\n this.receiveSlot?.removeAllListeners();\n this.receiveSlot = undefined;\n this.emit(\n {\n file: 'multistream/remoteMedia',\n function: 'stop',\n },\n RemoteMediaEvents.Stopped,\n {}\n );\n }\n\n /**\n * Sends a new media request. This method can only be used for receiver-selected policy,\n * because only in that policy we have a 1-1 relationship between RemoteMedia and MediaRequest\n * and the request id is then stored in this RemoteMedia instance.\n * For active-speaker policy, the same request is shared among many RemoteMedia instances,\n * so it's managed through RemoteMediaGroup\n *\n * @internal\n */\n public sendMediaRequest(csi: CSI, commit: boolean) {\n if (this.mediaRequestId) {\n this.cancelMediaRequest(false);\n }\n\n if (!this.receiveSlot) {\n throw new Error('sendMediaRequest() called on an invalidated RemoteMedia instance');\n }\n\n this.mediaRequestId = this.mediaRequestManager.addRequest(\n {\n policyInfo: {\n policy: 'receiver-selected',\n csi,\n },\n receiveSlots: [this.receiveSlot],\n codecInfo: this.options.resolution && {\n codec: 'h264',\n maxFs: getMaxFs(this.options.resolution),\n },\n },\n commit\n );\n }\n\n /**\n * @internal\n */\n public cancelMediaRequest(commit: boolean) {\n if (this.mediaRequestId) {\n this.mediaRequestManager.cancelRequest(this.mediaRequestId, commit);\n this.mediaRequestId = undefined;\n }\n }\n\n /**\n * registers event listeners on the receive slot and forwards all the events\n */\n private setupEventListeners() {\n if (this.receiveSlot) {\n const scope = {\n file: 'multistream/remoteMedia',\n function: 'setupEventListeners',\n };\n\n this.receiveSlot.on(ReceiveSlotEvents.SourceUpdate, (data) => {\n this.emit(scope, RemoteMediaEvents.SourceUpdate, data);\n });\n }\n }\n\n /**\n * Getter for mediaType\n */\n public get mediaType(): MediaType {\n return this.receiveSlot?.mediaType;\n }\n\n /**\n * Getter for memberId\n */\n public get memberId() {\n return this.receiveSlot?.memberId;\n }\n\n /**\n * Getter for csi\n */\n public get csi() {\n return this.receiveSlot?.csi;\n }\n\n /**\n * Getter for source state\n */\n public get sourceState(): StreamState {\n return this.receiveSlot?.sourceState;\n }\n\n /**\n * Getter for remote media stream\n */\n public get stream() {\n return this.receiveSlot?.stream;\n }\n\n /**\n * @internal\n * @returns {ReceiveSlot}\n */\n public getUnderlyingReceiveSlot() {\n return this.receiveSlot;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_eventsScope","_receiveSlot","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","RemoteMediaEvents","exports","SourceUpdate","ReceiveSlotEvents","Stopped","MAX_FS_VALUES","getMaxFs","paneSize","maxFs","LoggerProxy","logger","warn","concat","remoteMediaCounter","RemoteMedia","_EventsScope","_inherits2","_super","receiveSlot","mediaRequestManager","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","setupEventListeners","id","_createClass2","key","value","setSizeHint","width","height","_this$receiveSlot","fs","threshold","getThresholdHeight","h","Math","round","setMaxFs","stop","_this$receiveSlot2","commit","length","undefined","cancelMediaRequest","removeAllListeners","emit","file","function","sendMediaRequest","csi","mediaRequestId","Error","addRequest","policyInfo","policy","receiveSlots","codecInfo","resolution","codec","cancelRequest","_this2","scope","on","data","get","_this$receiveSlot3","mediaType","_this$receiveSlot4","memberId","_this$receiveSlot5","_this$receiveSlot6","sourceState","_this$receiveSlot7","stream","getUnderlyingReceiveSlot","EventsScope"],"sources":["remoteMedia.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\nimport {MediaType, StreamState} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\n\nimport {MediaRequestId, MediaRequestManager} from './mediaRequestManager';\nimport {CSI, ReceiveSlot, ReceiveSlotEvents} from './receiveSlot';\n\nexport const RemoteMediaEvents = {\n SourceUpdate: ReceiveSlotEvents.SourceUpdate,\n Stopped: 'stopped',\n};\n\nexport type RemoteVideoResolution =\n | 'thumbnail' // the smallest possible resolution, 90p or less\n | 'very small' // 180p or less\n | 'small' // 360p or less\n | 'medium' // 720p or less\n | 'large' // 1080p or less\n | 'best'; // highest possible resolution\n\nconst MAX_FS_VALUES = {\n '90p': 60,\n '180p': 240,\n '360p': 920,\n '720p': 3600,\n '1080p': 8192,\n};\n\n/**\n * Converts pane size into h264 maxFs\n * @param {PaneSize} paneSize\n * @returns {number}\n */\nexport function getMaxFs(paneSize: RemoteVideoResolution): number {\n let maxFs;\n\n switch (paneSize) {\n case 'thumbnail':\n maxFs = MAX_FS_VALUES['90p'];\n break;\n case 'very small':\n maxFs = MAX_FS_VALUES['180p'];\n break;\n case 'small':\n maxFs = MAX_FS_VALUES['360p'];\n break;\n case 'medium':\n maxFs = MAX_FS_VALUES['720p'];\n break;\n case 'large':\n maxFs = MAX_FS_VALUES['1080p'];\n break;\n case 'best':\n maxFs = MAX_FS_VALUES['1080p']; // for now 'best' is 1080p, so same as 'large'\n break;\n default:\n LoggerProxy.logger.warn(\n `RemoteMedia#getMaxFs --> unsupported paneSize: ${paneSize}, using \"medium\" instead`\n );\n maxFs = MAX_FS_VALUES['720p'];\n }\n\n return maxFs;\n}\n\ntype Options = {\n resolution?: RemoteVideoResolution; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides\n};\n\nexport type RemoteMediaId = string;\n\nlet remoteMediaCounter = 0;\n\n/**\n * Class representing a remote audio/video stream.\n *\n * Internally it is associated with a specific receive slot\n * and a media request for it.\n */\nexport class RemoteMedia extends EventsScope {\n private receiveSlot?: ReceiveSlot;\n\n private readonly mediaRequestManager: MediaRequestManager;\n\n private readonly options: Options;\n\n private mediaRequestId?: MediaRequestId;\n\n public readonly id: RemoteMediaId;\n\n /**\n * Constructs RemoteMedia instance\n *\n * @param receiveSlot\n * @param mediaRequestManager\n * @param options\n */\n constructor(\n receiveSlot: ReceiveSlot,\n mediaRequestManager: MediaRequestManager,\n options?: Options\n ) {\n super();\n remoteMediaCounter += 1;\n this.receiveSlot = receiveSlot;\n this.mediaRequestManager = mediaRequestManager;\n this.options = options || {};\n this.setupEventListeners();\n this.id = `RM${remoteMediaCounter}-${this.receiveSlot.id}`;\n }\n\n /**\n * Supply the width and height of the video element\n * to restrict the requested resolution to this size\n * @param width width of the video element\n * @param height height of the video element\n * @note width/height of 0 will be ignored\n */\n public setSizeHint(width, height) {\n // only base on height for now\n let fs: number;\n\n if (width === 0 || height === 0) {\n return;\n }\n\n // we switch to the next resolution level when the height is 10% more than the current resolution height\n // except for 1080p - we switch to it immediately when the height is more than 720p\n const threshold = 1.1;\n const getThresholdHeight = (h: number) => Math.round(h * threshold);\n\n if (height < getThresholdHeight(90)) {\n fs = MAX_FS_VALUES['90p'];\n } else if (height < getThresholdHeight(180)) {\n fs = MAX_FS_VALUES['180p'];\n } else if (height < getThresholdHeight(360)) {\n fs = MAX_FS_VALUES['360p'];\n } else if (height <= 720) {\n fs = MAX_FS_VALUES['720p'];\n } else {\n fs = MAX_FS_VALUES['1080p'];\n }\n\n this.receiveSlot?.setMaxFs(fs);\n }\n\n /**\n * Invalidates the remote media by clearing the reference to a receive slot and\n * cancelling the media request.\n * After this call the remote media is unusable.\n *\n * @param {boolean} commit - whether to commit the cancellation of the media request\n * @internal\n */\n public stop(commit = true) {\n this.cancelMediaRequest(commit);\n this.receiveSlot?.removeAllListeners();\n this.receiveSlot = undefined;\n this.emit(\n {\n file: 'multistream/remoteMedia',\n function: 'stop',\n },\n RemoteMediaEvents.Stopped,\n {}\n );\n }\n\n /**\n * Sends a new media request. This method can only be used for receiver-selected policy,\n * because only in that policy we have a 1-1 relationship between RemoteMedia and MediaRequest\n * and the request id is then stored in this RemoteMedia instance.\n * For active-speaker policy, the same request is shared among many RemoteMedia instances,\n * so it's managed through RemoteMediaGroup\n *\n * @internal\n */\n public sendMediaRequest(csi: CSI, commit: boolean) {\n if (this.mediaRequestId) {\n this.cancelMediaRequest(false);\n }\n\n if (!this.receiveSlot) {\n throw new Error('sendMediaRequest() called on an invalidated RemoteMedia instance');\n }\n\n this.mediaRequestId = this.mediaRequestManager.addRequest(\n {\n policyInfo: {\n policy: 'receiver-selected',\n csi,\n },\n receiveSlots: [this.receiveSlot],\n codecInfo: this.options.resolution && {\n codec: 'h264',\n maxFs: getMaxFs(this.options.resolution),\n },\n },\n commit\n );\n }\n\n /**\n * @internal\n */\n public cancelMediaRequest(commit: boolean) {\n if (this.mediaRequestId) {\n this.mediaRequestManager.cancelRequest(this.mediaRequestId, commit);\n this.mediaRequestId = undefined;\n }\n }\n\n /**\n * registers event listeners on the receive slot and forwards all the events\n */\n private setupEventListeners() {\n if (this.receiveSlot) {\n const scope = {\n file: 'multistream/remoteMedia',\n function: 'setupEventListeners',\n };\n\n this.receiveSlot.on(ReceiveSlotEvents.SourceUpdate, (data) => {\n this.emit(scope, RemoteMediaEvents.SourceUpdate, data);\n });\n }\n }\n\n /**\n * Getter for mediaType\n */\n public get mediaType(): MediaType {\n return this.receiveSlot?.mediaType;\n }\n\n /**\n * Getter for memberId\n */\n public get memberId() {\n return this.receiveSlot?.memberId;\n }\n\n /**\n * Getter for csi\n */\n public get csi() {\n return this.receiveSlot?.csi;\n }\n\n /**\n * Getter for source state\n */\n public get sourceState(): StreamState {\n return this.receiveSlot?.sourceState;\n }\n\n /**\n * Getter for remote media stream\n */\n public get stream() {\n return this.receiveSlot?.stream;\n }\n\n /**\n * @internal\n * @returns {ReceiveSlot}\n */\n public getUnderlyingReceiveSlot() {\n return this.receiveSlot;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAEA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAF,sBAAA,CAAAC,OAAA;AAGA,IAAAE,YAAA,GAAAF,OAAA;AAAkE,SAAAG,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAC,OAAA,EAAAN,OAAA,GAAAO,MAAA,MAAAN,yBAAA,QAAAO,SAAA,OAAAH,gBAAA,CAAAC,OAAA,QAAAG,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAN,KAAA,EAAAO,SAAA,EAAAH,SAAA,YAAAD,MAAA,GAAAH,KAAA,CAAAQ,KAAA,OAAAD,SAAA,gBAAAE,2BAAA,CAAAP,OAAA,QAAAC,MAAA;AAAA,SAAAL,0BAAA,eAAAY,OAAA,qBAAAJ,kBAAA,oBAAAA,kBAAA,CAAAK,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAV,kBAAA,CAAAO,OAAA,8CAAAI,CAAA,sBANlE;AAQO,IAAMC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAG;EAC/BE,YAAY,EAAEC,8BAAiB,CAACD,YAAY;EAC5CE,OAAO,EAAE;AACX,CAAC;AAQW;;AAEZ,IAAMC,aAAa,GAAG;EACpB,KAAK,EAAE,EAAE;EACT,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,GAAG;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE;AACX,CAAC;;AAED;AACA;AACA;AACA;AACA;AACO,SAASC,QAAQA,CAACC,QAA+B,EAAU;EAChE,IAAIC,KAAK;EAET,QAAQD,QAAQ;IACd,KAAK,WAAW;MACdC,KAAK,GAAGH,aAAa,CAAC,KAAK,CAAC;MAC5B;IACF,KAAK,YAAY;MACfG,KAAK,GAAGH,aAAa,CAAC,MAAM,CAAC;MAC7B;IACF,KAAK,OAAO;MACVG,KAAK,GAAGH,aAAa,CAAC,MAAM,CAAC;MAC7B;IACF,KAAK,QAAQ;MACXG,KAAK,GAAGH,aAAa,CAAC,MAAM,CAAC;MAC7B;IACF,KAAK,OAAO;MACVG,KAAK,GAAGH,aAAa,CAAC,OAAO,CAAC;MAC9B;IACF,KAAK,MAAM;MACTG,KAAK,GAAGH,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;MAChC;IACF;MACEI,oBAAW,CAACC,MAAM,CAACC,IAAI,mDAAAC,MAAA,CAC6BL,QAAQ,+BAC5D,CAAC;MACDC,KAAK,GAAGH,aAAa,CAAC,MAAM,CAAC;EACjC;EAEA,OAAOG,KAAK;AACd;AAQA,IAAIK,kBAAkB,GAAG,CAAC;;AAE1B;AACA;AACA;AACA;AACA;AACA;AALA,IAMaC,WAAW,GAAAb,OAAA,CAAAa,WAAA,0BAAAC,YAAA;EAAA,IAAAC,UAAA,CAAAhC,OAAA,EAAA8B,WAAA,EAAAC,YAAA;EAAA,IAAAE,MAAA,GAAAxC,YAAA,CAAAqC,WAAA;EAWtB;AACF;AACA;AACA;AACA;AACA;AACA;EACE,SAAAA,YACEI,WAAwB,EACxBC,mBAAwC,EACxCC,OAAiB,EACjB;IAAA,IAAAC,KAAA;IAAA,IAAAC,gBAAA,CAAAtC,OAAA,QAAA8B,WAAA;IACAO,KAAA,GAAAJ,MAAA,CAAAnB,IAAA;IAAQ,IAAAyB,gBAAA,CAAAvC,OAAA,MAAAwC,uBAAA,CAAAxC,OAAA,EAAAqC,KAAA;IAAA,IAAAE,gBAAA,CAAAvC,OAAA,MAAAwC,uBAAA,CAAAxC,OAAA,EAAAqC,KAAA;IAAA,IAAAE,gBAAA,CAAAvC,OAAA,MAAAwC,uBAAA,CAAAxC,OAAA,EAAAqC,KAAA;IAAA,IAAAE,gBAAA,CAAAvC,OAAA,MAAAwC,uBAAA,CAAAxC,OAAA,EAAAqC,KAAA;IAAA,IAAAE,gBAAA,CAAAvC,OAAA,MAAAwC,uBAAA,CAAAxC,OAAA,EAAAqC,KAAA;IACRR,kBAAkB,IAAI,CAAC;IACvBQ,KAAA,CAAKH,WAAW,GAAGA,WAAW;IAC9BG,KAAA,CAAKF,mBAAmB,GAAGA,mBAAmB;IAC9CE,KAAA,CAAKD,OAAO,GAAGA,OAAO,IAAI,CAAC,CAAC;IAC5BC,KAAA,CAAKI,mBAAmB,CAAC,CAAC;IAC1BJ,KAAA,CAAKK,EAAE,QAAAd,MAAA,CAAQC,kBAAkB,OAAAD,MAAA,CAAIS,KAAA,CAAKH,WAAW,CAACQ,EAAE,CAAE;IAAC,OAAAL,KAAA;EAC7D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE,IAAAM,aAAA,CAAA3C,OAAA,EAAA8B,WAAA;IAAAc,GAAA;IAAAC,KAAA,EAOA,SAAAC,YAAmBC,KAAK,EAAEC,MAAM,EAAE;MAAA,IAAAC,iBAAA;MAChC;MACA,IAAIC,EAAU;MAEd,IAAIH,KAAK,KAAK,CAAC,IAAIC,MAAM,KAAK,CAAC,EAAE;QAC/B;MACF;;MAEA;MACA;MACA,IAAMG,SAAS,GAAG,GAAG;MACrB,IAAMC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIC,CAAS;QAAA,OAAKC,IAAI,CAACC,KAAK,CAACF,CAAC,GAAGF,SAAS,CAAC;MAAA;MAEnE,IAAIH,MAAM,GAAGI,kBAAkB,CAAC,EAAE,CAAC,EAAE;QACnCF,EAAE,GAAG7B,aAAa,CAAC,KAAK,CAAC;MAC3B,CAAC,MAAM,IAAI2B,MAAM,GAAGI,kBAAkB,CAAC,GAAG,CAAC,EAAE;QAC3CF,EAAE,GAAG7B,aAAa,CAAC,MAAM,CAAC;MAC5B,CAAC,MAAM,IAAI2B,MAAM,GAAGI,kBAAkB,CAAC,GAAG,CAAC,EAAE;QAC3CF,EAAE,GAAG7B,aAAa,CAAC,MAAM,CAAC;MAC5B,CAAC,MAAM,IAAI2B,MAAM,IAAI,GAAG,EAAE;QACxBE,EAAE,GAAG7B,aAAa,CAAC,MAAM,CAAC;MAC5B,CAAC,MAAM;QACL6B,EAAE,GAAG7B,aAAa,CAAC,OAAO,CAAC;MAC7B;MAEA,CAAA4B,iBAAA,OAAI,CAACf,WAAW,cAAAe,iBAAA,uBAAhBA,iBAAA,CAAkBO,QAAQ,CAACN,EAAE,CAAC;IAChC;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAN,GAAA;IAAAC,KAAA,EAQA,SAAAY,KAAA,EAA2B;MAAA,IAAAC,kBAAA;MAAA,IAAfC,MAAM,GAAAtD,SAAA,CAAAuD,MAAA,QAAAvD,SAAA,QAAAwD,SAAA,GAAAxD,SAAA,MAAG,IAAI;MACvB,IAAI,CAACyD,kBAAkB,CAACH,MAAM,CAAC;MAC/B,CAAAD,kBAAA,OAAI,CAACxB,WAAW,cAAAwB,kBAAA,uBAAhBA,kBAAA,CAAkBK,kBAAkB,CAAC,CAAC;MACtC,IAAI,CAAC7B,WAAW,GAAG2B,SAAS;MAC5B,IAAI,CAACG,IAAI,CACP;QACEC,IAAI,EAAE,yBAAyB;QAC/BC,QAAQ,EAAE;MACZ,CAAC,EACDlD,iBAAiB,CAACI,OAAO,EACzB,CAAC,CACH,CAAC;IACH;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAAwB,GAAA;IAAAC,KAAA,EASA,SAAAsB,iBAAwBC,GAAQ,EAAET,MAAe,EAAE;MACjD,IAAI,IAAI,CAACU,cAAc,EAAE;QACvB,IAAI,CAACP,kBAAkB,CAAC,KAAK,CAAC;MAChC;MAEA,IAAI,CAAC,IAAI,CAAC5B,WAAW,EAAE;QACrB,MAAM,IAAIoC,KAAK,CAAC,kEAAkE,CAAC;MACrF;MAEA,IAAI,CAACD,cAAc,GAAG,IAAI,CAAClC,mBAAmB,CAACoC,UAAU,CACvD;QACEC,UAAU,EAAE;UACVC,MAAM,EAAE,mBAAmB;UAC3BL,GAAG,EAAHA;QACF,CAAC;QACDM,YAAY,EAAE,CAAC,IAAI,CAACxC,WAAW,CAAC;QAChCyC,SAAS,EAAE,IAAI,CAACvC,OAAO,CAACwC,UAAU,IAAI;UACpCC,KAAK,EAAE,MAAM;UACbrD,KAAK,EAAEF,QAAQ,CAAC,IAAI,CAACc,OAAO,CAACwC,UAAU;QACzC;MACF,CAAC,EACDjB,MACF,CAAC;IACH;;IAEA;AACF;AACA;EAFE;IAAAf,GAAA;IAAAC,KAAA,EAGA,SAAAiB,mBAA0BH,MAAe,EAAE;MACzC,IAAI,IAAI,CAACU,cAAc,EAAE;QACvB,IAAI,CAAClC,mBAAmB,CAAC2C,aAAa,CAAC,IAAI,CAACT,cAAc,EAAEV,MAAM,CAAC;QACnE,IAAI,CAACU,cAAc,GAAGR,SAAS;MACjC;IACF;;IAEA;AACF;AACA;EAFE;IAAAjB,GAAA;IAAAC,KAAA,EAGA,SAAAJ,oBAAA,EAA8B;MAAA,IAAAsC,MAAA;MAC5B,IAAI,IAAI,CAAC7C,WAAW,EAAE;QACpB,IAAM8C,KAAK,GAAG;UACZf,IAAI,EAAE,yBAAyB;UAC/BC,QAAQ,EAAE;QACZ,CAAC;QAED,IAAI,CAAChC,WAAW,CAAC+C,EAAE,CAAC9D,8BAAiB,CAACD,YAAY,EAAE,UAACgE,IAAI,EAAK;UAC5DH,MAAI,CAACf,IAAI,CAACgB,KAAK,EAAEhE,iBAAiB,CAACE,YAAY,EAAEgE,IAAI,CAAC;QACxD,CAAC,CAAC;MACJ;IACF;;IAEA;AACF;AACA;EAFE;IAAAtC,GAAA;IAAAuC,GAAA,EAGA,SAAAA,IAAA,EAAkC;MAAA,IAAAC,kBAAA;MAChC,QAAAA,kBAAA,GAAO,IAAI,CAAClD,WAAW,cAAAkD,kBAAA,uBAAhBA,kBAAA,CAAkBC,SAAS;IACpC;;IAEA;AACF;AACA;EAFE;IAAAzC,GAAA;IAAAuC,GAAA,EAGA,SAAAA,IAAA,EAAsB;MAAA,IAAAG,kBAAA;MACpB,QAAAA,kBAAA,GAAO,IAAI,CAACpD,WAAW,cAAAoD,kBAAA,uBAAhBA,kBAAA,CAAkBC,QAAQ;IACnC;;IAEA;AACF;AACA;EAFE;IAAA3C,GAAA;IAAAuC,GAAA,EAGA,SAAAA,IAAA,EAAiB;MAAA,IAAAK,kBAAA;MACf,QAAAA,kBAAA,GAAO,IAAI,CAACtD,WAAW,cAAAsD,kBAAA,uBAAhBA,kBAAA,CAAkBpB,GAAG;IAC9B;;IAEA;AACF;AACA;EAFE;IAAAxB,GAAA;IAAAuC,GAAA,EAGA,SAAAA,IAAA,EAAsC;MAAA,IAAAM,kBAAA;MACpC,QAAAA,kBAAA,GAAO,IAAI,CAACvD,WAAW,cAAAuD,kBAAA,uBAAhBA,kBAAA,CAAkBC,WAAW;IACtC;;IAEA;AACF;AACA;EAFE;IAAA9C,GAAA;IAAAuC,GAAA,EAGA,SAAAA,IAAA,EAAoB;MAAA,IAAAQ,kBAAA;MAClB,QAAAA,kBAAA,GAAO,IAAI,CAACzD,WAAW,cAAAyD,kBAAA,uBAAhBA,kBAAA,CAAkBC,MAAM;IACjC;;IAEA;AACF;AACA;AACA;EAHE;IAAAhD,GAAA;IAAAC,KAAA,EAIA,SAAAgD,yBAAA,EAAkC;MAChC,OAAO,IAAI,CAAC3D,WAAW;IACzB;EAAC;EAAA,OAAAJ,WAAA;AAAA,EA9L8BgE,oBAAW"}
|
|
@@ -347,7 +347,7 @@ var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_
|
|
|
347
347
|
key: "start",
|
|
348
348
|
value: (function () {
|
|
349
349
|
var _start = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
350
|
-
var offer;
|
|
350
|
+
var offer, gatherIceCandidatePromise;
|
|
351
351
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
352
352
|
while (1) switch (_context.prev = _context.next) {
|
|
353
353
|
case 0:
|
|
@@ -378,25 +378,26 @@ var ClusterReachability = exports.ClusterReachability = /*#__PURE__*/function (_
|
|
|
378
378
|
offer = _context.sent;
|
|
379
379
|
this.startTimestamp = performance.now();
|
|
380
380
|
|
|
381
|
-
//
|
|
381
|
+
// Set up the state change listeners before triggering the ICE gathering
|
|
382
|
+
gatherIceCandidatePromise = this.gatherIceCandidates(); // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer
|
|
382
383
|
// we just need to make this call to trigger the ICE gathering process
|
|
383
384
|
this.pc.setLocalDescription(offer);
|
|
384
|
-
_context.next =
|
|
385
|
-
return
|
|
386
|
-
case
|
|
387
|
-
_context.next =
|
|
385
|
+
_context.next = 15;
|
|
386
|
+
return gatherIceCandidatePromise;
|
|
387
|
+
case 15:
|
|
388
|
+
_context.next = 20;
|
|
388
389
|
break;
|
|
389
|
-
case
|
|
390
|
-
_context.prev =
|
|
390
|
+
case 17:
|
|
391
|
+
_context.prev = 17;
|
|
391
392
|
_context.t0 = _context["catch"](6);
|
|
392
393
|
_loggerProxy.default.logger.warn("Reachability:ClusterReachability#start --> Error: ", _context.t0);
|
|
393
|
-
case 19:
|
|
394
|
-
return _context.abrupt("return", this.result);
|
|
395
394
|
case 20:
|
|
395
|
+
return _context.abrupt("return", this.result);
|
|
396
|
+
case 21:
|
|
396
397
|
case "end":
|
|
397
398
|
return _context.stop();
|
|
398
399
|
}
|
|
399
|
-
}, _callee, this, [[6,
|
|
400
|
+
}, _callee, this, [[6, 17]]);
|
|
400
401
|
}));
|
|
401
402
|
function start() {
|
|
402
403
|
return _start.apply(this, arguments);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_common","require","_loggerProxy","_interopRequireDefault","_util","_eventsScope","_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","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","Events","exports","resultReady","clientMediaIpsUpdated","ClusterReachability","_EventsScope","_inherits2","_super","name","clusterInfo","_this","_classCallCheck2","_assertThisInitialized2","isVideoMesh","numUdpUrls","udp","numTcpUrls","tcp","numXTlsUrls","xtls","pc","createPeerConnection","defer","Defer","_createClass2","key","value","getElapsedTime","Math","round","performance","now","startTimestamp","buildPeerConnectionConfig","cluster","udpIceServers","map","url","username","credential","urls","tcpIceServers","urlString","convertStunUrlToTurn","turnTlsIceServers","convertStunUrlToTurnTls","iceServers","concat","_toConsumableArray2","iceCandidatePoolSize","iceTransportPolicy","config","peerConnection","RTCPeerConnection","peerConnectionError","LoggerProxy","logger","warn","undefined","getResult","closePeerConnection","onicecandidate","onicegatheringstatechange","close","finishReachabilityCheck","resolve","abort","CLOSED","CONNECTION_STATE","connectionState","addPublicIP","protocol","publicIP","ipAdded","clientMediaIPs","includes","emit","file","function","registerIceGatheringStateChangeListener","_this2","COMPLETE","ICE_GATHERING_STATE","iceConnectionState","haveWeGotAllResults","_this3","every","saveResult","latency","publicIp","latencyInMilliseconds","log","registerIceCandidateListener","_this4","TURN_TLS_PORT","CANDIDATE_TYPES","SERVER_REFLEXIVE","RELAY","candidate","type","address","port","_start","_asyncToGenerator2","_regenerator","mark","_callee","offer","wrap","_callee$","_context","prev","next","abrupt","createOffer","offerToReceiveAudio","sent","setLocalDescription","gatherIceCandidates","t0","stop","start","promise","EventsScope"],"sources":["clusterReachability.ts"],"sourcesContent":["import {Defer} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ClusterNode} from './request';\nimport {convertStunUrlToTurn, convertStunUrlToTurnTls} from './util';\nimport EventsScope from '../common/events/events-scope';\n\nimport {CONNECTION_STATE, Enum, ICE_GATHERING_STATE} from '../constants';\nimport {ClusterReachabilityResult} from './reachability.types';\n\n// data for the Events.resultReady event\nexport type ResultEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n result: 'reachable' | 'unreachable' | 'untested';\n latencyInMilliseconds: number; // amount of time it took to get the ICE candidate\n clientMediaIPs?: string[];\n};\n\n// data for the Events.clientMediaIpsUpdated event\nexport type ClientMediaIpsUpdatedEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n clientMediaIPs: string[];\n};\n\nexport const Events = {\n resultReady: 'resultReady', // emitted when a cluster is reached successfully using specific protocol\n clientMediaIpsUpdated: 'clientMediaIpsUpdated', // emitted when more public IPs are found after resultReady was already sent for a given protocol\n} as const;\n\nexport type Events = Enum<typeof Events>;\n\n/**\n * A class that handles reachability checks for a single cluster.\n * It emits events from Events enum\n */\nexport class ClusterReachability extends EventsScope {\n private numUdpUrls: number;\n private numTcpUrls: number;\n private numXTlsUrls: number;\n private result: ClusterReachabilityResult;\n private pc?: RTCPeerConnection;\n private defer: Defer; // this defer is resolved once reachability checks for this cluster are completed\n private startTimestamp: number;\n public readonly isVideoMesh: boolean;\n public readonly name;\n\n /**\n * Constructor for ClusterReachability\n * @param {string} name cluster name\n * @param {ClusterNode} clusterInfo information about the media cluster\n */\n constructor(name: string, clusterInfo: ClusterNode) {\n super();\n this.name = name;\n this.isVideoMesh = clusterInfo.isVideoMesh;\n this.numUdpUrls = clusterInfo.udp.length;\n this.numTcpUrls = clusterInfo.tcp.length;\n this.numXTlsUrls = clusterInfo.xtls.length;\n\n this.pc = this.createPeerConnection(clusterInfo);\n\n this.defer = new Defer();\n this.result = {\n udp: {\n result: 'untested',\n },\n tcp: {\n result: 'untested',\n },\n xtls: {\n result: 'untested',\n },\n };\n }\n\n /**\n * Gets total elapsed time, can be called only after start() is called\n * @returns {Number} Milliseconds\n */\n private getElapsedTime() {\n return Math.round(performance.now() - this.startTimestamp);\n }\n\n /**\n * Generate peerConnection config settings\n * @param {ClusterNode} cluster\n * @returns {RTCConfiguration} peerConnectionConfig\n */\n private buildPeerConnectionConfig(cluster: ClusterNode): RTCConfiguration {\n const udpIceServers = cluster.udp.map((url) => ({\n username: '',\n credential: '',\n urls: [url],\n }));\n\n // STUN servers are contacted only using UDP, so in order to test TCP reachability\n // we pretend that Linus is a TURN server, because we can explicitly say \"transport=tcp\" in TURN urls.\n // We then check for relay candidates to know if TURN-TCP worked (see registerIceCandidateListener()).\n const tcpIceServers = cluster.tcp.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurn(urlString, 'tcp')],\n };\n });\n\n const turnTlsIceServers = cluster.xtls.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurnTls(urlString)],\n };\n });\n\n return {\n iceServers: [...udpIceServers, ...tcpIceServers, ...turnTlsIceServers],\n iceCandidatePoolSize: 0,\n iceTransportPolicy: 'all',\n };\n }\n\n /**\n * Creates an RTCPeerConnection\n * @param {ClusterNode} clusterInfo information about the media cluster\n * @returns {RTCPeerConnection} peerConnection\n */\n private createPeerConnection(clusterInfo: ClusterNode) {\n try {\n const config = this.buildPeerConnectionConfig(clusterInfo);\n\n const peerConnection = new RTCPeerConnection(config);\n\n return peerConnection;\n } catch (peerConnectionError) {\n LoggerProxy.logger.warn(\n `Reachability:index#createPeerConnection --> Error creating peerConnection:`,\n peerConnectionError\n );\n\n return undefined;\n }\n }\n\n /**\n * @returns {ClusterReachabilityResult} reachability result for this cluster\n */\n getResult() {\n return this.result;\n }\n\n /**\n * Closes the peerConnection\n *\n * @returns {void}\n */\n private closePeerConnection() {\n if (this.pc) {\n this.pc.onicecandidate = null;\n this.pc.onicegatheringstatechange = null;\n this.pc.close();\n }\n }\n\n /**\n * Resolves the defer, indicating that reachability checks for this cluster are completed\n *\n * @returns {void}\n */\n private finishReachabilityCheck() {\n this.defer.resolve();\n }\n\n /**\n * Aborts the cluster reachability checks by closing the peer connection\n *\n * @returns {void}\n */\n public abort() {\n const {CLOSED} = CONNECTION_STATE;\n\n if (this.pc.connectionState !== CLOSED) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n\n /**\n * Adds public IP (client media IPs)\n * @param {string} protocol\n * @param {string} publicIP\n * @returns {void}\n */\n private addPublicIP(protocol: 'udp' | 'tcp' | 'xtls', publicIP?: string | null) {\n const result = this.result[protocol];\n\n if (publicIP) {\n let ipAdded = false;\n\n if (result.clientMediaIPs) {\n if (!result.clientMediaIPs.includes(publicIP)) {\n result.clientMediaIPs.push(publicIP);\n ipAdded = true;\n }\n } else {\n result.clientMediaIPs = [publicIP];\n ipAdded = true;\n }\n\n if (ipAdded)\n this.emit(\n {\n file: 'clusterReachability',\n function: 'addPublicIP',\n },\n Events.clientMediaIpsUpdated,\n {\n protocol,\n clientMediaIPs: result.clientMediaIPs,\n }\n );\n }\n }\n\n /**\n * Registers a listener for the iceGatheringStateChange event\n *\n * @returns {void}\n */\n private registerIceGatheringStateChangeListener() {\n this.pc.onicegatheringstatechange = () => {\n const {COMPLETE} = ICE_GATHERING_STATE;\n\n if (this.pc.iceConnectionState === COMPLETE) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n };\n }\n\n /**\n * Checks if we have the results for all the protocols (UDP and TCP)\n *\n * @returns {boolean} true if we have all results, false otherwise\n */\n private haveWeGotAllResults(): boolean {\n return ['udp', 'tcp', 'xtls'].every(\n (protocol) =>\n this.result[protocol].result === 'reachable' || this.result[protocol].result === 'untested'\n );\n }\n\n /**\n * Saves the latency in the result for the given protocol and marks it as reachable,\n * emits the \"resultReady\" event if this is the first result for that protocol,\n * emits the \"clientMediaIpsUpdated\" event if we already had a result and only found\n * a new client IP\n *\n * @param {string} protocol\n * @param {number} latency\n * @param {string|null} [publicIp]\n * @returns {void}\n */\n private saveResult(protocol: 'udp' | 'tcp' | 'xtls', latency: number, publicIp?: string | null) {\n const result = this.result[protocol];\n\n if (result.latencyInMilliseconds === undefined) {\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#saveResult --> Successfully reached ${this.name} over ${protocol}: ${latency}ms`\n );\n result.latencyInMilliseconds = latency;\n result.result = 'reachable';\n if (publicIp) {\n result.clientMediaIPs = [publicIp];\n }\n\n this.emit(\n {\n file: 'clusterReachability',\n function: 'saveResult',\n },\n Events.resultReady,\n {\n protocol,\n ...result,\n }\n );\n } else {\n this.addPublicIP(protocol, publicIp);\n }\n }\n\n /**\n * Registers a listener for the icecandidate event\n *\n * @returns {void}\n */\n private registerIceCandidateListener() {\n this.pc.onicecandidate = (e) => {\n const TURN_TLS_PORT = 443;\n const CANDIDATE_TYPES = {\n SERVER_REFLEXIVE: 'srflx',\n RELAY: 'relay',\n };\n\n const latencyInMilliseconds = this.getElapsedTime();\n\n if (e.candidate) {\n if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {\n this.saveResult('udp', latencyInMilliseconds, e.candidate.address);\n }\n\n if (e.candidate.type === CANDIDATE_TYPES.RELAY) {\n const protocol = e.candidate.port === TURN_TLS_PORT ? 'xtls' : 'tcp';\n this.saveResult(protocol, latencyInMilliseconds);\n // we don't add public IP for TCP, because in the case of relay candidates\n // e.candidate.address is the TURN server address, not the client's public IP\n }\n\n if (this.haveWeGotAllResults()) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n };\n }\n\n /**\n * Starts the process of doing UDP and TCP reachability checks on the media cluster.\n * XTLS reachability checking is not supported.\n *\n * @returns {Promise}\n */\n async start(): Promise<ClusterReachabilityResult> {\n if (!this.pc) {\n LoggerProxy.logger.warn(\n `Reachability:ClusterReachability#start --> Error: peerConnection is undefined`\n );\n\n return this.result;\n }\n\n // Initialize this.result as saying that nothing is reachable.\n // It will get updated as we go along and successfully gather ICE candidates.\n this.result.udp = {\n result: this.numUdpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.tcp = {\n result: this.numTcpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.xtls = {\n result: this.numXTlsUrls > 0 ? 'unreachable' : 'untested',\n };\n\n try {\n const offer = await this.pc.createOffer({offerToReceiveAudio: true});\n\n this.startTimestamp = performance.now();\n\n // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer\n // we just need to make this call to trigger the ICE gathering process\n this.pc.setLocalDescription(offer);\n\n await this.gatherIceCandidates();\n } catch (error) {\n LoggerProxy.logger.warn(`Reachability:ClusterReachability#start --> Error: `, error);\n }\n\n return this.result;\n }\n\n /**\n * Starts the process of gathering ICE candidates\n *\n * @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached\n */\n private gatherIceCandidates() {\n this.registerIceGatheringStateChangeListener();\n this.registerIceCandidateListener();\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_common","require","_loggerProxy","_interopRequireDefault","_util","_eventsScope","_constants","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","Events","exports","resultReady","clientMediaIpsUpdated","ClusterReachability","_EventsScope","_inherits2","_super","name","clusterInfo","_this","_classCallCheck2","_assertThisInitialized2","isVideoMesh","numUdpUrls","udp","numTcpUrls","tcp","numXTlsUrls","xtls","pc","createPeerConnection","defer","Defer","_createClass2","key","value","getElapsedTime","Math","round","performance","now","startTimestamp","buildPeerConnectionConfig","cluster","udpIceServers","map","url","username","credential","urls","tcpIceServers","urlString","convertStunUrlToTurn","turnTlsIceServers","convertStunUrlToTurnTls","iceServers","concat","_toConsumableArray2","iceCandidatePoolSize","iceTransportPolicy","config","peerConnection","RTCPeerConnection","peerConnectionError","LoggerProxy","logger","warn","undefined","getResult","closePeerConnection","onicecandidate","onicegatheringstatechange","close","finishReachabilityCheck","resolve","abort","CLOSED","CONNECTION_STATE","connectionState","addPublicIP","protocol","publicIP","ipAdded","clientMediaIPs","includes","emit","file","function","registerIceGatheringStateChangeListener","_this2","COMPLETE","ICE_GATHERING_STATE","iceConnectionState","haveWeGotAllResults","_this3","every","saveResult","latency","publicIp","latencyInMilliseconds","log","registerIceCandidateListener","_this4","TURN_TLS_PORT","CANDIDATE_TYPES","SERVER_REFLEXIVE","RELAY","candidate","type","address","port","_start","_asyncToGenerator2","_regenerator","mark","_callee","offer","gatherIceCandidatePromise","wrap","_callee$","_context","prev","next","abrupt","createOffer","offerToReceiveAudio","sent","gatherIceCandidates","setLocalDescription","t0","stop","start","promise","EventsScope"],"sources":["clusterReachability.ts"],"sourcesContent":["import {Defer} from '@webex/common';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ClusterNode} from './request';\nimport {convertStunUrlToTurn, convertStunUrlToTurnTls} from './util';\nimport EventsScope from '../common/events/events-scope';\n\nimport {CONNECTION_STATE, Enum, ICE_GATHERING_STATE} from '../constants';\nimport {ClusterReachabilityResult} from './reachability.types';\n\n// data for the Events.resultReady event\nexport type ResultEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n result: 'reachable' | 'unreachable' | 'untested';\n latencyInMilliseconds: number; // amount of time it took to get the ICE candidate\n clientMediaIPs?: string[];\n};\n\n// data for the Events.clientMediaIpsUpdated event\nexport type ClientMediaIpsUpdatedEventData = {\n protocol: 'udp' | 'tcp' | 'xtls';\n clientMediaIPs: string[];\n};\n\nexport const Events = {\n resultReady: 'resultReady', // emitted when a cluster is reached successfully using specific protocol\n clientMediaIpsUpdated: 'clientMediaIpsUpdated', // emitted when more public IPs are found after resultReady was already sent for a given protocol\n} as const;\n\nexport type Events = Enum<typeof Events>;\n\n/**\n * A class that handles reachability checks for a single cluster.\n * It emits events from Events enum\n */\nexport class ClusterReachability extends EventsScope {\n private numUdpUrls: number;\n private numTcpUrls: number;\n private numXTlsUrls: number;\n private result: ClusterReachabilityResult;\n private pc?: RTCPeerConnection;\n private defer: Defer; // this defer is resolved once reachability checks for this cluster are completed\n private startTimestamp: number;\n public readonly isVideoMesh: boolean;\n public readonly name;\n\n /**\n * Constructor for ClusterReachability\n * @param {string} name cluster name\n * @param {ClusterNode} clusterInfo information about the media cluster\n */\n constructor(name: string, clusterInfo: ClusterNode) {\n super();\n this.name = name;\n this.isVideoMesh = clusterInfo.isVideoMesh;\n this.numUdpUrls = clusterInfo.udp.length;\n this.numTcpUrls = clusterInfo.tcp.length;\n this.numXTlsUrls = clusterInfo.xtls.length;\n\n this.pc = this.createPeerConnection(clusterInfo);\n\n this.defer = new Defer();\n this.result = {\n udp: {\n result: 'untested',\n },\n tcp: {\n result: 'untested',\n },\n xtls: {\n result: 'untested',\n },\n };\n }\n\n /**\n * Gets total elapsed time, can be called only after start() is called\n * @returns {Number} Milliseconds\n */\n private getElapsedTime() {\n return Math.round(performance.now() - this.startTimestamp);\n }\n\n /**\n * Generate peerConnection config settings\n * @param {ClusterNode} cluster\n * @returns {RTCConfiguration} peerConnectionConfig\n */\n private buildPeerConnectionConfig(cluster: ClusterNode): RTCConfiguration {\n const udpIceServers = cluster.udp.map((url) => ({\n username: '',\n credential: '',\n urls: [url],\n }));\n\n // STUN servers are contacted only using UDP, so in order to test TCP reachability\n // we pretend that Linus is a TURN server, because we can explicitly say \"transport=tcp\" in TURN urls.\n // We then check for relay candidates to know if TURN-TCP worked (see registerIceCandidateListener()).\n const tcpIceServers = cluster.tcp.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurn(urlString, 'tcp')],\n };\n });\n\n const turnTlsIceServers = cluster.xtls.map((urlString: string) => {\n return {\n username: 'webexturnreachuser',\n credential: 'webexturnreachpwd',\n urls: [convertStunUrlToTurnTls(urlString)],\n };\n });\n\n return {\n iceServers: [...udpIceServers, ...tcpIceServers, ...turnTlsIceServers],\n iceCandidatePoolSize: 0,\n iceTransportPolicy: 'all',\n };\n }\n\n /**\n * Creates an RTCPeerConnection\n * @param {ClusterNode} clusterInfo information about the media cluster\n * @returns {RTCPeerConnection} peerConnection\n */\n private createPeerConnection(clusterInfo: ClusterNode) {\n try {\n const config = this.buildPeerConnectionConfig(clusterInfo);\n\n const peerConnection = new RTCPeerConnection(config);\n\n return peerConnection;\n } catch (peerConnectionError) {\n LoggerProxy.logger.warn(\n `Reachability:index#createPeerConnection --> Error creating peerConnection:`,\n peerConnectionError\n );\n\n return undefined;\n }\n }\n\n /**\n * @returns {ClusterReachabilityResult} reachability result for this cluster\n */\n getResult() {\n return this.result;\n }\n\n /**\n * Closes the peerConnection\n *\n * @returns {void}\n */\n private closePeerConnection() {\n if (this.pc) {\n this.pc.onicecandidate = null;\n this.pc.onicegatheringstatechange = null;\n this.pc.close();\n }\n }\n\n /**\n * Resolves the defer, indicating that reachability checks for this cluster are completed\n *\n * @returns {void}\n */\n private finishReachabilityCheck() {\n this.defer.resolve();\n }\n\n /**\n * Aborts the cluster reachability checks by closing the peer connection\n *\n * @returns {void}\n */\n public abort() {\n const {CLOSED} = CONNECTION_STATE;\n\n if (this.pc.connectionState !== CLOSED) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n\n /**\n * Adds public IP (client media IPs)\n * @param {string} protocol\n * @param {string} publicIP\n * @returns {void}\n */\n private addPublicIP(protocol: 'udp' | 'tcp' | 'xtls', publicIP?: string | null) {\n const result = this.result[protocol];\n\n if (publicIP) {\n let ipAdded = false;\n\n if (result.clientMediaIPs) {\n if (!result.clientMediaIPs.includes(publicIP)) {\n result.clientMediaIPs.push(publicIP);\n ipAdded = true;\n }\n } else {\n result.clientMediaIPs = [publicIP];\n ipAdded = true;\n }\n\n if (ipAdded)\n this.emit(\n {\n file: 'clusterReachability',\n function: 'addPublicIP',\n },\n Events.clientMediaIpsUpdated,\n {\n protocol,\n clientMediaIPs: result.clientMediaIPs,\n }\n );\n }\n }\n\n /**\n * Registers a listener for the iceGatheringStateChange event\n *\n * @returns {void}\n */\n private registerIceGatheringStateChangeListener() {\n this.pc.onicegatheringstatechange = () => {\n const {COMPLETE} = ICE_GATHERING_STATE;\n\n if (this.pc.iceConnectionState === COMPLETE) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n };\n }\n\n /**\n * Checks if we have the results for all the protocols (UDP and TCP)\n *\n * @returns {boolean} true if we have all results, false otherwise\n */\n private haveWeGotAllResults(): boolean {\n return ['udp', 'tcp', 'xtls'].every(\n (protocol) =>\n this.result[protocol].result === 'reachable' || this.result[protocol].result === 'untested'\n );\n }\n\n /**\n * Saves the latency in the result for the given protocol and marks it as reachable,\n * emits the \"resultReady\" event if this is the first result for that protocol,\n * emits the \"clientMediaIpsUpdated\" event if we already had a result and only found\n * a new client IP\n *\n * @param {string} protocol\n * @param {number} latency\n * @param {string|null} [publicIp]\n * @returns {void}\n */\n private saveResult(protocol: 'udp' | 'tcp' | 'xtls', latency: number, publicIp?: string | null) {\n const result = this.result[protocol];\n\n if (result.latencyInMilliseconds === undefined) {\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#saveResult --> Successfully reached ${this.name} over ${protocol}: ${latency}ms`\n );\n result.latencyInMilliseconds = latency;\n result.result = 'reachable';\n if (publicIp) {\n result.clientMediaIPs = [publicIp];\n }\n\n this.emit(\n {\n file: 'clusterReachability',\n function: 'saveResult',\n },\n Events.resultReady,\n {\n protocol,\n ...result,\n }\n );\n } else {\n this.addPublicIP(protocol, publicIp);\n }\n }\n\n /**\n * Registers a listener for the icecandidate event\n *\n * @returns {void}\n */\n private registerIceCandidateListener() {\n this.pc.onicecandidate = (e) => {\n const TURN_TLS_PORT = 443;\n const CANDIDATE_TYPES = {\n SERVER_REFLEXIVE: 'srflx',\n RELAY: 'relay',\n };\n\n const latencyInMilliseconds = this.getElapsedTime();\n\n if (e.candidate) {\n if (e.candidate.type === CANDIDATE_TYPES.SERVER_REFLEXIVE) {\n this.saveResult('udp', latencyInMilliseconds, e.candidate.address);\n }\n\n if (e.candidate.type === CANDIDATE_TYPES.RELAY) {\n const protocol = e.candidate.port === TURN_TLS_PORT ? 'xtls' : 'tcp';\n this.saveResult(protocol, latencyInMilliseconds);\n // we don't add public IP for TCP, because in the case of relay candidates\n // e.candidate.address is the TURN server address, not the client's public IP\n }\n\n if (this.haveWeGotAllResults()) {\n this.closePeerConnection();\n this.finishReachabilityCheck();\n }\n }\n };\n }\n\n /**\n * Starts the process of doing UDP and TCP reachability checks on the media cluster.\n * XTLS reachability checking is not supported.\n *\n * @returns {Promise}\n */\n async start(): Promise<ClusterReachabilityResult> {\n if (!this.pc) {\n LoggerProxy.logger.warn(\n `Reachability:ClusterReachability#start --> Error: peerConnection is undefined`\n );\n\n return this.result;\n }\n\n // Initialize this.result as saying that nothing is reachable.\n // It will get updated as we go along and successfully gather ICE candidates.\n this.result.udp = {\n result: this.numUdpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.tcp = {\n result: this.numTcpUrls > 0 ? 'unreachable' : 'untested',\n };\n this.result.xtls = {\n result: this.numXTlsUrls > 0 ? 'unreachable' : 'untested',\n };\n\n try {\n const offer = await this.pc.createOffer({offerToReceiveAudio: true});\n\n this.startTimestamp = performance.now();\n\n // Set up the state change listeners before triggering the ICE gathering\n const gatherIceCandidatePromise = this.gatherIceCandidates();\n\n // not awaiting the next call on purpose, because we're not sending the offer anywhere and there won't be any answer\n // we just need to make this call to trigger the ICE gathering process\n this.pc.setLocalDescription(offer);\n\n await gatherIceCandidatePromise;\n } catch (error) {\n LoggerProxy.logger.warn(`Reachability:ClusterReachability#start --> Error: `, error);\n }\n\n return this.result;\n }\n\n /**\n * Starts the process of gathering ICE candidates\n *\n * @returns {Promise} promise that's resolved once reachability checks for this cluster are completed or timeout is reached\n */\n private gatherIceCandidates() {\n this.registerIceGatheringStateChangeListener();\n this.registerIceCandidateListener();\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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"}
|
|
@@ -4,13 +4,17 @@ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/defi
|
|
|
4
4
|
_Object$defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
8
|
-
var RecordingAction = /*#__PURE__*/function (RecordingAction) {
|
|
7
|
+
exports.RecordingType = exports.RecordingAction = void 0;
|
|
8
|
+
var RecordingAction = exports.RecordingAction = /*#__PURE__*/function (RecordingAction) {
|
|
9
9
|
RecordingAction["Start"] = "Start";
|
|
10
10
|
RecordingAction["Stop"] = "Stop";
|
|
11
11
|
RecordingAction["Pause"] = "Pause";
|
|
12
12
|
RecordingAction["Resume"] = "Resume";
|
|
13
13
|
return RecordingAction;
|
|
14
|
-
}(
|
|
15
|
-
var
|
|
14
|
+
}({});
|
|
15
|
+
var RecordingType = exports.RecordingType = /*#__PURE__*/function (RecordingType) {
|
|
16
|
+
RecordingType["Premise"] = "premise";
|
|
17
|
+
RecordingType["Cloud"] = "cloud";
|
|
18
|
+
return RecordingType;
|
|
19
|
+
}({});
|
|
16
20
|
//# sourceMappingURL=enums.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["RecordingAction","
|
|
1
|
+
{"version":3,"names":["RecordingAction","exports","RecordingType"],"sources":["enums.ts"],"sourcesContent":["export enum RecordingAction {\n Start = 'Start',\n Stop = 'Stop',\n Pause = 'Pause',\n Resume = 'Resume',\n}\n\nexport enum RecordingType {\n Premise = 'premise',\n Cloud = 'cloud',\n}\n"],"mappings":";;;;;;;IAAYA,eAAe,GAAAC,OAAA,CAAAD,eAAA,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAAA,IAOfE,aAAa,GAAAD,OAAA,CAAAC,aAAA,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA"}
|
|
@@ -11,10 +11,10 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
|
|
|
11
11
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
12
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
13
13
|
var _permission = _interopRequireDefault(require("../common/errors/permission"));
|
|
14
|
+
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
14
15
|
var _constants = require("../constants");
|
|
15
|
-
var _enums =
|
|
16
|
+
var _enums = require("./enums");
|
|
16
17
|
var _util = _interopRequireDefault(require("./util"));
|
|
17
|
-
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
18
18
|
/**
|
|
19
19
|
* @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting
|
|
20
20
|
* @export
|
|
@@ -240,13 +240,14 @@ var RecordingController = exports.default = /*#__PURE__*/function () {
|
|
|
240
240
|
|
|
241
241
|
/**
|
|
242
242
|
* @param {RecordingAction} action
|
|
243
|
+
* @param {RecordingType} recordingType
|
|
243
244
|
* @private
|
|
244
245
|
* @memberof RecordingController
|
|
245
246
|
* @returns {Promise}
|
|
246
247
|
*/
|
|
247
248
|
}, {
|
|
248
249
|
key: "recordingService",
|
|
249
|
-
value: function recordingService(action) {
|
|
250
|
+
value: function recordingService(action, recordingType) {
|
|
250
251
|
// @ts-ignore
|
|
251
252
|
return this.request.request({
|
|
252
253
|
body: {
|
|
@@ -255,7 +256,8 @@ var RecordingController = exports.default = /*#__PURE__*/function () {
|
|
|
255
256
|
},
|
|
256
257
|
recording: {
|
|
257
258
|
action: action.toLowerCase()
|
|
258
|
-
}
|
|
259
|
+
},
|
|
260
|
+
recordingType: recordingType
|
|
259
261
|
},
|
|
260
262
|
uri: "".concat(this.serviceUrl, "/loci/").concat(this.locusId, "/recording"),
|
|
261
263
|
method: _constants.HTTP_VERBS.PUT
|
|
@@ -293,12 +295,19 @@ var RecordingController = exports.default = /*#__PURE__*/function () {
|
|
|
293
295
|
}, {
|
|
294
296
|
key: "recordingFacade",
|
|
295
297
|
value: function recordingFacade(action) {
|
|
298
|
+
var isPremiseRecordingEnabled = _util.default.isPremiseRecordingEnabled(this.displayHints, this.selfUserPolicies);
|
|
296
299
|
_loggerProxy.default.logger.log("RecordingController:index#recordingFacade --> recording action [".concat(action, "]"));
|
|
300
|
+
var recordingType;
|
|
301
|
+
if (isPremiseRecordingEnabled) {
|
|
302
|
+
recordingType = _enums.RecordingType.Premise;
|
|
303
|
+
} else {
|
|
304
|
+
recordingType = _enums.RecordingType.Cloud;
|
|
305
|
+
}
|
|
297
306
|
|
|
298
307
|
// assumes action is proper cased (i.e., Example)
|
|
299
308
|
if (_util.default !== null && _util.default !== void 0 && _util.default["canUser".concat(action)](this.displayHints, this.selfUserPolicies)) {
|
|
300
309
|
if (this.serviceUrl) {
|
|
301
|
-
return this.recordingService(action);
|
|
310
|
+
return this.recordingService(action, recordingType);
|
|
302
311
|
}
|
|
303
312
|
return this.recordingControls(action);
|
|
304
313
|
}
|
|
@@ -313,7 +322,7 @@ var RecordingController = exports.default = /*#__PURE__*/function () {
|
|
|
313
322
|
}, {
|
|
314
323
|
key: "startRecording",
|
|
315
324
|
value: function startRecording() {
|
|
316
|
-
return this.recordingFacade(_enums.
|
|
325
|
+
return this.recordingFacade(_enums.RecordingAction.Start);
|
|
317
326
|
}
|
|
318
327
|
|
|
319
328
|
/**
|
|
@@ -324,7 +333,7 @@ var RecordingController = exports.default = /*#__PURE__*/function () {
|
|
|
324
333
|
}, {
|
|
325
334
|
key: "stopRecording",
|
|
326
335
|
value: function stopRecording() {
|
|
327
|
-
return this.recordingFacade(_enums.
|
|
336
|
+
return this.recordingFacade(_enums.RecordingAction.Stop);
|
|
328
337
|
}
|
|
329
338
|
|
|
330
339
|
/**
|
|
@@ -335,7 +344,7 @@ var RecordingController = exports.default = /*#__PURE__*/function () {
|
|
|
335
344
|
}, {
|
|
336
345
|
key: "pauseRecording",
|
|
337
346
|
value: function pauseRecording() {
|
|
338
|
-
return this.recordingFacade(_enums.
|
|
347
|
+
return this.recordingFacade(_enums.RecordingAction.Pause);
|
|
339
348
|
}
|
|
340
349
|
|
|
341
350
|
/**
|
|
@@ -346,7 +355,7 @@ var RecordingController = exports.default = /*#__PURE__*/function () {
|
|
|
346
355
|
}, {
|
|
347
356
|
key: "resumeRecording",
|
|
348
357
|
value: function resumeRecording() {
|
|
349
|
-
return this.recordingFacade(_enums.
|
|
358
|
+
return this.recordingFacade(_enums.RecordingAction.Resume);
|
|
350
359
|
}
|
|
351
360
|
}]);
|
|
352
361
|
return RecordingController;
|