mediasfu-angular 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/README.md +2068 -0
  2. package/dist/README.md +2068 -0
  3. package/dist/esm2022/lib/@types/types.mjs +2 -0
  4. package/dist/esm2022/lib/components/background-components/background-modal/background-modal.component.mjs +763 -0
  5. package/dist/esm2022/lib/components/breakout-components/breakout-rooms-modal.component.mjs +316 -0
  6. package/dist/esm2022/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.mjs +95 -0
  7. package/dist/esm2022/lib/components/breakout-components/room-list/room-list.component.mjs +40 -0
  8. package/dist/esm2022/lib/components/co-host-components/co-host-modal/co-host-modal.component.mjs +246 -0
  9. package/dist/esm2022/lib/components/display-components/alert-component/alert.component.component.mjs +73 -0
  10. package/dist/esm2022/lib/components/display-components/audio-card/audio-card.component.mjs +297 -0
  11. package/dist/esm2022/lib/components/display-components/audio-grid/audio-grid.component.mjs +60 -0
  12. package/dist/esm2022/lib/components/display-components/card-video-display/card-video-display.component.mjs +94 -0
  13. package/dist/esm2022/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.mjs +100 -0
  14. package/dist/esm2022/lib/components/display-components/control-buttons-component/control-buttons-component.component.mjs +231 -0
  15. package/dist/esm2022/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.mjs +298 -0
  16. package/dist/esm2022/lib/components/display-components/control-widgets/menu-participants-widget.component.mjs +61 -0
  17. package/dist/esm2022/lib/components/display-components/control-widgets/menu-record-widget.component.mjs +43 -0
  18. package/dist/esm2022/lib/components/display-components/control-widgets/menu-widget.component.mjs +114 -0
  19. package/dist/esm2022/lib/components/display-components/control-widgets/message-widget.component.mjs +114 -0
  20. package/dist/esm2022/lib/components/display-components/control-widgets/record-timer-widget.component.mjs +36 -0
  21. package/dist/esm2022/lib/components/display-components/control-widgets/screenshare-widget.component.mjs +74 -0
  22. package/dist/esm2022/lib/components/display-components/flexible-grid/flexible-grid.component.mjs +142 -0
  23. package/dist/esm2022/lib/components/display-components/flexible-video/flexible-video.component.mjs +265 -0
  24. package/dist/esm2022/lib/components/display-components/loading-modal/loading-modal.component.mjs +100 -0
  25. package/dist/esm2022/lib/components/display-components/main-aspect-component/main-aspect-component.component.mjs +132 -0
  26. package/dist/esm2022/lib/components/display-components/main-container-component/main-container-component.component.mjs +119 -0
  27. package/dist/esm2022/lib/components/display-components/main-grid-component/main-grid-component.component.mjs +106 -0
  28. package/dist/esm2022/lib/components/display-components/main-screen-component/main-screen-component.component.mjs +180 -0
  29. package/dist/esm2022/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.mjs +120 -0
  30. package/dist/esm2022/lib/components/display-components/mini-audio/mini-audio.component.mjs +326 -0
  31. package/dist/esm2022/lib/components/display-components/mini-card/mini-card.component.mjs +165 -0
  32. package/dist/esm2022/lib/components/display-components/mini-card-audio/mini-card-audio.component.mjs +230 -0
  33. package/dist/esm2022/lib/components/display-components/other-grid-component/other-grid-component.component.mjs +111 -0
  34. package/dist/esm2022/lib/components/display-components/pagination/pagination.component.mjs +328 -0
  35. package/dist/esm2022/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.mjs +118 -0
  36. package/dist/esm2022/lib/components/display-components/video-card/video-card.component.mjs +330 -0
  37. package/dist/esm2022/lib/components/display-settings-components/display-settings-modal.component.mjs +95 -0
  38. package/dist/esm2022/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.mjs +190 -0
  39. package/dist/esm2022/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.mjs +119 -0
  40. package/dist/esm2022/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.mjs +209 -0
  41. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-broadcast.component.mjs +4187 -0
  42. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-chat.component.mjs +3703 -0
  43. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-conference.component.mjs +5022 -0
  44. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-generic.component.mjs +5331 -0
  45. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-webinar.component.mjs +5021 -0
  46. package/dist/esm2022/lib/components/menu-components/custom-buttons/custom-buttons.component.mjs +85 -0
  47. package/dist/esm2022/lib/components/menu-components/meeting-id-component/meeting-id-component.component.mjs +22 -0
  48. package/dist/esm2022/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.mjs +22 -0
  49. package/dist/esm2022/lib/components/menu-components/menu-modal/menu-modal.component.mjs +132 -0
  50. package/dist/esm2022/lib/components/menu-components/share-buttons-component/share-buttons-component.component.mjs +104 -0
  51. package/dist/esm2022/lib/components/message-components/message-panel/message-panel.component.mjs +204 -0
  52. package/dist/esm2022/lib/components/message-components/messages-modal/messages-modal.component.mjs +243 -0
  53. package/dist/esm2022/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.mjs +147 -0
  54. package/dist/esm2022/lib/components/misc-components/pre-join-page/pre-join-page.component.mjs +335 -0
  55. package/dist/esm2022/lib/components/misc-components/share-event-modal/share-event-modal.component.mjs +113 -0
  56. package/dist/esm2022/lib/components/misc-components/welcome-page/welcome-page.component.mjs +226 -0
  57. package/dist/esm2022/lib/components/participants-components/participant-list/participant-list.component.mjs +63 -0
  58. package/dist/esm2022/lib/components/participants-components/participant-list-item/participant-list-item.component.mjs +120 -0
  59. package/dist/esm2022/lib/components/participants-components/participant-list-others/participant-list-others.component.mjs +23 -0
  60. package/dist/esm2022/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.mjs +43 -0
  61. package/dist/esm2022/lib/components/participants-components/participants-modal/participants-modal.component.mjs +100 -0
  62. package/dist/esm2022/lib/components/polls-components/poll-modal/poll-modal.component.mjs +174 -0
  63. package/dist/esm2022/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.mjs +77 -0
  64. package/dist/esm2022/lib/components/recording-components/recording-modal/recording-modal.component.mjs +121 -0
  65. package/dist/esm2022/lib/components/recording-components/standard-panel-component/standard-panel-component.component.mjs +85 -0
  66. package/dist/esm2022/lib/components/requests-components/render-request-component/render-request-component.component.mjs +59 -0
  67. package/dist/esm2022/lib/components/requests-components/requests-modal/requests-modal.component.mjs +130 -0
  68. package/dist/esm2022/lib/components/screenboard-components/screenboard/screenboard.component.mjs +617 -0
  69. package/dist/esm2022/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.mjs +380 -0
  70. package/dist/esm2022/lib/components/waiting-components/waiting-room-modal.component.mjs +142 -0
  71. package/dist/esm2022/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.mjs +265 -0
  72. package/dist/esm2022/lib/components/whiteboard-components/whiteboard/whiteboard.component.mjs +1784 -0
  73. package/dist/esm2022/lib/consumers/add-videos-grid.service.mjs +296 -0
  74. package/dist/esm2022/lib/consumers/auto-adjust.service.mjs +83 -0
  75. package/dist/esm2022/lib/consumers/calculate-rows-and-columns.service.mjs +42 -0
  76. package/dist/esm2022/lib/consumers/change-vids.service.mjs +486 -0
  77. package/dist/esm2022/lib/consumers/check-grid.service.mjs +79 -0
  78. package/dist/esm2022/lib/consumers/check-permission.service.mjs +80 -0
  79. package/dist/esm2022/lib/consumers/check-screen-share.service.mjs +71 -0
  80. package/dist/esm2022/lib/consumers/close-and-resize.service.mjs +229 -0
  81. package/dist/esm2022/lib/consumers/compare-active-names.service.mjs +75 -0
  82. package/dist/esm2022/lib/consumers/compare-screen-states.service.mjs +63 -0
  83. package/dist/esm2022/lib/consumers/connect-ips.service.mjs +112 -0
  84. package/dist/esm2022/lib/consumers/connect-recv-transport.service.mjs +113 -0
  85. package/dist/esm2022/lib/consumers/connect-send-transport-audio.service.mjs +46 -0
  86. package/dist/esm2022/lib/consumers/connect-send-transport-screen.service.mjs +62 -0
  87. package/dist/esm2022/lib/consumers/connect-send-transport-video.service.mjs +55 -0
  88. package/dist/esm2022/lib/consumers/connect-send-transport.service.mjs +86 -0
  89. package/dist/esm2022/lib/consumers/consumer-resume.service.mjs +332 -0
  90. package/dist/esm2022/lib/consumers/control-media.service.mjs +68 -0
  91. package/dist/esm2022/lib/consumers/create-send-transport.service.mjs +126 -0
  92. package/dist/esm2022/lib/consumers/disconnect-send-transport-audio.service.mjs +58 -0
  93. package/dist/esm2022/lib/consumers/disconnect-send-transport-screen.service.mjs +45 -0
  94. package/dist/esm2022/lib/consumers/disconnect-send-transport-video.service.mjs +56 -0
  95. package/dist/esm2022/lib/consumers/disp-streams.service.mjs +421 -0
  96. package/dist/esm2022/lib/consumers/generate-page-content.service.mjs +59 -0
  97. package/dist/esm2022/lib/consumers/get-estimate.service.mjs +70 -0
  98. package/dist/esm2022/lib/consumers/get-piped-producers-alt.service.mjs +49 -0
  99. package/dist/esm2022/lib/consumers/get-producers-piped.service.mjs +46 -0
  100. package/dist/esm2022/lib/consumers/get-videos.service.mjs +58 -0
  101. package/dist/esm2022/lib/consumers/mix-streams.service.mjs +73 -0
  102. package/dist/esm2022/lib/consumers/on-screen-changes.service.mjs +63 -0
  103. package/dist/esm2022/lib/consumers/prepopulate-user-media.service.mjs +442 -0
  104. package/dist/esm2022/lib/consumers/process-consumer-transports-audio.service.mjs +72 -0
  105. package/dist/esm2022/lib/consumers/process-consumer-transports.service.mjs +91 -0
  106. package/dist/esm2022/lib/consumers/re-port.service.mjs +66 -0
  107. package/dist/esm2022/lib/consumers/re-update-inter.service.mjs +157 -0
  108. package/dist/esm2022/lib/consumers/readjust.service.mjs +123 -0
  109. package/dist/esm2022/lib/consumers/receive-all-piped-transports.service.mjs +56 -0
  110. package/dist/esm2022/lib/consumers/receive-room-messages.service.mjs +42 -0
  111. package/dist/esm2022/lib/consumers/reorder-streams.service.mjs +181 -0
  112. package/dist/esm2022/lib/consumers/request-screen-share.service.mjs +67 -0
  113. package/dist/esm2022/lib/consumers/resume-pause-audio-streams.service.mjs +99 -0
  114. package/dist/esm2022/lib/consumers/resume-pause-streams.service.mjs +70 -0
  115. package/dist/esm2022/lib/consumers/resume-send-transport-audio.service.mjs +55 -0
  116. package/dist/esm2022/lib/consumers/signal-new-consumer-transport.service.mjs +136 -0
  117. package/dist/esm2022/lib/consumers/socket-receive-methods/join-consume-room.service.mjs +63 -0
  118. package/dist/esm2022/lib/consumers/socket-receive-methods/new-pipe-producer.service.mjs +61 -0
  119. package/dist/esm2022/lib/consumers/socket-receive-methods/producer-closed.service.mjs +51 -0
  120. package/dist/esm2022/lib/consumers/start-share-screen.service.mjs +80 -0
  121. package/dist/esm2022/lib/consumers/stop-share-screen.service.mjs +120 -0
  122. package/dist/esm2022/lib/consumers/stream-success-audio-switch.service.mjs +132 -0
  123. package/dist/esm2022/lib/consumers/stream-success-audio.service.mjs +149 -0
  124. package/dist/esm2022/lib/consumers/stream-success-screen.service.mjs +143 -0
  125. package/dist/esm2022/lib/consumers/stream-success-video.service.mjs +202 -0
  126. package/dist/esm2022/lib/consumers/switch-user-audio.service.mjs +87 -0
  127. package/dist/esm2022/lib/consumers/switch-user-video-alt.service.mjs +228 -0
  128. package/dist/esm2022/lib/consumers/switch-user-video.service.mjs +125 -0
  129. package/dist/esm2022/lib/consumers/trigger.service.mjs +172 -0
  130. package/dist/esm2022/lib/consumers/update-mini-cards-grid.service.mjs +81 -0
  131. package/dist/esm2022/lib/consumers/update-participant-audio-decibels.service.mjs +39 -0
  132. package/dist/esm2022/lib/methods/background-methods/launch-background.service.mjs +23 -0
  133. package/dist/esm2022/lib/methods/breakout-room-methods/breakout-room-updated.service.mjs +112 -0
  134. package/dist/esm2022/lib/methods/breakout-room-methods/launch-breakout-rooms.service.mjs +22 -0
  135. package/dist/esm2022/lib/methods/co-host-methods/launch-co-host.service.mjs +22 -0
  136. package/dist/esm2022/lib/methods/co-host-methods/modify-co-host-settings.service.mjs +60 -0
  137. package/dist/esm2022/lib/methods/display-settings-methods/launch-display-settings.service.mjs +24 -0
  138. package/dist/esm2022/lib/methods/display-settings-methods/modify-display-settings.service.mjs +119 -0
  139. package/dist/esm2022/lib/methods/exit-methods/confirm-exit.service.mjs +28 -0
  140. package/dist/esm2022/lib/methods/exit-methods/launch-confirm-exit.service.mjs +22 -0
  141. package/dist/esm2022/lib/methods/media-settings-methods/launch-media-settings.service.mjs +50 -0
  142. package/dist/esm2022/lib/methods/menu-methods/launch-menu-modal.service.mjs +22 -0
  143. package/dist/esm2022/lib/methods/message-methods/launch-messages.service.mjs +23 -0
  144. package/dist/esm2022/lib/methods/message-methods/send-message.service.mjs +94 -0
  145. package/dist/esm2022/lib/methods/participants-methods/launch-participants.service.mjs +23 -0
  146. package/dist/esm2022/lib/methods/participants-methods/message-participants.service.mjs +52 -0
  147. package/dist/esm2022/lib/methods/participants-methods/mute-participants.service.mjs +57 -0
  148. package/dist/esm2022/lib/methods/participants-methods/remove-participants.service.mjs +62 -0
  149. package/dist/esm2022/lib/methods/polls-methods/handle-create-poll.service.mjs +37 -0
  150. package/dist/esm2022/lib/methods/polls-methods/handle-end-poll.service.mjs +40 -0
  151. package/dist/esm2022/lib/methods/polls-methods/handle-vote-poll.service.mjs +49 -0
  152. package/dist/esm2022/lib/methods/polls-methods/launch-poll.service.mjs +23 -0
  153. package/dist/esm2022/lib/methods/polls-methods/poll-updated.service.mjs +64 -0
  154. package/dist/esm2022/lib/methods/recording-methods/check-pause-state.service.mjs +45 -0
  155. package/dist/esm2022/lib/methods/recording-methods/check-resume-state.service.mjs +34 -0
  156. package/dist/esm2022/lib/methods/recording-methods/confirm-recording.service.mjs +215 -0
  157. package/dist/esm2022/lib/methods/recording-methods/launch-recording.service.mjs +82 -0
  158. package/dist/esm2022/lib/methods/recording-methods/record-pause-timer.service.mjs +40 -0
  159. package/dist/esm2022/lib/methods/recording-methods/record-resume-timer.service.mjs +86 -0
  160. package/dist/esm2022/lib/methods/recording-methods/record-start-timer.service.mjs +89 -0
  161. package/dist/esm2022/lib/methods/recording-methods/record-update-timer.service.mjs +48 -0
  162. package/dist/esm2022/lib/methods/recording-methods/start-recording.service.mjs +147 -0
  163. package/dist/esm2022/lib/methods/recording-methods/stop-recording.service.mjs +74 -0
  164. package/dist/esm2022/lib/methods/recording-methods/update-recording.service.mjs +224 -0
  165. package/dist/esm2022/lib/methods/requests-methods/launch-requests.service.mjs +26 -0
  166. package/dist/esm2022/lib/methods/requests-methods/respond-to-requests.service.mjs +45 -0
  167. package/dist/esm2022/lib/methods/settings-methods/launch-settings.service.mjs +26 -0
  168. package/dist/esm2022/lib/methods/settings-methods/modify-settings.service.mjs +67 -0
  169. package/dist/esm2022/lib/methods/stream-methods/click-audio.service.mjs +178 -0
  170. package/dist/esm2022/lib/methods/stream-methods/click-chat.service.mjs +44 -0
  171. package/dist/esm2022/lib/methods/stream-methods/click-screen-share.service.mjs +110 -0
  172. package/dist/esm2022/lib/methods/stream-methods/click-video.service.mjs +183 -0
  173. package/dist/esm2022/lib/methods/stream-methods/switch-audio.service.mjs +33 -0
  174. package/dist/esm2022/lib/methods/stream-methods/switch-video-alt.service.mjs +66 -0
  175. package/dist/esm2022/lib/methods/stream-methods/switch-video.service.mjs +76 -0
  176. package/dist/esm2022/lib/methods/utils/format-number.service.mjs +45 -0
  177. package/dist/esm2022/lib/methods/utils/generate-random-messages.service.mjs +87 -0
  178. package/dist/esm2022/lib/methods/utils/generate-random-participants.service.mjs +99 -0
  179. package/dist/esm2022/lib/methods/utils/generate-random-polls.service.mjs +52 -0
  180. package/dist/esm2022/lib/methods/utils/generate-random-request-list.service.mjs +54 -0
  181. package/dist/esm2022/lib/methods/utils/generate-random-waiting-room-list.service.mjs +38 -0
  182. package/dist/esm2022/lib/methods/utils/get-modal-position.util.mjs +22 -0
  183. package/dist/esm2022/lib/methods/utils/get-overlay-position.util.mjs +21 -0
  184. package/dist/esm2022/lib/methods/utils/initial-values.util.mjs +369 -0
  185. package/dist/esm2022/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.mjs +59 -0
  186. package/dist/esm2022/lib/methods/utils/mini-audio-player/mini-audio-player.component.mjs +260 -0
  187. package/dist/esm2022/lib/methods/utils/producer/a-params.service.mjs +21 -0
  188. package/dist/esm2022/lib/methods/utils/producer/h-params.service.mjs +37 -0
  189. package/dist/esm2022/lib/methods/utils/producer/screen-params.service.mjs +24 -0
  190. package/dist/esm2022/lib/methods/utils/producer/v-params.service.mjs +37 -0
  191. package/dist/esm2022/lib/methods/utils/producer/video-capture-constraints.service.mjs +38 -0
  192. package/dist/esm2022/lib/methods/utils/sleep.util.mjs +11 -0
  193. package/dist/esm2022/lib/methods/utils/sound-player.service.mjs +42 -0
  194. package/dist/esm2022/lib/methods/utils/validate-alphanumeric.service.mjs +33 -0
  195. package/dist/esm2022/lib/methods/waiting-methods/launch-waiting.service.mjs +23 -0
  196. package/dist/esm2022/lib/methods/waiting-methods/respond-to-waiting.service.mjs +40 -0
  197. package/dist/esm2022/lib/methods/whiteboard-methods/capture-canvas-stream.service.mjs +69 -0
  198. package/dist/esm2022/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.mjs +24 -0
  199. package/dist/esm2022/lib/producer-client/producer-client-emits/create-device-client.service.mjs +51 -0
  200. package/dist/esm2022/lib/producer-client/producer-client-emits/join-room-client.service.mjs +65 -0
  201. package/dist/esm2022/lib/producer-client/producer-client-emits/update-room-parameters-client.service.mjs +232 -0
  202. package/dist/esm2022/lib/producers/producer-emits/join-con-room.service.mjs +114 -0
  203. package/dist/esm2022/lib/producers/producer-emits/join-room.service.mjs +114 -0
  204. package/dist/esm2022/lib/producers/socket-receive-methods/all-members-rest.service.mjs +155 -0
  205. package/dist/esm2022/lib/producers/socket-receive-methods/all-members.service.mjs +147 -0
  206. package/dist/esm2022/lib/producers/socket-receive-methods/all-waiting-room-members.service.mjs +30 -0
  207. package/dist/esm2022/lib/producers/socket-receive-methods/ban-participant.service.mjs +40 -0
  208. package/dist/esm2022/lib/producers/socket-receive-methods/control-media-host.service.mjs +146 -0
  209. package/dist/esm2022/lib/producers/socket-receive-methods/disconnect-user-self.service.mjs +26 -0
  210. package/dist/esm2022/lib/producers/socket-receive-methods/disconnect.service.mjs +38 -0
  211. package/dist/esm2022/lib/producers/socket-receive-methods/get-domains.service.mjs +63 -0
  212. package/dist/esm2022/lib/producers/socket-receive-methods/host-request-response.service.mjs +167 -0
  213. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-ended.service.mjs +44 -0
  214. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-still-there.service.mjs +24 -0
  215. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-time-remaining.service.mjs +36 -0
  216. package/dist/esm2022/lib/producers/socket-receive-methods/participant-requested.service.mjs +32 -0
  217. package/dist/esm2022/lib/producers/socket-receive-methods/person-joined.service.mjs +29 -0
  218. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-closed.service.mjs +68 -0
  219. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-paused.service.mjs +90 -0
  220. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-resumed.service.mjs +54 -0
  221. package/dist/esm2022/lib/producers/socket-receive-methods/re-initiate-recording.service.mjs +38 -0
  222. package/dist/esm2022/lib/producers/socket-receive-methods/receive-message.service.mjs +96 -0
  223. package/dist/esm2022/lib/producers/socket-receive-methods/recording-notice.service.mjs +195 -0
  224. package/dist/esm2022/lib/producers/socket-receive-methods/room-record-params.service.mjs +59 -0
  225. package/dist/esm2022/lib/producers/socket-receive-methods/screen-producer-id.service.mjs +45 -0
  226. package/dist/esm2022/lib/producers/socket-receive-methods/start-records.service.mjs +35 -0
  227. package/dist/esm2022/lib/producers/socket-receive-methods/stopped-recording.service.mjs +37 -0
  228. package/dist/esm2022/lib/producers/socket-receive-methods/time-left-recording.service.mjs +36 -0
  229. package/dist/esm2022/lib/producers/socket-receive-methods/update-consuming-domains.service.mjs +63 -0
  230. package/dist/esm2022/lib/producers/socket-receive-methods/update-media-settings.service.mjs +36 -0
  231. package/dist/esm2022/lib/producers/socket-receive-methods/updated-co-host.service.mjs +56 -0
  232. package/dist/esm2022/lib/producers/socket-receive-methods/user-waiting.service.mjs +78 -0
  233. package/dist/esm2022/lib/sockets/socket-manager.service.mjs +73 -0
  234. package/dist/esm2022/mediasfu-angular.mjs +5 -0
  235. package/dist/esm2022/public-api.mjs +187 -0
  236. package/dist/fesm2022/mediasfu-angular.mjs +47885 -0
  237. package/dist/fesm2022/mediasfu-angular.mjs.map +1 -0
  238. package/dist/index.d.ts +5 -0
  239. package/dist/lib/@types/types.d.ts +634 -0
  240. package/dist/lib/components/background-components/background-modal/background-modal.component.d.ts +146 -0
  241. package/dist/lib/components/breakout-components/breakout-rooms-modal.component.d.ts +112 -0
  242. package/dist/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.d.ts +54 -0
  243. package/dist/lib/components/breakout-components/room-list/room-list.component.d.ts +20 -0
  244. package/dist/lib/components/co-host-components/co-host-modal/co-host-modal.component.d.ts +86 -0
  245. package/dist/lib/components/display-components/alert-component/alert.component.component.d.ts +50 -0
  246. package/dist/lib/components/display-components/audio-card/audio-card.component.d.ts +84 -0
  247. package/dist/lib/components/display-components/audio-grid/audio-grid.component.d.ts +23 -0
  248. package/dist/lib/components/display-components/card-video-display/card-video-display.component.d.ts +37 -0
  249. package/dist/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.d.ts +88 -0
  250. package/dist/lib/components/display-components/control-buttons-component/control-buttons-component.component.d.ts +52 -0
  251. package/dist/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.d.ts +100 -0
  252. package/dist/lib/components/display-components/control-widgets/menu-participants-widget.component.d.ts +10 -0
  253. package/dist/lib/components/display-components/control-widgets/menu-record-widget.component.d.ts +18 -0
  254. package/dist/lib/components/display-components/control-widgets/menu-widget.component.d.ts +11 -0
  255. package/dist/lib/components/display-components/control-widgets/message-widget.component.d.ts +11 -0
  256. package/dist/lib/components/display-components/control-widgets/record-timer-widget.component.d.ts +7 -0
  257. package/dist/lib/components/display-components/control-widgets/screenshare-widget.component.d.ts +12 -0
  258. package/dist/lib/components/display-components/flexible-grid/flexible-grid.component.d.ts +70 -0
  259. package/dist/lib/components/display-components/flexible-video/flexible-video.component.d.ts +97 -0
  260. package/dist/lib/components/display-components/loading-modal/loading-modal.component.d.ts +70 -0
  261. package/dist/lib/components/display-components/main-aspect-component/main-aspect-component.component.d.ts +72 -0
  262. package/dist/lib/components/display-components/main-container-component/main-container-component.component.d.ts +63 -0
  263. package/dist/lib/components/display-components/main-grid-component/main-grid-component.component.d.ts +67 -0
  264. package/dist/lib/components/display-components/main-screen-component/main-screen-component.component.d.ts +82 -0
  265. package/dist/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.d.ts +82 -0
  266. package/dist/lib/components/display-components/mini-audio/mini-audio.component.d.ts +128 -0
  267. package/dist/lib/components/display-components/mini-card/mini-card.component.d.ts +1085 -0
  268. package/dist/lib/components/display-components/mini-card-audio/mini-card-audio.component.d.ts +95 -0
  269. package/dist/lib/components/display-components/other-grid-component/other-grid-component.component.d.ts +45 -0
  270. package/dist/lib/components/display-components/pagination/pagination.component.d.ts +112 -0
  271. package/dist/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.d.ts +61 -0
  272. package/dist/lib/components/display-components/video-card/video-card.component.d.ts +89 -0
  273. package/dist/lib/components/display-settings-components/display-settings-modal.component.d.ts +65 -0
  274. package/dist/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.d.ts +124 -0
  275. package/dist/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.d.ts +71 -0
  276. package/dist/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.d.ts +123 -0
  277. package/dist/lib/components/mediasfu-components/mediasfu-broadcast.component.d.ts +5264 -0
  278. package/dist/lib/components/mediasfu-components/mediasfu-chat.component.d.ts +5194 -0
  279. package/dist/lib/components/mediasfu-components/mediasfu-conference.component.d.ts +6825 -0
  280. package/dist/lib/components/mediasfu-components/mediasfu-generic.component.d.ts +6851 -0
  281. package/dist/lib/components/mediasfu-components/mediasfu-webinar.component.d.ts +6825 -0
  282. package/dist/lib/components/menu-components/custom-buttons/custom-buttons.component.d.ts +83 -0
  283. package/dist/lib/components/menu-components/meeting-id-component/meeting-id-component.component.d.ts +18 -0
  284. package/dist/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.d.ts +18 -0
  285. package/dist/lib/components/menu-components/menu-modal/menu-modal.component.d.ts +91 -0
  286. package/dist/lib/components/menu-components/share-buttons-component/share-buttons-component.component.d.ts +46 -0
  287. package/dist/lib/components/message-components/message-panel/message-panel.component.d.ts +112 -0
  288. package/dist/lib/components/message-components/messages-modal/messages-modal.component.d.ts +124 -0
  289. package/dist/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.d.ts +92 -0
  290. package/dist/lib/components/misc-components/pre-join-page/pre-join-page.component.d.ts +159 -0
  291. package/dist/lib/components/misc-components/share-event-modal/share-event-modal.component.d.ts +77 -0
  292. package/dist/lib/components/misc-components/welcome-page/welcome-page.component.d.ts +47 -0
  293. package/dist/lib/components/participants-components/participant-list/participant-list.component.d.ts +41 -0
  294. package/dist/lib/components/participants-components/participant-list-item/participant-list-item.component.d.ts +53 -0
  295. package/dist/lib/components/participants-components/participant-list-others/participant-list-others.component.d.ts +15 -0
  296. package/dist/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.d.ts +17 -0
  297. package/dist/lib/components/participants-components/participants-modal/participants-modal.component.d.ts +70 -0
  298. package/dist/lib/components/polls-components/poll-modal/poll-modal.component.d.ts +76 -0
  299. package/dist/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.d.ts +48 -0
  300. package/dist/lib/components/recording-components/recording-modal/recording-modal.component.d.ts +117 -0
  301. package/dist/lib/components/recording-components/standard-panel-component/standard-panel-component.component.d.ts +58 -0
  302. package/dist/lib/components/requests-components/render-request-component/render-request-component.component.d.ts +34 -0
  303. package/dist/lib/components/requests-components/requests-modal/requests-modal.component.d.ts +94 -0
  304. package/dist/lib/components/screenboard-components/screenboard/screenboard.component.d.ts +210 -0
  305. package/dist/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.d.ts +103 -0
  306. package/dist/lib/components/waiting-components/waiting-room-modal.component.d.ts +85 -0
  307. package/dist/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.d.ts +103 -0
  308. package/dist/lib/components/whiteboard-components/whiteboard/whiteboard.component.d.ts +414 -0
  309. package/dist/lib/consumers/add-videos-grid.service.d.ts +35 -0
  310. package/dist/lib/consumers/auto-adjust.service.d.ts +25 -0
  311. package/dist/lib/consumers/calculate-rows-and-columns.service.d.ts +17 -0
  312. package/dist/lib/consumers/change-vids.service.d.ts +137 -0
  313. package/dist/lib/consumers/check-grid.service.d.ts +30 -0
  314. package/dist/lib/consumers/check-permission.service.d.ts +26 -0
  315. package/dist/lib/consumers/check-screen-share.service.d.ts +41 -0
  316. package/dist/lib/consumers/close-and-resize.service.d.ts +107 -0
  317. package/dist/lib/consumers/compare-active-names.service.d.ts +37 -0
  318. package/dist/lib/consumers/compare-screen-states.service.d.ts +40 -0
  319. package/dist/lib/consumers/connect-ips.service.d.ts +59 -0
  320. package/dist/lib/consumers/connect-recv-transport.service.d.ts +58 -0
  321. package/dist/lib/consumers/connect-send-transport-audio.service.d.ts +33 -0
  322. package/dist/lib/consumers/connect-send-transport-screen.service.d.ts +42 -0
  323. package/dist/lib/consumers/connect-send-transport-video.service.d.ts +41 -0
  324. package/dist/lib/consumers/connect-send-transport.service.d.ts +49 -0
  325. package/dist/lib/consumers/consumer-resume.service.d.ts +85 -0
  326. package/dist/lib/consumers/control-media.service.d.ts +40 -0
  327. package/dist/lib/consumers/create-send-transport.service.d.ts +46 -0
  328. package/dist/lib/consumers/disconnect-send-transport-audio.service.d.ts +49 -0
  329. package/dist/lib/consumers/disconnect-send-transport-screen.service.d.ts +36 -0
  330. package/dist/lib/consumers/disconnect-send-transport-video.service.d.ts +43 -0
  331. package/dist/lib/consumers/disp-streams.service.d.ts +92 -0
  332. package/dist/lib/consumers/generate-page-content.service.d.ts +41 -0
  333. package/dist/lib/consumers/get-estimate.service.d.ts +46 -0
  334. package/dist/lib/consumers/get-piped-producers-alt.service.d.ts +33 -0
  335. package/dist/lib/consumers/get-producers-piped.service.d.ts +33 -0
  336. package/dist/lib/consumers/get-videos.service.d.ts +28 -0
  337. package/dist/lib/consumers/mix-streams.service.d.ts +32 -0
  338. package/dist/lib/consumers/on-screen-changes.service.d.ts +44 -0
  339. package/dist/lib/consumers/prepopulate-user-media.service.d.ts +107 -0
  340. package/dist/lib/consumers/process-consumer-transports-audio.service.d.ts +30 -0
  341. package/dist/lib/consumers/process-consumer-transports.service.d.ts +42 -0
  342. package/dist/lib/consumers/re-port.service.d.ts +55 -0
  343. package/dist/lib/consumers/re-update-inter.service.d.ts +83 -0
  344. package/dist/lib/consumers/readjust.service.d.ts +48 -0
  345. package/dist/lib/consumers/receive-all-piped-transports.service.d.ts +33 -0
  346. package/dist/lib/consumers/receive-room-messages.service.d.ts +22 -0
  347. package/dist/lib/consumers/reorder-streams.service.d.ts +72 -0
  348. package/dist/lib/consumers/request-screen-share.service.d.ts +38 -0
  349. package/dist/lib/consumers/resume-pause-audio-streams.service.d.ts +41 -0
  350. package/dist/lib/consumers/resume-pause-streams.service.d.ts +36 -0
  351. package/dist/lib/consumers/resume-send-transport-audio.service.d.ts +43 -0
  352. package/dist/lib/consumers/signal-new-consumer-transport.service.d.ts +63 -0
  353. package/dist/lib/consumers/socket-receive-methods/join-consume-room.service.d.ts +43 -0
  354. package/dist/lib/consumers/socket-receive-methods/new-pipe-producer.service.d.ts +46 -0
  355. package/dist/lib/consumers/socket-receive-methods/producer-closed.service.d.ts +27 -0
  356. package/dist/lib/consumers/start-share-screen.service.d.ts +38 -0
  357. package/dist/lib/consumers/stop-share-screen.service.d.ts +86 -0
  358. package/dist/lib/consumers/stream-success-audio-switch.service.d.ts +90 -0
  359. package/dist/lib/consumers/stream-success-audio.service.d.ts +100 -0
  360. package/dist/lib/consumers/stream-success-screen.service.d.ts +78 -0
  361. package/dist/lib/consumers/stream-success-video.service.d.ts +76 -0
  362. package/dist/lib/consumers/switch-user-audio.service.d.ts +41 -0
  363. package/dist/lib/consumers/switch-user-video-alt.service.d.ts +43 -0
  364. package/dist/lib/consumers/switch-user-video.service.d.ts +61 -0
  365. package/dist/lib/consumers/trigger.service.d.ts +72 -0
  366. package/dist/lib/consumers/update-mini-cards-grid.service.d.ts +54 -0
  367. package/dist/lib/consumers/update-participant-audio-decibels.service.d.ts +25 -0
  368. package/dist/lib/methods/background-methods/launch-background.service.d.ts +18 -0
  369. package/dist/lib/methods/breakout-room-methods/breakout-room-updated.service.d.ts +63 -0
  370. package/dist/lib/methods/breakout-room-methods/launch-breakout-rooms.service.d.ts +17 -0
  371. package/dist/lib/methods/co-host-methods/launch-co-host.service.d.ts +17 -0
  372. package/dist/lib/methods/co-host-methods/modify-co-host-settings.service.d.ts +42 -0
  373. package/dist/lib/methods/display-settings-methods/launch-display-settings.service.d.ts +17 -0
  374. package/dist/lib/methods/display-settings-methods/modify-display-settings.service.d.ts +74 -0
  375. package/dist/lib/methods/exit-methods/confirm-exit.service.d.ts +24 -0
  376. package/dist/lib/methods/exit-methods/launch-confirm-exit.service.d.ts +17 -0
  377. package/dist/lib/methods/media-settings-methods/launch-media-settings.service.d.ts +27 -0
  378. package/dist/lib/methods/menu-methods/launch-menu-modal.service.d.ts +17 -0
  379. package/dist/lib/methods/message-methods/launch-messages.service.d.ts +18 -0
  380. package/dist/lib/methods/message-methods/send-message.service.d.ts +48 -0
  381. package/dist/lib/methods/participants-methods/launch-participants.service.d.ts +18 -0
  382. package/dist/lib/methods/participants-methods/message-participants.service.d.ts +34 -0
  383. package/dist/lib/methods/participants-methods/mute-participants.service.d.ts +36 -0
  384. package/dist/lib/methods/participants-methods/remove-participants.service.d.ts +38 -0
  385. package/dist/lib/methods/polls-methods/handle-create-poll.service.d.ts +24 -0
  386. package/dist/lib/methods/polls-methods/handle-end-poll.service.d.ts +27 -0
  387. package/dist/lib/methods/polls-methods/handle-vote-poll.service.d.ts +33 -0
  388. package/dist/lib/methods/polls-methods/launch-poll.service.d.ts +18 -0
  389. package/dist/lib/methods/polls-methods/poll-updated.service.d.ts +34 -0
  390. package/dist/lib/methods/recording-methods/check-pause-state.service.d.ts +26 -0
  391. package/dist/lib/methods/recording-methods/check-resume-state.service.d.ts +23 -0
  392. package/dist/lib/methods/recording-methods/confirm-recording.service.d.ts +78 -0
  393. package/dist/lib/methods/recording-methods/launch-recording.service.d.ts +42 -0
  394. package/dist/lib/methods/recording-methods/record-pause-timer.service.d.ts +25 -0
  395. package/dist/lib/methods/recording-methods/record-resume-timer.service.d.ts +47 -0
  396. package/dist/lib/methods/recording-methods/record-start-timer.service.d.ts +58 -0
  397. package/dist/lib/methods/recording-methods/record-update-timer.service.d.ts +29 -0
  398. package/dist/lib/methods/recording-methods/start-recording.service.d.ts +83 -0
  399. package/dist/lib/methods/recording-methods/stop-recording.service.d.ts +37 -0
  400. package/dist/lib/methods/recording-methods/update-recording.service.d.ts +88 -0
  401. package/dist/lib/methods/requests-methods/launch-requests.service.d.ts +19 -0
  402. package/dist/lib/methods/requests-methods/respond-to-requests.service.d.ts +30 -0
  403. package/dist/lib/methods/settings-methods/launch-settings.service.d.ts +19 -0
  404. package/dist/lib/methods/settings-methods/modify-settings.service.d.ts +44 -0
  405. package/dist/lib/methods/stream-methods/click-audio.service.d.ts +73 -0
  406. package/dist/lib/methods/stream-methods/click-chat.service.d.ts +27 -0
  407. package/dist/lib/methods/stream-methods/click-screen-share.service.d.ts +44 -0
  408. package/dist/lib/methods/stream-methods/click-video.service.d.ts +58 -0
  409. package/dist/lib/methods/stream-methods/switch-audio.service.d.ts +28 -0
  410. package/dist/lib/methods/stream-methods/switch-video-alt.service.d.ts +29 -0
  411. package/dist/lib/methods/stream-methods/switch-video.service.d.ts +35 -0
  412. package/dist/lib/methods/utils/format-number.service.d.ts +24 -0
  413. package/dist/lib/methods/utils/generate-random-messages.service.d.ts +26 -0
  414. package/dist/lib/methods/utils/generate-random-participants.service.d.ts +24 -0
  415. package/dist/lib/methods/utils/generate-random-polls.service.d.ts +18 -0
  416. package/dist/lib/methods/utils/generate-random-request-list.service.d.ts +24 -0
  417. package/dist/lib/methods/utils/generate-random-waiting-room-list.service.d.ts +19 -0
  418. package/dist/lib/methods/utils/get-modal-position.util.d.ts +15 -0
  419. package/dist/lib/methods/utils/get-overlay-position.util.d.ts +12 -0
  420. package/dist/lib/methods/utils/initial-values.util.d.ts +343 -0
  421. package/dist/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.d.ts +31 -0
  422. package/dist/lib/methods/utils/mini-audio-player/mini-audio-player.component.d.ts +46 -0
  423. package/dist/lib/methods/utils/producer/a-params.service.d.ts +11 -0
  424. package/dist/lib/methods/utils/producer/h-params.service.d.ts +11 -0
  425. package/dist/lib/methods/utils/producer/screen-params.service.d.ts +11 -0
  426. package/dist/lib/methods/utils/producer/v-params.service.d.ts +11 -0
  427. package/dist/lib/methods/utils/producer/video-capture-constraints.service.d.ts +131 -0
  428. package/dist/lib/methods/utils/sleep.util.d.ts +12 -0
  429. package/dist/lib/methods/utils/sound-player.service.d.ts +13 -0
  430. package/dist/lib/methods/utils/validate-alphanumeric.service.d.ts +17 -0
  431. package/dist/lib/methods/waiting-methods/launch-waiting.service.d.ts +17 -0
  432. package/dist/lib/methods/waiting-methods/respond-to-waiting.service.d.ts +31 -0
  433. package/dist/lib/methods/whiteboard-methods/capture-canvas-stream.service.d.ts +33 -0
  434. package/dist/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.d.ts +17 -0
  435. package/dist/lib/producer-client/producer-client-emits/create-device-client.service.d.ts +20 -0
  436. package/dist/lib/producer-client/producer-client-emits/join-room-client.service.d.ts +36 -0
  437. package/dist/lib/producer-client/producer-client-emits/update-room-parameters-client.service.d.ts +104 -0
  438. package/dist/lib/producers/producer-emits/join-con-room.service.d.ts +44 -0
  439. package/dist/lib/producers/producer-emits/join-room.service.d.ts +34 -0
  440. package/dist/lib/producers/socket-receive-methods/all-members-rest.service.d.ts +75 -0
  441. package/dist/lib/producers/socket-receive-methods/all-members.service.d.ts +72 -0
  442. package/dist/lib/producers/socket-receive-methods/all-waiting-room-members.service.d.ts +22 -0
  443. package/dist/lib/producers/socket-receive-methods/ban-participant.service.d.ts +35 -0
  444. package/dist/lib/producers/socket-receive-methods/control-media-host.service.d.ts +60 -0
  445. package/dist/lib/producers/socket-receive-methods/disconnect-user-self.service.d.ts +22 -0
  446. package/dist/lib/producers/socket-receive-methods/disconnect.service.d.ts +23 -0
  447. package/dist/lib/producers/socket-receive-methods/get-domains.service.d.ts +48 -0
  448. package/dist/lib/producers/socket-receive-methods/host-request-response.service.d.ts +81 -0
  449. package/dist/lib/producers/socket-receive-methods/meeting-ended.service.d.ts +26 -0
  450. package/dist/lib/producers/socket-receive-methods/meeting-still-there.service.d.ts +17 -0
  451. package/dist/lib/producers/socket-receive-methods/meeting-time-remaining.service.d.ts +22 -0
  452. package/dist/lib/producers/socket-receive-methods/participant-requested.service.d.ts +26 -0
  453. package/dist/lib/producers/socket-receive-methods/person-joined.service.d.ts +20 -0
  454. package/dist/lib/producers/socket-receive-methods/producer-media-closed.service.d.ts +47 -0
  455. package/dist/lib/producers/socket-receive-methods/producer-media-paused.service.d.ts +51 -0
  456. package/dist/lib/producers/socket-receive-methods/producer-media-resumed.service.d.ts +44 -0
  457. package/dist/lib/producers/socket-receive-methods/re-initiate-recording.service.d.ts +25 -0
  458. package/dist/lib/producers/socket-receive-methods/receive-message.service.d.ts +37 -0
  459. package/dist/lib/producers/socket-receive-methods/recording-notice.service.d.ts +120 -0
  460. package/dist/lib/producers/socket-receive-methods/room-record-params.service.d.ts +75 -0
  461. package/dist/lib/producers/socket-receive-methods/screen-producer-id.service.d.ts +32 -0
  462. package/dist/lib/producers/socket-receive-methods/start-records.service.d.ts +23 -0
  463. package/dist/lib/producers/socket-receive-methods/stopped-recording.service.d.ts +22 -0
  464. package/dist/lib/producers/socket-receive-methods/time-left-recording.service.d.ts +21 -0
  465. package/dist/lib/producers/socket-receive-methods/update-consuming-domains.service.d.ts +44 -0
  466. package/dist/lib/producers/socket-receive-methods/update-media-settings.service.d.ts +27 -0
  467. package/dist/lib/producers/socket-receive-methods/updated-co-host.service.d.ts +37 -0
  468. package/dist/lib/producers/socket-receive-methods/user-waiting.service.d.ts +68 -0
  469. package/dist/lib/sockets/socket-manager.service.d.ts +26 -0
  470. package/dist/public-api.d.ts +177 -0
  471. package/package.json +89 -0
