mediasfu-angular 1.0.2 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/README.md +686 -578
  2. package/dist/README.md +677 -578
  3. package/dist/fesm2022/mediasfu-angular.mjs +5551 -2944
  4. package/dist/fesm2022/mediasfu-angular.mjs.map +1 -1
  5. package/dist/lib/@types/types.d.ts +22 -1
  6. package/dist/lib/components/breakout-components/breakout-rooms-modal.component.d.ts +1 -0
  7. package/dist/lib/components/mediasfu-components/mediasfu-broadcast.component.d.ts +153 -61
  8. package/dist/lib/components/mediasfu-components/mediasfu-chat.component.d.ts +154 -66
  9. package/dist/lib/components/mediasfu-components/mediasfu-conference.component.d.ts +190 -76
  10. package/dist/lib/components/mediasfu-components/mediasfu-generic.component.d.ts +184 -70
  11. package/dist/lib/components/mediasfu-components/mediasfu-webinar.component.d.ts +192 -78
  12. package/dist/lib/components/menu-components/menu-modal/menu-modal.component.d.ts +6 -1
  13. package/dist/lib/components/menu-components/share-buttons-component/share-buttons-component.component.d.ts +5 -2
  14. package/dist/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.d.ts +4 -2
  15. package/dist/lib/components/misc-components/pre-join-page/pre-join-page.component.d.ts +71 -66
  16. package/dist/lib/components/misc-components/share-event-modal/share-event-modal.component.d.ts +5 -1
  17. package/dist/lib/consumers/connect-local-ips.service.d.ts +81 -0
  18. package/dist/lib/consumers/connect-send-transport-audio.service.d.ts +43 -11
  19. package/dist/lib/consumers/connect-send-transport-screen.service.d.ts +87 -46
  20. package/dist/lib/consumers/connect-send-transport-video.service.d.ts +89 -43
  21. package/dist/lib/consumers/connect-send-transport.service.d.ts +5 -1
  22. package/dist/lib/consumers/create-send-transport.service.d.ts +130 -40
  23. package/dist/lib/consumers/disconnect-send-transport-audio.service.d.ts +77 -40
  24. package/dist/lib/consumers/disconnect-send-transport-screen.service.d.ts +48 -14
  25. package/dist/lib/consumers/disconnect-send-transport-video.service.d.ts +81 -44
  26. package/dist/lib/consumers/get-piped-producers-alt.service.d.ts +5 -1
  27. package/dist/lib/consumers/receive-all-piped-transports.service.d.ts +5 -1
  28. package/dist/lib/consumers/resume-send-transport-audio.service.d.ts +54 -21
  29. package/dist/lib/consumers/stream-success-audio-switch.service.d.ts +124 -40
  30. package/dist/lib/consumers/trigger.service.d.ts +3 -0
  31. package/dist/lib/methods/exit-methods/confirm-exit.service.d.ts +5 -1
  32. package/dist/lib/methods/recording-methods/start-recording.service.d.ts +3 -0
  33. package/dist/lib/methods/recording-methods/stop-recording.service.d.ts +4 -1
  34. package/dist/lib/methods/recording-methods/update-recording.service.d.ts +3 -0
  35. package/dist/lib/methods/stream-methods/click-audio.service.d.ts +3 -0
  36. package/dist/lib/methods/utils/check-limits-and-make-request.service.d.ts +23 -0
  37. package/dist/lib/methods/utils/create-response-join-room.util.d.ts +33 -0
  38. package/dist/lib/methods/utils/create-room-on-media-sfu.service.d.ts +25 -0
  39. package/dist/lib/methods/utils/initial-values.util.d.ts +6 -0
  40. package/dist/lib/methods/utils/join-room-on-media-sfu.service.d.ts +52 -0
  41. package/dist/lib/methods/whiteboard-methods/capture-canvas-stream.service.d.ts +37 -20
  42. package/dist/lib/producers/producer-emits/join-local-room.service.d.ts +125 -0
  43. package/dist/lib/producers/socket-receive-methods/all-members-rest.service.d.ts +7 -2
  44. package/dist/lib/producers/socket-receive-methods/all-members.service.d.ts +7 -2
  45. package/dist/lib/producers/socket-receive-methods/disconnect-user-self.service.d.ts +5 -1
  46. package/dist/lib/sockets/socket-manager.service.d.ts +90 -0
  47. package/dist/public-api.d.ts +11 -1
  48. package/package.json +17 -20
  49. package/dist/esm2022/lib/@types/types.mjs +0 -2
  50. package/dist/esm2022/lib/components/background-components/background-modal/background-modal.component.mjs +0 -799
  51. package/dist/esm2022/lib/components/breakout-components/breakout-rooms-modal.component.mjs +0 -366
  52. package/dist/esm2022/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.mjs +0 -143
  53. package/dist/esm2022/lib/components/breakout-components/room-list/room-list.component.mjs +0 -40
  54. package/dist/esm2022/lib/components/co-host-components/co-host-modal/co-host-modal.component.mjs +0 -245
  55. package/dist/esm2022/lib/components/display-components/alert-component/alert.component.component.mjs +0 -79
  56. package/dist/esm2022/lib/components/display-components/audio-card/audio-card.component.mjs +0 -356
  57. package/dist/esm2022/lib/components/display-components/audio-grid/audio-grid.component.mjs +0 -80
  58. package/dist/esm2022/lib/components/display-components/card-video-display/card-video-display.component.mjs +0 -129
  59. package/dist/esm2022/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.mjs +0 -138
  60. package/dist/esm2022/lib/components/display-components/control-buttons-component/control-buttons-component.component.mjs +0 -231
  61. package/dist/esm2022/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.mjs +0 -282
  62. package/dist/esm2022/lib/components/display-components/control-widgets/menu-participants-widget.component.mjs +0 -82
  63. package/dist/esm2022/lib/components/display-components/control-widgets/menu-record-widget.component.mjs +0 -65
  64. package/dist/esm2022/lib/components/display-components/control-widgets/menu-widget.component.mjs +0 -137
  65. package/dist/esm2022/lib/components/display-components/control-widgets/message-widget.component.mjs +0 -137
  66. package/dist/esm2022/lib/components/display-components/control-widgets/record-timer-widget.component.mjs +0 -51
  67. package/dist/esm2022/lib/components/display-components/control-widgets/screenshare-widget.component.mjs +0 -101
  68. package/dist/esm2022/lib/components/display-components/flexible-grid/flexible-grid.component.mjs +0 -151
  69. package/dist/esm2022/lib/components/display-components/flexible-video/flexible-video.component.mjs +0 -250
  70. package/dist/esm2022/lib/components/display-components/loading-modal/loading-modal.component.mjs +0 -102
  71. package/dist/esm2022/lib/components/display-components/main-aspect-component/main-aspect-component.component.mjs +0 -140
  72. package/dist/esm2022/lib/components/display-components/main-container-component/main-container-component.component.mjs +0 -131
  73. package/dist/esm2022/lib/components/display-components/main-grid-component/main-grid-component.component.mjs +0 -120
  74. package/dist/esm2022/lib/components/display-components/main-screen-component/main-screen-component.component.mjs +0 -201
  75. package/dist/esm2022/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.mjs +0 -115
  76. package/dist/esm2022/lib/components/display-components/mini-audio/mini-audio.component.mjs +0 -319
  77. package/dist/esm2022/lib/components/display-components/mini-card/mini-card.component.mjs +0 -161
  78. package/dist/esm2022/lib/components/display-components/mini-card-audio/mini-card-audio.component.mjs +0 -230
  79. package/dist/esm2022/lib/components/display-components/other-grid-component/other-grid-component.component.mjs +0 -126
  80. package/dist/esm2022/lib/components/display-components/pagination/pagination.component.mjs +0 -334
  81. package/dist/esm2022/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.mjs +0 -112
  82. package/dist/esm2022/lib/components/display-components/video-card/video-card.component.mjs +0 -392
  83. package/dist/esm2022/lib/components/display-settings-components/display-settings-modal.component.mjs +0 -106
  84. package/dist/esm2022/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.mjs +0 -199
  85. package/dist/esm2022/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.mjs +0 -132
  86. package/dist/esm2022/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.mjs +0 -220
  87. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-broadcast.component.mjs +0 -4238
  88. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-chat.component.mjs +0 -3754
  89. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-conference.component.mjs +0 -5071
  90. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-generic.component.mjs +0 -5380
  91. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-webinar.component.mjs +0 -5068
  92. package/dist/esm2022/lib/components/menu-components/custom-buttons/custom-buttons.component.mjs +0 -83
  93. package/dist/esm2022/lib/components/menu-components/meeting-id-component/meeting-id-component.component.mjs +0 -27
  94. package/dist/esm2022/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.mjs +0 -27
  95. package/dist/esm2022/lib/components/menu-components/menu-modal/menu-modal.component.mjs +0 -125
  96. package/dist/esm2022/lib/components/menu-components/share-buttons-component/share-buttons-component.component.mjs +0 -106
  97. package/dist/esm2022/lib/components/message-components/message-panel/message-panel.component.mjs +0 -228
  98. package/dist/esm2022/lib/components/message-components/messages-modal/messages-modal.component.mjs +0 -277
  99. package/dist/esm2022/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.mjs +0 -130
  100. package/dist/esm2022/lib/components/misc-components/pre-join-page/pre-join-page.component.mjs +0 -343
  101. package/dist/esm2022/lib/components/misc-components/share-event-modal/share-event-modal.component.mjs +0 -127
  102. package/dist/esm2022/lib/components/misc-components/welcome-page/welcome-page.component.mjs +0 -241
  103. package/dist/esm2022/lib/components/participants-components/participant-list/participant-list.component.mjs +0 -82
  104. package/dist/esm2022/lib/components/participants-components/participant-list-item/participant-list-item.component.mjs +0 -139
  105. package/dist/esm2022/lib/components/participants-components/participant-list-others/participant-list-others.component.mjs +0 -40
  106. package/dist/esm2022/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.mjs +0 -60
  107. package/dist/esm2022/lib/components/participants-components/participants-modal/participants-modal.component.mjs +0 -124
  108. package/dist/esm2022/lib/components/polls-components/poll-modal/poll-modal.component.mjs +0 -201
  109. package/dist/esm2022/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.mjs +0 -92
  110. package/dist/esm2022/lib/components/recording-components/recording-modal/recording-modal.component.mjs +0 -133
  111. package/dist/esm2022/lib/components/recording-components/standard-panel-component/standard-panel-component.component.mjs +0 -90
  112. package/dist/esm2022/lib/components/requests-components/render-request-component/render-request-component.component.mjs +0 -81
  113. package/dist/esm2022/lib/components/requests-components/requests-modal/requests-modal.component.mjs +0 -147
  114. package/dist/esm2022/lib/components/screenboard-components/screenboard/screenboard.component.mjs +0 -627
  115. package/dist/esm2022/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.mjs +0 -391
  116. package/dist/esm2022/lib/components/waiting-components/waiting-room-modal.component.mjs +0 -201
  117. package/dist/esm2022/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.mjs +0 -286
  118. package/dist/esm2022/lib/components/whiteboard-components/whiteboard/whiteboard.component.mjs +0 -1833
  119. package/dist/esm2022/lib/consumers/add-videos-grid.service.mjs +0 -345
  120. package/dist/esm2022/lib/consumers/auto-adjust.service.mjs +0 -109
  121. package/dist/esm2022/lib/consumers/calculate-rows-and-columns.service.mjs +0 -60
  122. package/dist/esm2022/lib/consumers/change-vids.service.mjs +0 -551
  123. package/dist/esm2022/lib/consumers/check-grid.service.mjs +0 -93
  124. package/dist/esm2022/lib/consumers/check-permission.service.mjs +0 -105
  125. package/dist/esm2022/lib/consumers/check-screen-share.service.mjs +0 -106
  126. package/dist/esm2022/lib/consumers/close-and-resize.service.mjs +0 -331
  127. package/dist/esm2022/lib/consumers/compare-active-names.service.mjs +0 -106
  128. package/dist/esm2022/lib/consumers/compare-screen-states.service.mjs +0 -98
  129. package/dist/esm2022/lib/consumers/connect-ips.service.mjs +0 -154
  130. package/dist/esm2022/lib/consumers/connect-recv-transport.service.mjs +0 -146
  131. package/dist/esm2022/lib/consumers/connect-send-transport-audio.service.mjs +0 -84
  132. package/dist/esm2022/lib/consumers/connect-send-transport-screen.service.mjs +0 -102
  133. package/dist/esm2022/lib/consumers/connect-send-transport-video.service.mjs +0 -99
  134. package/dist/esm2022/lib/consumers/connect-send-transport.service.mjs +0 -140
  135. package/dist/esm2022/lib/consumers/consumer-resume.service.mjs +0 -368
  136. package/dist/esm2022/lib/consumers/control-media.service.mjs +0 -113
  137. package/dist/esm2022/lib/consumers/create-send-transport.service.mjs +0 -172
  138. package/dist/esm2022/lib/consumers/disconnect-send-transport-audio.service.mjs +0 -108
  139. package/dist/esm2022/lib/consumers/disconnect-send-transport-screen.service.mjs +0 -84
  140. package/dist/esm2022/lib/consumers/disconnect-send-transport-video.service.mjs +0 -101
  141. package/dist/esm2022/lib/consumers/disp-streams.service.mjs +0 -513
  142. package/dist/esm2022/lib/consumers/generate-page-content.service.mjs +0 -106
  143. package/dist/esm2022/lib/consumers/get-estimate.service.mjs +0 -120
  144. package/dist/esm2022/lib/consumers/get-piped-producers-alt.service.mjs +0 -82
  145. package/dist/esm2022/lib/consumers/get-producers-piped.service.mjs +0 -79
  146. package/dist/esm2022/lib/consumers/get-videos.service.mjs +0 -91
  147. package/dist/esm2022/lib/consumers/mix-streams.service.mjs +0 -95
  148. package/dist/esm2022/lib/consumers/on-screen-changes.service.mjs +0 -103
  149. package/dist/esm2022/lib/consumers/prepopulate-user-media.service.mjs +0 -541
  150. package/dist/esm2022/lib/consumers/process-consumer-transports-audio.service.mjs +0 -101
  151. package/dist/esm2022/lib/consumers/process-consumer-transports.service.mjs +0 -128
  152. package/dist/esm2022/lib/consumers/re-port.service.mjs +0 -114
  153. package/dist/esm2022/lib/consumers/re-update-inter.service.mjs +0 -239
  154. package/dist/esm2022/lib/consumers/readjust.service.mjs +0 -173
  155. package/dist/esm2022/lib/consumers/receive-all-piped-transports.service.mjs +0 -87
  156. package/dist/esm2022/lib/consumers/receive-room-messages.service.mjs +0 -69
  157. package/dist/esm2022/lib/consumers/reorder-streams.service.mjs +0 -239
  158. package/dist/esm2022/lib/consumers/request-screen-share.service.mjs +0 -101
  159. package/dist/esm2022/lib/consumers/resume-pause-audio-streams.service.mjs +0 -150
  160. package/dist/esm2022/lib/consumers/resume-pause-streams.service.mjs +0 -103
  161. package/dist/esm2022/lib/consumers/resume-send-transport-audio.service.mjs +0 -91
  162. package/dist/esm2022/lib/consumers/signal-new-consumer-transport.service.mjs +0 -136
  163. package/dist/esm2022/lib/consumers/socket-receive-methods/join-consume-room.service.mjs +0 -96
  164. package/dist/esm2022/lib/consumers/socket-receive-methods/new-pipe-producer.service.mjs +0 -100
  165. package/dist/esm2022/lib/consumers/socket-receive-methods/producer-closed.service.mjs +0 -78
  166. package/dist/esm2022/lib/consumers/start-share-screen.service.mjs +0 -120
  167. package/dist/esm2022/lib/consumers/stop-share-screen.service.mjs +0 -175
  168. package/dist/esm2022/lib/consumers/stream-success-audio-switch.service.mjs +0 -185
  169. package/dist/esm2022/lib/consumers/stream-success-audio.service.mjs +0 -210
  170. package/dist/esm2022/lib/consumers/stream-success-screen.service.mjs +0 -193
  171. package/dist/esm2022/lib/consumers/stream-success-video.service.mjs +0 -260
  172. package/dist/esm2022/lib/consumers/switch-user-audio.service.mjs +0 -120
  173. package/dist/esm2022/lib/consumers/switch-user-video-alt.service.mjs +0 -260
  174. package/dist/esm2022/lib/consumers/switch-user-video.service.mjs +0 -172
  175. package/dist/esm2022/lib/consumers/trigger.service.mjs +0 -210
  176. package/dist/esm2022/lib/consumers/update-mini-cards-grid.service.mjs +0 -135
  177. package/dist/esm2022/lib/consumers/update-participant-audio-decibels.service.mjs +0 -84
  178. package/dist/esm2022/lib/methods/background-methods/launch-background.service.mjs +0 -48
  179. package/dist/esm2022/lib/methods/breakout-room-methods/breakout-room-updated.service.mjs +0 -183
  180. package/dist/esm2022/lib/methods/breakout-room-methods/launch-breakout-rooms.service.mjs +0 -46
  181. package/dist/esm2022/lib/methods/co-host-methods/launch-co-host.service.mjs +0 -46
  182. package/dist/esm2022/lib/methods/co-host-methods/modify-co-host-settings.service.mjs +0 -104
  183. package/dist/esm2022/lib/methods/display-settings-methods/launch-display-settings.service.mjs +0 -46
  184. package/dist/esm2022/lib/methods/display-settings-methods/modify-display-settings.service.mjs +0 -194
  185. package/dist/esm2022/lib/methods/exit-methods/confirm-exit.service.mjs +0 -52
  186. package/dist/esm2022/lib/methods/exit-methods/launch-confirm-exit.service.mjs +0 -42
  187. package/dist/esm2022/lib/methods/media-settings-methods/launch-media-settings.service.mjs +0 -85
  188. package/dist/esm2022/lib/methods/menu-methods/launch-menu-modal.service.mjs +0 -44
  189. package/dist/esm2022/lib/methods/message-methods/launch-messages.service.mjs +0 -45
  190. package/dist/esm2022/lib/methods/message-methods/send-message.service.mjs +0 -143
  191. package/dist/esm2022/lib/methods/participants-methods/launch-participants.service.mjs +0 -47
  192. package/dist/esm2022/lib/methods/participants-methods/message-participants.service.mjs +0 -98
  193. package/dist/esm2022/lib/methods/participants-methods/mute-participants.service.mjs +0 -96
  194. package/dist/esm2022/lib/methods/participants-methods/remove-participants.service.mjs +0 -107
  195. package/dist/esm2022/lib/methods/polls-methods/handle-create-poll.service.mjs +0 -75
  196. package/dist/esm2022/lib/methods/polls-methods/handle-end-poll.service.mjs +0 -72
  197. package/dist/esm2022/lib/methods/polls-methods/handle-vote-poll.service.mjs +0 -83
  198. package/dist/esm2022/lib/methods/polls-methods/launch-poll.service.mjs +0 -43
  199. package/dist/esm2022/lib/methods/polls-methods/poll-updated.service.mjs +0 -95
  200. package/dist/esm2022/lib/methods/recording-methods/check-pause-state.service.mjs +0 -69
  201. package/dist/esm2022/lib/methods/recording-methods/check-resume-state.service.mjs +0 -56
  202. package/dist/esm2022/lib/methods/recording-methods/confirm-recording.service.mjs +0 -278
  203. package/dist/esm2022/lib/methods/recording-methods/launch-recording.service.mjs +0 -125
  204. package/dist/esm2022/lib/methods/recording-methods/record-pause-timer.service.mjs +0 -67
  205. package/dist/esm2022/lib/methods/recording-methods/record-resume-timer.service.mjs +0 -130
  206. package/dist/esm2022/lib/methods/recording-methods/record-start-timer.service.mjs +0 -134
  207. package/dist/esm2022/lib/methods/recording-methods/record-update-timer.service.mjs +0 -80
  208. package/dist/esm2022/lib/methods/recording-methods/start-recording.service.mjs +0 -197
  209. package/dist/esm2022/lib/methods/recording-methods/stop-recording.service.mjs +0 -112
  210. package/dist/esm2022/lib/methods/recording-methods/update-recording.service.mjs +0 -272
  211. package/dist/esm2022/lib/methods/requests-methods/launch-requests.service.mjs +0 -51
  212. package/dist/esm2022/lib/methods/requests-methods/respond-to-requests.service.mjs +0 -84
  213. package/dist/esm2022/lib/methods/settings-methods/launch-settings.service.mjs +0 -51
  214. package/dist/esm2022/lib/methods/settings-methods/modify-settings.service.mjs +0 -109
  215. package/dist/esm2022/lib/methods/stream-methods/click-audio.service.mjs +0 -275
  216. package/dist/esm2022/lib/methods/stream-methods/click-chat.service.mjs +0 -75
  217. package/dist/esm2022/lib/methods/stream-methods/click-screen-share.service.mjs +0 -178
  218. package/dist/esm2022/lib/methods/stream-methods/click-video.service.mjs +0 -271
  219. package/dist/esm2022/lib/methods/stream-methods/switch-audio.service.mjs +0 -80
  220. package/dist/esm2022/lib/methods/stream-methods/switch-video-alt.service.mjs +0 -116
  221. package/dist/esm2022/lib/methods/stream-methods/switch-video.service.mjs +0 -132
  222. package/dist/esm2022/lib/methods/utils/format-number.service.mjs +0 -57
  223. package/dist/esm2022/lib/methods/utils/generate-random-messages.service.mjs +0 -120
  224. package/dist/esm2022/lib/methods/utils/generate-random-participants.service.mjs +0 -126
  225. package/dist/esm2022/lib/methods/utils/generate-random-polls.service.mjs +0 -78
  226. package/dist/esm2022/lib/methods/utils/generate-random-request-list.service.mjs +0 -90
  227. package/dist/esm2022/lib/methods/utils/generate-random-waiting-room-list.service.mjs +0 -59
  228. package/dist/esm2022/lib/methods/utils/get-modal-position.util.mjs +0 -32
  229. package/dist/esm2022/lib/methods/utils/get-overlay-position.util.mjs +0 -31
  230. package/dist/esm2022/lib/methods/utils/initial-values.util.mjs +0 -379
  231. package/dist/esm2022/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.mjs +0 -96
  232. package/dist/esm2022/lib/methods/utils/mini-audio-player/mini-audio-player.component.mjs +0 -315
  233. package/dist/esm2022/lib/methods/utils/producer/a-params.service.mjs +0 -58
  234. package/dist/esm2022/lib/methods/utils/producer/h-params.service.mjs +0 -87
  235. package/dist/esm2022/lib/methods/utils/producer/screen-params.service.mjs +0 -61
  236. package/dist/esm2022/lib/methods/utils/producer/v-params.service.mjs +0 -87
  237. package/dist/esm2022/lib/methods/utils/producer/video-capture-constraints.service.mjs +0 -84
  238. package/dist/esm2022/lib/methods/utils/sleep.util.mjs +0 -17
  239. package/dist/esm2022/lib/methods/utils/sound-player.service.mjs +0 -63
  240. package/dist/esm2022/lib/methods/utils/validate-alphanumeric.service.mjs +0 -49
  241. package/dist/esm2022/lib/methods/waiting-methods/launch-waiting.service.mjs +0 -41
  242. package/dist/esm2022/lib/methods/waiting-methods/respond-to-waiting.service.mjs +0 -69
  243. package/dist/esm2022/lib/methods/whiteboard-methods/capture-canvas-stream.service.mjs +0 -98
  244. package/dist/esm2022/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.mjs +0 -44
  245. package/dist/esm2022/lib/producer-client/producer-client-emits/create-device-client.service.mjs +0 -74
  246. package/dist/esm2022/lib/producer-client/producer-client-emits/join-room-client.service.mjs +0 -96
  247. package/dist/esm2022/lib/producer-client/producer-client-emits/update-room-parameters-client.service.mjs +0 -276
  248. package/dist/esm2022/lib/producers/producer-emits/join-con-room.service.mjs +0 -152
  249. package/dist/esm2022/lib/producers/producer-emits/join-room.service.mjs +0 -152
  250. package/dist/esm2022/lib/producers/socket-receive-methods/all-members-rest.service.mjs +0 -228
  251. package/dist/esm2022/lib/producers/socket-receive-methods/all-members.service.mjs +0 -218
  252. package/dist/esm2022/lib/producers/socket-receive-methods/all-waiting-room-members.service.mjs +0 -57
  253. package/dist/esm2022/lib/producers/socket-receive-methods/ban-participant.service.mjs +0 -76
  254. package/dist/esm2022/lib/producers/socket-receive-methods/control-media-host.service.mjs +0 -183
  255. package/dist/esm2022/lib/producers/socket-receive-methods/disconnect-user-self.service.mjs +0 -50
  256. package/dist/esm2022/lib/producers/socket-receive-methods/disconnect.service.mjs +0 -64
  257. package/dist/esm2022/lib/producers/socket-receive-methods/get-domains.service.mjs +0 -78
  258. package/dist/esm2022/lib/producers/socket-receive-methods/host-request-response.service.mjs +0 -150
  259. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-ended.service.mjs +0 -73
  260. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-still-there.service.mjs +0 -47
  261. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-time-remaining.service.mjs +0 -63
  262. package/dist/esm2022/lib/producers/socket-receive-methods/participant-requested.service.mjs +0 -63
  263. package/dist/esm2022/lib/producers/socket-receive-methods/person-joined.service.mjs +0 -54
  264. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-closed.service.mjs +0 -129
  265. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-paused.service.mjs +0 -152
  266. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-resumed.service.mjs +0 -99
  267. package/dist/esm2022/lib/producers/socket-receive-methods/re-initiate-recording.service.mjs +0 -67
  268. package/dist/esm2022/lib/producers/socket-receive-methods/receive-message.service.mjs +0 -134
  269. package/dist/esm2022/lib/producers/socket-receive-methods/recording-notice.service.mjs +0 -233
  270. package/dist/esm2022/lib/producers/socket-receive-methods/room-record-params.service.mjs +0 -121
  271. package/dist/esm2022/lib/producers/socket-receive-methods/screen-producer-id.service.mjs +0 -86
  272. package/dist/esm2022/lib/producers/socket-receive-methods/start-records.service.mjs +0 -60
  273. package/dist/esm2022/lib/producers/socket-receive-methods/stopped-recording.service.mjs +0 -62
  274. package/dist/esm2022/lib/producers/socket-receive-methods/time-left-recording.service.mjs +0 -57
  275. package/dist/esm2022/lib/producers/socket-receive-methods/update-consuming-domains.service.mjs +0 -105
  276. package/dist/esm2022/lib/producers/socket-receive-methods/update-media-settings.service.mjs +0 -66
  277. package/dist/esm2022/lib/producers/socket-receive-methods/updated-co-host.service.mjs +0 -96
  278. package/dist/esm2022/lib/producers/socket-receive-methods/user-waiting.service.mjs +0 -52
  279. package/dist/esm2022/lib/sockets/socket-manager.service.mjs +0 -113
  280. package/dist/esm2022/mediasfu-angular.mjs +0 -5
  281. package/dist/esm2022/public-api.mjs +0 -187
