@webex/plugin-meetings 3.12.0-next.6 → 3.12.0-next.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/AGENTS.md +9 -0
  2. package/dist/aiEnableRequest/index.js +15 -2
  3. package/dist/aiEnableRequest/index.js.map +1 -1
  4. package/dist/breakouts/breakout.js +8 -3
  5. package/dist/breakouts/breakout.js.map +1 -1
  6. package/dist/breakouts/index.js +26 -2
  7. package/dist/breakouts/index.js.map +1 -1
  8. package/dist/config.js +2 -0
  9. package/dist/config.js.map +1 -1
  10. package/dist/constants.js +6 -3
  11. package/dist/constants.js.map +1 -1
  12. package/dist/controls-options-manager/constants.js +11 -1
  13. package/dist/controls-options-manager/constants.js.map +1 -1
  14. package/dist/controls-options-manager/index.js +38 -24
  15. package/dist/controls-options-manager/index.js.map +1 -1
  16. package/dist/controls-options-manager/util.js +91 -0
  17. package/dist/controls-options-manager/util.js.map +1 -1
  18. package/dist/hashTree/constants.js +10 -1
  19. package/dist/hashTree/constants.js.map +1 -1
  20. package/dist/hashTree/hashTreeParser.js +716 -370
  21. package/dist/hashTree/hashTreeParser.js.map +1 -1
  22. package/dist/hashTree/utils.js +22 -0
  23. package/dist/hashTree/utils.js.map +1 -1
  24. package/dist/index.js +7 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/interceptors/locusRetry.js +23 -8
  27. package/dist/interceptors/locusRetry.js.map +1 -1
  28. package/dist/interpretation/index.js +10 -1
  29. package/dist/interpretation/index.js.map +1 -1
  30. package/dist/interpretation/siLanguage.js +1 -1
  31. package/dist/locus-info/controlsUtils.js +4 -1
  32. package/dist/locus-info/controlsUtils.js.map +1 -1
  33. package/dist/locus-info/index.js +289 -87
  34. package/dist/locus-info/index.js.map +1 -1
  35. package/dist/locus-info/types.js +19 -0
  36. package/dist/locus-info/types.js.map +1 -1
  37. package/dist/media/index.js +3 -1
  38. package/dist/media/index.js.map +1 -1
  39. package/dist/media/properties.js +1 -0
  40. package/dist/media/properties.js.map +1 -1
  41. package/dist/meeting/in-meeting-actions.js +3 -1
  42. package/dist/meeting/in-meeting-actions.js.map +1 -1
  43. package/dist/meeting/index.js +907 -535
  44. package/dist/meeting/index.js.map +1 -1
  45. package/dist/meeting/util.js +19 -2
  46. package/dist/meeting/util.js.map +1 -1
  47. package/dist/meetings/index.js +231 -78
  48. package/dist/meetings/index.js.map +1 -1
  49. package/dist/meetings/meetings.types.js +6 -1
  50. package/dist/meetings/meetings.types.js.map +1 -1
  51. package/dist/meetings/request.js +39 -0
  52. package/dist/meetings/request.js.map +1 -1
  53. package/dist/meetings/util.js +79 -5
  54. package/dist/meetings/util.js.map +1 -1
  55. package/dist/member/index.js +10 -0
  56. package/dist/member/index.js.map +1 -1
  57. package/dist/member/types.js.map +1 -1
  58. package/dist/member/util.js +3 -0
  59. package/dist/member/util.js.map +1 -1
  60. package/dist/metrics/constants.js +4 -1
  61. package/dist/metrics/constants.js.map +1 -1
  62. package/dist/multistream/codec/constants.js +63 -0
  63. package/dist/multistream/codec/constants.js.map +1 -0
  64. package/dist/multistream/mediaRequestManager.js +62 -15
  65. package/dist/multistream/mediaRequestManager.js.map +1 -1
  66. package/dist/multistream/receiveSlot.js +9 -0
  67. package/dist/multistream/receiveSlot.js.map +1 -1
  68. package/dist/reactions/reactions.type.js.map +1 -1
  69. package/dist/recording-controller/index.js +1 -3
  70. package/dist/recording-controller/index.js.map +1 -1
  71. package/dist/types/config.d.ts +2 -0
  72. package/dist/types/constants.d.ts +2 -0
  73. package/dist/types/controls-options-manager/constants.d.ts +6 -1
  74. package/dist/types/controls-options-manager/index.d.ts +10 -0
  75. package/dist/types/hashTree/constants.d.ts +1 -0
  76. package/dist/types/hashTree/hashTreeParser.d.ts +92 -16
  77. package/dist/types/hashTree/utils.d.ts +11 -0
  78. package/dist/types/index.d.ts +2 -0
  79. package/dist/types/interceptors/locusRetry.d.ts +4 -4
  80. package/dist/types/locus-info/index.d.ts +46 -6
  81. package/dist/types/locus-info/types.d.ts +21 -1
  82. package/dist/types/media/properties.d.ts +1 -0
  83. package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
  84. package/dist/types/meeting/index.d.ts +87 -3
  85. package/dist/types/meeting/util.d.ts +8 -0
  86. package/dist/types/meetings/index.d.ts +30 -2
  87. package/dist/types/meetings/meetings.types.d.ts +15 -0
  88. package/dist/types/meetings/request.d.ts +14 -0
  89. package/dist/types/member/index.d.ts +1 -0
  90. package/dist/types/member/types.d.ts +1 -0
  91. package/dist/types/member/util.d.ts +1 -0
  92. package/dist/types/metrics/constants.d.ts +3 -0
  93. package/dist/types/multistream/codec/constants.d.ts +7 -0
  94. package/dist/types/multistream/mediaRequestManager.d.ts +22 -5
  95. package/dist/types/reactions/reactions.type.d.ts +3 -0
  96. package/dist/webinar/index.js +361 -235
  97. package/dist/webinar/index.js.map +1 -1
  98. package/package.json +22 -22
  99. package/src/aiEnableRequest/index.ts +16 -0
  100. package/src/breakouts/breakout.ts +3 -1
  101. package/src/breakouts/index.ts +31 -0
  102. package/src/config.ts +2 -0
  103. package/src/constants.ts +5 -1
  104. package/src/controls-options-manager/constants.ts +14 -1
  105. package/src/controls-options-manager/index.ts +47 -24
  106. package/src/controls-options-manager/util.ts +81 -1
  107. package/src/hashTree/constants.ts +9 -0
  108. package/src/hashTree/hashTreeParser.ts +429 -183
  109. package/src/hashTree/utils.ts +17 -0
  110. package/src/index.ts +5 -0
  111. package/src/interceptors/locusRetry.ts +25 -4
  112. package/src/interpretation/index.ts +25 -8
  113. package/src/locus-info/controlsUtils.ts +3 -1
  114. package/src/locus-info/index.ts +291 -97
  115. package/src/locus-info/types.ts +25 -1
  116. package/src/media/index.ts +3 -0
  117. package/src/media/properties.ts +1 -0
  118. package/src/meeting/in-meeting-actions.ts +4 -0
  119. package/src/meeting/index.ts +388 -33
  120. package/src/meeting/util.ts +20 -2
  121. package/src/meetings/index.ts +134 -44
  122. package/src/meetings/meetings.types.ts +19 -0
  123. package/src/meetings/request.ts +43 -0
  124. package/src/meetings/util.ts +97 -1
  125. package/src/member/index.ts +10 -0
  126. package/src/member/types.ts +1 -0
  127. package/src/member/util.ts +3 -0
  128. package/src/metrics/constants.ts +3 -0
  129. package/src/multistream/codec/constants.ts +58 -0
  130. package/src/multistream/mediaRequestManager.ts +119 -28
  131. package/src/multistream/receiveSlot.ts +18 -0
  132. package/src/reactions/reactions.type.ts +3 -0
  133. package/src/recording-controller/index.ts +1 -2
  134. package/src/webinar/index.ts +162 -21
  135. package/test/unit/spec/aiEnableRequest/index.ts +86 -0
  136. package/test/unit/spec/breakouts/breakout.ts +9 -3
  137. package/test/unit/spec/breakouts/index.ts +49 -0
  138. package/test/unit/spec/controls-options-manager/index.js +140 -29
  139. package/test/unit/spec/controls-options-manager/util.js +165 -0
  140. package/test/unit/spec/hashTree/hashTreeParser.ts +1508 -149
  141. package/test/unit/spec/hashTree/utils.ts +88 -1
  142. package/test/unit/spec/interceptors/locusRetry.ts +205 -4
  143. package/test/unit/spec/interpretation/index.ts +26 -4
  144. package/test/unit/spec/locus-info/controlsUtils.js +172 -57
  145. package/test/unit/spec/locus-info/index.js +475 -81
  146. package/test/unit/spec/media/index.ts +31 -0
  147. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
  148. package/test/unit/spec/meeting/index.js +1131 -49
  149. package/test/unit/spec/meeting/muteState.js +3 -0
  150. package/test/unit/spec/meeting/utils.js +33 -0
  151. package/test/unit/spec/meetings/index.js +360 -10
  152. package/test/unit/spec/meetings/request.js +141 -0
  153. package/test/unit/spec/meetings/utils.js +189 -0
  154. package/test/unit/spec/member/index.js +7 -0
  155. package/test/unit/spec/member/util.js +24 -0
  156. package/test/unit/spec/multistream/mediaRequestManager.ts +501 -37
  157. package/test/unit/spec/recording-controller/index.js +9 -8
  158. package/test/unit/spec/webinar/index.ts +141 -16