@@ -0,0 +1,75 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class CompareActiveNames {
4
+ /**
5
+ * Compares the current active names with the previous active names and triggers an action if there are changes.
6
+ *
7
+ * @param {Object} options - The options for comparing active names.
8
+ * @param {boolean} [options.restart=false] - Whether to restart the comparison.
9
+ * @param {CompareActiveNamesOptions} options.parameters - The parameters for the comparison.
10
+ * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.
11
+ * @param {string[]} options.parameters.activeNames - The current active names.
12
+ * @param {string[]} options.parameters.prevActiveNames - The previous active names.
13
+ * @param {Function} options.parameters.updatePrevActiveNames - Function to update the previous active names.
14
+ * @param {Function} options.parameters.trigger - Function to trigger an action when names change.
15
+ *
16
+ * @returns {Promise<void>} A promise that resolves when the comparison is complete.
17
+ *
18
+ * @throws Will log an error message if an error occurs during the comparison.
19
+ */
20
+ async compareActiveNames({ restart = false, parameters, }) {
21
+ try {
22
+ let { getUpdatedAllParams } = parameters;
23
+ parameters = getUpdatedAllParams();
24
+ let { activeNames, prevActiveNames, updatePrevActiveNames, trigger } = parameters;
25
+ // Restart the comparison if needed
26
+ if (restart) {
27
+ await trigger({ ref_ActiveNames: activeNames, parameters });
28
+ return;
29
+ }
30
+ // Array to track changes in activeNames
31
+ let nameChanged = [];
32
+ // Compare each name in activeNames
33
+ for (let i = 0; i < activeNames.length; i++) {
34
+ const currentName = activeNames[i];
35
+ // Check if the name is present in prevActiveNames
36
+ const hasNameChanged = !prevActiveNames.includes(currentName);
37
+ if (hasNameChanged) {
38
+ nameChanged.push(true);
39
+ trigger({ ref_ActiveNames: activeNames, parameters });
40
+ break;
41
+ }
42
+ }
43
+ // Count the number of true in nameChanged
44
+ let count = nameChanged.filter((value) => value === true).length;
45
+ if (count < 1) {
46
+ // Check for new names in prevActiveNames
47
+ for (let i = 0; i < prevActiveNames.length; i++) {
48
+ const currentName = prevActiveNames[i];
49
+ // Check if the name is present in activeNames
50
+ const hasNameChanged = !activeNames.includes(currentName);
51
+ // Signal change if the name is new
52
+ if (hasNameChanged) {
53
+ trigger({ ref_ActiveNames: activeNames, parameters });
54
+ break;
55
+ }
56
+ }
57
+ }
58
+ // Update prevActiveNames with current activeNames
59
+ prevActiveNames = [...activeNames];
60
+ updatePrevActiveNames(prevActiveNames);
61
+ }
62
+ catch (error) {
63
+ console.log('compareActiveNames error', error);
64
+ }
65
+ }
66
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CompareActiveNames, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
67
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CompareActiveNames, providedIn: 'root' });
68
+ }
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CompareActiveNames, decorators: [{
70
+ type: Injectable,
71
+ args: [{
72
+ providedIn: 'root',
73
+ }]
74
+ }] });
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS1hY3RpdmUtbmFtZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb25zdW1lcnMvY29tcGFyZS1hY3RpdmUtbmFtZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQTBCM0MsTUFBTSxPQUFPLGtCQUFrQjtJQUM3Qjs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFDdkIsT0FBTyxHQUFHLEtBQUssRUFDZixVQUFVLEdBQ2dCO1FBQzFCLElBQUksQ0FBQztZQUNILElBQUksRUFBRSxtQkFBbUIsRUFBRSxHQUFHLFVBQVUsQ0FBQztZQUN6QyxVQUFVLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUVuQyxJQUFJLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsR0FBRyxVQUFVLENBQUM7WUFFbEYsbUNBQW1DO1lBQ25DLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osTUFBTSxPQUFPLENBQUMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQzVELE9BQU87WUFDVCxDQUFDO1lBRUQsd0NBQXdDO1lBQ3hDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUVyQixtQ0FBbUM7WUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVuQyxrREFBa0Q7Z0JBQ2xELE1BQU0sY0FBYyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFOUQsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkIsT0FBTyxDQUFDLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO29CQUN0RCxNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1lBRUQsMENBQTBDO1lBQzFDLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFFakUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2QseUNBQXlDO2dCQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNoRCxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRXZDLDhDQUE4QztvQkFDOUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUUxRCxtQ0FBbUM7b0JBQ25DLElBQUksY0FBYyxFQUFFLENBQUM7d0JBQ25CLE9BQU8sQ0FBQyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQzt3QkFDdEQsTUFBTTtvQkFDUixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsa0RBQWtEO1lBQ2xELGVBQWUsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7WUFDbkMscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO3VHQTNFVSxrQkFBa0I7MkdBQWxCLGtCQUFrQixjQUZqQixNQUFNOzsyRkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJpZ2dlclR5cGUsIFRyaWdnZXJQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vQHR5cGVzL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb21wYXJlQWN0aXZlTmFtZXNQYXJhbWV0ZXJzIGV4dGVuZHMgVHJpZ2dlclBhcmFtZXRlcnMge1xuICBhY3RpdmVOYW1lczogc3RyaW5nW107XG4gIHByZXZBY3RpdmVOYW1lczogc3RyaW5nW107XG4gIHVwZGF0ZUFjdGl2ZU5hbWVzOiAoYWN0aXZlTmFtZXM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuICB1cGRhdGVQcmV2QWN0aXZlTmFtZXM6IChwcmV2QWN0aXZlTmFtZXM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuXG4gIC8vIG1lZGlhc2Z1IGZ1bmN0aW9uc1xuICB0cmlnZ2VyOiBUcmlnZ2VyVHlwZTtcbiAgZ2V0VXBkYXRlZEFsbFBhcmFtczogKCkgPT4gQ29tcGFyZUFjdGl2ZU5hbWVzUGFyYW1ldGVycztcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBhcmVBY3RpdmVOYW1lc09wdGlvbnMge1xuICByZXN0YXJ0PzogYm9vbGVhbjtcbiAgcGFyYW1ldGVyczogQ29tcGFyZUFjdGl2ZU5hbWVzUGFyYW1ldGVycztcbn1cblxuLy8gRXhwb3J0IHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBmdW5jdGlvblxuZXhwb3J0IHR5cGUgQ29tcGFyZUFjdGl2ZU5hbWVzVHlwZSA9IChvcHRpb25zOiBDb21wYXJlQWN0aXZlTmFtZXNPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29tcGFyZUFjdGl2ZU5hbWVzIHtcbiAgLyoqXG4gICAqIENvbXBhcmVzIHRoZSBjdXJyZW50IGFjdGl2ZSBuYW1lcyB3aXRoIHRoZSBwcmV2aW91cyBhY3RpdmUgbmFtZXMgYW5kIHRyaWdnZXJzIGFuIGFjdGlvbiBpZiB0aGVyZSBhcmUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY29tcGFyaW5nIGFjdGl2ZSBuYW1lcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yZXN0YXJ0PWZhbHNlXSAtIFdoZXRoZXIgdG8gcmVzdGFydCB0aGUgY29tcGFyaXNvbi5cbiAgICogQHBhcmFtIHtDb21wYXJlQWN0aXZlTmFtZXNPcHRpb25zfSBvcHRpb25zLnBhcmFtZXRlcnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNvbXBhcmlzb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMucGFyYW1ldGVycy5nZXRVcGRhdGVkQWxsUGFyYW1zIC0gRnVuY3Rpb24gdG8gZ2V0IHVwZGF0ZWQgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gb3B0aW9ucy5wYXJhbWV0ZXJzLmFjdGl2ZU5hbWVzIC0gVGhlIGN1cnJlbnQgYWN0aXZlIG5hbWVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBvcHRpb25zLnBhcmFtZXRlcnMucHJldkFjdGl2ZU5hbWVzIC0gVGhlIHByZXZpb3VzIGFjdGl2ZSBuYW1lcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5wYXJhbWV0ZXJzLnVwZGF0ZVByZXZBY3RpdmVOYW1lcyAtIEZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgcHJldmlvdXMgYWN0aXZlIG5hbWVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLnBhcmFtZXRlcnMudHJpZ2dlciAtIEZ1bmN0aW9uIHRvIHRyaWdnZXIgYW4gYWN0aW9uIHdoZW4gbmFtZXMgY2hhbmdlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcGFyaXNvbiBpcyBjb21wbGV0ZS5cbiAgICpcbiAgICogQHRocm93cyBXaWxsIGxvZyBhbiBlcnJvciBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGNvbXBhcmlzb24uXG4gICAqL1xuICBhc3luYyBjb21wYXJlQWN0aXZlTmFtZXMoe1xuICAgIHJlc3RhcnQgPSBmYWxzZSxcbiAgICBwYXJhbWV0ZXJzLFxuICB9OiBDb21wYXJlQWN0aXZlTmFtZXNPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB7IGdldFVwZGF0ZWRBbGxQYXJhbXMgfSA9IHBhcmFtZXRlcnM7XG4gICAgICBwYXJhbWV0ZXJzID0gZ2V0VXBkYXRlZEFsbFBhcmFtcygpO1xuXG4gICAgICBsZXQgeyBhY3RpdmVOYW1lcywgcHJldkFjdGl2ZU5hbWVzLCB1cGRhdGVQcmV2QWN0aXZlTmFtZXMsIHRyaWdnZXIgfSA9IHBhcmFtZXRlcnM7XG5cbiAgICAgIC8vIFJlc3RhcnQgdGhlIGNvbXBhcmlzb24gaWYgbmVlZGVkXG4gICAgICBpZiAocmVzdGFydCkge1xuICAgICAgICBhd2FpdCB0cmlnZ2VyKHsgcmVmX0FjdGl2ZU5hbWVzOiBhY3RpdmVOYW1lcywgcGFyYW1ldGVycyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBcnJheSB0byB0cmFjayBjaGFuZ2VzIGluIGFjdGl2ZU5hbWVzXG4gICAgICBsZXQgbmFtZUNoYW5nZWQgPSBbXTtcblxuICAgICAgLy8gQ29tcGFyZSBlYWNoIG5hbWUgaW4gYWN0aXZlTmFtZXNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aXZlTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY3VycmVudE5hbWUgPSBhY3RpdmVOYW1lc1tpXTtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgbmFtZSBpcyBwcmVzZW50IGluIHByZXZBY3RpdmVOYW1lc1xuICAgICAgICBjb25zdCBoYXNOYW1lQ2hhbmdlZCA9ICFwcmV2QWN0aXZlTmFtZXMuaW5jbHVkZXMoY3VycmVudE5hbWUpO1xuXG4gICAgICAgIGlmIChoYXNOYW1lQ2hhbmdlZCkge1xuICAgICAgICAgIG5hbWVDaGFuZ2VkLnB1c2godHJ1ZSk7XG4gICAgICAgICAgdHJpZ2dlcih7IHJlZl9BY3RpdmVOYW1lczogYWN0aXZlTmFtZXMsIHBhcmFtZXRlcnMgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiB0cnVlIGluIG5hbWVDaGFuZ2VkXG4gICAgICBsZXQgY291bnQgPSBuYW1lQ2hhbmdlZC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gdHJ1ZSkubGVuZ3RoO1xuXG4gICAgICBpZiAoY291bnQgPCAxKSB7XG4gICAgICAgIC8vIENoZWNrIGZvciBuZXcgbmFtZXMgaW4gcHJldkFjdGl2ZU5hbWVzXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldkFjdGl2ZU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudE5hbWUgPSBwcmV2QWN0aXZlTmFtZXNbaV07XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgbmFtZSBpcyBwcmVzZW50IGluIGFjdGl2ZU5hbWVzXG4gICAgICAgICAgY29uc3QgaGFzTmFtZUNoYW5nZWQgPSAhYWN0aXZlTmFtZXMuaW5jbHVkZXMoY3VycmVudE5hbWUpO1xuXG4gICAgICAgICAgLy8gU2lnbmFsIGNoYW5nZSBpZiB0aGUgbmFtZSBpcyBuZXdcbiAgICAgICAgICBpZiAoaGFzTmFtZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRyaWdnZXIoeyByZWZfQWN0aXZlTmFtZXM6IGFjdGl2ZU5hbWVzLCBwYXJhbWV0ZXJzIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBwcmV2QWN0aXZlTmFtZXMgd2l0aCBjdXJyZW50IGFjdGl2ZU5hbWVzXG4gICAgICBwcmV2QWN0aXZlTmFtZXMgPSBbLi4uYWN0aXZlTmFtZXNdO1xuICAgICAgdXBkYXRlUHJldkFjdGl2ZU5hbWVzKHByZXZBY3RpdmVOYW1lcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdjb21wYXJlQWN0aXZlTmFtZXMgZXJyb3InLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,63 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class CompareScreenStates {
4
+ /**
5
+ * Compares the current screen states with the previous screen states and triggers actions based on changes.
6
+ *
7
+ * @param {Object} options - The options for comparing screen states.
8
+ * @param {boolean} [options.restart=false] - Whether to restart the comparison process.
9
+ * @param {CompareScreenStatesOptions} options.parameters - The parameters for the comparison.
10
+ * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.
11
+ * @param {string} options.parameters.recordingDisplayType - The type of display being recorded.
12
+ * @param {boolean} options.parameters.recordingVideoOptimized - Whether the recording is optimized for video.
13
+ * @param {Array<ScreenState>} options.parameters.screenStates - The current screen states.
14
+ * @param {Array<ScreenState>} options.parameters.prevScreenStates - The previous screen states.
15
+ * @param {Array<string>} options.parameters.activeNames - The active names in the current context.
16
+ * @param {Function} options.parameters.trigger - Function to trigger actions based on changes.
17
+ *
18
+ * @returns {Promise<void>} A promise that resolves when the comparison and any triggered actions are complete.
19
+ *
20
+ * @throws Will log an error message if an error occurs during the comparison process.
21
+ */
22
+ async compareScreenStates({ restart = false, parameters, }) {
23
+ try {
24
+ let { getUpdatedAllParams } = parameters;
25
+ parameters = getUpdatedAllParams();
26
+ let { recordingDisplayType, recordingVideoOptimized, screenStates, prevScreenStates, activeNames, trigger, } = parameters;
27
+ // Restart the comparison if needed
28
+ if (restart) {
29
+ // Perform necessary actions on restart
30
+ return;
31
+ }
32
+ // Compare each key-value pair in the screenStates objects
33
+ for (let i = 0; i < screenStates.length; i++) {
34
+ const currentScreenState = screenStates[i];
35
+ const prevScreenState = prevScreenStates[i];
36
+ // Check if any value has changed
37
+ const hasChanged = Object.keys(currentScreenState).some((key) => currentScreenState[key] !== prevScreenState[key]);
38
+ // Signal change if any value has changed
39
+ if (hasChanged) {
40
+ // Perform actions or trigger events based on the change
41
+ if (recordingDisplayType === 'video' && recordingVideoOptimized) {
42
+ await trigger({ ref_ActiveNames: activeNames, parameters });
43
+ break;
44
+ }
45
+ await trigger({ ref_ActiveNames: activeNames, parameters });
46
+ break;
47
+ }
48
+ }
49
+ }
50
+ catch (error) {
51
+ console.log('compareScreenStates error', error);
52
+ }
53
+ }
54
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CompareScreenStates, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
55
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CompareScreenStates, providedIn: 'root' });
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CompareScreenStates, decorators: [{
58
+ type: Injectable,
59
+ args: [{
60
+ providedIn: 'root',
61
+ }]
62
+ }] });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS1zY3JlZW4tc3RhdGVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYXNmdS1hbmd1bGFyL3NyYy9saWIvY29uc3VtZXJzL2NvbXBhcmUtc2NyZWVuLXN0YXRlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBNEIzQyxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUN4QixPQUFPLEdBQUcsS0FBSyxFQUNmLFVBQVUsR0FDaUI7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsVUFBVSxDQUFDO1lBQ3pDLFVBQVUsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBRW5DLElBQUksRUFDRixvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLE9BQU8sR0FDUixHQUFHLFVBQVUsQ0FBQztZQUVmLG1DQUFtQztZQUNuQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLHVDQUF1QztnQkFDdkMsT0FBTztZQUNULENBQUM7WUFFRCwwREFBMEQ7WUFDMUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUU1QyxpQ0FBaUM7Z0JBQ2pDLE1BQU0sVUFBVSxHQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQTJCLENBQUMsSUFBSSxDQUNoRixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUMxRCxDQUFDO2dCQUVGLHlDQUF5QztnQkFDekMsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDZix3REFBd0Q7b0JBQ3hELElBQUksb0JBQW9CLEtBQUssT0FBTyxJQUFJLHVCQUF1QixFQUFFLENBQUM7d0JBQ2hFLE1BQU0sT0FBTyxDQUFDLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO3dCQUM1RCxNQUFNO29CQUNSLENBQUM7b0JBQ0QsTUFBTSxPQUFPLENBQUMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7b0JBQzVELE1BQU07Z0JBQ1IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7dUdBbEVVLG1CQUFtQjsyR0FBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNjcmVlblN0YXRlLCBUcmlnZ2VyVHlwZSwgVHJpZ2dlclBhcmFtZXRlcnMgfSBmcm9tICcuLi9AdHlwZXMvdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBhcmVTY3JlZW5TdGF0ZXNQYXJhbWV0ZXJzIGV4dGVuZHMgVHJpZ2dlclBhcmFtZXRlcnMge1xuICByZWNvcmRpbmdEaXNwbGF5VHlwZTogJ3ZpZGVvJyB8ICdtZWRpYScgfCAnYWxsJztcbiAgcmVjb3JkaW5nVmlkZW9PcHRpbWl6ZWQ6IGJvb2xlYW47XG4gIHNjcmVlblN0YXRlczogU2NyZWVuU3RhdGVbXTtcbiAgcHJldlNjcmVlblN0YXRlczogU2NyZWVuU3RhdGVbXTtcbiAgYWN0aXZlTmFtZXM6IHN0cmluZ1tdO1xuXG4gIC8vIG1lZGlhc2Z1IGZ1bmN0aW9uc1xuICB0cmlnZ2VyOiBUcmlnZ2VyVHlwZTtcbiAgZ2V0VXBkYXRlZEFsbFBhcmFtczogKCkgPT4gQ29tcGFyZVNjcmVlblN0YXRlc1BhcmFtZXRlcnM7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wYXJlU2NyZWVuU3RhdGVzT3B0aW9ucyB7XG4gIHJlc3RhcnQ/OiBib29sZWFuO1xuICBwYXJhbWV0ZXJzOiBDb21wYXJlU2NyZWVuU3RhdGVzUGFyYW1ldGVycztcbn1cblxuLy8gRXhwb3J0IHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBmdW5jdGlvblxuZXhwb3J0IHR5cGUgQ29tcGFyZVNjcmVlblN0YXRlc1R5cGUgPSAob3B0aW9uczogQ29tcGFyZVNjcmVlblN0YXRlc09wdGlvbnMpID0+IFByb21pc2U8dm9pZD47XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDb21wYXJlU2NyZWVuU3RhdGVzIHtcbiAgLyoqXG4gICAqIENvbXBhcmVzIHRoZSBjdXJyZW50IHNjcmVlbiBzdGF0ZXMgd2l0aCB0aGUgcHJldmlvdXMgc2NyZWVuIHN0YXRlcyBhbmQgdHJpZ2dlcnMgYWN0aW9ucyBiYXNlZCBvbiBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBjb21wYXJpbmcgc2NyZWVuIHN0YXRlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yZXN0YXJ0PWZhbHNlXSAtIFdoZXRoZXIgdG8gcmVzdGFydCB0aGUgY29tcGFyaXNvbiBwcm9jZXNzLlxuICAgKiBAcGFyYW0ge0NvbXBhcmVTY3JlZW5TdGF0ZXNPcHRpb25zfSBvcHRpb25zLnBhcmFtZXRlcnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNvbXBhcmlzb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMucGFyYW1ldGVycy5nZXRVcGRhdGVkQWxsUGFyYW1zIC0gRnVuY3Rpb24gdG8gZ2V0IHVwZGF0ZWQgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMucGFyYW1ldGVycy5yZWNvcmRpbmdEaXNwbGF5VHlwZSAtIFRoZSB0eXBlIG9mIGRpc3BsYXkgYmVpbmcgcmVjb3JkZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5wYXJhbWV0ZXJzLnJlY29yZGluZ1ZpZGVvT3B0aW1pemVkIC0gV2hldGhlciB0aGUgcmVjb3JkaW5nIGlzIG9wdGltaXplZCBmb3IgdmlkZW8uXG4gICAqIEBwYXJhbSB7QXJyYXk8U2NyZWVuU3RhdGU+fSBvcHRpb25zLnBhcmFtZXRlcnMuc2NyZWVuU3RhdGVzIC0gVGhlIGN1cnJlbnQgc2NyZWVuIHN0YXRlcy5cbiAgICogQHBhcmFtIHtBcnJheTxTY3JlZW5TdGF0ZT59IG9wdGlvbnMucGFyYW1ldGVycy5wcmV2U2NyZWVuU3RhdGVzIC0gVGhlIHByZXZpb3VzIHNjcmVlbiBzdGF0ZXMuXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gb3B0aW9ucy5wYXJhbWV0ZXJzLmFjdGl2ZU5hbWVzIC0gVGhlIGFjdGl2ZSBuYW1lcyBpbiB0aGUgY3VycmVudCBjb250ZXh0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLnBhcmFtZXRlcnMudHJpZ2dlciAtIEZ1bmN0aW9uIHRvIHRyaWdnZXIgYWN0aW9ucyBiYXNlZCBvbiBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcGFyaXNvbiBhbmQgYW55IHRyaWdnZXJlZCBhY3Rpb25zIGFyZSBjb21wbGV0ZS5cbiAgICpcbiAgICogQHRocm93cyBXaWxsIGxvZyBhbiBlcnJvciBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGNvbXBhcmlzb24gcHJvY2Vzcy5cbiAgICovXG4gIGFzeW5jIGNvbXBhcmVTY3JlZW5TdGF0ZXMoe1xuICAgIHJlc3RhcnQgPSBmYWxzZSxcbiAgICBwYXJhbWV0ZXJzLFxuICB9OiBDb21wYXJlU2NyZWVuU3RhdGVzT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgeyBnZXRVcGRhdGVkQWxsUGFyYW1zIH0gPSBwYXJhbWV0ZXJzO1xuICAgICAgcGFyYW1ldGVycyA9IGdldFVwZGF0ZWRBbGxQYXJhbXMoKTtcblxuICAgICAgbGV0IHtcbiAgICAgICAgcmVjb3JkaW5nRGlzcGxheVR5cGUsXG4gICAgICAgIHJlY29yZGluZ1ZpZGVvT3B0aW1pemVkLFxuICAgICAgICBzY3JlZW5TdGF0ZXMsXG4gICAgICAgIHByZXZTY3JlZW5TdGF0ZXMsXG4gICAgICAgIGFjdGl2ZU5hbWVzLFxuICAgICAgICB0cmlnZ2VyLFxuICAgICAgfSA9IHBhcmFtZXRlcnM7XG5cbiAgICAgIC8vIFJlc3RhcnQgdGhlIGNvbXBhcmlzb24gaWYgbmVlZGVkXG4gICAgICBpZiAocmVzdGFydCkge1xuICAgICAgICAvLyBQZXJmb3JtIG5lY2Vzc2FyeSBhY3Rpb25zIG9uIHJlc3RhcnRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDb21wYXJlIGVhY2gga2V5LXZhbHVlIHBhaXIgaW4gdGhlIHNjcmVlblN0YXRlcyBvYmplY3RzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjcmVlblN0YXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjdXJyZW50U2NyZWVuU3RhdGUgPSBzY3JlZW5TdGF0ZXNbaV07XG4gICAgICAgIGNvbnN0IHByZXZTY3JlZW5TdGF0ZSA9IHByZXZTY3JlZW5TdGF0ZXNbaV07XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgYW55IHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAgICAgIGNvbnN0IGhhc0NoYW5nZWQgPSAoT2JqZWN0LmtleXMoY3VycmVudFNjcmVlblN0YXRlKSBhcyAoa2V5b2YgU2NyZWVuU3RhdGUpW10pLnNvbWUoXG4gICAgICAgICAgKGtleSkgPT4gY3VycmVudFNjcmVlblN0YXRlW2tleV0gIT09IHByZXZTY3JlZW5TdGF0ZVtrZXldLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFNpZ25hbCBjaGFuZ2UgaWYgYW55IHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICAgICAgLy8gUGVyZm9ybSBhY3Rpb25zIG9yIHRyaWdnZXIgZXZlbnRzIGJhc2VkIG9uIHRoZSBjaGFuZ2VcbiAgICAgICAgICBpZiAocmVjb3JkaW5nRGlzcGxheVR5cGUgPT09ICd2aWRlbycgJiYgcmVjb3JkaW5nVmlkZW9PcHRpbWl6ZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRyaWdnZXIoeyByZWZfQWN0aXZlTmFtZXM6IGFjdGl2ZU5hbWVzLCBwYXJhbWV0ZXJzIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHRyaWdnZXIoeyByZWZfQWN0aXZlTmFtZXM6IGFjdGl2ZU5hbWVzLCBwYXJhbWV0ZXJzIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdjb21wYXJlU2NyZWVuU3RhdGVzIGVycm9yJywgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,112 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../sockets/socket-manager.service";
4
+ import * as i2 from "./socket-receive-methods/new-pipe-producer.service";
5
+ import * as i3 from "./socket-receive-methods/producer-closed.service";
6
+ import * as i4 from "./socket-receive-methods/join-consume-room.service";
7
+ export class ConnectIps {
8
+ socketManagerService;
9
+ newPipeProducerService;
10
+ producerClosedService;
11
+ joinConsumeRoomService;
12
+ constructor(socketManagerService, newPipeProducerService, producerClosedService, joinConsumeRoomService) {
13
+ this.socketManagerService = socketManagerService;
14
+ this.newPipeProducerService = newPipeProducerService;
15
+ this.producerClosedService = producerClosedService;
16
+ this.joinConsumeRoomService = joinConsumeRoomService;
17
+ }
18
+ /**
19
+ * Connects to remote IPs and manages socket connections.
20
+ *
21
+ * @param {Object} options - The options for connecting IPs.
22
+ * @param {Record<string, any>[]} options.consume_sockets - The array of current socket connections.
23
+ * @param {string[]} options.remIP - The list of remote IPs to connect to.
24
+ * @param {string} options.apiUserName - The API username for authentication.
25
+ * @param {string} [options.apiKey] - The API key for authentication.
26
+ * @param {string} [options.apiToken] - The API token for authentication.
27
+ * @param {Function} [options.newProducerMethod=newPipeProducer] - The method to handle new pipe producer events.
28
+ * @param {Function} [options.closedProducerMethod=producerClosed] - The method to handle producer closed events.
29
+ * @param {Function} [options.joinConsumeRoomMethod=joinConsumeRoom] - The method to handle joining a consuming room.
30
+ * @param {Object} options.parameters - Additional parameters.
31
+ * @param {string[]} options.parameters.roomRecvIPs - The list of IPs that have been received in the room.
32
+ * @param {Function} options.parameters.updateRoomRecvIPs - The function to update the room received IPs.
33
+ * @param {Function} options.parameters.updateConsume_sockets - The function to update the consume sockets.
34
+ *
35
+ * @returns {Promise<[Record<string, any>[], string[]]>} A promise that resolves to an array containing the updated consume sockets and room received IPs.
36
+ *
37
+ * @throws Will throw an error if required parameters are missing or if there is an issue connecting to a remote IP.
38
+ */
39
+ connectIps = async ({ consume_sockets, remIP, apiUserName, apiKey = '', apiToken = '', newProducerMethod = this.newPipeProducerService.newPipeProducer, closedProducerMethod = this.producerClosedService.producerClosed, joinConsumeRoomMethod = this.joinConsumeRoomService.joinConsumeRoom, parameters, }) => {
40
+ try {
41
+ const { roomRecvIPs, updateRoomRecvIPs, updateConsume_sockets } = parameters;
42
+ if (!consume_sockets || !remIP || !apiUserName || (!apiKey && !apiToken)) {
43
+ console.log('Missing required parameters - consume_sockets, remIP, apiUserName, apiKey, apiToken');
44
+ return [consume_sockets, roomRecvIPs];
45
+ }
46
+ await Promise.all(remIP.map(async (ip) => {
47
+ try {
48
+ // Check if the IP is already connected
49
+ const matching = consume_sockets.find((socketObj) => Object.keys(socketObj)[0] == ip);
50
+ if (matching || !ip || ip === '' || ip === null || ip === undefined) {
51
+ // Skip if the IP is already connected
52
+ return;
53
+ }
54
+ // Connect to the remote socket using socket.io-client
55
+ const remote_sock = await this.socketManagerService.connectSocket({
56
+ apiUserName,
57
+ apiKey,
58
+ apiToken,
59
+ link: `https://${ip}.mediasfu.com`,
60
+ });
61
+ // Handle successful connection to the remote socket
62
+ if (remote_sock.id) {
63
+ // Check if the IP is in the roomRecvIPs, if not, add it
64
+ if (!roomRecvIPs.includes(ip)) {
65
+ roomRecvIPs.push(ip);
66
+ updateRoomRecvIPs(roomRecvIPs);
67
+ }
68
+ // Handle new pipe producer event
69
+ remote_sock.on('new-pipe-producer', async ({ producerId, islevel }) => {
70
+ await newProducerMethod({ producerId, islevel, nsock: remote_sock, parameters });
71
+ });
72
+ // Handle producer closed event
73
+ remote_sock.on('producer-closed', async ({ remoteProducerId }) => {
74
+ await closedProducerMethod({ remoteProducerId, parameters });
75
+ });
76
+ // Handle new consuming room by joining the room
77
+ const data = await joinConsumeRoomMethod({
78
+ remote_sock,
79
+ apiToken,
80
+ apiUserName,
81
+ parameters,
82
+ });
83
+ if (!data.rtpCapabilities) {
84
+ return;
85
+ }
86
+ // Add the remote socket to the consume_sockets array
87
+ consume_sockets.push({ [ip]: remote_sock });
88
+ updateConsume_sockets(consume_sockets);
89
+ }
90
+ }
91
+ catch (error) {
92
+ // Handle the error
93
+ console.log('connectIps error', error);
94
+ }
95
+ }));
96
+ return [consume_sockets, roomRecvIPs];
97
+ }
98
+ catch (error) {
99
+ // Handle the error
100
+ console.log('connectIps error', error);
101
+ }
102
+ };
103
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConnectIps, deps: [{ token: i1.SocketManager }, { token: i2.NewPipeProducer }, { token: i3.ProducerClosed }, { token: i4.JoinConsumeRoom }], target: i0.ɵɵFactoryTarget.Injectable });
104
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConnectIps, providedIn: 'root' });
105
+ }
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConnectIps, decorators: [{
107
+ type: Injectable,
108
+ args: [{
109
+ providedIn: 'root',
110
+ }]
111
+ }], ctorParameters: () => [{ type: i1.SocketManager }, { type: i2.NewPipeProducer }, { type: i3.ProducerClosed }, { type: i4.JoinConsumeRoom }] });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC1pcHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb25zdW1lcnMvY29ubmVjdC1pcHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFzRDNDLE1BQU0sT0FBTyxVQUFVO0lBRVg7SUFDQTtJQUNBO0lBQ0E7SUFKVixZQUNVLG9CQUFtQyxFQUNuQyxzQkFBdUMsRUFDdkMscUJBQXFDLEVBQ3JDLHNCQUF1QztRQUh2Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQWU7UUFDbkMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFpQjtRQUN2QywwQkFBcUIsR0FBckIscUJBQXFCLENBQWdCO1FBQ3JDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBaUI7SUFDOUMsQ0FBQztJQUVKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILFVBQVUsR0FBRyxLQUFLLEVBQUUsRUFDbEIsZUFBZSxFQUNmLEtBQUssRUFDTCxXQUFXLEVBQ1gsTUFBTSxHQUFHLEVBQUUsRUFDWCxRQUFRLEdBQUcsRUFBRSxFQUNiLGlCQUFpQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLEVBQy9ELG9CQUFvQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQ2hFLHFCQUFxQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLEVBQ25FLFVBQVUsR0FDUSxFQUFnQixFQUFFO1FBQ3BDLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxVQUFVLENBQUM7WUFFN0UsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDekUsT0FBTyxDQUFDLEdBQUcsQ0FDVCxxRkFBcUYsQ0FDdEYsQ0FBQztnQkFDRixPQUFPLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFFRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQztvQkFDSCx1Q0FBdUM7b0JBQ3ZDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQ25DLENBQUMsU0FBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FDcEQsQ0FBQztvQkFFRixJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUNwRSxzQ0FBc0M7d0JBQ3RDLE9BQU87b0JBQ1QsQ0FBQztvQkFFRCxzREFBc0Q7b0JBQ3RELE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQzt3QkFDaEUsV0FBVzt3QkFDWCxNQUFNO3dCQUNOLFFBQVE7d0JBQ1IsSUFBSSxFQUFFLFdBQVcsRUFBRSxlQUFlO3FCQUNuQyxDQUFDLENBQUM7b0JBRUgsb0RBQW9EO29CQUNwRCxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDbkIsd0RBQXdEO3dCQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOzRCQUM5QixXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUNyQixpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDakMsQ0FBQzt3QkFFRCxpQ0FBaUM7d0JBQ2pDLFdBQVcsQ0FBQyxFQUFFLENBQ1osbUJBQW1CLEVBQ25CLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQTJDLEVBQUUsRUFBRTs0QkFDekUsTUFBTSxpQkFBaUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO3dCQUNuRixDQUFDLENBQ0YsQ0FBQzt3QkFFRiwrQkFBK0I7d0JBQy9CLFdBQVcsQ0FBQyxFQUFFLENBQ1osaUJBQWlCLEVBQ2pCLEtBQUssRUFBRSxFQUFFLGdCQUFnQixFQUFnQyxFQUFFLEVBQUU7NEJBQzNELE1BQU0sb0JBQW9CLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO3dCQUMvRCxDQUFDLENBQ0YsQ0FBQzt3QkFFRixnREFBZ0Q7d0JBQ2hELE1BQU0sSUFBSSxHQUFHLE1BQU0scUJBQXFCLENBQUM7NEJBQ3ZDLFdBQVc7NEJBQ1gsUUFBUTs0QkFDUixXQUFXOzRCQUNYLFVBQVU7eUJBQ1gsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7NEJBQzFCLE9BQU87d0JBQ1QsQ0FBQzt3QkFFRCxxREFBcUQ7d0JBQ3JELGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7d0JBQzVDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUN6QyxDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixtQkFBbUI7b0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1lBRUYsT0FBTyxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLG1CQUFtQjtZQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDLENBQUM7dUdBMUhTLFVBQVU7MkdBQVYsVUFBVSxjQUZULE1BQU07OzJGQUVQLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU29ja2V0TWFuYWdlciB9IGZyb20gJy4uL3NvY2tldHMvc29ja2V0LW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOZXdQaXBlUHJvZHVjZXIgfSBmcm9tICcuL3NvY2tldC1yZWNlaXZlLW1ldGhvZHMvbmV3LXBpcGUtcHJvZHVjZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9kdWNlckNsb3NlZCB9IGZyb20gJy4vc29ja2V0LXJlY2VpdmUtbWV0aG9kcy9wcm9kdWNlci1jbG9zZWQuc2VydmljZSc7XG5pbXBvcnQgeyBKb2luQ29uc3VtZVJvb20gfSBmcm9tICcuL3NvY2tldC1yZWNlaXZlLW1ldGhvZHMvam9pbi1jb25zdW1lLXJvb20uc2VydmljZSc7XG5pbXBvcnQgeyBEZXZpY2UgfSBmcm9tICdtZWRpYXNvdXAtY2xpZW50L2xpYi90eXBlcyc7XG5pbXBvcnQge1xuICBSZW9yZGVyU3RyZWFtc1BhcmFtZXRlcnMsXG4gIFJlb3JkZXJTdHJlYW1zVHlwZSxcbiAgTmV3UGlwZVByb2R1Y2VyUGFyYW1ldGVycyxcbiAgTmV3UGlwZVByb2R1Y2VyVHlwZSxcbiAgUHJvZHVjZXJDbG9zZWRUeXBlLFxuICBQcm9kdWNlckNsb3NlZFBhcmFtZXRlcnMsXG4gIEpvaW5Db25zdW1lUm9vbVR5cGUsXG4gIEpvaW5Db25zdW1lUm9vbVBhcmFtZXRlcnMsXG4gIENvbnN1bWVTb2NrZXQsXG59IGZyb20gJy4uL0B0eXBlcy90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdElwc1BhcmFtZXRlcnNcbiAgZXh0ZW5kcyBSZW9yZGVyU3RyZWFtc1BhcmFtZXRlcnMsXG4gICAgSm9pbkNvbnN1bWVSb29tUGFyYW1ldGVycyxcbiAgICBQcm9kdWNlckNsb3NlZFBhcmFtZXRlcnMsXG4gICAgTmV3UGlwZVByb2R1Y2VyUGFyYW1ldGVycyB7XG4gIGRldmljZTogRGV2aWNlIHwgbnVsbDtcbiAgcm9vbVJlY3ZJUHM6IHN0cmluZ1tdO1xuICB1cGRhdGVSb29tUmVjdklQczogKHJvb21SZWN2SVBzOiBzdHJpbmdbXSkgPT4gdm9pZDtcbiAgdXBkYXRlQ29uc3VtZV9zb2NrZXRzOiAoY29uc3VtZV9zb2NrZXRzOiBDb25zdW1lU29ja2V0W10pID0+IHZvaWQ7XG5cbiAgLy8gbWVkaWFzZnUgZnVuY3Rpb25zXG4gIHJlb3JkZXJTdHJlYW1zOiBSZW9yZGVyU3RyZWFtc1R5cGU7XG4gIGdldFVwZGF0ZWRBbGxQYXJhbXM6ICgpID0+IENvbm5lY3RJcHNQYXJhbWV0ZXJzO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdElwc09wdGlvbnMge1xuICBjb25zdW1lX3NvY2tldHM6IENvbnN1bWVTb2NrZXRbXTtcbiAgcmVtSVA6IHN0cmluZ1tdO1xuICBhcGlVc2VyTmFtZTogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIGFwaVRva2VuOiBzdHJpbmc7XG4gIG5ld1Byb2R1Y2VyTWV0aG9kPzogTmV3UGlwZVByb2R1Y2VyVHlwZTtcbiAgY2xvc2VkUHJvZHVjZXJNZXRob2Q/OiBQcm9kdWNlckNsb3NlZFR5cGU7XG4gIGpvaW5Db25zdW1lUm9vbU1ldGhvZD86IEpvaW5Db25zdW1lUm9vbVR5cGU7XG4gIHBhcmFtZXRlcnM6IENvbm5lY3RJcHNQYXJhbWV0ZXJzO1xufVxuXG4vLyBFeHBvcnQgdGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIGZ1bmN0aW9uXG5leHBvcnQgdHlwZSBDb25uZWN0SXBzVHlwZSA9IChcbiAgb3B0aW9uczogQ29ubmVjdElwc09wdGlvbnMsXG4pID0+IFByb21pc2U8W1JlY29yZDxzdHJpbmcsIGFueT5bXSwgc3RyaW5nW11dPjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvbm5lY3RJcHMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNvY2tldE1hbmFnZXJTZXJ2aWNlOiBTb2NrZXRNYW5hZ2VyLFxuICAgIHByaXZhdGUgbmV3UGlwZVByb2R1Y2VyU2VydmljZTogTmV3UGlwZVByb2R1Y2VyLFxuICAgIHByaXZhdGUgcHJvZHVjZXJDbG9zZWRTZXJ2aWNlOiBQcm9kdWNlckNsb3NlZCxcbiAgICBwcml2YXRlIGpvaW5Db25zdW1lUm9vbVNlcnZpY2U6IEpvaW5Db25zdW1lUm9vbSxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDb25uZWN0cyB0byByZW1vdGUgSVBzIGFuZCBtYW5hZ2VzIHNvY2tldCBjb25uZWN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY29ubmVjdGluZyBJUHMuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55PltdfSBvcHRpb25zLmNvbnN1bWVfc29ja2V0cyAtIFRoZSBhcnJheSBvZiBjdXJyZW50IHNvY2tldCBjb25uZWN0aW9ucy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gb3B0aW9ucy5yZW1JUCAtIFRoZSBsaXN0IG9mIHJlbW90ZSBJUHMgdG8gY29ubmVjdCB0by5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuYXBpVXNlck5hbWUgLSBUaGUgQVBJIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFwaUtleV0gLSBUaGUgQVBJIGtleSBmb3IgYXV0aGVudGljYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hcGlUb2tlbl0gLSBUaGUgQVBJIHRva2VuIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMubmV3UHJvZHVjZXJNZXRob2Q9bmV3UGlwZVByb2R1Y2VyXSAtIFRoZSBtZXRob2QgdG8gaGFuZGxlIG5ldyBwaXBlIHByb2R1Y2VyIGV2ZW50cy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuY2xvc2VkUHJvZHVjZXJNZXRob2Q9cHJvZHVjZXJDbG9zZWRdIC0gVGhlIG1ldGhvZCB0byBoYW5kbGUgcHJvZHVjZXIgY2xvc2VkIGV2ZW50cy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuam9pbkNvbnN1bWVSb29tTWV0aG9kPWpvaW5Db25zdW1lUm9vbV0gLSBUaGUgbWV0aG9kIHRvIGhhbmRsZSBqb2luaW5nIGEgY29uc3VtaW5nIHJvb20uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLnBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIHBhcmFtZXRlcnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IG9wdGlvbnMucGFyYW1ldGVycy5yb29tUmVjdklQcyAtIFRoZSBsaXN0IG9mIElQcyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCBpbiB0aGUgcm9vbS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5wYXJhbWV0ZXJzLnVwZGF0ZVJvb21SZWN2SVBzIC0gVGhlIGZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgcm9vbSByZWNlaXZlZCBJUHMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMucGFyYW1ldGVycy51cGRhdGVDb25zdW1lX3NvY2tldHMgLSBUaGUgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBjb25zdW1lIHNvY2tldHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFtSZWNvcmQ8c3RyaW5nLCBhbnk+W10sIHN0cmluZ1tdXT59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgY29uc3VtZSBzb2NrZXRzIGFuZCByb29tIHJlY2VpdmVkIElQcy5cbiAgICpcbiAgICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIG1pc3Npbmcgb3IgaWYgdGhlcmUgaXMgYW4gaXNzdWUgY29ubmVjdGluZyB0byBhIHJlbW90ZSBJUC5cbiAgICovXG4gIGNvbm5lY3RJcHMgPSBhc3luYyAoe1xuICAgIGNvbnN1bWVfc29ja2V0cyxcbiAgICByZW1JUCxcbiAgICBhcGlVc2VyTmFtZSxcbiAgICBhcGlLZXkgPSAnJyxcbiAgICBhcGlUb2tlbiA9ICcnLFxuICAgIG5ld1Byb2R1Y2VyTWV0aG9kID0gdGhpcy5uZXdQaXBlUHJvZHVjZXJTZXJ2aWNlLm5ld1BpcGVQcm9kdWNlcixcbiAgICBjbG9zZWRQcm9kdWNlck1ldGhvZCA9IHRoaXMucHJvZHVjZXJDbG9zZWRTZXJ2aWNlLnByb2R1Y2VyQ2xvc2VkLFxuICAgIGpvaW5Db25zdW1lUm9vbU1ldGhvZCA9IHRoaXMuam9pbkNvbnN1bWVSb29tU2VydmljZS5qb2luQ29uc3VtZVJvb20sXG4gICAgcGFyYW1ldGVycyxcbiAgfTogQ29ubmVjdElwc09wdGlvbnMpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHJvb21SZWN2SVBzLCB1cGRhdGVSb29tUmVjdklQcywgdXBkYXRlQ29uc3VtZV9zb2NrZXRzIH0gPSBwYXJhbWV0ZXJzO1xuXG4gICAgICBpZiAoIWNvbnN1bWVfc29ja2V0cyB8fCAhcmVtSVAgfHwgIWFwaVVzZXJOYW1lIHx8ICghYXBpS2V5ICYmICFhcGlUb2tlbikpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVycyAtIGNvbnN1bWVfc29ja2V0cywgcmVtSVAsIGFwaVVzZXJOYW1lLCBhcGlLZXksIGFwaVRva2VuJyxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIFtjb25zdW1lX3NvY2tldHMsIHJvb21SZWN2SVBzXTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHJlbUlQLm1hcChhc3luYyAoaXApID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIElQIGlzIGFscmVhZHkgY29ubmVjdGVkXG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZyA9IGNvbnN1bWVfc29ja2V0cy5maW5kKFxuICAgICAgICAgICAgICAoc29ja2V0T2JqOiBhbnkpID0+IE9iamVjdC5rZXlzKHNvY2tldE9iailbMF0gPT0gaXAsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hpbmcgfHwgIWlwIHx8IGlwID09PSAnJyB8fCBpcCA9PT0gbnVsbCB8fCBpcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIFNraXAgaWYgdGhlIElQIGlzIGFscmVhZHkgY29ubmVjdGVkXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ29ubmVjdCB0byB0aGUgcmVtb3RlIHNvY2tldCB1c2luZyBzb2NrZXQuaW8tY2xpZW50XG4gICAgICAgICAgICBjb25zdCByZW1vdGVfc29jayA9IGF3YWl0IHRoaXMuc29ja2V0TWFuYWdlclNlcnZpY2UuY29ubmVjdFNvY2tldCh7XG4gICAgICAgICAgICAgIGFwaVVzZXJOYW1lLFxuICAgICAgICAgICAgICBhcGlLZXksXG4gICAgICAgICAgICAgIGFwaVRva2VuLFxuICAgICAgICAgICAgICBsaW5rOiBgaHR0cHM6Ly8ke2lwfS5tZWRpYXNmdS5jb21gLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSBzdWNjZXNzZnVsIGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSBzb2NrZXRcbiAgICAgICAgICAgIGlmIChyZW1vdGVfc29jay5pZCkge1xuICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgSVAgaXMgaW4gdGhlIHJvb21SZWN2SVBzLCBpZiBub3QsIGFkZCBpdFxuICAgICAgICAgICAgICBpZiAoIXJvb21SZWN2SVBzLmluY2x1ZGVzKGlwKSkge1xuICAgICAgICAgICAgICAgIHJvb21SZWN2SVBzLnB1c2goaXApO1xuICAgICAgICAgICAgICAgIHVwZGF0ZVJvb21SZWN2SVBzKHJvb21SZWN2SVBzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBuZXcgcGlwZSBwcm9kdWNlciBldmVudFxuICAgICAgICAgICAgICByZW1vdGVfc29jay5vbihcbiAgICAgICAgICAgICAgICAnbmV3LXBpcGUtcHJvZHVjZXInLFxuICAgICAgICAgICAgICAgIGFzeW5jICh7IHByb2R1Y2VySWQsIGlzbGV2ZWwgfTogeyBwcm9kdWNlcklkOiBzdHJpbmc7IGlzbGV2ZWw6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBuZXdQcm9kdWNlck1ldGhvZCh7IHByb2R1Y2VySWQsIGlzbGV2ZWwsIG5zb2NrOiByZW1vdGVfc29jaywgcGFyYW1ldGVycyB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBwcm9kdWNlciBjbG9zZWQgZXZlbnRcbiAgICAgICAgICAgICAgcmVtb3RlX3NvY2sub24oXG4gICAgICAgICAgICAgICAgJ3Byb2R1Y2VyLWNsb3NlZCcsXG4gICAgICAgICAgICAgICAgYXN5bmMgKHsgcmVtb3RlUHJvZHVjZXJJZCB9OiB7IHJlbW90ZVByb2R1Y2VySWQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBjbG9zZWRQcm9kdWNlck1ldGhvZCh7IHJlbW90ZVByb2R1Y2VySWQsIHBhcmFtZXRlcnMgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAvLyBIYW5kbGUgbmV3IGNvbnN1bWluZyByb29tIGJ5IGpvaW5pbmcgdGhlIHJvb21cbiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGpvaW5Db25zdW1lUm9vbU1ldGhvZCh7XG4gICAgICAgICAgICAgICAgcmVtb3RlX3NvY2ssXG4gICAgICAgICAgICAgICAgYXBpVG9rZW4sXG4gICAgICAgICAgICAgICAgYXBpVXNlck5hbWUsXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmICghZGF0YS5ydHBDYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBBZGQgdGhlIHJlbW90ZSBzb2NrZXQgdG8gdGhlIGNvbnN1bWVfc29ja2V0cyBhcnJheVxuICAgICAgICAgICAgICBjb25zdW1lX3NvY2tldHMucHVzaCh7IFtpcF06IHJlbW90ZV9zb2NrIH0pO1xuICAgICAgICAgICAgICB1cGRhdGVDb25zdW1lX3NvY2tldHMoY29uc3VtZV9zb2NrZXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Nvbm5lY3RJcHMgZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBbY29uc3VtZV9zb2NrZXRzLCByb29tUmVjdklQc107XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3JcbiAgICAgIGNvbnNvbGUubG9nKCdjb25uZWN0SXBzIGVycm9yJywgZXJyb3IpO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,113 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ConnectRecvTransport {
4
+ /**
5
+ * Connects the receiving transport to consume media from a remote producer.
6
+ *
7
+ * @param {Object} options - The options for connecting the receiving transport.
8
+ * @param {Transport} options.consumerTransport - The transport used for consuming media.
9
+ * @param {string} options.remoteProducerId - The ID of the remote producer.
10
+ * @param {string} options.serverConsumerTransportId - The ID of the server consumer transport.
11
+ * @param {Socket} options.nsock - The socket used for communication.
12
+ * @param {ConnectRecvTransportOptions} options.parameters - The parameters for the connection.
13
+ *
14
+ * @returns {Promise<void>} A promise that resolves when the connection is established.
15
+ *
16
+ * @throws Will throw an error if the connection or consumption fails.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const options = {
21
+ * consumerTransport,
22
+ * remoteProducerId: 'producer-id',
23
+ * serverConsumerTransportId: 'transport-id',
24
+ * nsock: socket,
25
+ * parameters: connectRecvTransportOptions,
26
+ * };
27
+ *
28
+ * connectRecvTransport(options)
29
+ * .then(() => {
30
+ * console.log('Transport connected and consuming media');
31
+ * })
32
+ * .catch((error) => {
33
+ * console.error('Error connecting transport:', error);
34
+ * });
35
+ * ```
36
+ */
37
+ connectRecvTransport = async ({ consumerTransport, remoteProducerId, serverConsumerTransportId, nsock, parameters, }) => {
38
+ try {
39
+ parameters = parameters.getUpdatedAllParams();
40
+ const { device, consumerTransports, updateConsumerTransports, consumerResume } = parameters;
41
+ // Emit 'consume' event to signal consumption initiation
42
+ nsock.emit('consume', {
43
+ rtpCapabilities: device ? device.rtpCapabilities : null,
44
+ remoteProducerId,
45
+ serverConsumerTransportId,
46
+ }, async ({ params }) => {
47
+ if (params.error) {
48
+ // Handle error
49
+ console.log('consume error', params.error);
50
+ return;
51
+ }
52
+ try {
53
+ // Consume media using received parameters
54
+ const consumer = await consumerTransport.consume({
55
+ id: params.id,
56
+ producerId: params.producerId,
57
+ kind: params.kind,
58
+ rtpParameters: params.rtpParameters,
59
+ });
60
+ // Update consumerTransports array with the new consumer
61
+ consumerTransports.push({
62
+ consumerTransport,
63
+ serverConsumerTransportId: params.id,
64
+ producerId: remoteProducerId,
65
+ consumer,
66
+ socket_: nsock,
67
+ });
68
+ updateConsumerTransports(consumerTransports);
69
+ // Extract track from the consumer
70
+ const { track } = consumer;
71
+ // Emit 'consumer-resume' event to signal consumer resumption
72
+ nsock.emit('consumer-resume', { serverConsumerId: params.serverConsumerId }, async ({ resumed }) => {
73
+ if (resumed) {
74
+ // Consumer resumed and ready to be used
75
+ try {
76
+ await consumerResume({
77
+ track,
78
+ kind: params.kind,
79
+ remoteProducerId,
80
+ params,
81
+ parameters,
82
+ nsock,
83
+ });
84
+ }
85
+ catch (error) {
86
+ // Handle error
87
+ console.log('consumerResume error', error);
88
+ }
89
+ }
90
+ });
91
+ }
92
+ catch (error) {
93
+ // Handle error
94
+ console.log('consume error', error);
95
+ return;
96
+ }
97
+ });
98
+ }
99
+ catch (error) {
100
+ // Handle error
101
+ console.log('connectRecvTransport error', error);
102
+ }
103
+ };
104
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConnectRecvTransport, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
105
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConnectRecvTransport, providedIn: 'root' });
106
+ }
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConnectRecvTransport, decorators: [{
108
+ type: Injectable,
109
+ args: [{
110
+ providedIn: 'root',
111
+ }]
112
+ }] });
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC1yZWN2LXRyYW5zcG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWFzZnUtYW5ndWxhci9zcmMvbGliL2NvbnN1bWVycy9jb25uZWN0LXJlY3YtdHJhbnNwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUF5QzNDLE1BQU0sT0FBTyxvQkFBb0I7SUFDL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BZ0NHO0lBRUgsb0JBQW9CLEdBQUcsS0FBSyxFQUFFLEVBQzVCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIseUJBQXlCLEVBQ3pCLEtBQUssRUFDTCxVQUFVLEdBQ2tCLEVBQWlCLEVBQUU7UUFDL0MsSUFBSSxDQUFDO1lBQ0gsVUFBVSxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzlDLE1BQU0sRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO1lBRTVGLHdEQUF3RDtZQUN4RCxLQUFLLENBQUMsSUFBSSxDQUNSLFNBQVMsRUFDVDtnQkFDRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUN2RCxnQkFBZ0I7Z0JBQ2hCLHlCQUF5QjthQUMxQixFQUNELEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBc0IsRUFBRSxFQUFFO2dCQUN2QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDakIsZUFBZTtvQkFDZixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzNDLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxJQUFJLENBQUM7b0JBQ0gsMENBQTBDO29CQUMxQyxNQUFNLFFBQVEsR0FBYSxNQUFNLGlCQUFpQixDQUFDLE9BQU8sQ0FBQzt3QkFDekQsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO3dCQUNiLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTt3QkFDN0IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUF5Qjt3QkFDdEMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO3FCQUNwQyxDQUFDLENBQUM7b0JBRUgsd0RBQXdEO29CQUN4RCxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7d0JBQ3RCLGlCQUFpQjt3QkFDakIseUJBQXlCLEVBQUUsTUFBTSxDQUFDLEVBQUU7d0JBQ3BDLFVBQVUsRUFBRSxnQkFBZ0I7d0JBQzVCLFFBQVE7d0JBQ1IsT0FBTyxFQUFFLEtBQUs7cUJBQ2YsQ0FBQyxDQUFDO29CQUVILHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBRTdDLGtDQUFrQztvQkFDbEMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQztvQkFFM0IsNkRBQTZEO29CQUM3RCxLQUFLLENBQUMsSUFBSSxDQUNSLGlCQUFpQixFQUNqQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUM3QyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQU8sRUFBRSxFQUFFO3dCQUN6QixJQUFJLE9BQU8sRUFBRSxDQUFDOzRCQUNaLHdDQUF3Qzs0QkFDeEMsSUFBSSxDQUFDO2dDQUNILE1BQU0sY0FBYyxDQUFDO29DQUNuQixLQUFLO29DQUNMLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtvQ0FDakIsZ0JBQWdCO29DQUNoQixNQUFNO29DQUNOLFVBQVU7b0NBQ1YsS0FBSztpQ0FDTixDQUFDLENBQUM7NEJBQ0wsQ0FBQzs0QkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dDQUNmLGVBQWU7Z0NBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQzs0QkFDN0MsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUMsQ0FDRixDQUFDO2dCQUNKLENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixlQUFlO29CQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNwQyxPQUFPO2dCQUNULENBQUM7WUFDSCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsZUFBZTtZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUMsQ0FBQzt1R0F0SFMsb0JBQW9COzJHQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNvY2tldCB9IGZyb20gJ3NvY2tldC5pby1jbGllbnQnO1xuaW1wb3J0IHtcbiAgQ29uc3VtZXJSZXN1bWVUeXBlLFxuICBDb25zdW1lclJlc3VtZVBhcmFtZXRlcnMsXG4gIFRyYW5zcG9ydCBhcyBUcmFuc3BvcnRUeXBlLFxufSBmcm9tICcuLi9AdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgQ29uc3VtZXIsIERldmljZSwgVHJhbnNwb3J0IH0gZnJvbSAnbWVkaWFzb3VwLWNsaWVudC9saWIvdHlwZXMnO1xuaW50ZXJmYWNlIFBhcmFtcyB7XG4gIGlkOiBzdHJpbmc7XG4gIHByb2R1Y2VySWQ6IHN0cmluZztcbiAga2luZDogc3RyaW5nO1xuICBydHBQYXJhbWV0ZXJzOiBhbnk7XG4gIHNlcnZlckNvbnN1bWVySWQ6IHN0cmluZztcbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdFJlY3ZUcmFuc3BvcnRQYXJhbWV0ZXJzIGV4dGVuZHMgQ29uc3VtZXJSZXN1bWVQYXJhbWV0ZXJzIHtcbiAgZGV2aWNlOiBEZXZpY2UgfCBudWxsO1xuICBjb25zdW1lclRyYW5zcG9ydHM6IFRyYW5zcG9ydFR5cGVbXTtcbiAgdXBkYXRlQ29uc3VtZXJUcmFuc3BvcnRzOiAodHJhbnNwb3J0czogVHJhbnNwb3J0VHlwZVtdKSA9PiB2b2lkO1xuXG4gIC8vIG1lZGlhc2Z1IGZ1bmN0aW9uc1xuICBjb25zdW1lclJlc3VtZTogQ29uc3VtZXJSZXN1bWVUeXBlO1xuICBnZXRVcGRhdGVkQWxsUGFyYW1zOiAoKSA9PiBDb25uZWN0UmVjdlRyYW5zcG9ydFBhcmFtZXRlcnM7XG4gIFtrZXk6IHN0cmluZ106IGFueTsgLy8gRXh0ZW5kYWJsZSBmb3IgYWRkaXRpb25hbCBwYXJhbWV0ZXJzXG59XG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RSZWN2VHJhbnNwb3J0T3B0aW9ucyB7XG4gIGNvbnN1bWVyVHJhbnNwb3J0OiBUcmFuc3BvcnQ7XG4gIHJlbW90ZVByb2R1Y2VySWQ6IHN0cmluZztcbiAgc2VydmVyQ29uc3VtZXJUcmFuc3BvcnRJZDogc3RyaW5nO1xuICBuc29jazogU29ja2V0O1xuICBwYXJhbWV0ZXJzOiBDb25uZWN0UmVjdlRyYW5zcG9ydFBhcmFtZXRlcnM7XG59XG5cbi8vIEV4cG9ydCB0aGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgZnVuY3Rpb25cbmV4cG9ydCB0eXBlIENvbm5lY3RSZWN2VHJhbnNwb3J0VHlwZSA9IChvcHRpb25zOiBDb25uZWN0UmVjdlRyYW5zcG9ydE9wdGlvbnMpID0+IFByb21pc2U8dm9pZD47XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDb25uZWN0UmVjdlRyYW5zcG9ydCB7XG4gIC8qKlxuICAgKiBDb25uZWN0cyB0aGUgcmVjZWl2aW5nIHRyYW5zcG9ydCB0byBjb25zdW1lIG1lZGlhIGZyb20gYSByZW1vdGUgcHJvZHVjZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGNvbm5lY3RpbmcgdGhlIHJlY2VpdmluZyB0cmFuc3BvcnQuXG4gICAqIEBwYXJhbSB7VHJhbnNwb3J0fSBvcHRpb25zLmNvbnN1bWVyVHJhbnNwb3J0IC0gVGhlIHRyYW5zcG9ydCB1c2VkIGZvciBjb25zdW1pbmcgbWVkaWEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnJlbW90ZVByb2R1Y2VySWQgLSBUaGUgSUQgb2YgdGhlIHJlbW90ZSBwcm9kdWNlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuc2VydmVyQ29uc3VtZXJUcmFuc3BvcnRJZCAtIFRoZSBJRCBvZiB0aGUgc2VydmVyIGNvbnN1bWVyIHRyYW5zcG9ydC5cbiAgICogQHBhcmFtIHtTb2NrZXR9IG9wdGlvbnMubnNvY2sgLSBUaGUgc29ja2V0IHVzZWQgZm9yIGNvbW11bmljYXRpb24uXG4gICAqIEBwYXJhbSB7Q29ubmVjdFJlY3ZUcmFuc3BvcnRPcHRpb25zfSBvcHRpb25zLnBhcmFtZXRlcnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLlxuICAgKlxuICAgKiBAdGhyb3dzIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGNvbm5lY3Rpb24gb3IgY29uc3VtcHRpb24gZmFpbHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgb3B0aW9ucyA9IHtcbiAgICogICBjb25zdW1lclRyYW5zcG9ydCxcbiAgICogICByZW1vdGVQcm9kdWNlcklkOiAncHJvZHVjZXItaWQnLFxuICAgKiAgIHNlcnZlckNvbnN1bWVyVHJhbnNwb3J0SWQ6ICd0cmFuc3BvcnQtaWQnLFxuICAgKiAgIG5zb2NrOiBzb2NrZXQsXG4gICAqICAgcGFyYW1ldGVyczogY29ubmVjdFJlY3ZUcmFuc3BvcnRPcHRpb25zLFxuICAgKiB9O1xuICAgKlxuICAgKiBjb25uZWN0UmVjdlRyYW5zcG9ydChvcHRpb25zKVxuICAgKiAgIC50aGVuKCgpID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdUcmFuc3BvcnQgY29ubmVjdGVkIGFuZCBjb25zdW1pbmcgbWVkaWEnKTtcbiAgICogICB9KVxuICAgKiAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICogICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNvbm5lY3RpbmcgdHJhbnNwb3J0OicsIGVycm9yKTtcbiAgICogICB9KTtcbiAgICogYGBgXG4gICAqL1xuXG4gIGNvbm5lY3RSZWN2VHJhbnNwb3J0ID0gYXN5bmMgKHtcbiAgICBjb25zdW1lclRyYW5zcG9ydCxcbiAgICByZW1vdGVQcm9kdWNlcklkLFxuICAgIHNlcnZlckNvbnN1bWVyVHJhbnNwb3J0SWQsXG4gICAgbnNvY2ssXG4gICAgcGFyYW1ldGVycyxcbiAgfTogQ29ubmVjdFJlY3ZUcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmdldFVwZGF0ZWRBbGxQYXJhbXMoKTtcbiAgICAgIGNvbnN0IHsgZGV2aWNlLCBjb25zdW1lclRyYW5zcG9ydHMsIHVwZGF0ZUNvbnN1bWVyVHJhbnNwb3J0cywgY29uc3VtZXJSZXN1bWUgfSA9IHBhcmFtZXRlcnM7XG5cbiAgICAgIC8vIEVtaXQgJ2NvbnN1bWUnIGV2ZW50IHRvIHNpZ25hbCBjb25zdW1wdGlvbiBpbml0aWF0aW9uXG4gICAgICBuc29jay5lbWl0KFxuICAgICAgICAnY29uc3VtZScsXG4gICAgICAgIHtcbiAgICAgICAgICBydHBDYXBhYmlsaXRpZXM6IGRldmljZSA/IGRldmljZS5ydHBDYXBhYmlsaXRpZXMgOiBudWxsLFxuICAgICAgICAgIHJlbW90ZVByb2R1Y2VySWQsXG4gICAgICAgICAgc2VydmVyQ29uc3VtZXJUcmFuc3BvcnRJZCxcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgKHsgcGFyYW1zIH06IHsgcGFyYW1zOiBQYXJhbXMgfSkgPT4ge1xuICAgICAgICAgIGlmIChwYXJhbXMuZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvbnN1bWUgZXJyb3InLCBwYXJhbXMuZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBDb25zdW1lIG1lZGlhIHVzaW5nIHJlY2VpdmVkIHBhcmFtZXRlcnNcbiAgICAgICAgICAgIGNvbnN0IGNvbnN1bWVyOiBDb25zdW1lciA9IGF3YWl0IGNvbnN1bWVyVHJhbnNwb3J0LmNvbnN1bWUoe1xuICAgICAgICAgICAgICBpZDogcGFyYW1zLmlkLFxuICAgICAgICAgICAgICBwcm9kdWNlcklkOiBwYXJhbXMucHJvZHVjZXJJZCxcbiAgICAgICAgICAgICAga2luZDogcGFyYW1zLmtpbmQgYXMgJ2F1ZGlvJyB8ICd2aWRlbycsXG4gICAgICAgICAgICAgIHJ0cFBhcmFtZXRlcnM6IHBhcmFtcy5ydHBQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBjb25zdW1lclRyYW5zcG9ydHMgYXJyYXkgd2l0aCB0aGUgbmV3IGNvbnN1bWVyXG4gICAgICAgICAgICBjb25zdW1lclRyYW5zcG9ydHMucHVzaCh7XG4gICAgICAgICAgICAgIGNvbnN1bWVyVHJhbnNwb3J0LFxuICAgICAgICAgICAgICBzZXJ2ZXJDb25zdW1lclRyYW5zcG9ydElkOiBwYXJhbXMuaWQsXG4gICAgICAgICAgICAgIHByb2R1Y2VySWQ6IHJlbW90ZVByb2R1Y2VySWQsXG4gICAgICAgICAgICAgIGNvbnN1bWVyLFxuICAgICAgICAgICAgICBzb2NrZXRfOiBuc29jayxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB1cGRhdGVDb25zdW1lclRyYW5zcG9ydHMoY29uc3VtZXJUcmFuc3BvcnRzKTtcblxuICAgICAgICAgICAgLy8gRXh0cmFjdCB0cmFjayBmcm9tIHRoZSBjb25zdW1lclxuICAgICAgICAgICAgY29uc3QgeyB0cmFjayB9ID0gY29uc3VtZXI7XG5cbiAgICAgICAgICAgIC8vIEVtaXQgJ2NvbnN1bWVyLXJlc3VtZScgZXZlbnQgdG8gc2lnbmFsIGNvbnN1bWVyIHJlc3VtcHRpb25cbiAgICAgICAgICAgIG5zb2NrLmVtaXQoXG4gICAgICAgICAgICAgICdjb25zdW1lci1yZXN1bWUnLFxuICAgICAgICAgICAgICB7IHNlcnZlckNvbnN1bWVySWQ6IHBhcmFtcy5zZXJ2ZXJDb25zdW1lcklkIH0sXG4gICAgICAgICAgICAgIGFzeW5jICh7IHJlc3VtZWQgfTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VtZWQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIENvbnN1bWVyIHJlc3VtZWQgYW5kIHJlYWR5IHRvIGJlIHVzZWRcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnN1bWVyUmVzdW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICB0cmFjayxcbiAgICAgICAgICAgICAgICAgICAgICBraW5kOiBwYXJhbXMua2luZCxcbiAgICAgICAgICAgICAgICAgICAgICByZW1vdGVQcm9kdWNlcklkLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIG5zb2NrLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBlcnJvclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY29uc3VtZXJSZXN1bWUgZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9yXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY29uc3VtZSBlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JcbiAgICAgIGNvbnNvbGUubG9nKCdjb25uZWN0UmVjdlRyYW5zcG9ydCBlcnJvcicsIGVycm9yKTtcbiAgICB9XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,46 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ConnectSendTransportAudio {
4
+ /**
5
+ * Connects the send transport for audio by producing audio data and updating the audio producer and producer transport objects.
6
+ *
7
+ * @param {Object} params - The parameters for connecting the send transport.
8
+ * @param {ProducerOptions} params.audioParams - The options for the audio producer.
9
+ * @param {ConnectSendTransportAudioParameters} params.parameters - The parameters containing the audio producer, producer transport, and update functions.
10
+ * @param {Producer} params.parameters.audioProducer - The current audio producer.
11
+ * @param {Transport} params.parameters.producerTransport - The transport used to produce audio data.
12
+ * @param {Function} params.parameters.updateAudioProducer - Function to update the audio producer.
13
+ * @param {Function} params.parameters.updateProducerTransport - Function to update the producer transport.
14
+ *
15
+ * @returns {Promise<void>} A promise that resolves when the audio transport is successfully connected.
16
+ *
17
+ * @throws Will throw an error if the connection fails.
18
+ */
19
+ async connectSendTransportAudio({ audioParams, parameters, }) {
20
+ try {
21
+ let { audioProducer, producerTransport, updateAudioProducer, updateProducerTransport } = parameters;
22
+ // Connect the send transport for audio by producing audio data
23
+ if (producerTransport) {
24
+ audioProducer = await producerTransport.produce(audioParams);
25
+ }
26
+ else {
27
+ throw new Error('Producer transport is null');
28
+ }
29
+ // Update the audio producer and producer transport objects
30
+ updateAudioProducer(audioProducer);
31
+ updateProducerTransport(producerTransport);
32
+ }
33
+ catch (error) {
34
+ console.log('connectSendTransportAudio error', error);
35
+ }
36
+ }
37
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConnectSendTransportAudio, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
38
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConnectSendTransportAudio, providedIn: 'root' });
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConnectSendTransportAudio, decorators: [{
41
+ type: Injectable,
42
+ args: [{
43
+ providedIn: 'root',
44
+ }]
45
+ }] });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC1zZW5kLXRyYW5zcG9ydC1hdWRpby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWFzZnUtYW5ndWxhci9zcmMvbGliL2NvbnN1bWVycy9jb25uZWN0LXNlbmQtdHJhbnNwb3J0LWF1ZGlvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFzQjNDLE1BQU0sT0FBTyx5QkFBeUI7SUFDcEM7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFFSCxLQUFLLENBQUMseUJBQXlCLENBQUMsRUFDOUIsV0FBVyxFQUNYLFVBQVUsR0FDdUI7UUFDakMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxHQUNwRixVQUFVLENBQUM7WUFFYiwrREFBK0Q7WUFDL0QsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2dCQUN0QixhQUFhLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBRUQsMkRBQTJEO1lBQzNELG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25DLHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDO3VHQXRDVSx5QkFBeUI7MkdBQXpCLHlCQUF5QixjQUZ4QixNQUFNOzsyRkFFUCx5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBUcmFuc3BvcnQsIFByb2R1Y2VyLCBQcm9kdWNlck9wdGlvbnMgfSBmcm9tICdtZWRpYXNvdXAtY2xpZW50L2xpYi90eXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RTZW5kVHJhbnNwb3J0QXVkaW9QYXJhbWV0ZXJzIHtcbiAgYXVkaW9Qcm9kdWNlcjogUHJvZHVjZXIgfCBudWxsO1xuICBwcm9kdWNlclRyYW5zcG9ydDogVHJhbnNwb3J0IHwgbnVsbDtcbiAgdXBkYXRlQXVkaW9Qcm9kdWNlcjogKHByb2R1Y2VyOiBQcm9kdWNlciB8IG51bGwpID0+IHZvaWQ7XG4gIHVwZGF0ZVByb2R1Y2VyVHJhbnNwb3J0OiAodHJhbnNwb3J0OiBUcmFuc3BvcnQgfCBudWxsKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RTZW5kVHJhbnNwb3J0QXVkaW9PcHRpb25zIHtcbiAgYXVkaW9QYXJhbXM6IFByb2R1Y2VyT3B0aW9ucztcbiAgcGFyYW1ldGVyczogQ29ubmVjdFNlbmRUcmFuc3BvcnRBdWRpb1BhcmFtZXRlcnM7XG59XG5cbi8vIEV4cG9ydCB0aGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgZnVuY3Rpb25cbmV4cG9ydCB0eXBlIENvbm5lY3RTZW5kVHJhbnNwb3J0QXVkaW9UeXBlID0gKFxuICBvcHRpb25zOiBDb25uZWN0U2VuZFRyYW5zcG9ydEF1ZGlvT3B0aW9ucyxcbikgPT4gUHJvbWlzZTx2b2lkPjtcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDb25uZWN0U2VuZFRyYW5zcG9ydEF1ZGlvIHtcbiAgLyoqXG4gICAqIENvbm5lY3RzIHRoZSBzZW5kIHRyYW5zcG9ydCBmb3IgYXVkaW8gYnkgcHJvZHVjaW5nIGF1ZGlvIGRhdGEgYW5kIHVwZGF0aW5nIHRoZSBhdWRpbyBwcm9kdWNlciBhbmQgcHJvZHVjZXIgdHJhbnNwb3J0IG9iamVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgY29ubmVjdGluZyB0aGUgc2VuZCB0cmFuc3BvcnQuXG4gICAqIEBwYXJhbSB7UHJvZHVjZXJPcHRpb25zfSBwYXJhbXMuYXVkaW9QYXJhbXMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGF1ZGlvIHByb2R1Y2VyLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3RTZW5kVHJhbnNwb3J0QXVkaW9QYXJhbWV0ZXJzfSBwYXJhbXMucGFyYW1ldGVycyAtIFRoZSBwYXJhbWV0ZXJzIGNvbnRhaW5pbmcgdGhlIGF1ZGlvIHByb2R1Y2VyLCBwcm9kdWNlciB0cmFuc3BvcnQsIGFuZCB1cGRhdGUgZnVuY3Rpb25zLlxuICAgKiBAcGFyYW0ge1Byb2R1Y2VyfSBwYXJhbXMucGFyYW1ldGVycy5hdWRpb1Byb2R1Y2VyIC0gVGhlIGN1cnJlbnQgYXVkaW8gcHJvZHVjZXIuXG4gICAqIEBwYXJhbSB7VHJhbnNwb3J0fSBwYXJhbXMucGFyYW1ldGVycy5wcm9kdWNlclRyYW5zcG9ydCAtIFRoZSB0cmFuc3BvcnQgdXNlZCB0byBwcm9kdWNlIGF1ZGlvIGRhdGEuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtcy5wYXJhbWV0ZXJzLnVwZGF0ZUF1ZGlvUHJvZHVjZXIgLSBGdW5jdGlvbiB0byB1cGRhdGUgdGhlIGF1ZGlvIHByb2R1Y2VyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJhbXMucGFyYW1ldGVycy51cGRhdGVQcm9kdWNlclRyYW5zcG9ydCAtIEZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgcHJvZHVjZXIgdHJhbnNwb3J0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXVkaW8gdHJhbnNwb3J0IGlzIHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQuXG4gICAqXG4gICAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgY29ubmVjdGlvbiBmYWlscy5cbiAgICovXG5cbiAgYXN5bmMgY29ubmVjdFNlbmRUcmFuc3BvcnRBdWRpbyh7XG4gICAgYXVkaW9QYXJhbXMsXG4gICAgcGFyYW1ldGVycyxcbiAgfTogQ29ubmVjdFNlbmRUcmFuc3BvcnRBdWRpb09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHsgYXVkaW9Qcm9kdWNlciwgcHJvZHVjZXJUcmFuc3BvcnQsIHVwZGF0ZUF1ZGlvUHJvZHVjZXIsIHVwZGF0ZVByb2R1Y2VyVHJhbnNwb3J0IH0gPVxuICAgICAgICBwYXJhbWV0ZXJzO1xuXG4gICAgICAvLyBDb25uZWN0IHRoZSBzZW5kIHRyYW5zcG9ydCBmb3IgYXVkaW8gYnkgcHJvZHVjaW5nIGF1ZGlvIGRhdGFcbiAgICAgIGlmIChwcm9kdWNlclRyYW5zcG9ydCkge1xuICAgICAgICBhdWRpb1Byb2R1Y2VyID0gYXdhaXQgcHJvZHVjZXJUcmFuc3BvcnQucHJvZHVjZShhdWRpb1BhcmFtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2R1Y2VyIHRyYW5zcG9ydCBpcyBudWxsJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgYXVkaW8gcHJvZHVjZXIgYW5kIHByb2R1Y2VyIHRyYW5zcG9ydCBvYmplY3RzXG4gICAgICB1cGRhdGVBdWRpb1Byb2R1Y2VyKGF1ZGlvUHJvZHVjZXIpO1xuICAgICAgdXBkYXRlUHJvZHVjZXJUcmFuc3BvcnQocHJvZHVjZXJUcmFuc3BvcnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZygnY29ubmVjdFNlbmRUcmFuc3BvcnRBdWRpbyBlcnJvcicsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,62 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ConnectSendTransportScreen {
4
+ /**
5
+ * Connects and sets up the screen sharing transport for sending video streams.
6
+ *
7
+ * @param {Object} options - The options for connecting the screen transport.
8
+ * @param {MediaStream} options.stream - The media stream containing the screen video track.
9
+ * @param {ConnectSendTransportScreenOptions} options.parameters - The parameters required for setting up the transport.
10
+ * @param {Producer} options.parameters.screenProducer - The screen producer object.
11
+ * @param {Device} options.parameters.device - The device object containing RTP capabilities.
12
+ * @param {Promise<ScreenParams>} options.parameters.screenParams - A promise resolving to screen share parameters.
13
+ * @param {Transport} options.parameters.producerTransport - The transport object used for producing the screen share.
14
+ * @param {Params} options.parameters.params - The parameters for producing the screen share.
15
+ * @param {Function} options.parameters.updateScreenProducer - Function to update the screen producer object.
16
+ * @param {Function} options.parameters.updateProducerTransport - Function to update the producer transport object.
17
+ * @param {Function} options.parameters.getUpdatedAllParams - Function to fetch updated device information.
18
+ *
19
+ * @returns {Promise<void>} A promise that resolves when the screen transport is successfully connected and set up.
20
+ *
21
+ * @throws Will throw an error if the connection or setup process fails.
22
+ */
23
+ async connectSendTransportScreen({ stream, parameters, }) {
24
+ try {
25
+ let { screenProducer, device, screenParams, producerTransport, params, updateScreenProducer, updateProducerTransport, } = parameters;
26
+ device = parameters.getUpdatedAllParams().device;
27
+ // Connect the send transport for screen share by producing screen video data
28
+ params = screenParams;
29
+ // Find VP9 codec for screen share
30
+ if (!device || !device.rtpCapabilities || !device.rtpCapabilities.codecs) {
31
+ throw new Error('Device or its RTP capabilities are not available.');
32
+ }
33
+ let codec = device.rtpCapabilities.codecs.find((codec) => codec.mimeType.toLowerCase() === 'video/vp9' && codec.kind === 'video');
34
+ // Produce screen share data using the producer transport
35
+ if (!producerTransport) {
36
+ throw new Error('Producer transport is not available.');
37
+ }
38
+ screenProducer = await producerTransport.produce({
39
+ track: stream?.getVideoTracks()[0],
40
+ ...params,
41
+ codec: codec,
42
+ appData: { mediaTag: 'screen-video' },
43
+ });
44
+ // Update the screen producer and producer transport objects
45
+ updateScreenProducer(screenProducer);
46
+ updateProducerTransport(producerTransport);
47
+ }
48
+ catch (error) {
49
+ console.log('connectSendTransportScreen error', error);
50
+ throw error;
51
+ }
52
+ }
53
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConnectSendTransportScreen, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
54
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConnectSendTransportScreen, providedIn: 'root' });
55
+ }
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConnectSendTransportScreen, decorators: [{
57
+ type: Injectable,
58
+ args: [{
59
+ providedIn: 'root',
60
+ }]
61
+ }] });
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC1zZW5kLXRyYW5zcG9ydC1zY3JlZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb25zdW1lcnMvY29ubmVjdC1zZW5kLXRyYW5zcG9ydC1zY3JlZW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQTJCM0MsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0lBQ0gsS0FBSyxDQUFDLDBCQUEwQixDQUFDLEVBQy9CLE1BQU0sRUFDTixVQUFVLEdBQ3dCO1FBQ2xDLElBQUksQ0FBQztZQUNILElBQUksRUFDRixjQUFjLEVBQ2QsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLG9CQUFvQixFQUNwQix1QkFBdUIsR0FDeEIsR0FBRyxVQUFVLENBQUM7WUFFZixNQUFNLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pELDZFQUE2RTtZQUM3RSxNQUFNLEdBQUcsWUFBWSxDQUFDO1lBRXRCLGtDQUFrQztZQUNsQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pFLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztZQUN2RSxDQUFDO1lBRUQsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUM1QyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLENBQ3ZGLENBQUM7WUFFRix5REFBeUQ7WUFDekQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBRUQsY0FBYyxHQUFHLE1BQU0saUJBQWlCLENBQUMsT0FBTyxDQUFDO2dCQUMvQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbEMsR0FBRyxNQUFNO2dCQUNULEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUU7YUFDdEMsQ0FBQyxDQUFDO1lBRUgsNERBQTREO1lBQzVELG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3JDLHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7dUdBbkVVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLGNBRnpCLE1BQU07OzJGQUVQLDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc3BvcnQsIFByb2R1Y2VyLCBEZXZpY2UsIFByb2R1Y2VyT3B0aW9ucyB9IGZyb20gJ21lZGlhc291cC1jbGllbnQvbGliL3R5cGVzJztcbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdFNlbmRUcmFuc3BvcnRTY3JlZW5QYXJhbWV0ZXJzIHtcbiAgc2NyZWVuUHJvZHVjZXI6IFByb2R1Y2VyIHwgbnVsbDtcbiAgZGV2aWNlOiBEZXZpY2UgfCBudWxsO1xuICBzY3JlZW5QYXJhbXM6IFByb2R1Y2VyT3B0aW9ucztcbiAgcHJvZHVjZXJUcmFuc3BvcnQ6IFRyYW5zcG9ydCB8IG51bGw7XG4gIHBhcmFtczogUHJvZHVjZXJPcHRpb25zO1xuICB1cGRhdGVTY3JlZW5Qcm9kdWNlcjogKHByb2R1Y2VyOiBQcm9kdWNlciB8IG51bGwpID0+IHZvaWQ7XG4gIHVwZGF0ZVByb2R1Y2VyVHJhbnNwb3J0OiAodHJhbnNwb3J0OiBUcmFuc3BvcnQgfCBudWxsKSA9PiB2b2lkO1xuXG4gIGdldFVwZGF0ZWRBbGxQYXJhbXM6ICgpID0+IENvbm5lY3RTZW5kVHJhbnNwb3J0U2NyZWVuUGFyYW1ldGVycztcbiAgW2tleTogc3RyaW5nXTogYW55OyAvLyBFeHRlbmRhYmxlIGZvciBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0U2VuZFRyYW5zcG9ydFNjcmVlbk9wdGlvbnMge1xuICBzdHJlYW06IE1lZGlhU3RyZWFtIHwgbnVsbDtcbiAgcGFyYW1ldGVyczogQ29ubmVjdFNlbmRUcmFuc3BvcnRTY3JlZW5QYXJhbWV0ZXJzO1xufVxuXG4vLyBFeHBvcnQgdGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIGZ1bmN0aW9uXG5leHBvcnQgdHlwZSBDb25uZWN0U2VuZFRyYW5zcG9ydFNjcmVlblR5cGUgPSAoXG4gIG9wdGlvbnM6IENvbm5lY3RTZW5kVHJhbnNwb3J0U2NyZWVuT3B0aW9ucyxcbikgPT4gUHJvbWlzZTx2b2lkPjtcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDb25uZWN0U2VuZFRyYW5zcG9ydFNjcmVlbiB7XG4gIC8qKlxuICAgKiBDb25uZWN0cyBhbmQgc2V0cyB1cCB0aGUgc2NyZWVuIHNoYXJpbmcgdHJhbnNwb3J0IGZvciBzZW5kaW5nIHZpZGVvIHN0cmVhbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGNvbm5lY3RpbmcgdGhlIHNjcmVlbiB0cmFuc3BvcnQuXG4gICAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IG9wdGlvbnMuc3RyZWFtIC0gVGhlIG1lZGlhIHN0cmVhbSBjb250YWluaW5nIHRoZSBzY3JlZW4gdmlkZW8gdHJhY2suXG4gICAqIEBwYXJhbSB7Q29ubmVjdFNlbmRUcmFuc3BvcnRTY3JlZW5PcHRpb25zfSBvcHRpb25zLnBhcmFtZXRlcnMgLSBUaGUgcGFyYW1ldGVycyByZXF1aXJlZCBmb3Igc2V0dGluZyB1cCB0aGUgdHJhbnNwb3J0LlxuICAgKiBAcGFyYW0ge1Byb2R1Y2VyfSBvcHRpb25zLnBhcmFtZXRlcnMuc2NyZWVuUHJvZHVjZXIgLSBUaGUgc2NyZWVuIHByb2R1Y2VyIG9iamVjdC5cbiAgICogQHBhcmFtIHtEZXZpY2V9IG9wdGlvbnMucGFyYW1ldGVycy5kZXZpY2UgLSBUaGUgZGV2aWNlIG9iamVjdCBjb250YWluaW5nIFJUUCBjYXBhYmlsaXRpZXMuXG4gICAqIEBwYXJhbSB7UHJvbWlzZTxTY3JlZW5QYXJhbXM+fSBvcHRpb25zLnBhcmFtZXRlcnMuc2NyZWVuUGFyYW1zIC0gQSBwcm9taXNlIHJlc29sdmluZyB0byBzY3JlZW4gc2hhcmUgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtUcmFuc3BvcnR9IG9wdGlvbnMucGFyYW1ldGVycy5wcm9kdWNlclRyYW5zcG9ydCAtIFRoZSB0cmFuc3BvcnQgb2JqZWN0IHVzZWQgZm9yIHByb2R1Y2luZyB0aGUgc2NyZWVuIHNoYXJlLlxuICAgKiBAcGFyYW0ge1BhcmFtc30gb3B0aW9ucy5wYXJhbWV0ZXJzLnBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBwcm9kdWNpbmcgdGhlIHNjcmVlbiBzaGFyZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5wYXJhbWV0ZXJzLnVwZGF0ZVNjcmVlblByb2R1Y2VyIC0gRnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBzY3JlZW4gcHJvZHVjZXIgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLnBhcmFtZXRlcnMudXBkYXRlUHJvZHVjZXJUcmFuc3BvcnQgLSBGdW5jdGlvbiB0byB1cGRhdGUgdGhlIHByb2R1Y2VyIHRyYW5zcG9ydCBvYmplY3QuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMucGFyYW1ldGVycy5nZXRVcGRhdGVkQWxsUGFyYW1zIC0gRnVuY3Rpb24gdG8gZmV0Y2ggdXBkYXRlZCBkZXZpY2UgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzY3JlZW4gdHJhbnNwb3J0IGlzIHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgYW5kIHNldCB1cC5cbiAgICpcbiAgICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBjb25uZWN0aW9uIG9yIHNldHVwIHByb2Nlc3MgZmFpbHMuXG4gICAqL1xuICBhc3luYyBjb25uZWN0U2VuZFRyYW5zcG9ydFNjcmVlbih7XG4gICAgc3RyZWFtLFxuICAgIHBhcmFtZXRlcnMsXG4gIH06IENvbm5lY3RTZW5kVHJhbnNwb3J0U2NyZWVuT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQge1xuICAgICAgICBzY3JlZW5Qcm9kdWNlcixcbiAgICAgICAgZGV2aWNlLFxuICAgICAgICBzY3JlZW5QYXJhbXMsXG4gICAgICAgIHByb2R1Y2VyVHJhbnNwb3J0LFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHVwZGF0ZVNjcmVlblByb2R1Y2VyLFxuICAgICAgICB1cGRhdGVQcm9kdWNlclRyYW5zcG9ydCxcbiAgICAgIH0gPSBwYXJhbWV0ZXJzO1xuXG4gICAgICBkZXZpY2UgPSBwYXJhbWV0ZXJzLmdldFVwZGF0ZWRBbGxQYXJhbXMoKS5kZXZpY2U7XG4gICAgICAvLyBDb25uZWN0IHRoZSBzZW5kIHRyYW5zcG9ydCBmb3Igc2NyZWVuIHNoYXJlIGJ5IHByb2R1Y2luZyBzY3JlZW4gdmlkZW8gZGF0YVxuICAgICAgcGFyYW1zID0gc2NyZWVuUGFyYW1zO1xuXG4gICAgICAvLyBGaW5kIFZQOSBjb2RlYyBmb3Igc2NyZWVuIHNoYXJlXG4gICAgICBpZiAoIWRldmljZSB8fCAhZGV2aWNlLnJ0cENhcGFiaWxpdGllcyB8fCAhZGV2aWNlLnJ0cENhcGFiaWxpdGllcy5jb2RlY3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXZpY2Ugb3IgaXRzIFJUUCBjYXBhYmlsaXRpZXMgYXJlIG5vdCBhdmFpbGFibGUuJyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBjb2RlYyA9IGRldmljZS5ydHBDYXBhYmlsaXRpZXMuY29kZWNzLmZpbmQoXG4gICAgICAgIChjb2RlYzogYW55KSA9PiBjb2RlYy5taW1lVHlwZS50b0xvd2VyQ2FzZSgpID09PSAndmlkZW8vdnA5JyAmJiBjb2RlYy5raW5kID09PSAndmlkZW8nLFxuICAgICAgKTtcblxuICAgICAgLy8gUHJvZHVjZSBzY3JlZW4gc2hhcmUgZGF0YSB1c2luZyB0aGUgcHJvZHVjZXIgdHJhbnNwb3J0XG4gICAgICBpZiAoIXByb2R1Y2VyVHJhbnNwb3J0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvZHVjZXIgdHJhbnNwb3J0IGlzIG5vdCBhdmFpbGFibGUuJyk7XG4gICAgICB9XG5cbiAgICAgIHNjcmVlblByb2R1Y2VyID0gYXdhaXQgcHJvZHVjZXJUcmFuc3BvcnQucHJvZHVjZSh7XG4gICAgICAgIHRyYWNrOiBzdHJlYW0/LmdldFZpZGVvVHJhY2tzKClbMF0sXG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgY29kZWM6IGNvZGVjLFxuICAgICAgICBhcHBEYXRhOiB7IG1lZGlhVGFnOiAnc2NyZWVuLXZpZGVvJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgc2NyZWVuIHByb2R1Y2VyIGFuZCBwcm9kdWNlciB0cmFuc3BvcnQgb2JqZWN0c1xuICAgICAgdXBkYXRlU2NyZWVuUHJvZHVjZXIoc2NyZWVuUHJvZHVjZXIpO1xuICAgICAgdXBkYXRlUHJvZHVjZXJUcmFuc3BvcnQocHJvZHVjZXJUcmFuc3BvcnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZygnY29ubmVjdFNlbmRUcmFuc3BvcnRTY3JlZW4gZXJyb3InLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==