@@ -1,278 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- /**
4
- * Confirms the recording settings based on the provided parameters and updates the recording state.
5
- *
6
- * @param {ConfirmRecordingOptions} options - The options for confirming the recording.
7
- * @param {ConfirmRecordingParameters} options.parameters - The parameters for the recording, including:
8
- * - {ShowAlert} [options.parameters.showAlert] - Optional function to show alert messages.
9
- * - {string} options.parameters.recordingMediaOptions - Type of media being recorded ("video" or "audio").
10
- * - {string} options.parameters.recordingAudioOptions - Audio recording options.
11
- * - {string} options.parameters.recordingVideoOptions - Video recording options.
12
- * - {string} options.parameters.recordingVideoType - Type of video recording.
13
- * - {'video' | 'media' | 'all'} options.parameters.recordingDisplayType - The display type for the recording.
14
- * - {boolean} options.parameters.recordingNameTags - Flag for including name tags in the recording.
15
- * - {string} options.parameters.recordingBackgroundColor - Background color for the recording.
16
- * - {string} options.parameters.recordingNameTagsColor - Color for the name tags.
17
- * - {string} options.parameters.recordingOrientationVideo - Orientation for video recording.
18
- * - {boolean} options.parameters.recordingAddHLS - Flag for adding HLS support.
19
- * - {boolean} options.parameters.recordingAddText - Flag for adding custom text.
20
- * - {string} options.parameters.recordingCustomText - Custom text for the recording.
21
- * - {string} options.parameters.recordingCustomTextPosition - Position of the custom text.
22
- * - {string} options.parameters.recordingCustomTextColor - Color of the custom text.
23
- * - {string} options.parameters.meetingDisplayType - Current display type of the meeting.
24
- * - {boolean} options.parameters.recordingVideoParticipantsFullRoomSupport - Support for video participants in full room.
25
- * - {boolean} options.parameters.recordingAllParticipantsSupport - Support for recording all participants.
26
- * - {boolean} options.parameters.recordingVideoParticipantsSupport - Support for video participants.
27
- * - {boolean} options.parameters.recordingSupportForOtherOrientation - Support for other orientations.
28
- * - {string} options.parameters.recordingPreferredOrientation - Preferred orientation for recording.
29
- * - {boolean} options.parameters.recordingMultiFormatsSupport - Support for multiple formats.
30
- * - {boolean} options.parameters.recordingVideoOptimized - Flag for video optimization.
31
- * - {boolean} options.parameters.recordingAllParticipantsFullRoomSupport - Support for recording all participants in full room.
32
- * - {boolean} options.parameters.meetingVideoOptimized - Flag for meeting video optimization.
33
- * - {EventType} options.parameters.eventType - Type of the event.
34
- * - {boolean} options.parameters.breakOutRoomStarted - Indicates if a breakout room has started.
35
- * - {boolean} options.parameters.breakOutRoomEnded - Indicates if a breakout room has ended.
36
- * - {Function} options.parameters.updateRecordingDisplayType - Function to update the recording display type.
37
- * - {Function} options.parameters.updateRecordingVideoOptimized - Function to update video optimization status.
38
- * - {Function} options.parameters.updateUserRecordingParams - Function to update user recording parameters.
39
- * - {Function} options.parameters.updateConfirmedToRecord - Function to confirm the recording.
40
- *
41
- * @returns {Promise<void>} A promise that resolves when the recording settings have been confirmed.
42
- *
43
- * @remarks
44
- * This function performs several checks to ensure that the recording settings are valid based on the provided parameters.
45
- * If any of the checks fail, an alert is shown and the function returns early without updating the recording state.
46
- *
47
- * The function checks for the following conditions:
48
- * - Whether recording videos of all participants is allowed.
49
- * - Whether recording all participants is allowed.
50
- * - Whether recording other video participants is allowed.
51
- * - Whether recording all orientations is allowed.
52
- * - Whether recording the preferred orientation is allowed.
53
- * - Whether recording all formats is allowed.
54
- * - Whether the recording display type is valid based on the meeting display type.
55
- * - Whether recording all participants with media is allowed.
56
- *
57
- * If all checks pass, the function constructs the `mainSpecs`, `dispSpecs`, and `textSpecs` objects based on the state variables,
58
- * updates the user recording parameters, and confirms the recording.
59
- *
60
- * @example
61
- * ```typescript
62
- * const options: ConfirmRecordingOptions = { parameters: someParameters };
63
- * await confirmRecording(options);
64
- * ```
65
- */
66
- export class ConfirmRecording {
67
- /**
68
- * Confirms the recording settings based on the provided parameters and updates the recording state.
69
- *
70
- * @param {ConfirmRecordingOptions} options - The options for confirming the recording.
71
- * @param {Parameters} options.parameters - The parameters for the recording.
72
- *
73
- * @returns {Promise<void>} A promise that resolves when the recording settings have been confirmed.
74
- *
75
- * @remarks
76
- * This function performs several checks to ensure that the recording settings are valid based on the provided parameters.
77
- * If any of the checks fail, an alert is shown and the function returns early without updating the recording state.
78
- *
79
- * The function checks for the following conditions:
80
- * - Whether recording videos of all participants is allowed.
81
- * - Whether recording all participants is allowed.
82
- * - Whether recording other video participants is allowed.
83
- * - Whether recording all orientations is allowed.
84
- * - Whether recording the preferred orientation is allowed.
85
- * - Whether recording all formats is allowed.
86
- * - Whether the recording display type is valid based on the meeting display type.
87
- * - Whether recording all participants with media is allowed.
88
- *
89
- * If all checks pass, the function constructs the `mainSpecs`, `dispSpecs`, and `textSpecs` objects based on the state variables,
90
- * updates the user recording parameters, and confirms the recording.
91
- *
92
- * @example
93
- * ```typescript
94
- * const options: ConfirmRecordingOptions = { parameters: someParameters };
95
- * await confirmRecording(options);
96
- * ```
97
- */
98
- confirmRecording = async ({ parameters }) => {
99
- let { getUpdatedAllParams } = parameters;
100
- parameters = getUpdatedAllParams();
101
- let { showAlert, recordingMediaOptions, recordingAudioOptions, recordingVideoOptions, recordingVideoType, recordingDisplayType, recordingNameTags, recordingBackgroundColor, recordingNameTagsColor, recordingOrientationVideo, recordingAddHLS, recordingAddText, recordingCustomText, recordingCustomTextPosition, recordingCustomTextColor, meetingDisplayType, recordingVideoParticipantsFullRoomSupport, recordingAllParticipantsSupport, recordingVideoParticipantsSupport, recordingSupportForOtherOrientation, recordingPreferredOrientation, recordingMultiFormatsSupport, recordingVideoOptimized, recordingAllParticipantsFullRoomSupport, meetingVideoOptimized, eventType, breakOutRoomStarted, breakOutRoomEnded, updateRecordingDisplayType, updateRecordingVideoOptimized, updateRecordingVideoParticipantsFullRoomSupport, updateRecordingAllParticipantsSupport, updateRecordingVideoParticipantsSupport, updateRecordingSupportForOtherOrientation, updateRecordingPreferredOrientation, updateRecordingMultiFormatsSupport, updateUserRecordingParams, updateConfirmedToRecord, } = parameters;
102
- // Retrieve the values from the state
103
- const mediaOptions = recordingMediaOptions;
104
- // Other variables not provided in the guide
105
- const selectedRecordOption = recordingDisplayType;
106
- // Additional logic similar to the provided guide
107
- // recordingVideoParticipantsFullRoomSupport = minigrid and main video
108
- if (eventType !== 'broadcast') {
109
- if (!recordingVideoParticipantsFullRoomSupport &&
110
- recordingVideoOptions === 'all' &&
111
- mediaOptions === 'video') {
112
- if (meetingDisplayType == 'all') {
113
- if (breakOutRoomStarted && !breakOutRoomEnded) {
114
- // breakout rooms are started
115
- }
116
- else {
117
- showAlert?.({
118
- message: 'You are not allowed to record videos of all participants; change the meeting display type to video or video optimized.',
119
- type: 'danger',
120
- duration: 3000,
121
- });
122
- return;
123
- }
124
- }
125
- }
126
- // recordingAllParticipantsSupport = others other than host screen (video + audio)
127
- if (!recordingAllParticipantsSupport && recordingVideoOptions === 'all') {
128
- showAlert?.({
129
- message: 'You are only allowed to record yourself.',
130
- type: 'danger',
131
- duration: 3000,
132
- });
133
- return;
134
- }
135
- // recordingVideoParticipantsSupport (maingrid + non-host screenshare person)
136
- if (!recordingVideoParticipantsSupport && recordingDisplayType === 'video') {
137
- showAlert?.({
138
- message: 'You are not allowed to record other video participants.',
139
- type: 'danger',
140
- duration: 3000,
141
- });
142
- return;
143
- }
144
- }
145
- if (!recordingSupportForOtherOrientation && recordingOrientationVideo === 'all') {
146
- showAlert?.({
147
- message: 'You are not allowed to record all orientations.',
148
- type: 'danger',
149
- duration: 3000,
150
- });
151
- return;
152
- }
153
- if (recordingPreferredOrientation === 'landscape' &&
154
- recordingOrientationVideo === 'portrait' &&
155
- !recordingSupportForOtherOrientation) {
156
- showAlert?.({
157
- message: 'You are not allowed to record portrait orientation.',
158
- type: 'danger',
159
- duration: 3000,
160
- });
161
- return;
162
- }
163
- else if (recordingPreferredOrientation === 'portrait' &&
164
- recordingOrientationVideo === 'landscape' &&
165
- !recordingSupportForOtherOrientation) {
166
- showAlert?.({
167
- message: 'You are not allowed to record landscape orientation.',
168
- type: 'danger',
169
- duration: 3000,
170
- });
171
- return;
172
- }
173
- if (!recordingMultiFormatsSupport && recordingVideoType === 'all') {
174
- showAlert?.({
175
- message: 'You are not allowed to record all formats.',
176
- type: 'danger',
177
- duration: 3000,
178
- });
179
- return;
180
- }
181
- if (eventType !== 'broadcast') {
182
- if (recordingMediaOptions === 'video') {
183
- if (meetingDisplayType === 'media') {
184
- if (recordingDisplayType === 'all') {
185
- showAlert?.({
186
- message: 'Recording display type can be either video, video optimized, or media when meeting display type is media.',
187
- type: 'danger',
188
- duration: 3000,
189
- });
190
- recordingDisplayType = meetingDisplayType;
191
- return;
192
- }
193
- }
194
- else if (meetingDisplayType === 'video') {
195
- if (recordingDisplayType === 'all' || recordingDisplayType === 'media') {
196
- showAlert?.({
197
- message: 'Recording display type can be either video or video optimized when meeting display type is video.',
198
- type: 'danger',
199
- duration: 3000,
200
- });
201
- recordingDisplayType = meetingDisplayType;
202
- return;
203
- }
204
- if (meetingVideoOptimized && !recordingVideoOptimized) {
205
- showAlert?.({
206
- message: 'Recording display type can be only video optimized when meeting display type is video optimized.',
207
- type: 'danger',
208
- duration: 3000,
209
- });
210
- recordingVideoOptimized = meetingVideoOptimized;
211
- return;
212
- }
213
- }
214
- }
215
- else {
216
- if (recordingDisplayType === 'all' || recordingDisplayType === 'media') {
217
- // do nothing
218
- }
219
- else {
220
- recordingDisplayType = 'media';
221
- }
222
- recordingVideoOptimized = false;
223
- }
224
- }
225
- if (recordingDisplayType === 'all' && !recordingAllParticipantsFullRoomSupport) {
226
- showAlert?.({
227
- message: 'You can only record all participants with media.',
228
- type: 'danger',
229
- duration: 3000,
230
- });
231
- return;
232
- }
233
- // Construct mainSpecs and dispSpecs objects based on the state variables
234
- const mainSpecs = {
235
- mediaOptions: recordingMediaOptions,
236
- audioOptions: recordingAudioOptions,
237
- videoOptions: recordingVideoOptions,
238
- videoType: recordingVideoType,
239
- videoOptimized: recordingVideoOptimized,
240
- recordingDisplayType: recordingDisplayType,
241
- addHLS: recordingAddHLS,
242
- };
243
- const dispSpecs = {
244
- nameTags: recordingNameTags,
245
- backgroundColor: recordingBackgroundColor,
246
- nameTagsColor: recordingNameTagsColor,
247
- orientationVideo: recordingOrientationVideo,
248
- };
249
- const textSpecs = {
250
- addText: recordingAddText,
251
- customText: recordingCustomText,
252
- customTextPosition: recordingCustomTextPosition,
253
- customTextColor: recordingCustomTextColor,
254
- };
255
- // Construct userRecordingParams object
256
- const userRecordingParams = { mainSpecs, dispSpecs, textSpecs };
257
- // Update state variables based on the logic
258
- updateUserRecordingParams(userRecordingParams);
259
- updateConfirmedToRecord(true);
260
- updateRecordingDisplayType(selectedRecordOption);
261
- updateRecordingVideoOptimized(recordingVideoOptimized);
262
- updateRecordingVideoParticipantsFullRoomSupport(recordingVideoParticipantsFullRoomSupport);
263
- updateRecordingAllParticipantsSupport(recordingAllParticipantsSupport);
264
- updateRecordingVideoParticipantsSupport(recordingVideoParticipantsSupport);
265
- updateRecordingSupportForOtherOrientation(recordingSupportForOtherOrientation);
266
- updateRecordingPreferredOrientation(recordingPreferredOrientation);
267
- updateRecordingMultiFormatsSupport(recordingMultiFormatsSupport);
268
- };
269
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConfirmRecording, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
270
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConfirmRecording, providedIn: 'root' });
271
- }
272
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConfirmRecording, decorators: [{
273
- type: Injectable,
274
- args: [{
275
- providedIn: 'root',
276
- }]
277
- }] });
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1yZWNvcmRpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9tZXRob2RzL3JlY29yZGluZy1tZXRob2RzL2NvbmZpcm0tcmVjb3JkaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUF3RDNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThERztBQU1ILE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQThCRztJQUVILGdCQUFnQixHQUFHLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBMkIsRUFBaUIsRUFBRTtRQUNsRixJQUFJLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxVQUFVLENBQUM7UUFDekMsVUFBVSxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFbkMsSUFBSSxFQUNGLFNBQVMsRUFDVCxxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHlCQUF5QixFQUN6QixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUNsQix5Q0FBeUMsRUFDekMsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyxtQ0FBbUMsRUFDbkMsNkJBQTZCLEVBQzdCLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDdkIsdUNBQXVDLEVBQ3ZDLHFCQUFxQixFQUNyQixTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUVqQiwwQkFBMEIsRUFD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akQsNkJBQTZCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUN2RCwrQ0FBK0MsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzNGLHFDQUFxQyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDdkUsdUNBQXVDLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUMzRSx5Q0FBeUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQy9FLG1DQUFtQyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDbkUsa0NBQWtDLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUM7dUdBblJTLGdCQUFnQjsyR0FBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFNob3dBbGVydCxcbiAgTWFpblNwZWNzLFxuICBEaXNwU3BlY3MsXG4gIFRleHRTcGVjcyxcbiAgRXZlbnRUeXBlLFxuICBVc2VyUmVjb3JkaW5nUGFyYW1zLFxufSBmcm9tICcuLi8uLi9AdHlwZXMvdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpcm1SZWNvcmRpbmdQYXJhbWV0ZXJzIHtcbiAgc2hvd0FsZXJ0PzogU2hvd0FsZXJ0O1xuICByZWNvcmRpbmdNZWRpYU9wdGlvbnM6IHN0cmluZztcbiAgcmVjb3JkaW5nQXVkaW9PcHRpb25zOiBzdHJpbmc7XG4gIHJlY29yZGluZ1ZpZGVvT3B0aW9uczogc3RyaW5nO1xuICByZWNvcmRpbmdWaWRlb1R5cGU6IHN0cmluZztcbiAgcmVjb3JkaW5nRGlzcGxheVR5cGU6ICd2aWRlbycgfCAnbWVkaWEnIHwgJ2FsbCc7XG4gIHJlY29yZGluZ05hbWVUYWdzOiBib29sZWFuO1xuICByZWNvcmRpbmdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgcmVjb3JkaW5nTmFtZVRhZ3NDb2xvcjogc3RyaW5nO1xuICByZWNvcmRpbmdPcmllbnRhdGlvblZpZGVvOiBzdHJpbmc7XG4gIHJlY29yZGluZ0FkZEhMUzogYm9vbGVhbjtcbiAgcmVjb3JkaW5nQWRkVGV4dDogYm9vbGVhbjtcbiAgcmVjb3JkaW5nQ3VzdG9tVGV4dDogc3RyaW5nO1xuICByZWNvcmRpbmdDdXN0b21UZXh0UG9zaXRpb246IHN0cmluZztcbiAgcmVjb3JkaW5nQ3VzdG9tVGV4dENvbG9yOiBzdHJpbmc7XG4gIG1lZXRpbmdEaXNwbGF5VHlwZTogc3RyaW5nO1xuICByZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydDogYm9vbGVhbjtcbiAgcmVjb3JkaW5nQWxsUGFydGljaXBhbnRzU3VwcG9ydDogYm9vbGVhbjtcbiAgcmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNTdXBwb3J0OiBib29sZWFuO1xuICByZWNvcmRpbmdTdXBwb3J0Rm9yT3RoZXJPcmllbnRhdGlvbjogYm9vbGVhbjtcbiAgcmVjb3JkaW5nUHJlZmVycmVkT3JpZW50YXRpb246IHN0cmluZztcbiAgcmVjb3JkaW5nTXVsdGlGb3JtYXRzU3VwcG9ydDogYm9vbGVhbjtcbiAgcmVjb3JkaW5nVmlkZW9PcHRpbWl6ZWQ6IGJvb2xlYW47XG4gIHJlY29yZGluZ0FsbFBhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydDogYm9vbGVhbjtcbiAgbWVldGluZ1ZpZGVvT3B0aW1pemVkOiBib29sZWFuO1xuICBldmVudFR5cGU6IEV2ZW50VHlwZTtcbiAgYnJlYWtPdXRSb29tU3RhcnRlZDogYm9vbGVhbjtcbiAgYnJlYWtPdXRSb29tRW5kZWQ6IGJvb2xlYW47XG4gIHVwZGF0ZVJlY29yZGluZ0Rpc3BsYXlUeXBlOiAodmFsdWU6ICd2aWRlbycgfCAnbWVkaWEnIHwgJ2FsbCcpID0+IHZvaWQ7XG4gIHVwZGF0ZVJlY29yZGluZ1ZpZGVvT3B0aW1pemVkOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHVwZGF0ZVVzZXJSZWNvcmRpbmdQYXJhbXM6IChwYXJhbXM6IFVzZXJSZWNvcmRpbmdQYXJhbXMpID0+IHZvaWQ7XG4gIHVwZGF0ZUNvbmZpcm1lZFRvUmVjb3JkOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgLy8gTWVkaWFzZnUgZnVuY3Rpb25zXG4gIGdldFVwZGF0ZWRBbGxQYXJhbXM6ICgpID0+IENvbmZpcm1SZWNvcmRpbmdQYXJhbWV0ZXJzO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlybVJlY29yZGluZ09wdGlvbnMge1xuICBwYXJhbWV0ZXJzOiBDb25maXJtUmVjb3JkaW5nUGFyYW1ldGVycztcbn1cblxuLy8gRXhwb3J0IHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBmdW5jdGlvblxuZXhwb3J0IHR5cGUgQ29uZmlybVJlY29yZGluZ1R5cGUgPSAob3B0aW9uczogQ29uZmlybVJlY29yZGluZ09wdGlvbnMpID0+IFByb21pc2U8dm9pZD47XG5cbi8qKlxuICogQ29uZmlybXMgdGhlIHJlY29yZGluZyBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycyBhbmQgdXBkYXRlcyB0aGUgcmVjb3JkaW5nIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7Q29uZmlybVJlY29yZGluZ09wdGlvbnN9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY29uZmlybWluZyB0aGUgcmVjb3JkaW5nLlxuICogQHBhcmFtIHtDb25maXJtUmVjb3JkaW5nUGFyYW1ldGVyc30gb3B0aW9ucy5wYXJhbWV0ZXJzIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZWNvcmRpbmcsIGluY2x1ZGluZzpcbiAqICAgLSB7U2hvd0FsZXJ0fSBbb3B0aW9ucy5wYXJhbWV0ZXJzLnNob3dBbGVydF0gLSBPcHRpb25hbCBmdW5jdGlvbiB0byBzaG93IGFsZXJ0IG1lc3NhZ2VzLlxuICogICAtIHtzdHJpbmd9IG9wdGlvbnMucGFyYW1ldGVycy5yZWNvcmRpbmdNZWRpYU9wdGlvbnMgLSBUeXBlIG9mIG1lZGlhIGJlaW5nIHJlY29yZGVkIChcInZpZGVvXCIgb3IgXCJhdWRpb1wiKS5cbiAqICAgLSB7c3RyaW5nfSBvcHRpb25zLnBhcmFtZXRlcnMucmVjb3JkaW5nQXVkaW9PcHRpb25zIC0gQXVkaW8gcmVjb3JkaW5nIG9wdGlvbnMuXG4gKiAgIC0ge3N0cmluZ30gb3B0aW9ucy5wYXJhbWV0ZXJzLnJlY29yZGluZ1ZpZGVvT3B0aW9ucyAtIFZpZGVvIHJlY29yZGluZyBvcHRpb25zLlxuICogICAtIHtzdHJpbmd9IG9wdGlvbnMucGFyYW1ldGVycy5yZWNvcmRpbmdWaWRlb1R5cGUgLSBUeXBlIG9mIHZpZGVvIHJlY29yZGluZy5cbiAqICAgLSB7J3ZpZGVvJyB8ICdtZWRpYScgfCAnYWxsJ30gb3B0aW9ucy5wYXJhbWV0ZXJzLnJlY29yZGluZ0Rpc3BsYXlUeXBlIC0gVGhlIGRpc3BsYXkgdHlwZSBmb3IgdGhlIHJlY29yZGluZy5cbiAqICAgLSB7Ym9vbGVhbn0gb3B0aW9ucy5wYXJhbWV0ZXJzLnJlY29yZGluZ05hbWVUYWdzIC0gRmxhZyBmb3IgaW5jbHVkaW5nIG5hbWUgdGFncyBpbiB0aGUgcmVjb3JkaW5nLlxuICogICAtIHtzdHJpbmd9IG9wdGlvbnMucGFyYW1ldGVycy5yZWNvcmRpbmdCYWNrZ3JvdW5kQ29sb3IgLSBCYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgcmVjb3JkaW5nLlxuICogICAtIHtzdHJpbmd9IG9wdGlvbnMucGFyYW1ldGVycy5yZWNvcmRpbmdOYW1lVGFnc0NvbG9yIC0gQ29sb3IgZm9yIHRoZSBuYW1lIHRhZ3MuXG4gKiAgIC0ge3N0cmluZ30gb3B0aW9ucy5wYXJhbWV0ZXJzLnJlY29yZGluZ09yaWVudGF0aW9uVmlkZW8gLSBPcmllbnRhdGlvbiBmb3IgdmlkZW8gcmVjb3JkaW5nLlxuICogICAtIHtib29sZWFufSBvcHRpb25zLnBhcmFtZXRlcnMucmVjb3JkaW5nQWRkSExTIC0gRmxhZyBmb3IgYWRkaW5nIEhMUyBzdXBwb3J0LlxuICogICAtIHtib29sZWFufSBvcHRpb25zLnBhcmFtZXRlcnMucmVjb3JkaW5nQWRkVGV4dCAtIEZsYWcgZm9yIGFkZGluZyBjdXN0b20gdGV4dC5cbiAqICAgLSB7c3RyaW5nfSBvcHRpb25zLnBhcmFtZXRlcnMucmVjb3JkaW5nQ3VzdG9tVGV4dCAtIEN1c3RvbSB0ZXh0IGZvciB0aGUgcmVjb3JkaW5nLlxuICogICAtIHtzdHJpbmd9IG9wdGlvbnMucGFyYW1ldGVycy5yZWNvcmRpbmdDdXN0b21UZXh0UG9zaXRpb24gLSBQb3NpdGlvbiBvZiB0aGUgY3VzdG9tIHRleHQuXG4gKiAgIC0ge3N0cmluZ30gb3B0aW9ucy5wYXJhbWV0ZXJzLnJlY29yZGluZ0N1c3RvbVRleHRDb2xvciAtIENvbG9yIG9mIHRoZSBjdXN0b20gdGV4dC5cbiAqICAgLSB7c3RyaW5nfSBvcHRpb25zLnBhcmFtZXRlcnMubWVldGluZ0Rpc3BsYXlUeXBlIC0gQ3VycmVudCBkaXNwbGF5IHR5cGUgb2YgdGhlIG1lZXRpbmcuXG4gKiAgIC0ge2Jvb2xlYW59IG9wdGlvbnMucGFyYW1ldGVycy5yZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydCAtIFN1cHBvcnQgZm9yIHZpZGVvIHBhcnRpY2lwYW50cyBpbiBmdWxsIHJvb20uXG4gKiAgIC0ge2Jvb2xlYW59IG9wdGlvbnMucGFyYW1ldGVycy5yZWNvcmRpbmdBbGxQYXJ0aWNpcGFudHNTdXBwb3J0IC0gU3VwcG9ydCBmb3IgcmVjb3JkaW5nIGFsbCBwYXJ0aWNpcGFudHMuXG4gKiAgIC0ge2Jvb2xlYW59IG9wdGlvbnMucGFyYW1ldGVycy5yZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c1N1cHBvcnQgLSBTdXBwb3J0IGZvciB2aWRlbyBwYXJ0aWNpcGFudHMuXG4gKiAgIC0ge2Jvb2xlYW59IG9wdGlvbnMucGFyYW1ldGVycy5yZWNvcmRpbmdTdXBwb3J0Rm9yT3RoZXJPcmllbnRhdGlvbiAtIFN1cHBvcnQgZm9yIG90aGVyIG9yaWVudGF0aW9ucy5cbiAqICAgLSB7c3RyaW5nfSBvcHRpb25zLnBhcmFtZXRlcnMucmVjb3JkaW5nUHJlZmVycmVkT3JpZW50YXRpb24gLSBQcmVmZXJyZWQgb3JpZW50YXRpb24gZm9yIHJlY29yZGluZy5cbiAqICAgLSB7Ym9vbGVhbn0gb3B0aW9ucy5wYXJhbWV0ZXJzLnJlY29yZGluZ011bHRpRm9ybWF0c1N1cHBvcnQgLSBTdXBwb3J0IGZvciBtdWx0aXBsZSBmb3JtYXRzLlxuICogICAtIHtib29sZWFufSBvcHRpb25zLnBhcmFtZXRlcnMucmVjb3JkaW5nVmlkZW9PcHRpbWl6ZWQgLSBGbGFnIGZvciB2aWRlbyBvcHRpbWl6YXRpb24uXG4gKiAgIC0ge2Jvb2xlYW59IG9wdGlvbnMucGFyYW1ldGVycy5yZWNvcmRpbmdBbGxQYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQgLSBTdXBwb3J0IGZvciByZWNvcmRpbmcgYWxsIHBhcnRpY2lwYW50cyBpbiBmdWxsIHJvb20uXG4gKiAgIC0ge2Jvb2xlYW59IG9wdGlvbnMucGFyYW1ldGVycy5tZWV0aW5nVmlkZW9PcHRpbWl6ZWQgLSBGbGFnIGZvciBtZWV0aW5nIHZpZGVvIG9wdGltaXphdGlvbi5cbiAqICAgLSB7RXZlbnRUeXBlfSBvcHRpb25zLnBhcmFtZXRlcnMuZXZlbnRUeXBlIC0gVHlwZSBvZiB0aGUgZXZlbnQuXG4gKiAgIC0ge2Jvb2xlYW59IG9wdGlvbnMucGFyYW1ldGVycy5icmVha091dFJvb21TdGFydGVkIC0gSW5kaWNhdGVzIGlmIGEgYnJlYWtvdXQgcm9vbSBoYXMgc3RhcnRlZC5cbiAqICAgLSB7Ym9vbGVhbn0gb3B0aW9ucy5wYXJhbWV0ZXJzLmJyZWFrT3V0Um9vbUVuZGVkIC0gSW5kaWNhdGVzIGlmIGEgYnJlYWtvdXQgcm9vbSBoYXMgZW5kZWQuXG4gKiAgIC0ge0Z1bmN0aW9ufSBvcHRpb25zLnBhcmFtZXRlcnMudXBkYXRlUmVjb3JkaW5nRGlzcGxheVR5cGUgLSBGdW5jdGlvbiB0byB1cGRhdGUgdGhlIHJlY29yZGluZyBkaXNwbGF5IHR5cGUuXG4gKiAgIC0ge0Z1bmN0aW9ufSBvcHRpb25zLnBhcmFtZXRlcnMudXBkYXRlUmVjb3JkaW5nVmlkZW9PcHRpbWl6ZWQgLSBGdW5jdGlvbiB0byB1cGRhdGUgdmlkZW8gb3B0aW1pemF0aW9uIHN0YXR1cy5cbiAqICAgLSB7RnVuY3Rpb259IG9wdGlvbnMucGFyYW1ldGVycy51cGRhdGVVc2VyUmVjb3JkaW5nUGFyYW1zIC0gRnVuY3Rpb24gdG8gdXBkYXRlIHVzZXIgcmVjb3JkaW5nIHBhcmFtZXRlcnMuXG4gKiAgIC0ge0Z1bmN0aW9ufSBvcHRpb25zLnBhcmFtZXRlcnMudXBkYXRlQ29uZmlybWVkVG9SZWNvcmQgLSBGdW5jdGlvbiB0byBjb25maXJtIHRoZSByZWNvcmRpbmcuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlY29yZGluZyBzZXR0aW5ncyBoYXZlIGJlZW4gY29uZmlybWVkLlxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHNldmVyYWwgY2hlY2tzIHRvIGVuc3VyZSB0aGF0IHRoZSByZWNvcmRpbmcgc2V0dGluZ3MgYXJlIHZhbGlkIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLlxuICogSWYgYW55IG9mIHRoZSBjaGVja3MgZmFpbCwgYW4gYWxlcnQgaXMgc2hvd24gYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5IHdpdGhvdXQgdXBkYXRpbmcgdGhlIHJlY29yZGluZyBzdGF0ZS5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gY2hlY2tzIGZvciB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKiAtIFdoZXRoZXIgcmVjb3JkaW5nIHZpZGVvcyBvZiBhbGwgcGFydGljaXBhbnRzIGlzIGFsbG93ZWQuXG4gKiAtIFdoZXRoZXIgcmVjb3JkaW5nIGFsbCBwYXJ0aWNpcGFudHMgaXMgYWxsb3dlZC5cbiAqIC0gV2hldGhlciByZWNvcmRpbmcgb3RoZXIgdmlkZW8gcGFydGljaXBhbnRzIGlzIGFsbG93ZWQuXG4gKiAtIFdoZXRoZXIgcmVjb3JkaW5nIGFsbCBvcmllbnRhdGlvbnMgaXMgYWxsb3dlZC5cbiAqIC0gV2hldGhlciByZWNvcmRpbmcgdGhlIHByZWZlcnJlZCBvcmllbnRhdGlvbiBpcyBhbGxvd2VkLlxuICogLSBXaGV0aGVyIHJlY29yZGluZyBhbGwgZm9ybWF0cyBpcyBhbGxvd2VkLlxuICogLSBXaGV0aGVyIHRoZSByZWNvcmRpbmcgZGlzcGxheSB0eXBlIGlzIHZhbGlkIGJhc2VkIG9uIHRoZSBtZWV0aW5nIGRpc3BsYXkgdHlwZS5cbiAqIC0gV2hldGhlciByZWNvcmRpbmcgYWxsIHBhcnRpY2lwYW50cyB3aXRoIG1lZGlhIGlzIGFsbG93ZWQuXG4gKlxuICogSWYgYWxsIGNoZWNrcyBwYXNzLCB0aGUgZnVuY3Rpb24gY29uc3RydWN0cyB0aGUgYG1haW5TcGVjc2AsIGBkaXNwU3BlY3NgLCBhbmQgYHRleHRTcGVjc2Agb2JqZWN0cyBiYXNlZCBvbiB0aGUgc3RhdGUgdmFyaWFibGVzLFxuICogdXBkYXRlcyB0aGUgdXNlciByZWNvcmRpbmcgcGFyYW1ldGVycywgYW5kIGNvbmZpcm1zIHRoZSByZWNvcmRpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9wdGlvbnM6IENvbmZpcm1SZWNvcmRpbmdPcHRpb25zID0geyBwYXJhbWV0ZXJzOiBzb21lUGFyYW1ldGVycyB9O1xuICogYXdhaXQgY29uZmlybVJlY29yZGluZyhvcHRpb25zKTtcbiAqIGBgYFxuICovXG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpcm1SZWNvcmRpbmcge1xuICAvKipcbiAgICogQ29uZmlybXMgdGhlIHJlY29yZGluZyBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycyBhbmQgdXBkYXRlcyB0aGUgcmVjb3JkaW5nIHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbmZpcm1SZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGNvbmZpcm1pbmcgdGhlIHJlY29yZGluZy5cbiAgICogQHBhcmFtIHtQYXJhbWV0ZXJzfSBvcHRpb25zLnBhcmFtZXRlcnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHJlY29yZGluZy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlY29yZGluZyBzZXR0aW5ncyBoYXZlIGJlZW4gY29uZmlybWVkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHNldmVyYWwgY2hlY2tzIHRvIGVuc3VyZSB0aGF0IHRoZSByZWNvcmRpbmcgc2V0dGluZ3MgYXJlIHZhbGlkIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLlxuICAgKiBJZiBhbnkgb2YgdGhlIGNoZWNrcyBmYWlsLCBhbiBhbGVydCBpcyBzaG93biBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHkgd2l0aG91dCB1cGRhdGluZyB0aGUgcmVjb3JkaW5nIHN0YXRlLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gY2hlY2tzIGZvciB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gICAqIC0gV2hldGhlciByZWNvcmRpbmcgdmlkZW9zIG9mIGFsbCBwYXJ0aWNpcGFudHMgaXMgYWxsb3dlZC5cbiAgICogLSBXaGV0aGVyIHJlY29yZGluZyBhbGwgcGFydGljaXBhbnRzIGlzIGFsbG93ZWQuXG4gICAqIC0gV2hldGhlciByZWNvcmRpbmcgb3RoZXIgdmlkZW8gcGFydGljaXBhbnRzIGlzIGFsbG93ZWQuXG4gICAqIC0gV2hldGhlciByZWNvcmRpbmcgYWxsIG9yaWVudGF0aW9ucyBpcyBhbGxvd2VkLlxuICAgKiAtIFdoZXRoZXIgcmVjb3JkaW5nIHRoZSBwcmVmZXJyZWQgb3JpZW50YXRpb24gaXMgYWxsb3dlZC5cbiAgICogLSBXaGV0aGVyIHJlY29yZGluZyBhbGwgZm9ybWF0cyBpcyBhbGxvd2VkLlxuICAgKiAtIFdoZXRoZXIgdGhlIHJlY29yZGluZyBkaXNwbGF5IHR5cGUgaXMgdmFsaWQgYmFzZWQgb24gdGhlIG1lZXRpbmcgZGlzcGxheSB0eXBlLlxuICAgKiAtIFdoZXRoZXIgcmVjb3JkaW5nIGFsbCBwYXJ0aWNpcGFudHMgd2l0aCBtZWRpYSBpcyBhbGxvd2VkLlxuICAgKlxuICAgKiBJZiBhbGwgY2hlY2tzIHBhc3MsIHRoZSBmdW5jdGlvbiBjb25zdHJ1Y3RzIHRoZSBgbWFpblNwZWNzYCwgYGRpc3BTcGVjc2AsIGFuZCBgdGV4dFNwZWNzYCBvYmplY3RzIGJhc2VkIG9uIHRoZSBzdGF0ZSB2YXJpYWJsZXMsXG4gICAqIHVwZGF0ZXMgdGhlIHVzZXIgcmVjb3JkaW5nIHBhcmFtZXRlcnMsIGFuZCBjb25maXJtcyB0aGUgcmVjb3JkaW5nLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IG9wdGlvbnM6IENvbmZpcm1SZWNvcmRpbmdPcHRpb25zID0geyBwYXJhbWV0ZXJzOiBzb21lUGFyYW1ldGVycyB9O1xuICAgKiBhd2FpdCBjb25maXJtUmVjb3JkaW5nKG9wdGlvbnMpO1xuICAgKiBgYGBcbiAgICovXG5cbiAgY29uZmlybVJlY29yZGluZyA9IGFzeW5jICh7IHBhcmFtZXRlcnMgfTogQ29uZmlybVJlY29yZGluZ09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBsZXQgeyBnZXRVcGRhdGVkQWxsUGFyYW1zIH0gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSBnZXRVcGRhdGVkQWxsUGFyYW1zKCk7XG5cbiAgICBsZXQge1xuICAgICAgc2hvd0FsZXJ0LFxuICAgICAgcmVjb3JkaW5nTWVkaWFPcHRpb25zLFxuICAgICAgcmVjb3JkaW5nQXVkaW9PcHRpb25zLFxuICAgICAgcmVjb3JkaW5nVmlkZW9PcHRpb25zLFxuICAgICAgcmVjb3JkaW5nVmlkZW9UeXBlLFxuICAgICAgcmVjb3JkaW5nRGlzcGxheVR5cGUsXG4gICAgICByZWNvcmRpbmdOYW1lVGFncyxcbiAgICAgIHJlY29yZGluZ0JhY2tncm91bmRDb2xvcixcbiAgICAgIHJlY29yZGluZ05hbWVUYWdzQ29sb3IsXG4gICAgICByZWNvcmRpbmdPcmllbnRhdGlvblZpZGVvLFxuICAgICAgcmVjb3JkaW5nQWRkSExTLFxuICAgICAgcmVjb3JkaW5nQWRkVGV4dCxcbiAgICAgIHJlY29yZGluZ0N1c3RvbVRleHQsXG4gICAgICByZWNvcmRpbmdDdXN0b21UZXh0UG9zaXRpb24sXG4gICAgICByZWNvcmRpbmdDdXN0b21UZXh0Q29sb3IsXG4gICAgICBtZWV0aW5nRGlzcGxheVR5cGUsXG4gICAgICByZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydCxcbiAgICAgIHJlY29yZGluZ0FsbFBhcnRpY2lwYW50c1N1cHBvcnQsXG4gICAgICByZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c1N1cHBvcnQsXG4gICAgICByZWNvcmRpbmdTdXBwb3J0Rm9yT3RoZXJPcmllbnRhdGlvbixcbiAgICAgIHJlY29yZGluZ1ByZWZlcnJlZE9yaWVudGF0aW9uLFxuICAgICAgcmVjb3JkaW5nTXVsdGlGb3JtYXRzU3VwcG9ydCxcbiAgICAgIHJlY29yZGluZ1ZpZGVvT3B0aW1pemVkLFxuICAgICAgcmVjb3JkaW5nQWxsUGFydGljaXBhbnRzRnVsbFJvb21TdXBwb3J0LFxuICAgICAgbWVldGluZ1ZpZGVvT3B0aW1pemVkLFxuICAgICAgZXZlbnRUeXBlLFxuICAgICAgYnJlYWtPdXRSb29tU3RhcnRlZCxcbiAgICAgIGJyZWFrT3V0Um9vbUVuZGVkLFxuXG4gICAgICB1cGRhdGVSZWNvcmRpbmdEaXNwbGF5VHlwZSxcbiAgICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvT3B0aW1pemVkLFxuICAgICAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQsXG4gICAgICB1cGRhdGVSZWNvcmRpbmdBbGxQYXJ0aWNpcGFudHNTdXBwb3J0LFxuICAgICAgdXBkYXRlUmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNTdXBwb3J0LFxuICAgICAgdXBkYXRlUmVjb3JkaW5nU3VwcG9ydEZvck90aGVyT3JpZW50YXRpb24sXG4gICAgICB1cGRhdGVSZWNvcmRpbmdQcmVmZXJyZWRPcmllbnRhdGlvbixcbiAgICAgIHVwZGF0ZVJlY29yZGluZ011bHRpRm9ybWF0c1N1cHBvcnQsXG4gICAgICB1cGRhdGVVc2VyUmVjb3JkaW5nUGFyYW1zLFxuICAgICAgdXBkYXRlQ29uZmlybWVkVG9SZWNvcmQsXG4gICAgfSA9IHBhcmFtZXRlcnM7XG5cbiAgICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIGZyb20gdGhlIHN0YXRlXG5cbiAgICBjb25zdCBtZWRpYU9wdGlvbnMgPSByZWNvcmRpbmdNZWRpYU9wdGlvbnM7XG5cbiAgICAvLyBPdGhlciB2YXJpYWJsZXMgbm90IHByb3ZpZGVkIGluIHRoZSBndWlkZVxuICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkT3B0aW9uID0gcmVjb3JkaW5nRGlzcGxheVR5cGU7XG5cbiAgICAvLyBBZGRpdGlvbmFsIGxvZ2ljIHNpbWlsYXIgdG8gdGhlIHByb3ZpZGVkIGd1aWRlXG4gICAgLy8gcmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQgPSBtaW5pZ3JpZCBhbmQgbWFpbiB2aWRlb1xuICAgIGlmIChldmVudFR5cGUgIT09ICdicm9hZGNhc3QnKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFyZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydCAmJlxuICAgICAgICByZWNvcmRpbmdWaWRlb09wdGlvbnMgPT09ICdhbGwnICYmXG4gICAgICAgIG1lZGlhT3B0aW9ucyA9PT0gJ3ZpZGVvJ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChtZWV0aW5nRGlzcGxheVR5cGUgPT0gJ2FsbCcpIHtcbiAgICAgICAgICBpZiAoYnJlYWtPdXRSb29tU3RhcnRlZCAmJiAhYnJlYWtPdXRSb29tRW5kZWQpIHtcbiAgICAgICAgICAgIC8vIGJyZWFrb3V0IHJvb21zIGFyZSBzdGFydGVkXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNob3dBbGVydD8uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgICAnWW91IGFyZSBub3QgYWxsb3dlZCB0byByZWNvcmQgdmlkZW9zIG9mIGFsbCBwYXJ0aWNpcGFudHM7IGNoYW5nZSB0aGUgbWVldGluZyBkaXNwbGF5IHR5cGUgdG8gdmlkZW8gb3IgdmlkZW8gb3B0aW1pemVkLicsXG4gICAgICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHJlY29yZGluZ0FsbFBhcnRpY2lwYW50c1N1cHBvcnQgID0gb3RoZXJzIG90aGVyIHRoYW4gaG9zdCBzY3JlZW4gKHZpZGVvICsgYXVkaW8pXG4gICAgICBpZiAoIXJlY29yZGluZ0FsbFBhcnRpY2lwYW50c1N1cHBvcnQgJiYgcmVjb3JkaW5nVmlkZW9PcHRpb25zID09PSAnYWxsJykge1xuICAgICAgICBzaG93QWxlcnQ/Lih7XG4gICAgICAgICAgbWVzc2FnZTogJ1lvdSBhcmUgb25seSBhbGxvd2VkIHRvIHJlY29yZCB5b3Vyc2VsZi4nLFxuICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHJlY29yZGluZ1ZpZGVvUGFydGljaXBhbnRzU3VwcG9ydCAobWFpbmdyaWQgKyBub24taG9zdCBzY3JlZW5zaGFyZSBwZXJzb24pXG4gICAgICBpZiAoIXJlY29yZGluZ1ZpZGVvUGFydGljaXBhbnRzU3VwcG9ydCAmJiByZWNvcmRpbmdEaXNwbGF5VHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICBzaG93QWxlcnQ/Lih7XG4gICAgICAgICAgbWVzc2FnZTogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gcmVjb3JkIG90aGVyIHZpZGVvIHBhcnRpY2lwYW50cy4nLFxuICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZWNvcmRpbmdTdXBwb3J0Rm9yT3RoZXJPcmllbnRhdGlvbiAmJiByZWNvcmRpbmdPcmllbnRhdGlvblZpZGVvID09PSAnYWxsJykge1xuICAgICAgc2hvd0FsZXJ0Py4oe1xuICAgICAgICBtZXNzYWdlOiAnWW91IGFyZSBub3QgYWxsb3dlZCB0byByZWNvcmQgYWxsIG9yaWVudGF0aW9ucy4nLFxuICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHJlY29yZGluZ1ByZWZlcnJlZE9yaWVudGF0aW9uID09PSAnbGFuZHNjYXBlJyAmJlxuICAgICAgcmVjb3JkaW5nT3JpZW50YXRpb25WaWRlbyA9PT0gJ3BvcnRyYWl0JyAmJlxuICAgICAgIXJlY29yZGluZ1N1cHBvcnRGb3JPdGhlck9yaWVudGF0aW9uXG4gICAgKSB7XG4gICAgICBzaG93QWxlcnQ/Lih7XG4gICAgICAgIG1lc3NhZ2U6ICdZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIHJlY29yZCBwb3J0cmFpdCBvcmllbnRhdGlvbi4nLFxuICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICByZWNvcmRpbmdQcmVmZXJyZWRPcmllbnRhdGlvbiA9PT0gJ3BvcnRyYWl0JyAmJlxuICAgICAgcmVjb3JkaW5nT3JpZW50YXRpb25WaWRlbyA9PT0gJ2xhbmRzY2FwZScgJiZcbiAgICAgICFyZWNvcmRpbmdTdXBwb3J0Rm9yT3RoZXJPcmllbnRhdGlvblxuICAgICkge1xuICAgICAgc2hvd0FsZXJ0Py4oe1xuICAgICAgICBtZXNzYWdlOiAnWW91IGFyZSBub3QgYWxsb3dlZCB0byByZWNvcmQgbGFuZHNjYXBlIG9yaWVudGF0aW9uLicsXG4gICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFyZWNvcmRpbmdNdWx0aUZvcm1hdHNTdXBwb3J0ICYmIHJlY29yZGluZ1ZpZGVvVHlwZSA9PT0gJ2FsbCcpIHtcbiAgICAgIHNob3dBbGVydD8uKHtcbiAgICAgICAgbWVzc2FnZTogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gcmVjb3JkIGFsbCBmb3JtYXRzLicsXG4gICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAhPT0gJ2Jyb2FkY2FzdCcpIHtcbiAgICAgIGlmIChyZWNvcmRpbmdNZWRpYU9wdGlvbnMgPT09ICd2aWRlbycpIHtcbiAgICAgICAgaWYgKG1lZXRpbmdEaXNwbGF5VHlwZSA9PT0gJ21lZGlhJykge1xuICAgICAgICAgIGlmIChyZWNvcmRpbmdEaXNwbGF5VHlwZSA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIHNob3dBbGVydD8uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgICAnUmVjb3JkaW5nIGRpc3BsYXkgdHlwZSBjYW4gYmUgZWl0aGVyIHZpZGVvLCB2aWRlbyBvcHRpbWl6ZWQsIG9yIG1lZGlhIHdoZW4gbWVldGluZyBkaXNwbGF5IHR5cGUgaXMgbWVkaWEuJyxcbiAgICAgICAgICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJlY29yZGluZ0Rpc3BsYXlUeXBlID0gbWVldGluZ0Rpc3BsYXlUeXBlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChtZWV0aW5nRGlzcGxheVR5cGUgPT09ICd2aWRlbycpIHtcbiAgICAgICAgICBpZiAocmVjb3JkaW5nRGlzcGxheVR5cGUgPT09ICdhbGwnIHx8IHJlY29yZGluZ0Rpc3BsYXlUeXBlID09PSAnbWVkaWEnKSB7XG4gICAgICAgICAgICBzaG93QWxlcnQ/Lih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgJ1JlY29yZGluZyBkaXNwbGF5IHR5cGUgY2FuIGJlIGVpdGhlciB2aWRlbyBvciB2aWRlbyBvcHRpbWl6ZWQgd2hlbiBtZWV0aW5nIGRpc3BsYXkgdHlwZSBpcyB2aWRlby4nLFxuICAgICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmVjb3JkaW5nRGlzcGxheVR5cGUgPSBtZWV0aW5nRGlzcGxheVR5cGU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1lZXRpbmdWaWRlb09wdGltaXplZCAmJiAhcmVjb3JkaW5nVmlkZW9PcHRpbWl6ZWQpIHtcbiAgICAgICAgICAgIHNob3dBbGVydD8uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgICAnUmVjb3JkaW5nIGRpc3BsYXkgdHlwZSBjYW4gYmUgb25seSB2aWRlbyBvcHRpbWl6ZWQgd2hlbiBtZWV0aW5nIGRpc3BsYXkgdHlwZSBpcyB2aWRlbyBvcHRpbWl6ZWQuJyxcbiAgICAgICAgICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJlY29yZGluZ1ZpZGVvT3B0aW1pemVkID0gbWVldGluZ1ZpZGVvT3B0aW1pemVkO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlY29yZGluZ0Rpc3BsYXlUeXBlID09PSAnYWxsJyB8fCByZWNvcmRpbmdEaXNwbGF5VHlwZSA9PT0gJ21lZGlhJykge1xuICAgICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWNvcmRpbmdEaXNwbGF5VHlwZSA9ICdtZWRpYSc7XG4gICAgICAgIH1cbiAgICAgICAgcmVjb3JkaW5nVmlkZW9PcHRpbWl6ZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVjb3JkaW5nRGlzcGxheVR5cGUgPT09ICdhbGwnICYmICFyZWNvcmRpbmdBbGxQYXJ0aWNpcGFudHNGdWxsUm9vbVN1cHBvcnQpIHtcbiAgICAgIHNob3dBbGVydD8uKHtcbiAgICAgICAgbWVzc2FnZTogJ1lvdSBjYW4gb25seSByZWNvcmQgYWxsIHBhcnRpY2lwYW50cyB3aXRoIG1lZGlhLicsXG4gICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIENvbnN0cnVjdCBtYWluU3BlY3MgYW5kIGRpc3BTcGVjcyBvYmplY3RzIGJhc2VkIG9uIHRoZSBzdGF0ZSB2YXJpYWJsZXNcbiAgICBjb25zdCBtYWluU3BlY3M6IE1haW5TcGVjcyA9IHtcbiAgICAgIG1lZGlhT3B0aW9uczogcmVjb3JkaW5nTWVkaWFPcHRpb25zLFxuICAgICAgYXVkaW9PcHRpb25zOiByZWNvcmRpbmdBdWRpb09wdGlvbnMsXG4gICAgICB2aWRlb09wdGlvbnM6IHJlY29yZGluZ1ZpZGVvT3B0aW9ucyxcbiAgICAgIHZpZGVvVHlwZTogcmVjb3JkaW5nVmlkZW9UeXBlLFxuICAgICAgdmlkZW9PcHRpbWl6ZWQ6IHJlY29yZGluZ1ZpZGVvT3B0aW1pemVkLFxuICAgICAgcmVjb3JkaW5nRGlzcGxheVR5cGU6IHJlY29yZGluZ0Rpc3BsYXlUeXBlLFxuICAgICAgYWRkSExTOiByZWNvcmRpbmdBZGRITFMsXG4gICAgfTtcblxuICAgIGNvbnN0IGRpc3BTcGVjczogRGlzcFNwZWNzID0ge1xuICAgICAgbmFtZVRhZ3M6IHJlY29yZGluZ05hbWVUYWdzLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiByZWNvcmRpbmdCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBuYW1lVGFnc0NvbG9yOiByZWNvcmRpbmdOYW1lVGFnc0NvbG9yLFxuICAgICAgb3JpZW50YXRpb25WaWRlbzogcmVjb3JkaW5nT3JpZW50YXRpb25WaWRlbyxcbiAgICB9O1xuXG4gICAgY29uc3QgdGV4dFNwZWNzOiBUZXh0U3BlY3MgPSB7XG4gICAgICBhZGRUZXh0OiByZWNvcmRpbmdBZGRUZXh0LFxuICAgICAgY3VzdG9tVGV4dDogcmVjb3JkaW5nQ3VzdG9tVGV4dCxcbiAgICAgIGN1c3RvbVRleHRQb3NpdGlvbjogcmVjb3JkaW5nQ3VzdG9tVGV4dFBvc2l0aW9uLFxuICAgICAgY3VzdG9tVGV4dENvbG9yOiByZWNvcmRpbmdDdXN0b21UZXh0Q29sb3IsXG4gICAgfTtcblxuICAgIC8vIENvbnN0cnVjdCB1c2VyUmVjb3JkaW5nUGFyYW1zIG9iamVjdFxuICAgIGNvbnN0IHVzZXJSZWNvcmRpbmdQYXJhbXMgPSB7IG1haW5TcGVjcywgZGlzcFNwZWNzLCB0ZXh0U3BlY3MgfTtcbiAgICAvLyBVcGRhdGUgc3RhdGUgdmFyaWFibGVzIGJhc2VkIG9uIHRoZSBsb2dpY1xuICAgIHVwZGF0ZVVzZXJSZWNvcmRpbmdQYXJhbXModXNlclJlY29yZGluZ1BhcmFtcyk7XG4gICAgdXBkYXRlQ29uZmlybWVkVG9SZWNvcmQodHJ1ZSk7XG4gICAgdXBkYXRlUmVjb3JkaW5nRGlzcGxheVR5cGUoc2VsZWN0ZWRSZWNvcmRPcHRpb24pO1xuICAgIHVwZGF0ZVJlY29yZGluZ1ZpZGVvT3B0aW1pemVkKHJlY29yZGluZ1ZpZGVvT3B0aW1pemVkKTtcbiAgICB1cGRhdGVSZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydChyZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c0Z1bGxSb29tU3VwcG9ydCk7XG4gICAgdXBkYXRlUmVjb3JkaW5nQWxsUGFydGljaXBhbnRzU3VwcG9ydChyZWNvcmRpbmdBbGxQYXJ0aWNpcGFudHNTdXBwb3J0KTtcbiAgICB1cGRhdGVSZWNvcmRpbmdWaWRlb1BhcnRpY2lwYW50c1N1cHBvcnQocmVjb3JkaW5nVmlkZW9QYXJ0aWNpcGFudHNTdXBwb3J0KTtcbiAgICB1cGRhdGVSZWNvcmRpbmdTdXBwb3J0Rm9yT3RoZXJPcmllbnRhdGlvbihyZWNvcmRpbmdTdXBwb3J0Rm9yT3RoZXJPcmllbnRhdGlvbik7XG4gICAgdXBkYXRlUmVjb3JkaW5nUHJlZmVycmVkT3JpZW50YXRpb24ocmVjb3JkaW5nUHJlZmVycmVkT3JpZW50YXRpb24pO1xuICAgIHVwZGF0ZVJlY29yZGluZ011bHRpRm9ybWF0c1N1cHBvcnQocmVjb3JkaW5nTXVsdGlGb3JtYXRzU3VwcG9ydCk7XG4gIH07XG59XG4iXX0=
@@ -1,125 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- /**
4
- * Launches the recording process based on various conditions and updates the UI accordingly.
5
- *
6
- * @param {LaunchRecordingOptions} options - The options for launching the recording.
7
- * @param {Function} options.updateIsRecordingModalVisible - Function to update the visibility of the recording modal.
8
- * @param {boolean} options.isRecordingModalVisible - Indicates if the recording modal is currently visible.
9
- * @param {Function} [options.showAlert] - Optional function to show an alert message.
10
- * @param {boolean} options.stopLaunchRecord - Indicates if the recording launch should be stopped.
11
- * @param {boolean} options.canLaunchRecord - Indicates if the recording can be launched.
12
- * @param {boolean} options.recordingAudioSupport - Indicates if audio recording is supported.
13
- * @param {boolean} options.recordingVideoSupport - Indicates if video recording is supported.
14
- * @param {Function} options.updateCanRecord - Function to update the recording capability.
15
- * @param {Function} options.updateClearedToRecord - Function to update the cleared-to-record status.
16
- * @param {boolean} options.recordStarted - Indicates if the recording has started.
17
- * @param {boolean} options.recordPaused - Indicates if the recording is paused.
18
- * @param {boolean} options.localUIMode - Indicates if the local UI mode is active.
19
- *
20
- * @returns {void}
21
- *
22
- * @throws Will show an alert if:
23
- * - The recording has already ended or the user is not allowed to record.
24
- * - The recording initiation is not allowed due to insufficient permissions.
25
- * - The recording is currently running and cannot be reconfigured unless paused.
26
- *
27
- * @example
28
- * ```typescript
29
- * const options: LaunchRecordingOptions = {
30
- * updateIsRecordingModalVisible: (visible) => { /* update visibility logic *\/ },
31
- * isRecordingModalVisible: false,
32
- * showAlert: (alert) => { /* show alert logic *\/ },
33
- * stopLaunchRecord: false,
34
- * canLaunchRecord: true,
35
- * recordingAudioSupport: true,
36
- * recordingVideoSupport: true,
37
- * updateCanRecord: (canRecord) => { /* update record capability *\/ },
38
- * updateClearedToRecord: (cleared) => { /* update cleared status *\/ },
39
- * recordStarted: false,
40
- * recordPaused: false,
41
- * localUIMode: false,
42
- * };
43
- * launchRecording(options);
44
- * ```
45
- */
46
- export class LaunchRecording {
47
- /**
48
- * Launches the recording process based on various conditions and updates the UI accordingly.
49
- *
50
- * @param {Object} options - The options for launching the recording.
51
- * @param {Function} options.updateIsRecordingModalVisible - Function to update the visibility of the recording modal.
52
- * @param {boolean} options.isRecordingModalVisible - Indicates if the recording modal is currently visible.
53
- * @param {Function} options.showAlert - Function to show an alert message.
54
- * @param {boolean} options.stopLaunchRecord - Indicates if the recording launch should be stopped.
55
- * @param {boolean} options.canLaunchRecord - Indicates if the recording can be launched.
56
- * @param {boolean} options.recordingAudioSupport - Indicates if audio recording is supported.
57
- * @param {boolean} options.recordingVideoSupport - Indicates if video recording is supported.
58
- * @param {Function} options.updateCanRecord - Function to update the recording capability.
59
- * @param {Function} options.updateClearedToRecord - Function to update the cleared-to-record status.
60
- * @param {boolean} options.recordStarted - Indicates if the recording has started.
61
- * @param {boolean} options.recordPaused - Indicates if the recording is paused.
62
- * @param {boolean} options.localUIMode - Indicates if the local UI mode is active.
63
- *
64
- * @returns {void}
65
- */
66
- launchRecording({ updateIsRecordingModalVisible, isRecordingModalVisible, showAlert, stopLaunchRecord, canLaunchRecord, recordingAudioSupport, recordingVideoSupport, updateCanRecord, updateClearedToRecord, recordStarted, recordPaused, localUIMode, }) {
67
- // Check if recording is already launched
68
- if (!isRecordingModalVisible && stopLaunchRecord && !localUIMode) {
69
- showAlert?.({
70
- message: 'Recording has already ended or you are not allowed to record',
71
- type: 'danger',
72
- duration: 3000,
73
- });
74
- return;
75
- }
76
- // Check if recording initiation is allowed
77
- if (!isRecordingModalVisible && canLaunchRecord && !localUIMode) {
78
- // Check if both audio and video recording are not allowed
79
- if (!recordingAudioSupport && !recordingVideoSupport) {
80
- showAlert?.({
81
- message: 'You are not allowed to record',
82
- type: 'danger',
83
- duration: 3000,
84
- });
85
- return;
86
- }
87
- // update clearedToRecord to false
88
- updateClearedToRecord(false);
89
- // update canRecord to false
90
- updateCanRecord(false);
91
- }
92
- if (!isRecordingModalVisible && recordStarted) {
93
- if (!recordPaused) {
94
- showAlert?.({
95
- message: 'You can only re-configure recording after pausing it',
96
- type: 'danger',
97
- duration: 3000,
98
- });
99
- return;
100
- }
101
- }
102
- if (!isRecordingModalVisible &&
103
- !recordingAudioSupport &&
104
- !recordingVideoSupport &&
105
- !localUIMode) {
106
- showAlert?.({
107
- message: 'You are not allowed to record',
108
- type: 'danger',
109
- duration: 3000,
110
- });
111
- return;
112
- }
113
- // Update the visibility of the recording modal
114
- updateIsRecordingModalVisible(!isRecordingModalVisible);
115
- }
116
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LaunchRecording, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
117
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LaunchRecording, providedIn: 'root' });
118
- }
119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LaunchRecording, decorators: [{
120
- type: Injectable,
121
- args: [{
122
- providedIn: 'root',
123
- }]
124
- }] });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF1bmNoLXJlY29yZGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWFzZnUtYW5ndWxhci9zcmMvbGliL21ldGhvZHMvcmVjb3JkaW5nLW1ldGhvZHMvbGF1bmNoLXJlY29yZGluZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBdUIzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBTUgsTUFBTSxPQUFPLGVBQWU7SUFDMUI7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUVILGVBQWUsQ0FBQyxFQUNkLDZCQUE2QixFQUM3Qix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGdCQUFnQixFQUNoQixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixZQUFZLEVBQ1osV0FBVyxHQUNZO1FBQ3ZCLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsdUJBQXVCLElBQUksZ0JBQWdCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqRSxTQUFTLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsOERBQThEO2dCQUN2RSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQztZQUVILE9BQU87UUFDVCxDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxlQUFlLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoRSwwREFBMEQ7WUFDMUQsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDckQsU0FBUyxFQUFFLENBQUM7b0JBQ1YsT0FBTyxFQUFFLCtCQUErQjtvQkFDeEMsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQyxDQUFDO2dCQUVILE9BQU87WUFDVCxDQUFDO1lBRUQsa0NBQWtDO1lBQ2xDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLDRCQUE0QjtZQUM1QixlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksQ0FBQyx1QkFBdUIsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLFNBQVMsRUFBRSxDQUFDO29CQUNWLE9BQU8sRUFBRSxzREFBc0Q7b0JBQy9ELElBQUksRUFBRSxRQUFRO29CQUNkLFFBQVEsRUFBRSxJQUFJO2lCQUNmLENBQUMsQ0FBQztnQkFFSCxPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFFRCxJQUNFLENBQUMsdUJBQXVCO1lBQ3hCLENBQUMscUJBQXFCO1lBQ3RCLENBQUMscUJBQXFCO1lBQ3RCLENBQUMsV0FBVyxFQUNaLENBQUM7WUFDRCxTQUFTLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsK0JBQStCO2dCQUN4QyxJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQztZQUVILE9BQU87UUFDVCxDQUFDO1FBRUQsK0NBQStDO1FBQy9DLDZCQUE2QixDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUMxRCxDQUFDO3VHQTlGVSxlQUFlOzJHQUFmLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNob3dBbGVydCB9IGZyb20gJy4uLy4uL0B0eXBlcy90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoUmVjb3JkaW5nT3B0aW9ucyB7XG4gIHVwZGF0ZUlzUmVjb3JkaW5nTW9kYWxWaXNpYmxlOiAodmlzaWJsZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgaXNSZWNvcmRpbmdNb2RhbFZpc2libGU6IGJvb2xlYW47XG4gIHNob3dBbGVydD86IFNob3dBbGVydDtcbiAgc3RvcExhdW5jaFJlY29yZDogYm9vbGVhbjtcbiAgY2FuTGF1bmNoUmVjb3JkOiBib29sZWFuO1xuICByZWNvcmRpbmdBdWRpb1N1cHBvcnQ6IGJvb2xlYW47XG4gIHJlY29yZGluZ1ZpZGVvU3VwcG9ydDogYm9vbGVhbjtcbiAgdXBkYXRlQ2FuUmVjb3JkOiAoY2FuUmVjb3JkOiBib29sZWFuKSA9PiB2b2lkO1xuICB1cGRhdGVDbGVhcmVkVG9SZWNvcmQ6IChjbGVhcmVkOiBib29sZWFuKSA9PiB2b2lkO1xuICByZWNvcmRTdGFydGVkOiBib29sZWFuO1xuICByZWNvcmRQYXVzZWQ6IGJvb2xlYW47XG4gIGxvY2FsVUlNb2RlOiBib29sZWFuO1xuXG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuLy8gRXhwb3J0IHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBmdW5jdGlvblxuZXhwb3J0IHR5cGUgTGF1bmNoUmVjb3JkaW5nVHlwZSA9IChvcHRpb25zOiBMYXVuY2hSZWNvcmRpbmdPcHRpb25zKSA9PiB2b2lkO1xuXG4vKipcbiAqIExhdW5jaGVzIHRoZSByZWNvcmRpbmcgcHJvY2VzcyBiYXNlZCBvbiB2YXJpb3VzIGNvbmRpdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIFVJIGFjY29yZGluZ2x5LlxuICpcbiAqIEBwYXJhbSB7TGF1bmNoUmVjb3JkaW5nT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBsYXVuY2hpbmcgdGhlIHJlY29yZGluZy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMudXBkYXRlSXNSZWNvcmRpbmdNb2RhbFZpc2libGUgLSBGdW5jdGlvbiB0byB1cGRhdGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHJlY29yZGluZyBtb2RhbC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5pc1JlY29yZGluZ01vZGFsVmlzaWJsZSAtIEluZGljYXRlcyBpZiB0aGUgcmVjb3JkaW5nIG1vZGFsIGlzIGN1cnJlbnRseSB2aXNpYmxlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuc2hvd0FsZXJ0XSAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIHNob3cgYW4gYWxlcnQgbWVzc2FnZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5zdG9wTGF1bmNoUmVjb3JkIC0gSW5kaWNhdGVzIGlmIHRoZSByZWNvcmRpbmcgbGF1bmNoIHNob3VsZCBiZSBzdG9wcGVkLlxuICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmNhbkxhdW5jaFJlY29yZCAtIEluZGljYXRlcyBpZiB0aGUgcmVjb3JkaW5nIGNhbiBiZSBsYXVuY2hlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yZWNvcmRpbmdBdWRpb1N1cHBvcnQgLSBJbmRpY2F0ZXMgaWYgYXVkaW8gcmVjb3JkaW5nIGlzIHN1cHBvcnRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yZWNvcmRpbmdWaWRlb1N1cHBvcnQgLSBJbmRpY2F0ZXMgaWYgdmlkZW8gcmVjb3JkaW5nIGlzIHN1cHBvcnRlZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMudXBkYXRlQ2FuUmVjb3JkIC0gRnVuY3Rpb24gdG8gdXBkYXRlIHRoZSByZWNvcmRpbmcgY2FwYWJpbGl0eS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMudXBkYXRlQ2xlYXJlZFRvUmVjb3JkIC0gRnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBjbGVhcmVkLXRvLXJlY29yZCBzdGF0dXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMucmVjb3JkU3RhcnRlZCAtIEluZGljYXRlcyBpZiB0aGUgcmVjb3JkaW5nIGhhcyBzdGFydGVkLlxuICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnJlY29yZFBhdXNlZCAtIEluZGljYXRlcyBpZiB0aGUgcmVjb3JkaW5nIGlzIHBhdXNlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5sb2NhbFVJTW9kZSAtIEluZGljYXRlcyBpZiB0aGUgbG9jYWwgVUkgbW9kZSBpcyBhY3RpdmUuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKlxuICogQHRocm93cyBXaWxsIHNob3cgYW4gYWxlcnQgaWY6XG4gKiAtIFRoZSByZWNvcmRpbmcgaGFzIGFscmVhZHkgZW5kZWQgb3IgdGhlIHVzZXIgaXMgbm90IGFsbG93ZWQgdG8gcmVjb3JkLlxuICogLSBUaGUgcmVjb3JkaW5nIGluaXRpYXRpb24gaXMgbm90IGFsbG93ZWQgZHVlIHRvIGluc3VmZmljaWVudCBwZXJtaXNzaW9ucy5cbiAqIC0gVGhlIHJlY29yZGluZyBpcyBjdXJyZW50bHkgcnVubmluZyBhbmQgY2Fubm90IGJlIHJlY29uZmlndXJlZCB1bmxlc3MgcGF1c2VkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBvcHRpb25zOiBMYXVuY2hSZWNvcmRpbmdPcHRpb25zID0ge1xuICogICB1cGRhdGVJc1JlY29yZGluZ01vZGFsVmlzaWJsZTogKHZpc2libGUpID0+IHsgLyogdXBkYXRlIHZpc2liaWxpdHkgbG9naWMgKlxcLyB9LFxuICogICBpc1JlY29yZGluZ01vZGFsVmlzaWJsZTogZmFsc2UsXG4gKiAgIHNob3dBbGVydDogKGFsZXJ0KSA9PiB7IC8qIHNob3cgYWxlcnQgbG9naWMgKlxcLyB9LFxuICogICBzdG9wTGF1bmNoUmVjb3JkOiBmYWxzZSxcbiAqICAgY2FuTGF1bmNoUmVjb3JkOiB0cnVlLFxuICogICByZWNvcmRpbmdBdWRpb1N1cHBvcnQ6IHRydWUsXG4gKiAgIHJlY29yZGluZ1ZpZGVvU3VwcG9ydDogdHJ1ZSxcbiAqICAgdXBkYXRlQ2FuUmVjb3JkOiAoY2FuUmVjb3JkKSA9PiB7IC8qIHVwZGF0ZSByZWNvcmQgY2FwYWJpbGl0eSAqXFwvIH0sXG4gKiAgIHVwZGF0ZUNsZWFyZWRUb1JlY29yZDogKGNsZWFyZWQpID0+IHsgLyogdXBkYXRlIGNsZWFyZWQgc3RhdHVzICpcXC8gfSxcbiAqICAgcmVjb3JkU3RhcnRlZDogZmFsc2UsXG4gKiAgIHJlY29yZFBhdXNlZDogZmFsc2UsXG4gKiAgIGxvY2FsVUlNb2RlOiBmYWxzZSxcbiAqIH07XG4gKiBsYXVuY2hSZWNvcmRpbmcob3B0aW9ucyk7XG4gKiBgYGBcbiAqL1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBMYXVuY2hSZWNvcmRpbmcge1xuICAvKipcbiAgICogTGF1bmNoZXMgdGhlIHJlY29yZGluZyBwcm9jZXNzIGJhc2VkIG9uIHZhcmlvdXMgY29uZGl0aW9ucyBhbmQgdXBkYXRlcyB0aGUgVUkgYWNjb3JkaW5nbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGxhdW5jaGluZyB0aGUgcmVjb3JkaW5nLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLnVwZGF0ZUlzUmVjb3JkaW5nTW9kYWxWaXNpYmxlIC0gRnVuY3Rpb24gdG8gdXBkYXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSByZWNvcmRpbmcgbW9kYWwuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5pc1JlY29yZGluZ01vZGFsVmlzaWJsZSAtIEluZGljYXRlcyBpZiB0aGUgcmVjb3JkaW5nIG1vZGFsIGlzIGN1cnJlbnRseSB2aXNpYmxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLnNob3dBbGVydCAtIEZ1bmN0aW9uIHRvIHNob3cgYW4gYWxlcnQgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnN0b3BMYXVuY2hSZWNvcmQgLSBJbmRpY2F0ZXMgaWYgdGhlIHJlY29yZGluZyBsYXVuY2ggc2hvdWxkIGJlIHN0b3BwZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5jYW5MYXVuY2hSZWNvcmQgLSBJbmRpY2F0ZXMgaWYgdGhlIHJlY29yZGluZyBjYW4gYmUgbGF1bmNoZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yZWNvcmRpbmdBdWRpb1N1cHBvcnQgLSBJbmRpY2F0ZXMgaWYgYXVkaW8gcmVjb3JkaW5nIGlzIHN1cHBvcnRlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnJlY29yZGluZ1ZpZGVvU3VwcG9ydCAtIEluZGljYXRlcyBpZiB2aWRlbyByZWNvcmRpbmcgaXMgc3VwcG9ydGVkLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLnVwZGF0ZUNhblJlY29yZCAtIEZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgcmVjb3JkaW5nIGNhcGFiaWxpdHkuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMudXBkYXRlQ2xlYXJlZFRvUmVjb3JkIC0gRnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBjbGVhcmVkLXRvLXJlY29yZCBzdGF0dXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yZWNvcmRTdGFydGVkIC0gSW5kaWNhdGVzIGlmIHRoZSByZWNvcmRpbmcgaGFzIHN0YXJ0ZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yZWNvcmRQYXVzZWQgLSBJbmRpY2F0ZXMgaWYgdGhlIHJlY29yZGluZyBpcyBwYXVzZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5sb2NhbFVJTW9kZSAtIEluZGljYXRlcyBpZiB0aGUgbG9jYWwgVUkgbW9kZSBpcyBhY3RpdmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cblxuICBsYXVuY2hSZWNvcmRpbmcoe1xuICAgIHVwZGF0ZUlzUmVjb3JkaW5nTW9kYWxWaXNpYmxlLFxuICAgIGlzUmVjb3JkaW5nTW9kYWxWaXNpYmxlLFxuICAgIHNob3dBbGVydCxcbiAgICBzdG9wTGF1bmNoUmVjb3JkLFxuICAgIGNhbkxhdW5jaFJlY29yZCxcbiAgICByZWNvcmRpbmdBdWRpb1N1cHBvcnQsXG4gICAgcmVjb3JkaW5nVmlkZW9TdXBwb3J0LFxuICAgIHVwZGF0ZUNhblJlY29yZCxcbiAgICB1cGRhdGVDbGVhcmVkVG9SZWNvcmQsXG4gICAgcmVjb3JkU3RhcnRlZCxcbiAgICByZWNvcmRQYXVzZWQsXG4gICAgbG9jYWxVSU1vZGUsXG4gIH06IExhdW5jaFJlY29yZGluZ09wdGlvbnMpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiByZWNvcmRpbmcgaXMgYWxyZWFkeSBsYXVuY2hlZFxuICAgIGlmICghaXNSZWNvcmRpbmdNb2RhbFZpc2libGUgJiYgc3RvcExhdW5jaFJlY29yZCAmJiAhbG9jYWxVSU1vZGUpIHtcbiAgICAgIHNob3dBbGVydD8uKHtcbiAgICAgICAgbWVzc2FnZTogJ1JlY29yZGluZyBoYXMgYWxyZWFkeSBlbmRlZCBvciB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIHJlY29yZCcsXG4gICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgcmVjb3JkaW5nIGluaXRpYXRpb24gaXMgYWxsb3dlZFxuICAgIGlmICghaXNSZWNvcmRpbmdNb2RhbFZpc2libGUgJiYgY2FuTGF1bmNoUmVjb3JkICYmICFsb2NhbFVJTW9kZSkge1xuICAgICAgLy8gQ2hlY2sgaWYgYm90aCBhdWRpbyBhbmQgdmlkZW8gcmVjb3JkaW5nIGFyZSBub3QgYWxsb3dlZFxuICAgICAgaWYgKCFyZWNvcmRpbmdBdWRpb1N1cHBvcnQgJiYgIXJlY29yZGluZ1ZpZGVvU3VwcG9ydCkge1xuICAgICAgICBzaG93QWxlcnQ/Lih7XG4gICAgICAgICAgbWVzc2FnZTogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gcmVjb3JkJyxcbiAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgY2xlYXJlZFRvUmVjb3JkIHRvIGZhbHNlXG4gICAgICB1cGRhdGVDbGVhcmVkVG9SZWNvcmQoZmFsc2UpO1xuICAgICAgLy8gdXBkYXRlIGNhblJlY29yZCB0byBmYWxzZVxuICAgICAgdXBkYXRlQ2FuUmVjb3JkKGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzUmVjb3JkaW5nTW9kYWxWaXNpYmxlICYmIHJlY29yZFN0YXJ0ZWQpIHtcbiAgICAgIGlmICghcmVjb3JkUGF1c2VkKSB7XG4gICAgICAgIHNob3dBbGVydD8uKHtcbiAgICAgICAgICBtZXNzYWdlOiAnWW91IGNhbiBvbmx5IHJlLWNvbmZpZ3VyZSByZWNvcmRpbmcgYWZ0ZXIgcGF1c2luZyBpdCcsXG4gICAgICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhaXNSZWNvcmRpbmdNb2RhbFZpc2libGUgJiZcbiAgICAgICFyZWNvcmRpbmdBdWRpb1N1cHBvcnQgJiZcbiAgICAgICFyZWNvcmRpbmdWaWRlb1N1cHBvcnQgJiZcbiAgICAgICFsb2NhbFVJTW9kZVxuICAgICkge1xuICAgICAgc2hvd0FsZXJ0Py4oe1xuICAgICAgICBtZXNzYWdlOiAnWW91IGFyZSBub3QgYWxsb3dlZCB0byByZWNvcmQnLFxuICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgcmVjb3JkaW5nIG1vZGFsXG4gICAgdXBkYXRlSXNSZWNvcmRpbmdNb2RhbFZpc2libGUoIWlzUmVjb3JkaW5nTW9kYWxWaXNpYmxlKTtcbiAgfVxufVxuIl19
@@ -1,67 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- /**
4
- * Controls the pause and resume functionality of a recording timer.
5
- *
6
- * @param {RecordPauseTimerOptions} options - The options for controlling the timer.
7
- * @param {boolean} [options.stop=false] - Indicates whether to stop the timer.
8
- * @param {boolean} options.isTimerRunning - Indicates if the timer is currently running.
9
- * @param {boolean} options.canPauseResume - Indicates if the timer can be paused or resumed.
10
- * @param {Function} [options.showAlert] - Optional function to show an alert message.
11
- * @returns {boolean} - Returns true if the timer can be paused or resumed, otherwise false.
12
- *
13
- * @throws Will show an alert message if:
14
- * - The timer cannot be stopped, paused, or resumed due to not meeting the required time condition.
15
- *
16
- * @example
17
- * ```typescript
18
- * const options: RecordPauseTimerOptions = {
19
- * stop: false,
20
- * isTimerRunning: true,
21
- * canPauseResume: true,
22
- * showAlert: (alert) => { },
23
- * };
24
- * const canPause = recordPauseTimer(options);
25
- * if (canPause) {
26
- * // proceed with pausing or resuming the recording
27
- * }
28
- * ```
29
- */
30
- export class RecordPauseTimer {
31
- /**
32
- * Controls the pause and resume functionality of a recording timer.
33
- *
34
- * @param {Object} options - The options for controlling the timer.
35
- * @param {boolean} [options.stop=false] - Indicates whether to stop the timer.
36
- * @param {Object} options.parameters - The parameters for the timer control.
37
- * @param {boolean} options.parameters.isTimerRunning - Indicates if the timer is currently running.
38
- * @param {boolean} options.parameters.canPauseResume - Indicates if the timer can be paused or resumed.
39
- * @param {Function} [options.parameters.showAlert] - Optional function to show an alert message.
40
- * @returns {boolean} - Returns true if the timer can be paused or resumed, otherwise false.
41
- */
42
- recordPauseTimer = ({ stop = false, isTimerRunning, canPauseResume, showAlert, }) => {
43
- // Ensure the timer is running and pause/resume actions are allowed
44
- if (isTimerRunning && canPauseResume) {
45
- return true;
46
- }
47
- else {
48
- const message = stop
49
- ? 'Can only stop after 15 seconds of starting or pausing or resuming recording'
50
- : 'Can only pause or resume after 15 seconds of starting or pausing or resuming recording';
51
- showAlert?.({
52
- message,
53
- type: 'danger',
54
- });
55
- return false;
56
- }
57
- };
58
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: RecordPauseTimer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
59
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: RecordPauseTimer, providedIn: 'root' });
60
- }
61
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: RecordPauseTimer, decorators: [{
62
- type: Injectable,
63
- args: [{
64
- providedIn: 'root',
65
- }]
66
- }] });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXBhdXNlLXRpbWVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYXNmdS1hbmd1bGFyL3NyYy9saWIvbWV0aG9kcy9yZWNvcmRpbmctbWV0aG9kcy9yZWNvcmQtcGF1c2UtdGltZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVkzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFNSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCOzs7Ozs7Ozs7O09BVUc7SUFFSCxnQkFBZ0IsR0FBRyxDQUFDLEVBQ2xCLElBQUksR0FBRyxLQUFLLEVBQ1osY0FBYyxFQUNkLGNBQWMsRUFDZCxTQUFTLEdBQ2UsRUFBVyxFQUFFO1FBQ3JDLG1FQUFtRTtRQUNuRSxJQUFJLGNBQWMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSTtnQkFDbEIsQ0FBQyxDQUFDLDZFQUE2RTtnQkFDL0UsQ0FBQyxDQUFDLHdGQUF3RixDQUFDO1lBQzdGLFNBQVMsRUFBRSxDQUFDO2dCQUNWLE9BQU87Z0JBQ1AsSUFBSSxFQUFFLFFBQVE7YUFDZixDQUFDLENBQUM7WUFDSCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDLENBQUM7dUdBaENTLGdCQUFnQjsyR0FBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNob3dBbGVydCB9IGZyb20gJy4uLy4uL0B0eXBlcy90eXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZFBhdXNlVGltZXJPcHRpb25zIHtcbiAgc3RvcD86IGJvb2xlYW47XG4gIGlzVGltZXJSdW5uaW5nOiBib29sZWFuO1xuICBjYW5QYXVzZVJlc3VtZTogYm9vbGVhbjtcbiAgc2hvd0FsZXJ0PzogU2hvd0FsZXJ0O1xufVxuXG4vLyBleHBvcnQgdGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIGZ1bmN0aW9uXG5leHBvcnQgdHlwZSBSZWNvcmRQYXVzZVRpbWVyVHlwZSA9IChvcHRpb25zOiBSZWNvcmRQYXVzZVRpbWVyT3B0aW9ucykgPT4gYm9vbGVhbjtcblxuLyoqXG4gKiBDb250cm9scyB0aGUgcGF1c2UgYW5kIHJlc3VtZSBmdW5jdGlvbmFsaXR5IG9mIGEgcmVjb3JkaW5nIHRpbWVyLlxuICpcbiAqIEBwYXJhbSB7UmVjb3JkUGF1c2VUaW1lck9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY29udHJvbGxpbmcgdGhlIHRpbWVyLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5zdG9wPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIHN0b3AgdGhlIHRpbWVyLlxuICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmlzVGltZXJSdW5uaW5nIC0gSW5kaWNhdGVzIGlmIHRoZSB0aW1lciBpcyBjdXJyZW50bHkgcnVubmluZy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5jYW5QYXVzZVJlc3VtZSAtIEluZGljYXRlcyBpZiB0aGUgdGltZXIgY2FuIGJlIHBhdXNlZCBvciByZXN1bWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuc2hvd0FsZXJ0XSAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIHNob3cgYW4gYWxlcnQgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGltZXIgY2FuIGJlIHBhdXNlZCBvciByZXN1bWVkLCBvdGhlcndpc2UgZmFsc2UuXG4gKlxuICogQHRocm93cyBXaWxsIHNob3cgYW4gYWxlcnQgbWVzc2FnZSBpZjpcbiAqIC0gVGhlIHRpbWVyIGNhbm5vdCBiZSBzdG9wcGVkLCBwYXVzZWQsIG9yIHJlc3VtZWQgZHVlIHRvIG5vdCBtZWV0aW5nIHRoZSByZXF1aXJlZCB0aW1lIGNvbmRpdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgb3B0aW9uczogUmVjb3JkUGF1c2VUaW1lck9wdGlvbnMgPSB7XG4gKiAgIHN0b3A6IGZhbHNlLFxuICogICBpc1RpbWVyUnVubmluZzogdHJ1ZSxcbiAqICAgY2FuUGF1c2VSZXN1bWU6IHRydWUsXG4gKiAgIHNob3dBbGVydDogKGFsZXJ0KSA9PiB7ICB9LFxuICogfTtcbiAqIGNvbnN0IGNhblBhdXNlID0gcmVjb3JkUGF1c2VUaW1lcihvcHRpb25zKTtcbiAqIGlmIChjYW5QYXVzZSkge1xuICogICAvLyBwcm9jZWVkIHdpdGggcGF1c2luZyBvciByZXN1bWluZyB0aGUgcmVjb3JkaW5nXG4gKiB9XG4gKiBgYGBcbiAqL1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZWNvcmRQYXVzZVRpbWVyIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSBwYXVzZSBhbmQgcmVzdW1lIGZ1bmN0aW9uYWxpdHkgb2YgYSByZWNvcmRpbmcgdGltZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHRoZSB0aW1lci5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5zdG9wPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIHN0b3AgdGhlIHRpbWVyLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy5wYXJhbWV0ZXJzIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB0aW1lciBjb250cm9sLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMucGFyYW1ldGVycy5pc1RpbWVyUnVubmluZyAtIEluZGljYXRlcyBpZiB0aGUgdGltZXIgaXMgY3VycmVudGx5IHJ1bm5pbmcuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5wYXJhbWV0ZXJzLmNhblBhdXNlUmVzdW1lIC0gSW5kaWNhdGVzIGlmIHRoZSB0aW1lciBjYW4gYmUgcGF1c2VkIG9yIHJlc3VtZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnBhcmFtZXRlcnMuc2hvd0FsZXJ0XSAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIHNob3cgYW4gYWxlcnQgbWVzc2FnZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gUmV0dXJucyB0cnVlIGlmIHRoZSB0aW1lciBjYW4gYmUgcGF1c2VkIG9yIHJlc3VtZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICovXG5cbiAgcmVjb3JkUGF1c2VUaW1lciA9ICh7XG4gICAgc3RvcCA9IGZhbHNlLFxuICAgIGlzVGltZXJSdW5uaW5nLFxuICAgIGNhblBhdXNlUmVzdW1lLFxuICAgIHNob3dBbGVydCxcbiAgfTogUmVjb3JkUGF1c2VUaW1lck9wdGlvbnMpOiBib29sZWFuID0+IHtcbiAgICAvLyBFbnN1cmUgdGhlIHRpbWVyIGlzIHJ1bm5pbmcgYW5kIHBhdXNlL3Jlc3VtZSBhY3Rpb25zIGFyZSBhbGxvd2VkXG4gICAgaWYgKGlzVGltZXJSdW5uaW5nICYmIGNhblBhdXNlUmVzdW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHN0b3BcbiAgICAgICAgPyAnQ2FuIG9ubHkgc3RvcCBhZnRlciAxNSBzZWNvbmRzIG9mIHN0YXJ0aW5nIG9yIHBhdXNpbmcgb3IgcmVzdW1pbmcgcmVjb3JkaW5nJ1xuICAgICAgICA6ICdDYW4gb25seSBwYXVzZSBvciByZXN1bWUgYWZ0ZXIgMTUgc2Vjb25kcyBvZiBzdGFydGluZyBvciBwYXVzaW5nIG9yIHJlc3VtaW5nIHJlY29yZGluZyc7XG4gICAgICBzaG93QWxlcnQ/Lih7XG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xufVxuIl19