@@ -1 +1 @@
1
- {"version":3,"names":["_internalMediaCore","require","_loggerProxy","_interopRequireDefault","_eventsScope","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","_classPrivateFieldInitSpec","a","_checkPrivateRedeclaration","set","has","TypeError","_classPrivateFieldGet","s","get","_assertClassBrand","_classPrivateFieldSet","r","n","arguments","length","ReceiveSlotEvents","exports","SourceUpdate","MaxFsUpdate","receiveSlotCounter","_memberId","_weakMap","_csi","_sourceState","ReceiveSlot","_EventsScope","mediaType","mcReceiveSlot","findMemberIdCallback","_this","_classCallCheck2","_defineProperty2","id","concat","setupEventListeners","_inherits2","_createClass2","key","value","setMaxFs","newFs","emit","file","function","maxFs","_this2","scope","on","WcmeReceiveSlotEvents","state","csi","LoggerProxy","logger","log","undefined","memberId","findMemberId","_stringify","stream","EventsScope"],"sources":["receiveSlot.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\nimport {\n MediaType,\n ReceiveSlot as WcmeReceiveSlot,\n ReceiveSlotEvents as WcmeReceiveSlotEvents,\n StreamState,\n} from '@webex/internal-media-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\n\nexport const ReceiveSlotEvents = {\n SourceUpdate: 'sourceUpdate',\n MaxFsUpdate: 'maxFsUpdate',\n};\n\nexport type {StreamState} from '@webex/internal-media-core';\nexport type CSI = number;\nexport type MemberId = string;\nexport type ReceiveSlotId = string;\n\nlet receiveSlotCounter = 0;\n\nexport type FindMemberIdCallback = (csi: CSI) => MemberId | undefined;\n\n/**\n * Class representing a receive slot. A single receive slot is able to receive a single track\n * for example some participant's main video or audio\n */\nexport class ReceiveSlot extends EventsScope {\n private readonly mcReceiveSlot: WcmeReceiveSlot;\n\n private readonly findMemberIdCallback: FindMemberIdCallback;\n\n public readonly id: ReceiveSlotId;\n\n public readonly mediaType: MediaType;\n\n #memberId?: MemberId;\n\n #csi?: CSI;\n\n #sourceState: StreamState;\n\n /**\n * constructor - don't use it directly, you should always use meeting.receiveSlotManager.allocateSlot()\n * to create any receive slots\n *\n * @param {MediaType} mediaType\n * @param {ReceiveSlot} mcReceiveSlot\n * @param {FindMemberIdCallback} findMemberIdCallback callback for finding memberId for given CSI\n */\n constructor(\n mediaType: MediaType,\n mcReceiveSlot: WcmeReceiveSlot,\n findMemberIdCallback: FindMemberIdCallback\n ) {\n super();\n\n receiveSlotCounter += 1;\n\n this.findMemberIdCallback = findMemberIdCallback;\n this.mediaType = mediaType;\n this.mcReceiveSlot = mcReceiveSlot;\n this.#sourceState = 'no source';\n this.id = `r${receiveSlotCounter}`;\n\n this.setupEventListeners();\n }\n\n /**\n * Getter for memberId\n */\n public get memberId() {\n return this.#memberId;\n }\n\n /**\n * Getter for csi\n */\n public get csi() {\n return this.#csi;\n }\n\n /**\n * Set the max frame size for this slot\n * @param newFs frame size\n */\n public setMaxFs(newFs) {\n // emit event for media request manager to listen to\n\n this.emit(\n {\n file: 'meeting/receiveSlot',\n function: 'findMemberId',\n },\n ReceiveSlotEvents.MaxFsUpdate,\n {\n maxFs: newFs,\n }\n );\n }\n\n /**\n * Getter for sourceState\n */\n public get sourceState() {\n return this.#sourceState;\n }\n\n /**\n * registers event handlers with the underlying ReceiveSlot\n */\n private setupEventListeners() {\n const scope = {\n file: 'meeting/receiveSlot',\n function: 'setupEventListeners',\n };\n\n this.mcReceiveSlot.on(\n WcmeReceiveSlotEvents.SourceUpdate,\n (state: StreamState, csi?: number) => {\n LoggerProxy.logger.log(\n `ReceiveSlot#setupEventListeners --> got source update on receive slot ${this.id}, mediaType=${this.mediaType}, csi=${csi}, state=${state}`\n );\n this.#memberId = csi ? this.findMemberIdCallback(csi) : undefined;\n this.#csi = csi;\n this.#sourceState = state;\n\n this.emit(scope, ReceiveSlotEvents.SourceUpdate, {\n state: this.#sourceState,\n csi: this.#csi,\n memberId: this.#memberId,\n });\n }\n );\n }\n\n /** Tries to find the member id for this receive slot if it hasn't got one */\n public findMemberId() {\n if (this.#memberId === undefined && this.#csi) {\n this.#memberId = this.findMemberIdCallback(this.#csi);\n\n if (this.#memberId) {\n // if we found the memberId, simulate source update so that the client app knows that something's changed\n this.emit(\n {\n file: 'meeting/receiveSlot',\n function: 'findMemberId',\n },\n ReceiveSlotEvents.SourceUpdate,\n {\n state: this.#sourceState,\n csi: this.#csi,\n memberId: this.#memberId,\n }\n );\n }\n }\n }\n\n /**\n * @returns {string} a log message used to identify the receive slot\n */\n public get logString() {\n return `ReceiveSlot - ${this.id}: ${JSON.stringify(this.mcReceiveSlot.id)}`;\n }\n\n /**\n * The MediaStream object associated with this slot.\n *\n * @returns {MediaStream} The MediaStreamTrack.\n */\n get stream(): MediaStream {\n return this.mcReceiveSlot.stream;\n }\n\n /**\n * The underlying WCME receive slot\n */\n get wcmeReceiveSlot(): WcmeReceiveSlot {\n return this.mcReceiveSlot;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_internalMediaCore","require","_loggerProxy","_interopRequireDefault","_eventsScope","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","_classPrivateFieldInitSpec","a","_checkPrivateRedeclaration","set","has","TypeError","_classPrivateFieldGet","s","get","_assertClassBrand","_classPrivateFieldSet","r","n","arguments","length","ReceiveSlotEvents","exports","SourceUpdate","MaxFsUpdate","receiveSlotCounter","_memberId","_weakMap","_csi","_sourceState","ReceiveSlot","_EventsScope","mediaType","mcReceiveSlot","findMemberIdCallback","_this","_classCallCheck2","_defineProperty2","id","concat","setupEventListeners","_inherits2","_createClass2","key","value","setMaxFs","newFs","emit","file","function","maxFs","_this2","scope","on","WcmeReceiveSlotEvents","state","csi","LoggerProxy","logger","log","undefined","memberId","MediaStarted","MediaStopped","MediaEnded","findMemberId","_stringify","stream","EventsScope"],"sources":["receiveSlot.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\nimport {\n MediaType,\n ReceiveSlot as WcmeReceiveSlot,\n ReceiveSlotEvents as WcmeReceiveSlotEvents,\n StreamState,\n} from '@webex/internal-media-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\n\nexport const ReceiveSlotEvents = {\n SourceUpdate: 'sourceUpdate',\n MaxFsUpdate: 'maxFsUpdate',\n};\n\nexport type {StreamState} from '@webex/internal-media-core';\nexport type CSI = number;\nexport type MemberId = string;\nexport type ReceiveSlotId = string;\n\nlet receiveSlotCounter = 0;\n\nexport type FindMemberIdCallback = (csi: CSI) => MemberId | undefined;\n\n/**\n * Class representing a receive slot. A single receive slot is able to receive a single track\n * for example some participant's main video or audio\n */\nexport class ReceiveSlot extends EventsScope {\n private readonly mcReceiveSlot: WcmeReceiveSlot;\n\n private readonly findMemberIdCallback: FindMemberIdCallback;\n\n public readonly id: ReceiveSlotId;\n\n public readonly mediaType: MediaType;\n\n #memberId?: MemberId;\n\n #csi?: CSI;\n\n #sourceState: StreamState;\n\n /**\n * constructor - don't use it directly, you should always use meeting.receiveSlotManager.allocateSlot()\n * to create any receive slots\n *\n * @param {MediaType} mediaType\n * @param {ReceiveSlot} mcReceiveSlot\n * @param {FindMemberIdCallback} findMemberIdCallback callback for finding memberId for given CSI\n */\n constructor(\n mediaType: MediaType,\n mcReceiveSlot: WcmeReceiveSlot,\n findMemberIdCallback: FindMemberIdCallback\n ) {\n super();\n\n receiveSlotCounter += 1;\n\n this.findMemberIdCallback = findMemberIdCallback;\n this.mediaType = mediaType;\n this.mcReceiveSlot = mcReceiveSlot;\n this.#sourceState = 'no source';\n this.id = `r${receiveSlotCounter}`;\n\n this.setupEventListeners();\n }\n\n /**\n * Getter for memberId\n */\n public get memberId() {\n return this.#memberId;\n }\n\n /**\n * Getter for csi\n */\n public get csi() {\n return this.#csi;\n }\n\n /**\n * Set the max frame size for this slot\n * @param newFs frame size\n */\n public setMaxFs(newFs) {\n // emit event for media request manager to listen to\n\n this.emit(\n {\n file: 'meeting/receiveSlot',\n function: 'findMemberId',\n },\n ReceiveSlotEvents.MaxFsUpdate,\n {\n maxFs: newFs,\n }\n );\n }\n\n /**\n * Getter for sourceState\n */\n public get sourceState() {\n return this.#sourceState;\n }\n\n /**\n * registers event handlers with the underlying ReceiveSlot\n */\n private setupEventListeners() {\n const scope = {\n file: 'meeting/receiveSlot',\n function: 'setupEventListeners',\n };\n\n this.mcReceiveSlot.on(\n WcmeReceiveSlotEvents.SourceUpdate,\n (state: StreamState, csi?: number) => {\n LoggerProxy.logger.log(\n `ReceiveSlot#setupEventListeners --> got source update on receive slot ${this.id}, mediaType=${this.mediaType}, csi=${csi}, state=${state}`\n );\n this.#memberId = csi ? this.findMemberIdCallback(csi) : undefined;\n this.#csi = csi;\n this.#sourceState = state;\n\n this.emit(scope, ReceiveSlotEvents.SourceUpdate, {\n state: this.#sourceState,\n csi: this.#csi,\n memberId: this.#memberId,\n });\n }\n );\n\n this.mcReceiveSlot.on(WcmeReceiveSlotEvents.MediaStarted, () => {\n LoggerProxy.logger.log(\n `ReceiveSlot#setupEventListeners --> media started on receive slot ${this.id}, mediaType=${this.mediaType}`\n );\n });\n\n this.mcReceiveSlot.on(WcmeReceiveSlotEvents.MediaStopped, () => {\n LoggerProxy.logger.log(\n `ReceiveSlot#setupEventListeners --> media stopped on receive slot ${this.id}, mediaType=${this.mediaType}`\n );\n });\n\n this.mcReceiveSlot.on(WcmeReceiveSlotEvents.MediaEnded, () => {\n LoggerProxy.logger.log(\n `ReceiveSlot#setupEventListeners --> media ended on receive slot ${this.id}, mediaType=${this.mediaType}`\n );\n });\n }\n\n /** Tries to find the member id for this receive slot if it hasn't got one */\n public findMemberId() {\n if (this.#memberId === undefined && this.#csi) {\n this.#memberId = this.findMemberIdCallback(this.#csi);\n\n if (this.#memberId) {\n // if we found the memberId, simulate source update so that the client app knows that something's changed\n this.emit(\n {\n file: 'meeting/receiveSlot',\n function: 'findMemberId',\n },\n ReceiveSlotEvents.SourceUpdate,\n {\n state: this.#sourceState,\n csi: this.#csi,\n memberId: this.#memberId,\n }\n );\n }\n }\n }\n\n /**\n * @returns {string} a log message used to identify the receive slot\n */\n public get logString() {\n return `ReceiveSlot - ${this.id}: ${JSON.stringify(this.mcReceiveSlot.id)}`;\n }\n\n /**\n * The MediaStream object associated with this slot.\n *\n * @returns {MediaStream} The MediaStreamTrack.\n */\n get stream(): MediaStream {\n return this.mcReceiveSlot.stream;\n }\n\n /**\n * The underlying WCME receive slot\n */\n get wcmeReceiveSlot(): WcmeReceiveSlot {\n return this.mcReceiveSlot;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["ReactionServerType","exports","SkinToneType"],"sources":["reactions.type.ts"],"sourcesContent":["import {REACTION_RELAY_TYPES} from './constants';\n\nexport type EmoticonData = {\n type: string;\n codepoints?: string;\n shortcodes?: string;\n};\n\nexport type SkinTone = EmoticonData;\n\nexport type Reaction = EmoticonData & {\n tone?: SkinTone;\n};\n\n// eslint-disable-next-line no-shadow\nexport enum ReactionServerType {\n smile = 'smile',\n sad = 'sad',\n wow = 'wow',\n haha = 'haha',\n celebrate = 'celebrate',\n clap = 'clap',\n thumb_up = 'thumb_up',\n thumb_down = 'thumb_down',\n heart = 'heart',\n fire = 'fire',\n prayer = 'prayer',\n speed_up = 'speed_up',\n slow_down = 'slow_down',\n}\n\n// eslint-disable-next-line no-shadow\nexport enum SkinToneType {\n normal = 'normal',\n light = 'light',\n medium_light = 'medium_light',\n medium = 'medium',\n medium_dark = 'medium_dark',\n dark = 'dark',\n}\n\nexport type Sender = {\n displayName: string;\n participantId: string;\n};\n\nexport type ProcessedReaction = {\n reaction: Reaction;\n sender: {\n id: Sender['participantId'];\n name: string;\n };\n};\n\ntype RelayEventData = {\n relayType: (typeof REACTION_RELAY_TYPES)['REACTION'];\n reaction: Reaction;\n sender: Sender;\n};\n\nexport type RelayEvent = {\n data: RelayEventData;\n};\n"],"mappings":";;;;;;;AAcA;AAAA,IACYA,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA,OAgB9B;AAAA,IACYE,YAAY,GAAAD,OAAA,CAAAC,YAAA,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["ReactionServerType","exports","SkinToneType"],"sources":["reactions.type.ts"],"sourcesContent":["import {REACTION_RELAY_TYPES} from './constants';\n\nexport type EmoticonData = {\n type: string;\n codepoints?: string;\n shortcodes?: string;\n};\n\nexport type SkinTone = EmoticonData;\n\nexport type Reaction = EmoticonData & {\n tone?: SkinTone;\n};\n\n// eslint-disable-next-line no-shadow\nexport enum ReactionServerType {\n smile = 'smile',\n sad = 'sad',\n wow = 'wow',\n haha = 'haha',\n celebrate = 'celebrate',\n clap = 'clap',\n thumb_up = 'thumb_up',\n thumb_down = 'thumb_down',\n heart = 'heart',\n fire = 'fire',\n prayer = 'prayer',\n speed_up = 'speed_up',\n slow_down = 'slow_down',\n}\n\n// eslint-disable-next-line no-shadow\nexport enum SkinToneType {\n normal = 'normal',\n light = 'light',\n medium_light = 'medium_light',\n medium = 'medium',\n medium_dark = 'medium_dark',\n dark = 'dark',\n}\n\nexport type Sender = {\n displayName: string;\n participantId: string;\n};\n\nexport type ProcessedReaction = {\n reaction: Reaction;\n sender: {\n id: Sender['participantId'];\n name: string;\n };\n};\n\ntype RelayEventData = {\n relayType: (typeof REACTION_RELAY_TYPES)['REACTION'];\n reaction: Reaction;\n sender: Sender;\n};\n\nexport type RelayEvent = {\n data: RelayEventData;\n headers?: {\n route?: string;\n };\n};\n"],"mappings":";;;;;;;AAcA;AAAA,IACYA,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA,OAgB9B;AAAA,IACYE,YAAY,GAAAD,OAAA,CAAAC,YAAA,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA","ignoreList":[]}
@@ -275,9 +275,7 @@ var RecordingController = exports.default = /*#__PURE__*/function () {
275
275
  value: function recordingControls(action) {
276
276
  var record = _util.default.deriveRecordingStates(action);
277
277
  _loggerProxy.default.logger.log("RecordingController:index#recordingControls --> ".concat(record));
278
-
279
- // @ts-ignore
280
- return this.request.request({
278
+ return this.request.locusDeltaRequest({
281
279
  uri: "".concat(this.locusUrl, "/").concat(_constants.CONTROLS),
282
280
  body: {
283
281
  record: record
@@ -1 +1 @@
1
- {"version":3,"names":["_permission","_interopRequireDefault","require","_loggerProxy","_constants","_enums","_util","RecordingController","exports","default","request","options","_classCallCheck2","_defineProperty2","initialize","set","_createClass2","key","value","extract","setLocusUrl","url","locusUrl","locusId","Util","extractLocusId","setDisplayHints","hints","displayHints","setUserPolicy","selfUserPolicies","setSessionId","id","sessionId","setServiceUrl","serviceUrl","getLocusUrl","getLocusId","getSessionId","getServiceUrl","getDisplayHints","recordingService","action","recordingType","body","meetingInfo","locusSessionId","recording","toLowerCase","uri","concat","method","HTTP_VERBS","PUT","recordingControls","record","deriveRecordingStates","LoggerProxy","logger","log","CONTROLS","PATCH","recordingFacade","isPremiseRecordingEnabled","RecordingType","Premise","Cloud","_promise","reject","PermissionError","startRecording","RecordingAction","Start","stopRecording","Stop","pauseRecording","Pause","resumeRecording","Resume"],"sources":["index.ts"],"sourcesContent":["import PermissionError from '../common/errors/permission';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {CONTROLS, HTTP_VERBS, SELF_POLICY} from '../constants';\nimport MeetingRequest from '../meeting/request';\nimport {RecordingAction, RecordingType} from './enums';\nimport Util from './util';\n\n/**\n * @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting\n * @export\n * @private\n * @class Recording\n */\nexport default class RecordingController {\n /**\n * @instance\n * @type {MeetingRequest}\n * @private\n * @memberof RecordingController\n */\n private request: MeetingRequest;\n\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof RecordingInfo\n */\n private displayHints: Array<string> = [];\n\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof RecordingInfo\n */\n private selfUserPolicies: Record<SELF_POLICY, boolean>;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private serviceUrl: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private sessionId: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private locusUrl: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private locusId: string;\n\n /**\n * @param {MeetingRequest} request\n * @param {Object} options\n * @constructor\n * @memberof RecordingController\n */\n constructor(\n request: MeetingRequest,\n options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }\n ) {\n this.initialize(request);\n this.set(options);\n }\n\n /**\n * @param {MeetingRequest} request\n * @returns {void}\n * @private\n * @memberof RecordingController\n */\n private initialize(request: MeetingRequest) {\n this.request = request;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public set(options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }) {\n this.extract(options);\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setLocusUrl(url: string) {\n this.locusUrl = url;\n this.locusId = Util.extractLocusId(this.locusUrl);\n }\n\n /**\n * @param {Array} hints\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setDisplayHints(hints: Array<string>) {\n this.displayHints = hints;\n }\n\n /**\n * @param {Object} selfUserPolicies\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setUserPolicy(selfUserPolicies: Record<SELF_POLICY, boolean>) {\n this.selfUserPolicies = selfUserPolicies;\n }\n\n /**\n * @param {string} id\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setSessionId(id: string) {\n this.sessionId = id;\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setServiceUrl(url: string) {\n this.serviceUrl = url;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getLocusUrl() {\n return this.locusUrl;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getLocusId() {\n return this.locusId;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getSessionId() {\n return this.sessionId;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getServiceUrl() {\n return this.serviceUrl;\n }\n\n /**\n * @returns {Array}\n * @public\n * @memberof RecordingController\n */\n public getDisplayHints() {\n return this.displayHints;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @private\n * @memberof RecordingController\n */\n private extract(options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }) {\n this.setServiceUrl(options?.serviceUrl);\n this.setSessionId(options?.sessionId);\n this.setDisplayHints(options?.displayHints);\n this.setLocusUrl(options?.locusUrl);\n }\n\n /**\n * @param {RecordingAction} action\n * @param {RecordingType} recordingType\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingService(action: RecordingAction, recordingType: RecordingType): Promise<any> {\n // @ts-ignore\n return this.request.request({\n body: {\n meetingInfo: {\n locusSessionId: this.sessionId,\n },\n recording: {\n action: action.toLowerCase(),\n },\n recordingType,\n },\n uri: `${this.serviceUrl}/loci/${this.locusId}/recording`,\n method: HTTP_VERBS.PUT,\n });\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingControls(action: RecordingAction): Promise<any> {\n const record = Util.deriveRecordingStates(action);\n\n LoggerProxy.logger.log(`RecordingController:index#recordingControls --> ${record}`);\n\n // @ts-ignore\n return this.request.request({\n uri: `${this.locusUrl}/${CONTROLS}`,\n body: {\n record,\n },\n method: HTTP_VERBS.PATCH,\n });\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingFacade(action: RecordingAction): Promise<any> {\n const isPremiseRecordingEnabled = Util.isPremiseRecordingEnabled(\n this.displayHints,\n this.selfUserPolicies\n );\n LoggerProxy.logger.log(\n `RecordingController:index#recordingFacade --> recording action [${action}]`\n );\n\n let recordingType: RecordingType;\n if (isPremiseRecordingEnabled) {\n recordingType = RecordingType.Premise;\n } else {\n recordingType = RecordingType.Cloud;\n }\n\n // assumes action is proper cased (i.e., Example)\n if (Util?.[`canUser${action}`](this.displayHints, this.selfUserPolicies)) {\n if (this.serviceUrl) {\n return this.recordingService(action, recordingType);\n }\n\n return this.recordingControls(action);\n }\n\n return Promise.reject(\n new PermissionError(`${action} recording not allowed, due to moderator property.`)\n );\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public startRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Start);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public stopRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Stop);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public pauseRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Pause);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public resumeRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Resume);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_permission","_interopRequireDefault","require","_loggerProxy","_constants","_enums","_util","RecordingController","exports","default","request","options","_classCallCheck2","_defineProperty2","initialize","set","_createClass2","key","value","extract","setLocusUrl","url","locusUrl","locusId","Util","extractLocusId","setDisplayHints","hints","displayHints","setUserPolicy","selfUserPolicies","setSessionId","id","sessionId","setServiceUrl","serviceUrl","getLocusUrl","getLocusId","getSessionId","getServiceUrl","getDisplayHints","recordingService","action","recordingType","body","meetingInfo","locusSessionId","recording","toLowerCase","uri","concat","method","HTTP_VERBS","PUT","recordingControls","record","deriveRecordingStates","LoggerProxy","logger","log","locusDeltaRequest","CONTROLS","PATCH","recordingFacade","isPremiseRecordingEnabled","RecordingType","Premise","Cloud","_promise","reject","PermissionError","startRecording","RecordingAction","Start","stopRecording","Stop","pauseRecording","Pause","resumeRecording","Resume"],"sources":["index.ts"],"sourcesContent":["import PermissionError from '../common/errors/permission';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {CONTROLS, HTTP_VERBS, SELF_POLICY} from '../constants';\nimport MeetingRequest from '../meeting/request';\nimport {RecordingAction, RecordingType} from './enums';\nimport Util from './util';\n\n/**\n * @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting\n * @export\n * @private\n * @class Recording\n */\nexport default class RecordingController {\n /**\n * @instance\n * @type {MeetingRequest}\n * @private\n * @memberof RecordingController\n */\n private request: MeetingRequest;\n\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof RecordingInfo\n */\n private displayHints: Array<string> = [];\n\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof RecordingInfo\n */\n private selfUserPolicies: Record<SELF_POLICY, boolean>;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private serviceUrl: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private sessionId: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private locusUrl: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private locusId: string;\n\n /**\n * @param {MeetingRequest} request\n * @param {Object} options\n * @constructor\n * @memberof RecordingController\n */\n constructor(\n request: MeetingRequest,\n options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }\n ) {\n this.initialize(request);\n this.set(options);\n }\n\n /**\n * @param {MeetingRequest} request\n * @returns {void}\n * @private\n * @memberof RecordingController\n */\n private initialize(request: MeetingRequest) {\n this.request = request;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public set(options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }) {\n this.extract(options);\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setLocusUrl(url: string) {\n this.locusUrl = url;\n this.locusId = Util.extractLocusId(this.locusUrl);\n }\n\n /**\n * @param {Array} hints\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setDisplayHints(hints: Array<string>) {\n this.displayHints = hints;\n }\n\n /**\n * @param {Object} selfUserPolicies\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setUserPolicy(selfUserPolicies: Record<SELF_POLICY, boolean>) {\n this.selfUserPolicies = selfUserPolicies;\n }\n\n /**\n * @param {string} id\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setSessionId(id: string) {\n this.sessionId = id;\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setServiceUrl(url: string) {\n this.serviceUrl = url;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getLocusUrl() {\n return this.locusUrl;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getLocusId() {\n return this.locusId;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getSessionId() {\n return this.sessionId;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getServiceUrl() {\n return this.serviceUrl;\n }\n\n /**\n * @returns {Array}\n * @public\n * @memberof RecordingController\n */\n public getDisplayHints() {\n return this.displayHints;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @private\n * @memberof RecordingController\n */\n private extract(options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }) {\n this.setServiceUrl(options?.serviceUrl);\n this.setSessionId(options?.sessionId);\n this.setDisplayHints(options?.displayHints);\n this.setLocusUrl(options?.locusUrl);\n }\n\n /**\n * @param {RecordingAction} action\n * @param {RecordingType} recordingType\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingService(action: RecordingAction, recordingType: RecordingType): Promise<any> {\n // @ts-ignore\n return this.request.request({\n body: {\n meetingInfo: {\n locusSessionId: this.sessionId,\n },\n recording: {\n action: action.toLowerCase(),\n },\n recordingType,\n },\n uri: `${this.serviceUrl}/loci/${this.locusId}/recording`,\n method: HTTP_VERBS.PUT,\n });\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingControls(action: RecordingAction): Promise<any> {\n const record = Util.deriveRecordingStates(action);\n\n LoggerProxy.logger.log(`RecordingController:index#recordingControls --> ${record}`);\n\n return this.request.locusDeltaRequest({\n uri: `${this.locusUrl}/${CONTROLS}`,\n body: {\n record,\n },\n method: HTTP_VERBS.PATCH,\n });\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingFacade(action: RecordingAction): Promise<any> {\n const isPremiseRecordingEnabled = Util.isPremiseRecordingEnabled(\n this.displayHints,\n this.selfUserPolicies\n );\n LoggerProxy.logger.log(\n `RecordingController:index#recordingFacade --> recording action [${action}]`\n );\n\n let recordingType: RecordingType;\n if (isPremiseRecordingEnabled) {\n recordingType = RecordingType.Premise;\n } else {\n recordingType = RecordingType.Cloud;\n }\n\n // assumes action is proper cased (i.e., Example)\n if (Util?.[`canUser${action}`](this.displayHints, this.selfUserPolicies)) {\n if (this.serviceUrl) {\n return this.recordingService(action, recordingType);\n }\n\n return this.recordingControls(action);\n }\n\n return Promise.reject(\n new PermissionError(`${action} recording not allowed, due to moderator property.`)\n );\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public startRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Start);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public stopRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Stop);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public pauseRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Pause);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public resumeRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Resume);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -58,6 +58,7 @@ declare const _default: {
58
58
  enableExtmap: boolean;
59
59
  enableAutomaticLLM: boolean;
60
60
  installedOrgID: any;
61
+ multipartSitePrefixList: string[];
61
62
  experimental: {
62
63
  enableMediaNegotiatedEvent: boolean;
63
64
  enableUnifiedMeetings: boolean;
@@ -69,6 +70,7 @@ declare const _default: {
69
70
  degradationPreferences: {
70
71
  maxMacroblocksLimit: number;
71
72
  };
73
+ enableAv1SlidesSupport: boolean;
72
74
  iceCandidatesGatheringTimeout: any;
73
75
  backendIpv6NativeSupport: boolean;
74
76
  enableReachabilityChecks: boolean;
@@ -293,6 +293,7 @@ export declare const EVENT_TRIGGERS: {
293
293
  MEETING_CAPTION_RECEIVED: string;
294
294
  MEETING_PARTICIPANT_REASON_CHANGED: string;
295
295
  MEETING_AI_ENABLE_REQUEST: string;
296
+ MEETING_SRTP_CIPHER_UPDATED: string;
296
297
  };
297
298
  export declare const EVENT_TYPES: {
298
299
  SELF: string;
@@ -884,6 +885,7 @@ export declare const DISPLAY_HINTS: {
884
885
  DISABLE_ATTENDEE_START_POLLING_QA: string;
885
886
  ATTENDEE_REQUEST_AI_ASSISTANT_ENABLED: string;
886
887
  ATTENDEE_REQUEST_AI_ASSISTANT_DECLINED_ALL: string;
888
+ ANONYMOUS_DISPLAY_NAMES_ENABLED: string;
887
889
  };
888
890
  export declare const INTERSTITIAL_DISPLAY_HINTS: string[];
889
891
  export declare const SELF_ROLES: {
@@ -1,4 +1,9 @@
1
1
  declare const ENABLED = "enabled";
2
2
  declare const CAN_SET = "canSet";
3
3
  declare const CAN_UNSET = "canUnset";
4
- export { ENABLED, CAN_SET, CAN_UNSET };
4
+ /**
5
+ * Body keys that represent audio controls. These do not support cross-locus
6
+ * authorization and must be sent directly to the current locus URL.
7
+ */
8
+ declare const AUDIO_CONTROL_BODY_KEYS: ReadonlySet<string>;
9
+ export { ENABLED, CAN_SET, CAN_UNSET, AUDIO_CONTROL_BODY_KEYS };
@@ -118,6 +118,16 @@ export default class ControlsOptionsManager {
118
118
  * @returns {Promise}
119
119
  */
120
120
  private setControls;
121
+ /**
122
+ * Sends a controls request to Locus. When authorizingLocusUrl is present in the body,
123
+ * we use a plain request() because the response contains the main session Locus DTO
124
+ * instead of the breakout we're in, so we don't want to parse it as a delta.
125
+ * Otherwise we use locusDeltaRequest() for normal delta processing.
126
+ *
127
+ * @param {Object} requestParams - The request parameters from getControlsRequestParams.
128
+ * @returns {Promise<any>}
129
+ */
130
+ private sendControlsRequest;
121
131
  /**
122
132
  * @public
123
133
  * @param {boolean} enabled
@@ -7,3 +7,4 @@ export declare const DataSetNames: {
7
7
  SELF: string;
8
8
  UNJOINED: string;
9
9
  };
10
+ export declare const DATA_SET_INIT_PRIORITY: string[];
@@ -38,22 +38,41 @@ interface InternalDataSet extends DataSet {
38
38
  hashTree?: HashTree;
39
39
  timer?: ReturnType<typeof setTimeout>;
40
40
  heartbeatWatchdogTimer?: ReturnType<typeof setTimeout>;
41
+ syncAbortController?: AbortController;
41
42
  }
42
43
  type WebexRequestMethod = (options: Record<string, any>) => Promise<any>;
43
44
  export declare const LocusInfoUpdateType: {
44
45
  readonly OBJECTS_UPDATED: "OBJECTS_UPDATED";
45
46
  readonly MEETING_ENDED: "MEETING_ENDED";
47
+ readonly LOCUS_NOT_FOUND: "LOCUS_NOT_FOUND";
46
48
  };
47
49
  export type LocusInfoUpdateType = Enum<typeof LocusInfoUpdateType>;
48
- export type LocusInfoUpdateCallback = (updateType: LocusInfoUpdateType, data?: {
49
- updatedObjects: HashTreeObject[];
50
- }) => void;
50
+ interface LocusUpdatePayloads {
51
+ [LocusInfoUpdateType.OBJECTS_UPDATED]: {
52
+ updatedObjects: HashTreeObject[];
53
+ };
54
+ [LocusInfoUpdateType.MEETING_ENDED]: unknown;
55
+ [LocusInfoUpdateType.LOCUS_NOT_FOUND]: unknown;
56
+ }
57
+ export type LocusInfoUpdate = {
58
+ [K in keyof LocusUpdatePayloads]: {
59
+ updateType: K;
60
+ } & LocusUpdatePayloads[K];
61
+ }[keyof LocusUpdatePayloads];
62
+ export type LocusInfoUpdateCallback = (update: LocusInfoUpdate) => void;
51
63
  /**
52
64
  * This error is thrown if we receive information that the meeting has ended while we're processing some hash messages.
53
65
  * It's handled internally by HashTreeParser and results in MEETING_ENDED being sent up.
54
66
  */
55
67
  export declare class MeetingEndedError extends Error {
56
68
  }
69
+ /**
70
+ * This error is thrown when a 404 is received from Locus hash tree endpoints, indicating that the locus URL
71
+ * is no longer valid (e.g. participant moved to a breakout room, or meeting ended).
72
+ * It's handled internally by HashTreeParser and results in LOCUS_NOT_FOUND being sent up.
73
+ */
74
+ export declare class LocusNotFoundError extends Error {
75
+ }
57
76
  /**
58
77
  * Parses hash tree eventing locus data
59
78
  */
@@ -67,6 +86,10 @@ declare class HashTreeParser {
67
86
  heartbeatIntervalMs?: number;
68
87
  private excludedDataSets;
69
88
  state: 'active' | 'stopped';
89
+ private syncQueue;
90
+ private isSyncInProgress;
91
+ private isSyncAllInProgress;
92
+ private syncQueueProcessingPromise;
70
93
  /**
71
94
  * Constructor for HashTreeParser
72
95
  * @param {Object} options
@@ -120,14 +143,6 @@ declare class HashTreeParser {
120
143
  * @returns {Promise}
121
144
  */
122
145
  private initializeNewVisibleDataSet;
123
- /**
124
- * Sends a special sync request to Locus with all leaves empty - this is a way to get all the data for a given dataset.
125
- *
126
- * @param {string} datasetName - name of the dataset for which to send the request
127
- * @param {string} debugText - text to include in logs
128
- * @returns {Promise}
129
- */
130
- private sendInitializationSyncRequestToLocus;
131
146
  /**
132
147
  * Queries Locus for all up-to-date information about all visible data sets
133
148
  *
@@ -193,6 +208,13 @@ declare class HashTreeParser {
193
208
  * @returns {void}
194
209
  */
195
210
  private handleRootHashHeartBeatMessage;
211
+ /**
212
+ * Handles known errors that can happen during syncs
213
+ *
214
+ * @param {any} error - The error to handle
215
+ * @returns {boolean} true if the error was recognized and handled, false otherwise
216
+ */
217
+ private handleSyncErrors;
196
218
  /**
197
219
  * Asynchronously initializes new visible data sets
198
220
  *
@@ -228,6 +250,14 @@ declare class HashTreeParser {
228
250
  * @returns {void}
229
251
  */
230
252
  private updateDataSetInfo;
253
+ /**
254
+ * Updates the leaf count for a data set, resizing its hash tree accordingly.
255
+ *
256
+ * @param {InternalDataSet} dataSet - The data set to update
257
+ * @param {number} newLeafCount - The new leaf count
258
+ * @returns {void}
259
+ */
260
+ private updateDataSetLeafCount;
231
261
  /**
232
262
  * Checks for changes in the visible data sets based on the updated objects.
233
263
  * @param {HashTreeObject[]} updatedObjects - The list of updated hash tree objects.
@@ -298,11 +328,43 @@ declare class HashTreeParser {
298
328
  * Performs a sync for the given data set.
299
329
  *
300
330
  * @param {InternalDataSet} dataSet - The data set to sync
301
- * @param {string} rootHash - Our current root hash for this data set
302
331
  * @param {string} reason - The reason for the sync (used for logging)
332
+ * @param {boolean} [isInitialization] - Whether this is an initialization sync (sends empty leaves data instead of comparing hashes)
303
333
  * @returns {Promise<void>}
304
334
  */
305
335
  private performSync;
336
+ /**
337
+ * Cancels any pending or in-flight syncs for the specified data sets.
338
+ * This removes matching entries from the sync queue and aborts any in-flight sync HTTP requests.
339
+ *
340
+ * @param {string[]} dataSetNames - The names of the data sets to cancel syncs for
341
+ * @returns {void}
342
+ */
343
+ private cancelPendingSyncsForDataSets;
344
+ /**
345
+ * Enqueues a sync for the given data set. If the data set is already in the queue, the request is ignored.
346
+ * This ensures that all syncs are executed sequentially and no more than 1 sync runs at a time.
347
+ *
348
+ * @param {string} dataSetName - The name of the data set to sync
349
+ * @param {string} reason - The reason for the sync (used for logging)
350
+ * @param {boolean} [isInitialization=false] - Whether this is an initialization sync (uses empty leaves data instead of hash comparison)
351
+ * @returns {void}
352
+ */
353
+ private enqueueSyncForDataset;
354
+ /**
355
+ * Processes the sync queue sequentially. Only one instance of this method runs at a time.
356
+ *
357
+ * @returns {Promise<void>}
358
+ */
359
+ private processSyncQueue;
360
+ /**
361
+ * Syncs all data sets that have hash trees, one by one in sequence, using the priority order
362
+ * provided by sortByInitPriority(). Does nothing if the parser is stopped or if a syncAllDatasets
363
+ * call is already in progress.
364
+ *
365
+ * @returns {Promise<void>}
366
+ */
367
+ syncAllDatasets(): Promise<void>;
306
368
  /**
307
369
  * Runs the sync algorithm for the given data set.
308
370
  *
@@ -333,24 +395,38 @@ declare class HashTreeParser {
333
395
  */
334
396
  stop(): void;
335
397
  /**
336
- * Resumes the HashTreeParser that was previously stopped.
398
+ * Cleans up the HashTreeParser, stopping all timers and clearing all internal state.
399
+ * After calling this, the parser should not be used anymore.
400
+ * @returns {void}
401
+ */
402
+ cleanUp(): void;
403
+ /**
404
+ * Resumes the HashTreeParser that was previously stopped, using a hash tree message.
337
405
  * @param {HashTreeMessage} message - The message to resume with, it must contain metadata with visible data sets info
338
406
  * @returns {void}
339
407
  */
340
- resume(message: HashTreeMessage): void;
408
+ resumeFromMessage(message: HashTreeMessage): void;
409
+ /**
410
+ * Resumes the HashTreeParser that was previously stopped, using a Locus API response.
411
+ * Unlike resumeFromMessage(), this does not require metadata/dataSets in the input,
412
+ * as it fetches all necessary information from Locus via initializeFromGetLociResponse.
413
+ * @param {LocusDTO} locus - locus object from an API response
414
+ * @returns {Promise}
415
+ */
416
+ resumeFromApiResponse(locus: LocusDTO): Promise<void>;
341
417
  private checkForSentinelHttpResponse;
342
418
  /**
343
419
  * Gets the current hashes from the locus for a specific data set.
344
420
  * @param {string} dataSetName
345
421
  * @param {string} currentRootHash
346
- * @returns {string[]}
422
+ * @returns {Object|null} An object containing the hashes and leaf count, or null if the hashes match and no sync is needed
347
423
  */
348
424
  private getHashesFromLocus;
349
425
  /**
350
426
  * Sends a sync request to Locus for the specified data set.
351
427
  *
352
428
  * @param {InternalDataSet} dataSet The data set to sync.
353
- * @param {Record<number, LeafDataItem[]>} mismatchedLeavesData The mismatched leaves data to include in the sync request.
429
+ * @param {Object} options Either `{ isInitialization: true }` for init syncs (uses leafCount=1 with empty leaf data) or `{ mismatchedLeavesData }` for normal syncs.
354
430
  * @returns {Promise<HashTreeMessage|null>}
355
431
  */
356
432
  private sendSyncRequestToLocus;
@@ -20,3 +20,14 @@ export declare function isMetadata(object: HashTreeObject): boolean;
20
20
  * @returns {void}
21
21
  */
22
22
  export declare const deleteNestedObjectsWithHtMeta: (currentLocusPart: any, parent?: any, currentKey?: string | number) => void;
23
+ /**
24
+ * Reorders items so that those matching the given priority list come first (in priority order),
25
+ * followed by everything else in their original order.
26
+ *
27
+ * @param {Array<T>} items - The items to reorder
28
+ * @param {string[]} priority - Ordered list of names that should come first
29
+ * @returns {Array<T>} A new array with prioritized items first
30
+ */
31
+ export declare function sortByInitPriority<T extends {
32
+ name: string;
33
+ }>(items: T[], priority: string[]): T[];
@@ -16,6 +16,8 @@ export * as REACTIONS from './reactions/reactions';
16
16
  export * as sdkAnnotationTypes from './annotation/annotation.types';
17
17
  export * as MeetingInfoV2 from './meeting-info/meeting-info-v2';
18
18
  export { type Reaction } from './reactions/reactions.type';
19
+ export { SitePreferenceSelectOption } from './meetings/meetings.types';
20
+ export type { FetchSitePreferencesMeViaSiteOptions, SitePreferencesResponse, } from './meetings/meetings.types';
19
21
  export { CaptchaError, IntentToJoinError, JoinMeetingError, PasswordError, PermissionError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError, ReclaimHostEmptyWrongKeyError, Meeting, MeetingInfoUtil, JoinWebinarError, SdpResponseTimeoutError, };
20
22
  export { RemoteMedia } from './multistream/remoteMedia';
21
23
  export { default as TriggerProxy } from './common/events/trigger-proxy';
@@ -11,11 +11,11 @@ export default class LocusRetryStatusInterceptor extends Interceptor {
11
11
  */
12
12
  static create(): LocusRetryStatusInterceptor;
13
13
  /**
14
- * Handle response errors
15
- * @param {Object} options
16
- * @param {WebexHttpError} reason
17
- * @returns {Promise<WebexHttpError>}
14
+ * Check whether a URI is a Locus /hashtree or /sync endpoint.
15
+ * @param {string} uri
16
+ * @returns {boolean}
18
17
  */
18
+ private static isLocusHashtreeOrSync;
19
19
  onResponseError(options: any, reason: any): Promise<unknown>;
20
20
  /**
21
21
  * Handle retries for locus service unavailable errors
@@ -25,10 +25,9 @@ export type HashTreeParserEntry = {
25
25
  *
26
26
  * @param {HashTreeMessage} message - The hash tree message to find the meeting for
27
27
  * @param {MeetingCollection} meetingCollection - The collection of meetings to search
28
- * @param {string} deviceUrl - The URL of the user's device
29
28
  * @returns {any} The meeting if found, otherwise undefined
30
29
  */
31
- export declare function findMeetingForHashTreeMessage(message: HashTreeMessage, meetingCollection: MeetingCollection, deviceUrl: string): any;
30
+ export declare function findMeetingForHashTreeMessage(message: HashTreeMessage | undefined, meetingCollection: MeetingCollection): any;
32
31
  /**
33
32
  * Creates a locus object from the objects received in a hash tree message. It usually will be
34
33
  * incomplete, because hash tree messages only contain the parts of locus that have changed,
@@ -130,6 +129,7 @@ export default class LocusInfo extends EventsScope {
130
129
  private createHashTreeParser;
131
130
  /**
132
131
  * @param {Object} data - data to initialize locus info with. It may be from a join or GET /loci response or from a Mercury event that triggers a creation of meeting object
132
+ * @param {Function} [onLocusSynced] - optional callback that will be called at the end of initial setup, when locus info is fully synced. It will be called with the full locus snapshot as an argument (which may be null if we haven't received any full locus DTOs during the initial setup, for example in case we receive only hash tree messages without full locus DTOs)
133
133
  * @returns {undefined}
134
134
  * @memberof LocusInfo
135
135
  */
@@ -145,7 +145,13 @@ export default class LocusInfo extends EventsScope {
145
145
  } | {
146
146
  trigger: 'get-loci-response';
147
147
  locus?: LocusDTO;
148
- }): Promise<void>;
148
+ }, onLocusSynced?: (locus: LocusDTO) => void): Promise<void>;
149
+ /**
150
+ * Builds a full locus DTO snapshot from current internal locus state.
151
+ *
152
+ * @returns {LocusDTO}
153
+ */
154
+ private getCurrentLocusSnapshot;
149
155
  /**
150
156
  * Handles HTTP response from Locus API call.
151
157
  * @param {Meeting} meeting meeting object
@@ -167,6 +173,28 @@ export default class LocusInfo extends EventsScope {
167
173
  * @returns {void}
168
174
  */
169
175
  sendClassicVsHashTreeMismatchMetric(meeting: any, message: string): void;
176
+ /**
177
+ * Helper that handles the common logic for reactivating a stopped HashTreeParser when
178
+ * a newer "replaces" is detected. Used by both the message and API response parser switch methods.
179
+ *
180
+ * @param {string} callerName - name of the calling method, used in log messages
181
+ * @param {string} locusUrl - the locus URL of the stopped parser
182
+ * @param {HashTreeParserEntry} stoppedEntry - the stopped parser entry
183
+ * @param {ReplacesInfo} replaces - replacement info extracted from self
184
+ * @param {Function} resumeCallback - callback to invoke after reactivation to resume the parser
185
+ * @returns {void}
186
+ */
187
+ private resumeStoppedParser;
188
+ /**
189
+ * Handles an API response whose locusUrl doesn't match any active HashTreeParser
190
+ * (either no entry exists, or the existing entry is stopped).
191
+ * Creates a new parser or reactivates a stopped one using initializeFromGetLociResponse.
192
+ *
193
+ * @param {string} locusUrl - the locus URL from the API response
194
+ * @param {LocusDTO} locus - the locus DTO from the API response
195
+ * @returns {void}
196
+ */
197
+ private handleHashTreeParserSwitchForAPIResponse;
170
198
  /**
171
199
  * Checks if the hash tree message should trigger a switch to a different HashTreeParser
172
200
  *
@@ -183,13 +211,19 @@ export default class LocusInfo extends EventsScope {
183
211
  * @returns {void}
184
212
  */
185
213
  private handleHashTreeMessage;
214
+ /**
215
+ * Triggers a sync of all hash tree datasets for all hash tree parsers associated with this meeting.
216
+ * The syncs are executed sequentially within each parser.
217
+ *
218
+ * @returns {Promise<void>}
219
+ */
220
+ syncAllHashTreeDatasets(): Promise<void>;
186
221
  /**
187
222
  * Callback registered with HashTreeParser to receive locus info updates.
188
223
  * Updates our locus info based on the data parsed by the hash tree parser.
189
224
  *
190
225
  * @param {string} locusUrl - the locus URL for which the update is received
191
- * @param {LocusInfoUpdateType} updateType - The type of update received.
192
- * @param {Object} [data] - Additional data for the update, if applicable.
226
+ * @param {LocusInfoUpdate} update - Details about the update.
193
227
  * @returns {void}
194
228
  */
195
229
  private updateFromHashTree;
@@ -214,8 +248,8 @@ export default class LocusInfo extends EventsScope {
214
248
  * @param {string} debugText string explaining the trigger for this call, added to logs for debugging purposes
215
249
  * @param {object} locus locus object
216
250
  * @param {object} metadata locus hash trees metadata
217
- * @param {string} eventType locus event
218
251
  * @param {DataSet[]} dataSets
252
+ * @param {string} eventType locus event
219
253
  * @returns {void}
220
254
  */
221
255
  private onFullLocusWithHashTrees;
@@ -444,4 +478,10 @@ export default class LocusInfo extends EventsScope {
444
478
  * @memberof LocusInfo
445
479
  */
446
480
  clearMainSessionLocusCache(): void;
481
+ /**
482
+ * Cleans up all hash tree parsers and clears internal maps.
483
+ * @returns {void}
484
+ * @memberof LocusInfo
485
+ */
486
+ cleanUp(): void;
447
487
  }
@@ -1,14 +1,30 @@
1
+ import { Enum } from '../constants';
1
2
  import { HtMeta } from '../hashTree/types';
3
+ export declare const EndMeetingReason: {
4
+ readonly maxMeetingDuration: "MAX_MEETING_DURATION";
5
+ readonly allParticipantsLeft: "ALL_PARTICIPANTS_LEFT";
6
+ readonly sipHostLeft: "SIP_HOST_LEFT";
7
+ readonly noHost: "NO_HOST";
8
+ readonly waitingForMpsEndMeetingTimeout: "WAITING_FOR_MPS_END_MEETING_TIMEOUT";
9
+ readonly fraudDetection: "FRAUD_DETECTION";
10
+ readonly meetingEndedByHost: "MEETING_ENDED_BY_HOST";
11
+ readonly meetingUpdated: "MEETING_UPDATED";
12
+ readonly meetingCancelled: "MEETING_CANCELLED";
13
+ readonly autoEndWithSingleParticipant: "AUTO_END_WITH_SINGLE_PARTICIPANT";
14
+ readonly breakoutEnded: "BREAKOUT_ENDED";
15
+ };
16
+ export type EndMeetingReason = Enum<typeof EndMeetingReason>;
2
17
  export type LocusFullState = {
3
18
  active: boolean;
4
19
  count: number;
5
20
  lastActive: string;
6
21
  locked: boolean;
7
22
  sessionId: string;
8
- seessionIds: string[];
23
+ sessionIds: string[];
9
24
  startTime: number;
10
25
  state: string;
11
26
  type: string;
27
+ endMeetingReason?: EndMeetingReason;
12
28
  };
13
29
  export type Links = {
14
30
  services: Record<'breakout' | 'record', {
@@ -59,3 +75,7 @@ export type ReplacesInfo = {
59
75
  replacedAt: string;
60
76
  sessionId: string;
61
77
  };
78
+ export declare const LocusErrorCodes: {
79
+ readonly LOCUS_INACTIVE: 2403004;
80
+ };
81
+ export type LocusErrorCodes = Enum<typeof LocusErrorCodes>;
@@ -26,6 +26,7 @@ export default class MediaProperties {
26
26
  shareAudioStream?: LocalSystemAudioStream;
27
27
  videoDeviceId: any;
28
28
  videoStream?: LocalCameraStream;
29
+ srtpCipher: string | undefined;
29
30
  namespace: string;
30
31
  mediaIssueCounters: {
31
32
  [key: string]: number;
@@ -115,6 +115,7 @@ interface IInMeetingActions {
115
115
  canDisablePollingQA?: boolean;
116
116
  canAttendeeRequestAiAssistantEnabled?: boolean;
117
117
  isAttendeeRequestAiAssistantDeclinedAll?: boolean;
118
+ isAnonymizeDisplayNamesEnabled?: boolean;
118
119
  }
119
120
  /**
120
121
  * @class InMeetingActions
@@ -230,6 +231,7 @@ export default class InMeetingActions implements IInMeetingActions {
230
231
  canDisablePollingQA: any;
231
232
  canAttendeeRequestAiAssistantEnabled: any;
232
233
  isAttendeeRequestAiAssistantDeclinedAll: any;
234
+ isAnonymizeDisplayNamesEnabled: any;
233
235
  /**
234
236
  * Returns all meeting action options
235
237
  * @returns {Object}