mediasfu-angular 1.0.2 → 2.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.
- package/README.md +678 -578
- package/dist/README.md +677 -578
- package/dist/fesm2022/mediasfu-angular.mjs +5551 -2944
- package/dist/fesm2022/mediasfu-angular.mjs.map +1 -1
- package/dist/lib/@types/types.d.ts +22 -1
- package/dist/lib/components/breakout-components/breakout-rooms-modal.component.d.ts +1 -0
- package/dist/lib/components/mediasfu-components/mediasfu-broadcast.component.d.ts +153 -61
- package/dist/lib/components/mediasfu-components/mediasfu-chat.component.d.ts +154 -66
- package/dist/lib/components/mediasfu-components/mediasfu-conference.component.d.ts +190 -76
- package/dist/lib/components/mediasfu-components/mediasfu-generic.component.d.ts +184 -70
- package/dist/lib/components/mediasfu-components/mediasfu-webinar.component.d.ts +192 -78
- package/dist/lib/components/menu-components/menu-modal/menu-modal.component.d.ts +6 -1
- package/dist/lib/components/menu-components/share-buttons-component/share-buttons-component.component.d.ts +5 -2
- package/dist/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.d.ts +4 -2
- package/dist/lib/components/misc-components/pre-join-page/pre-join-page.component.d.ts +71 -66
- package/dist/lib/components/misc-components/share-event-modal/share-event-modal.component.d.ts +5 -1
- package/dist/lib/consumers/connect-local-ips.service.d.ts +81 -0
- package/dist/lib/consumers/connect-send-transport-audio.service.d.ts +43 -11
- package/dist/lib/consumers/connect-send-transport-screen.service.d.ts +87 -46
- package/dist/lib/consumers/connect-send-transport-video.service.d.ts +89 -43
- package/dist/lib/consumers/connect-send-transport.service.d.ts +5 -1
- package/dist/lib/consumers/create-send-transport.service.d.ts +130 -40
- package/dist/lib/consumers/disconnect-send-transport-audio.service.d.ts +77 -40
- package/dist/lib/consumers/disconnect-send-transport-screen.service.d.ts +48 -14
- package/dist/lib/consumers/disconnect-send-transport-video.service.d.ts +81 -44
- package/dist/lib/consumers/get-piped-producers-alt.service.d.ts +5 -1
- package/dist/lib/consumers/receive-all-piped-transports.service.d.ts +5 -1
- package/dist/lib/consumers/resume-send-transport-audio.service.d.ts +54 -21
- package/dist/lib/consumers/stream-success-audio-switch.service.d.ts +124 -40
- package/dist/lib/consumers/trigger.service.d.ts +3 -0
- package/dist/lib/methods/exit-methods/confirm-exit.service.d.ts +5 -1
- package/dist/lib/methods/recording-methods/start-recording.service.d.ts +3 -0
- package/dist/lib/methods/recording-methods/stop-recording.service.d.ts +4 -1
- package/dist/lib/methods/recording-methods/update-recording.service.d.ts +3 -0
- package/dist/lib/methods/stream-methods/click-audio.service.d.ts +3 -0
- package/dist/lib/methods/utils/check-limits-and-make-request.service.d.ts +23 -0
- package/dist/lib/methods/utils/create-response-join-room.util.d.ts +33 -0
- package/dist/lib/methods/utils/create-room-on-media-sfu.service.d.ts +25 -0
- package/dist/lib/methods/utils/initial-values.util.d.ts +6 -0
- package/dist/lib/methods/utils/join-room-on-media-sfu.service.d.ts +52 -0
- package/dist/lib/methods/whiteboard-methods/capture-canvas-stream.service.d.ts +37 -20
- package/dist/lib/producers/producer-emits/join-local-room.service.d.ts +125 -0
- package/dist/lib/producers/socket-receive-methods/all-members-rest.service.d.ts +7 -2
- package/dist/lib/producers/socket-receive-methods/all-members.service.d.ts +7 -2
- package/dist/lib/producers/socket-receive-methods/disconnect-user-self.service.d.ts +5 -1
- package/dist/lib/sockets/socket-manager.service.d.ts +90 -0
- package/dist/public-api.d.ts +11 -1
- package/package.json +17 -20
- package/dist/esm2022/lib/@types/types.mjs +0 -2
- package/dist/esm2022/lib/components/background-components/background-modal/background-modal.component.mjs +0 -799
- package/dist/esm2022/lib/components/breakout-components/breakout-rooms-modal.component.mjs +0 -366
- package/dist/esm2022/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.mjs +0 -143
- package/dist/esm2022/lib/components/breakout-components/room-list/room-list.component.mjs +0 -40
- package/dist/esm2022/lib/components/co-host-components/co-host-modal/co-host-modal.component.mjs +0 -245
- package/dist/esm2022/lib/components/display-components/alert-component/alert.component.component.mjs +0 -79
- package/dist/esm2022/lib/components/display-components/audio-card/audio-card.component.mjs +0 -356
- package/dist/esm2022/lib/components/display-components/audio-grid/audio-grid.component.mjs +0 -80
- package/dist/esm2022/lib/components/display-components/card-video-display/card-video-display.component.mjs +0 -129
- package/dist/esm2022/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.mjs +0 -138
- package/dist/esm2022/lib/components/display-components/control-buttons-component/control-buttons-component.component.mjs +0 -231
- package/dist/esm2022/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.mjs +0 -282
- package/dist/esm2022/lib/components/display-components/control-widgets/menu-participants-widget.component.mjs +0 -82
- package/dist/esm2022/lib/components/display-components/control-widgets/menu-record-widget.component.mjs +0 -65
- package/dist/esm2022/lib/components/display-components/control-widgets/menu-widget.component.mjs +0 -137
- package/dist/esm2022/lib/components/display-components/control-widgets/message-widget.component.mjs +0 -137
- package/dist/esm2022/lib/components/display-components/control-widgets/record-timer-widget.component.mjs +0 -51
- package/dist/esm2022/lib/components/display-components/control-widgets/screenshare-widget.component.mjs +0 -101
- package/dist/esm2022/lib/components/display-components/flexible-grid/flexible-grid.component.mjs +0 -151
- package/dist/esm2022/lib/components/display-components/flexible-video/flexible-video.component.mjs +0 -250
- package/dist/esm2022/lib/components/display-components/loading-modal/loading-modal.component.mjs +0 -102
- package/dist/esm2022/lib/components/display-components/main-aspect-component/main-aspect-component.component.mjs +0 -140
- package/dist/esm2022/lib/components/display-components/main-container-component/main-container-component.component.mjs +0 -131
- package/dist/esm2022/lib/components/display-components/main-grid-component/main-grid-component.component.mjs +0 -120
- package/dist/esm2022/lib/components/display-components/main-screen-component/main-screen-component.component.mjs +0 -201
- package/dist/esm2022/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.mjs +0 -115
- package/dist/esm2022/lib/components/display-components/mini-audio/mini-audio.component.mjs +0 -319
- package/dist/esm2022/lib/components/display-components/mini-card/mini-card.component.mjs +0 -161
- package/dist/esm2022/lib/components/display-components/mini-card-audio/mini-card-audio.component.mjs +0 -230
- package/dist/esm2022/lib/components/display-components/other-grid-component/other-grid-component.component.mjs +0 -126
- package/dist/esm2022/lib/components/display-components/pagination/pagination.component.mjs +0 -334
- package/dist/esm2022/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.mjs +0 -112
- package/dist/esm2022/lib/components/display-components/video-card/video-card.component.mjs +0 -392
- package/dist/esm2022/lib/components/display-settings-components/display-settings-modal.component.mjs +0 -106
- package/dist/esm2022/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.mjs +0 -199
- package/dist/esm2022/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.mjs +0 -132
- package/dist/esm2022/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.mjs +0 -220
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-broadcast.component.mjs +0 -4238
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-chat.component.mjs +0 -3754
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-conference.component.mjs +0 -5071
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-generic.component.mjs +0 -5380
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-webinar.component.mjs +0 -5068
- package/dist/esm2022/lib/components/menu-components/custom-buttons/custom-buttons.component.mjs +0 -83
- package/dist/esm2022/lib/components/menu-components/meeting-id-component/meeting-id-component.component.mjs +0 -27
- package/dist/esm2022/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.mjs +0 -27
- package/dist/esm2022/lib/components/menu-components/menu-modal/menu-modal.component.mjs +0 -125
- package/dist/esm2022/lib/components/menu-components/share-buttons-component/share-buttons-component.component.mjs +0 -106
- package/dist/esm2022/lib/components/message-components/message-panel/message-panel.component.mjs +0 -228
- package/dist/esm2022/lib/components/message-components/messages-modal/messages-modal.component.mjs +0 -277
- package/dist/esm2022/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.mjs +0 -130
- package/dist/esm2022/lib/components/misc-components/pre-join-page/pre-join-page.component.mjs +0 -343
- package/dist/esm2022/lib/components/misc-components/share-event-modal/share-event-modal.component.mjs +0 -127
- package/dist/esm2022/lib/components/misc-components/welcome-page/welcome-page.component.mjs +0 -241
- package/dist/esm2022/lib/components/participants-components/participant-list/participant-list.component.mjs +0 -82
- package/dist/esm2022/lib/components/participants-components/participant-list-item/participant-list-item.component.mjs +0 -139
- package/dist/esm2022/lib/components/participants-components/participant-list-others/participant-list-others.component.mjs +0 -40
- package/dist/esm2022/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.mjs +0 -60
- package/dist/esm2022/lib/components/participants-components/participants-modal/participants-modal.component.mjs +0 -124
- package/dist/esm2022/lib/components/polls-components/poll-modal/poll-modal.component.mjs +0 -201
- package/dist/esm2022/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.mjs +0 -92
- package/dist/esm2022/lib/components/recording-components/recording-modal/recording-modal.component.mjs +0 -133
- package/dist/esm2022/lib/components/recording-components/standard-panel-component/standard-panel-component.component.mjs +0 -90
- package/dist/esm2022/lib/components/requests-components/render-request-component/render-request-component.component.mjs +0 -81
- package/dist/esm2022/lib/components/requests-components/requests-modal/requests-modal.component.mjs +0 -147
- package/dist/esm2022/lib/components/screenboard-components/screenboard/screenboard.component.mjs +0 -627
- package/dist/esm2022/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.mjs +0 -391
- package/dist/esm2022/lib/components/waiting-components/waiting-room-modal.component.mjs +0 -201
- package/dist/esm2022/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.mjs +0 -286
- package/dist/esm2022/lib/components/whiteboard-components/whiteboard/whiteboard.component.mjs +0 -1833
- package/dist/esm2022/lib/consumers/add-videos-grid.service.mjs +0 -345
- package/dist/esm2022/lib/consumers/auto-adjust.service.mjs +0 -109
- package/dist/esm2022/lib/consumers/calculate-rows-and-columns.service.mjs +0 -60
- package/dist/esm2022/lib/consumers/change-vids.service.mjs +0 -551
- package/dist/esm2022/lib/consumers/check-grid.service.mjs +0 -93
- package/dist/esm2022/lib/consumers/check-permission.service.mjs +0 -105
- package/dist/esm2022/lib/consumers/check-screen-share.service.mjs +0 -106
- package/dist/esm2022/lib/consumers/close-and-resize.service.mjs +0 -331
- package/dist/esm2022/lib/consumers/compare-active-names.service.mjs +0 -106
- package/dist/esm2022/lib/consumers/compare-screen-states.service.mjs +0 -98
- package/dist/esm2022/lib/consumers/connect-ips.service.mjs +0 -154
- package/dist/esm2022/lib/consumers/connect-recv-transport.service.mjs +0 -146
- package/dist/esm2022/lib/consumers/connect-send-transport-audio.service.mjs +0 -84
- package/dist/esm2022/lib/consumers/connect-send-transport-screen.service.mjs +0 -102
- package/dist/esm2022/lib/consumers/connect-send-transport-video.service.mjs +0 -99
- package/dist/esm2022/lib/consumers/connect-send-transport.service.mjs +0 -140
- package/dist/esm2022/lib/consumers/consumer-resume.service.mjs +0 -368
- package/dist/esm2022/lib/consumers/control-media.service.mjs +0 -113
- package/dist/esm2022/lib/consumers/create-send-transport.service.mjs +0 -172
- package/dist/esm2022/lib/consumers/disconnect-send-transport-audio.service.mjs +0 -108
- package/dist/esm2022/lib/consumers/disconnect-send-transport-screen.service.mjs +0 -84
- package/dist/esm2022/lib/consumers/disconnect-send-transport-video.service.mjs +0 -101
- package/dist/esm2022/lib/consumers/disp-streams.service.mjs +0 -513
- package/dist/esm2022/lib/consumers/generate-page-content.service.mjs +0 -106
- package/dist/esm2022/lib/consumers/get-estimate.service.mjs +0 -120
- package/dist/esm2022/lib/consumers/get-piped-producers-alt.service.mjs +0 -82
- package/dist/esm2022/lib/consumers/get-producers-piped.service.mjs +0 -79
- package/dist/esm2022/lib/consumers/get-videos.service.mjs +0 -91
- package/dist/esm2022/lib/consumers/mix-streams.service.mjs +0 -95
- package/dist/esm2022/lib/consumers/on-screen-changes.service.mjs +0 -103
- package/dist/esm2022/lib/consumers/prepopulate-user-media.service.mjs +0 -541
- package/dist/esm2022/lib/consumers/process-consumer-transports-audio.service.mjs +0 -101
- package/dist/esm2022/lib/consumers/process-consumer-transports.service.mjs +0 -128
- package/dist/esm2022/lib/consumers/re-port.service.mjs +0 -114
- package/dist/esm2022/lib/consumers/re-update-inter.service.mjs +0 -239
- package/dist/esm2022/lib/consumers/readjust.service.mjs +0 -173
- package/dist/esm2022/lib/consumers/receive-all-piped-transports.service.mjs +0 -87
- package/dist/esm2022/lib/consumers/receive-room-messages.service.mjs +0 -69
- package/dist/esm2022/lib/consumers/reorder-streams.service.mjs +0 -239
- package/dist/esm2022/lib/consumers/request-screen-share.service.mjs +0 -101
- package/dist/esm2022/lib/consumers/resume-pause-audio-streams.service.mjs +0 -150
- package/dist/esm2022/lib/consumers/resume-pause-streams.service.mjs +0 -103
- package/dist/esm2022/lib/consumers/resume-send-transport-audio.service.mjs +0 -91
- package/dist/esm2022/lib/consumers/signal-new-consumer-transport.service.mjs +0 -136
- package/dist/esm2022/lib/consumers/socket-receive-methods/join-consume-room.service.mjs +0 -96
- package/dist/esm2022/lib/consumers/socket-receive-methods/new-pipe-producer.service.mjs +0 -100
- package/dist/esm2022/lib/consumers/socket-receive-methods/producer-closed.service.mjs +0 -78
- package/dist/esm2022/lib/consumers/start-share-screen.service.mjs +0 -120
- package/dist/esm2022/lib/consumers/stop-share-screen.service.mjs +0 -175
- package/dist/esm2022/lib/consumers/stream-success-audio-switch.service.mjs +0 -185
- package/dist/esm2022/lib/consumers/stream-success-audio.service.mjs +0 -210
- package/dist/esm2022/lib/consumers/stream-success-screen.service.mjs +0 -193
- package/dist/esm2022/lib/consumers/stream-success-video.service.mjs +0 -260
- package/dist/esm2022/lib/consumers/switch-user-audio.service.mjs +0 -120
- package/dist/esm2022/lib/consumers/switch-user-video-alt.service.mjs +0 -260
- package/dist/esm2022/lib/consumers/switch-user-video.service.mjs +0 -172
- package/dist/esm2022/lib/consumers/trigger.service.mjs +0 -210
- package/dist/esm2022/lib/consumers/update-mini-cards-grid.service.mjs +0 -135
- package/dist/esm2022/lib/consumers/update-participant-audio-decibels.service.mjs +0 -84
- package/dist/esm2022/lib/methods/background-methods/launch-background.service.mjs +0 -48
- package/dist/esm2022/lib/methods/breakout-room-methods/breakout-room-updated.service.mjs +0 -183
- package/dist/esm2022/lib/methods/breakout-room-methods/launch-breakout-rooms.service.mjs +0 -46
- package/dist/esm2022/lib/methods/co-host-methods/launch-co-host.service.mjs +0 -46
- package/dist/esm2022/lib/methods/co-host-methods/modify-co-host-settings.service.mjs +0 -104
- package/dist/esm2022/lib/methods/display-settings-methods/launch-display-settings.service.mjs +0 -46
- package/dist/esm2022/lib/methods/display-settings-methods/modify-display-settings.service.mjs +0 -194
- package/dist/esm2022/lib/methods/exit-methods/confirm-exit.service.mjs +0 -52
- package/dist/esm2022/lib/methods/exit-methods/launch-confirm-exit.service.mjs +0 -42
- package/dist/esm2022/lib/methods/media-settings-methods/launch-media-settings.service.mjs +0 -85
- package/dist/esm2022/lib/methods/menu-methods/launch-menu-modal.service.mjs +0 -44
- package/dist/esm2022/lib/methods/message-methods/launch-messages.service.mjs +0 -45
- package/dist/esm2022/lib/methods/message-methods/send-message.service.mjs +0 -143
- package/dist/esm2022/lib/methods/participants-methods/launch-participants.service.mjs +0 -47
- package/dist/esm2022/lib/methods/participants-methods/message-participants.service.mjs +0 -98
- package/dist/esm2022/lib/methods/participants-methods/mute-participants.service.mjs +0 -96
- package/dist/esm2022/lib/methods/participants-methods/remove-participants.service.mjs +0 -107
- package/dist/esm2022/lib/methods/polls-methods/handle-create-poll.service.mjs +0 -75
- package/dist/esm2022/lib/methods/polls-methods/handle-end-poll.service.mjs +0 -72
- package/dist/esm2022/lib/methods/polls-methods/handle-vote-poll.service.mjs +0 -83
- package/dist/esm2022/lib/methods/polls-methods/launch-poll.service.mjs +0 -43
- package/dist/esm2022/lib/methods/polls-methods/poll-updated.service.mjs +0 -95
- package/dist/esm2022/lib/methods/recording-methods/check-pause-state.service.mjs +0 -69
- package/dist/esm2022/lib/methods/recording-methods/check-resume-state.service.mjs +0 -56
- package/dist/esm2022/lib/methods/recording-methods/confirm-recording.service.mjs +0 -278
- package/dist/esm2022/lib/methods/recording-methods/launch-recording.service.mjs +0 -125
- package/dist/esm2022/lib/methods/recording-methods/record-pause-timer.service.mjs +0 -67
- package/dist/esm2022/lib/methods/recording-methods/record-resume-timer.service.mjs +0 -130
- package/dist/esm2022/lib/methods/recording-methods/record-start-timer.service.mjs +0 -134
- package/dist/esm2022/lib/methods/recording-methods/record-update-timer.service.mjs +0 -80
- package/dist/esm2022/lib/methods/recording-methods/start-recording.service.mjs +0 -197
- package/dist/esm2022/lib/methods/recording-methods/stop-recording.service.mjs +0 -112
- package/dist/esm2022/lib/methods/recording-methods/update-recording.service.mjs +0 -272
- package/dist/esm2022/lib/methods/requests-methods/launch-requests.service.mjs +0 -51
- package/dist/esm2022/lib/methods/requests-methods/respond-to-requests.service.mjs +0 -84
- package/dist/esm2022/lib/methods/settings-methods/launch-settings.service.mjs +0 -51
- package/dist/esm2022/lib/methods/settings-methods/modify-settings.service.mjs +0 -109
- package/dist/esm2022/lib/methods/stream-methods/click-audio.service.mjs +0 -275
- package/dist/esm2022/lib/methods/stream-methods/click-chat.service.mjs +0 -75
- package/dist/esm2022/lib/methods/stream-methods/click-screen-share.service.mjs +0 -178
- package/dist/esm2022/lib/methods/stream-methods/click-video.service.mjs +0 -271
- package/dist/esm2022/lib/methods/stream-methods/switch-audio.service.mjs +0 -80
- package/dist/esm2022/lib/methods/stream-methods/switch-video-alt.service.mjs +0 -116
- package/dist/esm2022/lib/methods/stream-methods/switch-video.service.mjs +0 -132
- package/dist/esm2022/lib/methods/utils/format-number.service.mjs +0 -57
- package/dist/esm2022/lib/methods/utils/generate-random-messages.service.mjs +0 -120
- package/dist/esm2022/lib/methods/utils/generate-random-participants.service.mjs +0 -126
- package/dist/esm2022/lib/methods/utils/generate-random-polls.service.mjs +0 -78
- package/dist/esm2022/lib/methods/utils/generate-random-request-list.service.mjs +0 -90
- package/dist/esm2022/lib/methods/utils/generate-random-waiting-room-list.service.mjs +0 -59
- package/dist/esm2022/lib/methods/utils/get-modal-position.util.mjs +0 -32
- package/dist/esm2022/lib/methods/utils/get-overlay-position.util.mjs +0 -31
- package/dist/esm2022/lib/methods/utils/initial-values.util.mjs +0 -379
- package/dist/esm2022/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.mjs +0 -96
- package/dist/esm2022/lib/methods/utils/mini-audio-player/mini-audio-player.component.mjs +0 -315
- package/dist/esm2022/lib/methods/utils/producer/a-params.service.mjs +0 -58
- package/dist/esm2022/lib/methods/utils/producer/h-params.service.mjs +0 -87
- package/dist/esm2022/lib/methods/utils/producer/screen-params.service.mjs +0 -61
- package/dist/esm2022/lib/methods/utils/producer/v-params.service.mjs +0 -87
- package/dist/esm2022/lib/methods/utils/producer/video-capture-constraints.service.mjs +0 -84
- package/dist/esm2022/lib/methods/utils/sleep.util.mjs +0 -17
- package/dist/esm2022/lib/methods/utils/sound-player.service.mjs +0 -63
- package/dist/esm2022/lib/methods/utils/validate-alphanumeric.service.mjs +0 -49
- package/dist/esm2022/lib/methods/waiting-methods/launch-waiting.service.mjs +0 -41
- package/dist/esm2022/lib/methods/waiting-methods/respond-to-waiting.service.mjs +0 -69
- package/dist/esm2022/lib/methods/whiteboard-methods/capture-canvas-stream.service.mjs +0 -98
- package/dist/esm2022/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.mjs +0 -44
- package/dist/esm2022/lib/producer-client/producer-client-emits/create-device-client.service.mjs +0 -74
- package/dist/esm2022/lib/producer-client/producer-client-emits/join-room-client.service.mjs +0 -96
- package/dist/esm2022/lib/producer-client/producer-client-emits/update-room-parameters-client.service.mjs +0 -276
- package/dist/esm2022/lib/producers/producer-emits/join-con-room.service.mjs +0 -152
- package/dist/esm2022/lib/producers/producer-emits/join-room.service.mjs +0 -152
- package/dist/esm2022/lib/producers/socket-receive-methods/all-members-rest.service.mjs +0 -228
- package/dist/esm2022/lib/producers/socket-receive-methods/all-members.service.mjs +0 -218
- package/dist/esm2022/lib/producers/socket-receive-methods/all-waiting-room-members.service.mjs +0 -57
- package/dist/esm2022/lib/producers/socket-receive-methods/ban-participant.service.mjs +0 -76
- package/dist/esm2022/lib/producers/socket-receive-methods/control-media-host.service.mjs +0 -183
- package/dist/esm2022/lib/producers/socket-receive-methods/disconnect-user-self.service.mjs +0 -50
- package/dist/esm2022/lib/producers/socket-receive-methods/disconnect.service.mjs +0 -64
- package/dist/esm2022/lib/producers/socket-receive-methods/get-domains.service.mjs +0 -78
- package/dist/esm2022/lib/producers/socket-receive-methods/host-request-response.service.mjs +0 -150
- package/dist/esm2022/lib/producers/socket-receive-methods/meeting-ended.service.mjs +0 -73
- package/dist/esm2022/lib/producers/socket-receive-methods/meeting-still-there.service.mjs +0 -47
- package/dist/esm2022/lib/producers/socket-receive-methods/meeting-time-remaining.service.mjs +0 -63
- package/dist/esm2022/lib/producers/socket-receive-methods/participant-requested.service.mjs +0 -63
- package/dist/esm2022/lib/producers/socket-receive-methods/person-joined.service.mjs +0 -54
- package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-closed.service.mjs +0 -129
- package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-paused.service.mjs +0 -152
- package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-resumed.service.mjs +0 -99
- package/dist/esm2022/lib/producers/socket-receive-methods/re-initiate-recording.service.mjs +0 -67
- package/dist/esm2022/lib/producers/socket-receive-methods/receive-message.service.mjs +0 -134
- package/dist/esm2022/lib/producers/socket-receive-methods/recording-notice.service.mjs +0 -233
- package/dist/esm2022/lib/producers/socket-receive-methods/room-record-params.service.mjs +0 -121
- package/dist/esm2022/lib/producers/socket-receive-methods/screen-producer-id.service.mjs +0 -86
- package/dist/esm2022/lib/producers/socket-receive-methods/start-records.service.mjs +0 -60
- package/dist/esm2022/lib/producers/socket-receive-methods/stopped-recording.service.mjs +0 -62
- package/dist/esm2022/lib/producers/socket-receive-methods/time-left-recording.service.mjs +0 -57
- package/dist/esm2022/lib/producers/socket-receive-methods/update-consuming-domains.service.mjs +0 -105
- package/dist/esm2022/lib/producers/socket-receive-methods/update-media-settings.service.mjs +0 -66
- package/dist/esm2022/lib/producers/socket-receive-methods/updated-co-host.service.mjs +0 -96
- package/dist/esm2022/lib/producers/socket-receive-methods/user-waiting.service.mjs +0 -52
- package/dist/esm2022/lib/sockets/socket-manager.service.mjs +0 -113
- package/dist/esm2022/mediasfu-angular.mjs +0 -5
- package/dist/esm2022/public-api.mjs +0 -187
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
|
4
|
-
import { faTimes } from '@fortawesome/free-solid-svg-icons';
|
|
5
|
-
import { MeetingIdComponent } from '../../menu-components/meeting-id-component/meeting-id-component.component';
|
|
6
|
-
import { MeetingPasscodeComponent } from '../../menu-components/meeting-passcode-component/meeting-passcode-component.component';
|
|
7
|
-
import { ShareButtonsComponent } from '../../menu-components/share-buttons-component/share-buttons-component.component';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/common";
|
|
10
|
-
import * as i2 from "@fortawesome/angular-fontawesome";
|
|
11
|
-
/**
|
|
12
|
-
* Component for displaying a modal to share event details.
|
|
13
|
-
*
|
|
14
|
-
* @component
|
|
15
|
-
* @selector app-share-event-modal
|
|
16
|
-
* @templateUrl ./share-event-modal.component.html
|
|
17
|
-
* @styleUrls ./share-event-modal.component.css
|
|
18
|
-
*
|
|
19
|
-
* @imports CommonModule, FontAwesomeModule, MeetingIdComponent, MeetingPasscodeComponent, ShareButtonsComponent
|
|
20
|
-
*
|
|
21
|
-
* @property {string} backgroundColor - Background color of the modal content.
|
|
22
|
-
* @property {boolean} isShareEventModalVisible - Visibility state of the share event modal.
|
|
23
|
-
* @property {Function} onShareEventClose - Callback function to handle modal close event.
|
|
24
|
-
* @property {string} roomName - Name of the room to be shared.
|
|
25
|
-
* @property {string} adminPasscode - Admin passcode for the room.
|
|
26
|
-
* @property {string} islevel - Level of the event (e.g., admin, user).
|
|
27
|
-
* @property {string} position - Position of the modal on the screen (e.g., topRight, bottomLeft).
|
|
28
|
-
* @property {boolean} shareButtons - Flag to display share buttons in the modal.
|
|
29
|
-
* @property {EventType} eventType - Type of event (e.g., chat, broadcast, webinar).
|
|
30
|
-
*
|
|
31
|
-
* @method handleClose - Closes the share event modal by invoking the onShareEventClose callback.
|
|
32
|
-
*
|
|
33
|
-
* @getter modalContainerStyle - Returns the style object for the modal container.
|
|
34
|
-
* @getter modalContentStyle - Returns the style object for the modal content.
|
|
35
|
-
* @example
|
|
36
|
-
* ```html
|
|
37
|
-
* <app-share-event-modal
|
|
38
|
-
* [backgroundColor]="'rgba(255, 255, 255, 0.25)'"
|
|
39
|
-
* [isShareEventModalVisible]="isModalVisible"
|
|
40
|
-
* [onShareEventClose]="handleModalClose"
|
|
41
|
-
* [roomName]="roomName"
|
|
42
|
-
* [adminPasscode]="adminPasscode"
|
|
43
|
-
* [islevel]="userLevel"
|
|
44
|
-
* [position]="'topRight'"
|
|
45
|
-
* [shareButtons]="true"
|
|
46
|
-
* [eventType]="eventType"
|
|
47
|
-
* ></app-share-event-modal>
|
|
48
|
-
* ```
|
|
49
|
-
*/
|
|
50
|
-
export class ShareEventModal {
|
|
51
|
-
backgroundColor = 'rgba(255, 255, 255, 0.25)';
|
|
52
|
-
isShareEventModalVisible = false;
|
|
53
|
-
onShareEventClose;
|
|
54
|
-
roomName;
|
|
55
|
-
adminPasscode;
|
|
56
|
-
islevel;
|
|
57
|
-
position = 'topRight';
|
|
58
|
-
shareButtons = true;
|
|
59
|
-
eventType;
|
|
60
|
-
faTimes = faTimes;
|
|
61
|
-
handleClose() {
|
|
62
|
-
this.onShareEventClose();
|
|
63
|
-
}
|
|
64
|
-
get modalContainerStyle() {
|
|
65
|
-
return {
|
|
66
|
-
position: 'fixed',
|
|
67
|
-
top: 0,
|
|
68
|
-
left: 0,
|
|
69
|
-
width: '100%',
|
|
70
|
-
height: '100%',
|
|
71
|
-
backgroundColor: 'rgba(0, 0, 0, 0.5)',
|
|
72
|
-
display: this.isShareEventModalVisible ? 'block' : 'none',
|
|
73
|
-
zIndex: 999,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
get modalContentStyle() {
|
|
77
|
-
const screenWidth = window.innerWidth;
|
|
78
|
-
let modalWidth = 0.8 * screenWidth;
|
|
79
|
-
if (modalWidth > 350) {
|
|
80
|
-
modalWidth = 350;
|
|
81
|
-
}
|
|
82
|
-
return {
|
|
83
|
-
position: 'fixed',
|
|
84
|
-
backgroundColor: this.backgroundColor,
|
|
85
|
-
borderRadius: '10px',
|
|
86
|
-
padding: '10px',
|
|
87
|
-
width: `${modalWidth}px`,
|
|
88
|
-
maxHeight: '60%',
|
|
89
|
-
overflowY: 'auto',
|
|
90
|
-
top: this.position.includes('top') ? '10px' : 'auto',
|
|
91
|
-
bottom: this.position.includes('bottom') ? '10px' : 'auto',
|
|
92
|
-
left: this.position.includes('Left') ? '10px' : 'auto',
|
|
93
|
-
right: this.position.includes('Right') ? '10px' : 'auto',
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ShareEventModal, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
97
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: ShareEventModal, isStandalone: true, selector: "app-share-event-modal", inputs: { backgroundColor: "backgroundColor", isShareEventModalVisible: "isShareEventModalVisible", onShareEventClose: "onShareEventClose", roomName: "roomName", adminPasscode: "adminPasscode", islevel: "islevel", position: "position", shareButtons: "shareButtons", eventType: "eventType" }, ngImport: i0, template: "<div [ngStyle]=\"modalContainerStyle\">\r\n <div [ngStyle]=\"modalContentStyle\">\r\n <div style=\"display: flex; flex-direction: row-reverse; margin-bottom: 15px;\">\r\n <div (click)=\"handleClose()\" style=\"padding: 5px;\">\r\n <fa-icon [icon]=\"faTimes\" size=\"xl\" style=\"font-size: 20px; color: black;\"></fa-icon>\r\n </div>\r\n </div>\r\n <hr style=\"height: 1px; background-color: black; margin: 5px 0;\" />\r\n <div style=\"flex: 1;\">\r\n <div style=\"margin-bottom: 10px;\" *ngIf=\"islevel === '2'\">\r\n <app-meeting-passcode-component [meetingPasscode]=\"adminPasscode\"></app-meeting-passcode-component>\r\n </div>\r\n <div style=\"margin-bottom: 10px;\">\r\n <app-meeting-id-component [meetingID]=\"roomName\"></app-meeting-id-component>\r\n </div>\r\n <div *ngIf=\"shareButtons\">\r\n <app-share-buttons-component [meetingID]=\"roomName\" [eventType]=\"eventType\"></app-share-buttons-component>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "component", type: MeetingIdComponent, selector: "app-meeting-id-component", inputs: ["meetingID"] }, { kind: "component", type: MeetingPasscodeComponent, selector: "app-meeting-passcode-component", inputs: ["meetingPasscode"] }, { kind: "component", type: ShareButtonsComponent, selector: "app-share-buttons-component", inputs: ["meetingID", "shareButtons", "eventType"] }] });
|
|
98
|
-
}
|
|
99
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ShareEventModal, decorators: [{
|
|
100
|
-
type: Component,
|
|
101
|
-
args: [{ selector: 'app-share-event-modal', standalone: true, imports: [
|
|
102
|
-
CommonModule,
|
|
103
|
-
FontAwesomeModule,
|
|
104
|
-
MeetingIdComponent,
|
|
105
|
-
MeetingPasscodeComponent,
|
|
106
|
-
ShareButtonsComponent,
|
|
107
|
-
], template: "<div [ngStyle]=\"modalContainerStyle\">\r\n <div [ngStyle]=\"modalContentStyle\">\r\n <div style=\"display: flex; flex-direction: row-reverse; margin-bottom: 15px;\">\r\n <div (click)=\"handleClose()\" style=\"padding: 5px;\">\r\n <fa-icon [icon]=\"faTimes\" size=\"xl\" style=\"font-size: 20px; color: black;\"></fa-icon>\r\n </div>\r\n </div>\r\n <hr style=\"height: 1px; background-color: black; margin: 5px 0;\" />\r\n <div style=\"flex: 1;\">\r\n <div style=\"margin-bottom: 10px;\" *ngIf=\"islevel === '2'\">\r\n <app-meeting-passcode-component [meetingPasscode]=\"adminPasscode\"></app-meeting-passcode-component>\r\n </div>\r\n <div style=\"margin-bottom: 10px;\">\r\n <app-meeting-id-component [meetingID]=\"roomName\"></app-meeting-id-component>\r\n </div>\r\n <div *ngIf=\"shareButtons\">\r\n <app-share-buttons-component [meetingID]=\"roomName\" [eventType]=\"eventType\"></app-share-buttons-component>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
|
|
108
|
-
}], propDecorators: { backgroundColor: [{
|
|
109
|
-
type: Input
|
|
110
|
-
}], isShareEventModalVisible: [{
|
|
111
|
-
type: Input
|
|
112
|
-
}], onShareEventClose: [{
|
|
113
|
-
type: Input
|
|
114
|
-
}], roomName: [{
|
|
115
|
-
type: Input
|
|
116
|
-
}], adminPasscode: [{
|
|
117
|
-
type: Input
|
|
118
|
-
}], islevel: [{
|
|
119
|
-
type: Input
|
|
120
|
-
}], position: [{
|
|
121
|
-
type: Input
|
|
122
|
-
}], shareButtons: [{
|
|
123
|
-
type: Input
|
|
124
|
-
}], eventType: [{
|
|
125
|
-
type: Input
|
|
126
|
-
}] } });
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmUtZXZlbnQtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWFzZnUtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvbWlzYy1jb21wb25lbnRzL3NoYXJlLWV2ZW50LW1vZGFsL3NoYXJlLWV2ZW50LW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL21pc2MtY29tcG9uZW50cy9zaGFyZS1ldmVudC1tb2RhbC9zaGFyZS1ldmVudC1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVGQUF1RixDQUFDO0FBQ2pJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlGQUFpRixDQUFDOzs7O0FBaUJ4SDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ0c7QUFjSCxNQUFNLE9BQU8sZUFBZTtJQUNqQixlQUFlLEdBQUcsMkJBQTJCLENBQUM7SUFDOUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLGlCQUFpQixDQUFjO0lBQy9CLFFBQVEsQ0FBVTtJQUNsQixhQUFhLENBQVU7SUFDdkIsT0FBTyxDQUFVO0lBQ2pCLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDdEIsWUFBWSxHQUFHLElBQUksQ0FBQztJQUNwQixTQUFTLENBQWE7SUFFL0IsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUVsQixXQUFXO1FBQ1QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU87WUFDTCxRQUFRLEVBQUUsT0FBTztZQUNqQixHQUFHLEVBQUUsQ0FBQztZQUNOLElBQUksRUFBRSxDQUFDO1lBQ1AsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLGVBQWUsRUFBRSxvQkFBb0I7WUFDckMsT0FBTyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQ3pELE1BQU0sRUFBRSxHQUFHO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3RDLElBQUksVUFBVSxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUM7UUFDbkMsSUFBSSxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDckIsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUNuQixDQUFDO1FBRUQsT0FBTztZQUNMLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxZQUFZLEVBQUUsTUFBTTtZQUNwQixPQUFPLEVBQUUsTUFBTTtZQUNmLEtBQUssRUFBRSxHQUFHLFVBQVUsSUFBSTtZQUN4QixTQUFTLEVBQUUsS0FBSztZQUNoQixTQUFTLEVBQUUsTUFBTTtZQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNwRCxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUMxRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUN0RCxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUN6RCxDQUFDO0lBQ0osQ0FBQzt1R0FsRFUsZUFBZTsyRkFBZixlQUFlLHFYQzNFNUIsd2hDQXFCQSx5REQrQ0ksWUFBWSx1TkFDWixpQkFBaUIsNlBBQ2pCLGtCQUFrQiw0RkFDbEIsd0JBQXdCLHdHQUN4QixxQkFBcUI7OzJGQUdaLGVBQWU7a0JBYjNCLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGlCQUFpQjt3QkFDakIsa0JBQWtCO3dCQUNsQix3QkFBd0I7d0JBQ3hCLHFCQUFxQjtxQkFDdEI7OEJBR1EsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9udEF3ZXNvbWVNb2R1bGUgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQgeyBmYVRpbWVzIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcbmltcG9ydCB7IE1lZXRpbmdJZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21lbnUtY29tcG9uZW50cy9tZWV0aW5nLWlkLWNvbXBvbmVudC9tZWV0aW5nLWlkLWNvbXBvbmVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVldGluZ1Bhc3Njb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbWVudS1jb21wb25lbnRzL21lZXRpbmctcGFzc2NvZGUtY29tcG9uZW50L21lZXRpbmctcGFzc2NvZGUtY29tcG9uZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaGFyZUJ1dHRvbnNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tZW51LWNvbXBvbmVudHMvc2hhcmUtYnV0dG9ucy1jb21wb25lbnQvc2hhcmUtYnV0dG9ucy1jb21wb25lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IEV2ZW50VHlwZSB9IGZyb20gJy4uLy4uLy4uL0B0eXBlcy90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVFdmVudE1vZGFsT3B0aW9ucyB7XG4gIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgaXNTaGFyZUV2ZW50TW9kYWxWaXNpYmxlOiBib29sZWFuO1xuICBvblNoYXJlRXZlbnRDbG9zZTogKCkgPT4gdm9pZDtcbiAgc2hhcmVCdXR0b25zPzogYm9vbGVhbjtcbiAgcG9zaXRpb24/OiBzdHJpbmc7XG4gIHJvb21OYW1lOiBzdHJpbmc7XG4gIGFkbWluUGFzc2NvZGU/OiBzdHJpbmc7XG4gIGlzbGV2ZWw/OiBzdHJpbmc7XG4gIGV2ZW50VHlwZTogRXZlbnRUeXBlO1xufVxuXG5leHBvcnQgdHlwZSBTaGFyZUV2ZW50TW9kYWxUeXBlID0gKG9wdGlvbnM6IFNoYXJlRXZlbnRNb2RhbE9wdGlvbnMpID0+IHZvaWQ7XG5cbi8qKlxuICogQ29tcG9uZW50IGZvciBkaXNwbGF5aW5nIGEgbW9kYWwgdG8gc2hhcmUgZXZlbnQgZGV0YWlscy5cbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAc2VsZWN0b3IgYXBwLXNoYXJlLWV2ZW50LW1vZGFsXG4gKiBAdGVtcGxhdGVVcmwgLi9zaGFyZS1ldmVudC1tb2RhbC5jb21wb25lbnQuaHRtbFxuICogQHN0eWxlVXJscyAuL3NoYXJlLWV2ZW50LW1vZGFsLmNvbXBvbmVudC5jc3NcbiAqXG4gKiBAaW1wb3J0cyBDb21tb25Nb2R1bGUsIEZvbnRBd2Vzb21lTW9kdWxlLCBNZWV0aW5nSWRDb21wb25lbnQsIE1lZXRpbmdQYXNzY29kZUNvbXBvbmVudCwgU2hhcmVCdXR0b25zQ29tcG9uZW50XG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGJhY2tncm91bmRDb2xvciAtIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIG1vZGFsIGNvbnRlbnQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzU2hhcmVFdmVudE1vZGFsVmlzaWJsZSAtIFZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIHNoYXJlIGV2ZW50IG1vZGFsLlxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gb25TaGFyZUV2ZW50Q2xvc2UgLSBDYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgbW9kYWwgY2xvc2UgZXZlbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcm9vbU5hbWUgLSBOYW1lIG9mIHRoZSByb29tIHRvIGJlIHNoYXJlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZG1pblBhc3Njb2RlIC0gQWRtaW4gcGFzc2NvZGUgZm9yIHRoZSByb29tLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlzbGV2ZWwgLSBMZXZlbCBvZiB0aGUgZXZlbnQgKGUuZy4sIGFkbWluLCB1c2VyKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3NpdGlvbiAtIFBvc2l0aW9uIG9mIHRoZSBtb2RhbCBvbiB0aGUgc2NyZWVuIChlLmcuLCB0b3BSaWdodCwgYm90dG9tTGVmdCkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNoYXJlQnV0dG9ucyAtIEZsYWcgdG8gZGlzcGxheSBzaGFyZSBidXR0b25zIGluIHRoZSBtb2RhbC5cbiAqIEBwcm9wZXJ0eSB7RXZlbnRUeXBlfSBldmVudFR5cGUgLSBUeXBlIG9mIGV2ZW50IChlLmcuLCBjaGF0LCBicm9hZGNhc3QsIHdlYmluYXIpLlxuICpcbiAqIEBtZXRob2QgaGFuZGxlQ2xvc2UgLSBDbG9zZXMgdGhlIHNoYXJlIGV2ZW50IG1vZGFsIGJ5IGludm9raW5nIHRoZSBvblNoYXJlRXZlbnRDbG9zZSBjYWxsYmFjay5cbiAqXG4gKiBAZ2V0dGVyIG1vZGFsQ29udGFpbmVyU3R5bGUgLSBSZXR1cm5zIHRoZSBzdHlsZSBvYmplY3QgZm9yIHRoZSBtb2RhbCBjb250YWluZXIuXG4gKiBAZ2V0dGVyIG1vZGFsQ29udGVudFN0eWxlIC0gUmV0dXJucyB0aGUgc3R5bGUgb2JqZWN0IGZvciB0aGUgbW9kYWwgY29udGVudC5cbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8YXBwLXNoYXJlLWV2ZW50LW1vZGFsXG4gKiAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSknXCJcbiAqICAgW2lzU2hhcmVFdmVudE1vZGFsVmlzaWJsZV09XCJpc01vZGFsVmlzaWJsZVwiXG4gKiAgIFtvblNoYXJlRXZlbnRDbG9zZV09XCJoYW5kbGVNb2RhbENsb3NlXCJcbiAqICAgW3Jvb21OYW1lXT1cInJvb21OYW1lXCJcbiAqICAgW2FkbWluUGFzc2NvZGVdPVwiYWRtaW5QYXNzY29kZVwiXG4gKiAgIFtpc2xldmVsXT1cInVzZXJMZXZlbFwiXG4gKiAgIFtwb3NpdGlvbl09XCIndG9wUmlnaHQnXCJcbiAqICAgW3NoYXJlQnV0dG9uc109XCJ0cnVlXCJcbiAqICAgW2V2ZW50VHlwZV09XCJldmVudFR5cGVcIlxuICogPjwvYXBwLXNoYXJlLWV2ZW50LW1vZGFsPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zaGFyZS1ldmVudC1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaGFyZS1ldmVudC1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NoYXJlLWV2ZW50LW1vZGFsLmNvbXBvbmVudC5jc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb250QXdlc29tZU1vZHVsZSxcbiAgICBNZWV0aW5nSWRDb21wb25lbnQsXG4gICAgTWVldGluZ1Bhc3Njb2RlQ29tcG9uZW50LFxuICAgIFNoYXJlQnV0dG9uc0NvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2hhcmVFdmVudE1vZGFsIHtcbiAgQElucHV0KCkgYmFja2dyb3VuZENvbG9yID0gJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSknO1xuICBASW5wdXQoKSBpc1NoYXJlRXZlbnRNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgQElucHV0KCkgb25TaGFyZUV2ZW50Q2xvc2UhOiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSByb29tTmFtZSE6IHN0cmluZztcbiAgQElucHV0KCkgYWRtaW5QYXNzY29kZSE6IHN0cmluZztcbiAgQElucHV0KCkgaXNsZXZlbCE6IHN0cmluZztcbiAgQElucHV0KCkgcG9zaXRpb24gPSAndG9wUmlnaHQnO1xuICBASW5wdXQoKSBzaGFyZUJ1dHRvbnMgPSB0cnVlO1xuICBASW5wdXQoKSBldmVudFR5cGUhOiBFdmVudFR5cGU7XG5cbiAgZmFUaW1lcyA9IGZhVGltZXM7XG5cbiAgaGFuZGxlQ2xvc2UoKSB7XG4gICAgdGhpcy5vblNoYXJlRXZlbnRDbG9zZSgpO1xuICB9XG5cbiAgZ2V0IG1vZGFsQ29udGFpbmVyU3R5bGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgdG9wOiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC41KScsXG4gICAgICBkaXNwbGF5OiB0aGlzLmlzU2hhcmVFdmVudE1vZGFsVmlzaWJsZSA/ICdibG9jaycgOiAnbm9uZScsXG4gICAgICB6SW5kZXg6IDk5OSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IG1vZGFsQ29udGVudFN0eWxlKCkge1xuICAgIGNvbnN0IHNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgbGV0IG1vZGFsV2lkdGggPSAwLjggKiBzY3JlZW5XaWR0aDtcbiAgICBpZiAobW9kYWxXaWR0aCA+IDM1MCkge1xuICAgICAgbW9kYWxXaWR0aCA9IDM1MDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFja2dyb3VuZENvbG9yLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMTBweCcsXG4gICAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgICB3aWR0aDogYCR7bW9kYWxXaWR0aH1weGAsXG4gICAgICBtYXhIZWlnaHQ6ICc2MCUnLFxuICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gICAgICB0b3A6IHRoaXMucG9zaXRpb24uaW5jbHVkZXMoJ3RvcCcpID8gJzEwcHgnIDogJ2F1dG8nLFxuICAgICAgYm90dG9tOiB0aGlzLnBvc2l0aW9uLmluY2x1ZGVzKCdib3R0b20nKSA/ICcxMHB4JyA6ICdhdXRvJyxcbiAgICAgIGxlZnQ6IHRoaXMucG9zaXRpb24uaW5jbHVkZXMoJ0xlZnQnKSA/ICcxMHB4JyA6ICdhdXRvJyxcbiAgICAgIHJpZ2h0OiB0aGlzLnBvc2l0aW9uLmluY2x1ZGVzKCdSaWdodCcpID8gJzEwcHgnIDogJ2F1dG8nLFxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXYgW25nU3R5bGVdPVwibW9kYWxDb250YWluZXJTdHlsZVwiPlxyXG4gIDxkaXYgW25nU3R5bGVdPVwibW9kYWxDb250ZW50U3R5bGVcIj5cclxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7IG1hcmdpbi1ib3R0b206IDE1cHg7XCI+XHJcbiAgICAgIDxkaXYgKGNsaWNrKT1cImhhbmRsZUNsb3NlKClcIiBzdHlsZT1cInBhZGRpbmc6IDVweDtcIj5cclxuICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYVRpbWVzXCIgc2l6ZT1cInhsXCIgc3R5bGU9XCJmb250LXNpemU6IDIwcHg7IGNvbG9yOiBibGFjaztcIj48L2ZhLWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8aHIgc3R5bGU9XCJoZWlnaHQ6IDFweDsgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7IG1hcmdpbjogNXB4IDA7XCIgLz5cclxuICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxO1wiPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTBweDtcIiAqbmdJZj1cImlzbGV2ZWwgPT09ICcyJ1wiPlxyXG4gICAgICAgIDxhcHAtbWVldGluZy1wYXNzY29kZS1jb21wb25lbnQgW21lZXRpbmdQYXNzY29kZV09XCJhZG1pblBhc3Njb2RlXCI+PC9hcHAtbWVldGluZy1wYXNzY29kZS1jb21wb25lbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTBweDtcIj5cclxuICAgICAgICA8YXBwLW1lZXRpbmctaWQtY29tcG9uZW50IFttZWV0aW5nSURdPVwicm9vbU5hbWVcIj48L2FwcC1tZWV0aW5nLWlkLWNvbXBvbmVudD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaGFyZUJ1dHRvbnNcIj5cclxuICAgICAgICA8YXBwLXNoYXJlLWJ1dHRvbnMtY29tcG9uZW50IFttZWV0aW5nSURdPVwicm9vbU5hbWVcIiBbZXZlbnRUeXBlXT1cImV2ZW50VHlwZVwiPjwvYXBwLXNoYXJlLWJ1dHRvbnMtY29tcG9uZW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
import { Component, Inject, Optional } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
|
4
|
-
import { faQrcode } from '@fortawesome/free-solid-svg-icons';
|
|
5
|
-
import { Validators, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
-
import { CookieService } from 'ngx-cookie-service';
|
|
7
|
-
import { ZXingScannerModule } from '@zxing/ngx-scanner'; // Import the zxing-ngx-scanner module
|
|
8
|
-
import { Socket } from 'socket.io-client';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/forms";
|
|
11
|
-
import * as i2 from "ngx-cookie-service";
|
|
12
|
-
import * as i3 from "@zxing/ngx-scanner";
|
|
13
|
-
import * as i4 from "@angular/common";
|
|
14
|
-
import * as i5 from "@fortawesome/angular-fontawesome";
|
|
15
|
-
const MAX_ATTEMPTS = 10; // Maximum number of unsuccessful attempts before rate limiting
|
|
16
|
-
const RATE_LIMIT_DURATION = 3 * 60 * 60 * 1000; // 3 hours in milliseconds
|
|
17
|
-
/**
|
|
18
|
-
* @component WelcomePage
|
|
19
|
-
* @description Component for handling room creation and joining on MediaSFU with QR scanning and form submission.
|
|
20
|
-
*
|
|
21
|
-
* @selector app-welcome-page
|
|
22
|
-
* @standalone true
|
|
23
|
-
* @templateUrl ./welcome-page.component.html
|
|
24
|
-
* @styleUrls ['./welcome-page.component.css']
|
|
25
|
-
* @imports [ZXingScannerModule, CommonModule, FontAwesomeModule, ReactiveFormsModule]
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* ```html
|
|
29
|
-
* <app-welcome-page [parameters]="welcomeParameters"></app-welcome-page>
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export class WelcomePage {
|
|
33
|
-
fb;
|
|
34
|
-
cookieService;
|
|
35
|
-
welcomeForm;
|
|
36
|
-
error = '';
|
|
37
|
-
isScannerVisible = false;
|
|
38
|
-
scannedData = null;
|
|
39
|
-
parameters = {};
|
|
40
|
-
faQrcode = faQrcode;
|
|
41
|
-
allowedCameras = []; // List of allowed cameras
|
|
42
|
-
currentDevice = null; // Active camera device
|
|
43
|
-
imgSrc = '';
|
|
44
|
-
constructor(fb, cookieService, injectedParameters) {
|
|
45
|
-
this.fb = fb;
|
|
46
|
-
this.cookieService = cookieService;
|
|
47
|
-
this.welcomeForm = this.fb.group({
|
|
48
|
-
name: [
|
|
49
|
-
'',
|
|
50
|
-
[Validators.required, Validators.pattern('^[a-zA-Z0-9]+$'), Validators.maxLength(12)],
|
|
51
|
-
],
|
|
52
|
-
secret: [
|
|
53
|
-
'',
|
|
54
|
-
[Validators.required, Validators.pattern('^[a-zA-Z0-9]+$'), Validators.maxLength(64)],
|
|
55
|
-
],
|
|
56
|
-
eventID: [
|
|
57
|
-
'',
|
|
58
|
-
[Validators.required, Validators.pattern('^[a-zA-Z0-9]+$'), Validators.maxLength(32)],
|
|
59
|
-
],
|
|
60
|
-
link: ['', [Validators.required, Validators.pattern('^https?://.+mediasfu\\.com.+$')]],
|
|
61
|
-
});
|
|
62
|
-
this.parameters = injectedParameters || this.parameters;
|
|
63
|
-
}
|
|
64
|
-
ngOnInit() {
|
|
65
|
-
this.askForCameraPermission();
|
|
66
|
-
}
|
|
67
|
-
async checkLimitsAndMakeRequest(apiUserName, apiToken, link, userName) {
|
|
68
|
-
const TIMEOUT_DURATION = 10000; // 10 seconds
|
|
69
|
-
let unsuccessfulAttempts = parseInt(this.cookieService.get('unsuccessfulAttempts')) || 0;
|
|
70
|
-
let lastRequestTimestamp = parseInt(this.cookieService.get('lastRequestTimestamp')) || 0;
|
|
71
|
-
if (unsuccessfulAttempts >= MAX_ATTEMPTS) {
|
|
72
|
-
if (Date.now() - lastRequestTimestamp < RATE_LIMIT_DURATION) {
|
|
73
|
-
this.parameters.showAlert?.({
|
|
74
|
-
message: 'Too many unsuccessful attempts. Please try again later.',
|
|
75
|
-
type: 'danger',
|
|
76
|
-
duration: 3000,
|
|
77
|
-
});
|
|
78
|
-
this.cookieService.set('lastRequestTimestamp', Date.now().toString());
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
unsuccessfulAttempts = 0;
|
|
83
|
-
this.cookieService.set('unsuccessfulAttempts', unsuccessfulAttempts.toString());
|
|
84
|
-
this.cookieService.set('lastRequestTimestamp', Date.now().toString());
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
try {
|
|
88
|
-
this.parameters.updateIsLoadingModalVisible(true);
|
|
89
|
-
const socketPromise = this.parameters.connectSocket({ apiUserName, apiToken, link });
|
|
90
|
-
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Request timed out')), TIMEOUT_DURATION));
|
|
91
|
-
const socket = await Promise.race([socketPromise, timeoutPromise]);
|
|
92
|
-
if (socket && socket instanceof Socket && socket.id) {
|
|
93
|
-
unsuccessfulAttempts = 0;
|
|
94
|
-
this.cookieService.set('unsuccessfulAttempts', unsuccessfulAttempts.toString());
|
|
95
|
-
this.cookieService.set('lastRequestTimestamp', Date.now().toString());
|
|
96
|
-
this.parameters.updateSocket(socket);
|
|
97
|
-
this.parameters.updateApiUserName(apiUserName);
|
|
98
|
-
this.parameters.updateApiToken(apiToken);
|
|
99
|
-
this.parameters.updateLink(link);
|
|
100
|
-
this.parameters.updateRoomName(apiUserName);
|
|
101
|
-
this.parameters.updateMember(userName);
|
|
102
|
-
this.parameters.updateValidated(true);
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
unsuccessfulAttempts += 1;
|
|
106
|
-
this.cookieService.set('unsuccessfulAttempts', unsuccessfulAttempts.toString());
|
|
107
|
-
this.cookieService.set('lastRequestTimestamp', Date.now().toString());
|
|
108
|
-
this.parameters.updateIsLoadingModalVisible(false);
|
|
109
|
-
if (unsuccessfulAttempts >= MAX_ATTEMPTS) {
|
|
110
|
-
this.parameters.showAlert?.({
|
|
111
|
-
message: 'Too many unsuccessful attempts. Please try again later.',
|
|
112
|
-
type: 'danger',
|
|
113
|
-
duration: 3000,
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
this.parameters.showAlert?.({
|
|
118
|
-
message: 'Invalid credentials.',
|
|
119
|
-
type: 'danger',
|
|
120
|
-
duration: 3000,
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
this.parameters.showAlert?.({
|
|
127
|
-
message: 'Unable to connect. Check your credentials and try again.',
|
|
128
|
-
type: 'danger',
|
|
129
|
-
duration: 3000,
|
|
130
|
-
});
|
|
131
|
-
unsuccessfulAttempts += 1;
|
|
132
|
-
this.cookieService.set('unsuccessfulAttempts', unsuccessfulAttempts.toString());
|
|
133
|
-
this.cookieService.set('lastRequestTimestamp', Date.now().toString());
|
|
134
|
-
this.parameters.updateIsLoadingModalVisible(false);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
handleScanSuccess(data) {
|
|
138
|
-
try {
|
|
139
|
-
const scannedText = data;
|
|
140
|
-
const parts = scannedText.split(';');
|
|
141
|
-
if (parts.length === 5) {
|
|
142
|
-
const [userName, link, userSecret, passWord, meetingID] = parts;
|
|
143
|
-
if (!userName.length ||
|
|
144
|
-
!link.length ||
|
|
145
|
-
!userSecret.length ||
|
|
146
|
-
!passWord.length ||
|
|
147
|
-
!meetingID.length ||
|
|
148
|
-
!this.validateAlphanumeric(userName) ||
|
|
149
|
-
!this.validateAlphanumeric(userSecret) ||
|
|
150
|
-
!this.validateAlphanumeric(passWord) ||
|
|
151
|
-
!this.validateAlphanumeric(meetingID) ||
|
|
152
|
-
userSecret.length !== 64 ||
|
|
153
|
-
userName.length > 12 ||
|
|
154
|
-
userName.length < 2 ||
|
|
155
|
-
meetingID.length > 32 ||
|
|
156
|
-
meetingID.length < 8 ||
|
|
157
|
-
!link.includes('mediasfu.com') ||
|
|
158
|
-
meetingID.toLowerCase().startsWith('d')) {
|
|
159
|
-
this.parameters.showAlert?.({
|
|
160
|
-
message: 'Invalid scanned data.',
|
|
161
|
-
type: 'danger',
|
|
162
|
-
duration: 3000,
|
|
163
|
-
});
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
this.welcomeForm.setValue({
|
|
167
|
-
name: userName,
|
|
168
|
-
secret: userSecret,
|
|
169
|
-
eventID: meetingID,
|
|
170
|
-
link: link,
|
|
171
|
-
});
|
|
172
|
-
this.isScannerVisible = false;
|
|
173
|
-
this.scannedData = null;
|
|
174
|
-
this.checkLimitsAndMakeRequest(meetingID, userSecret, link, userName);
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
this.parameters.showAlert?.({
|
|
178
|
-
message: 'Invalid scanned data.',
|
|
179
|
-
type: 'danger',
|
|
180
|
-
duration: 3000,
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
catch (error) {
|
|
185
|
-
this.parameters.showAlert?.({
|
|
186
|
-
message: 'Invalid scanned data.',
|
|
187
|
-
type: 'danger',
|
|
188
|
-
duration: 3000,
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
validateAlphanumeric(str) {
|
|
193
|
-
const alphanumericRegex = /^[a-zA-Z0-9]+$/;
|
|
194
|
-
return alphanumericRegex.test(str);
|
|
195
|
-
}
|
|
196
|
-
// Method to list available cameras
|
|
197
|
-
askForCameraPermission() {
|
|
198
|
-
navigator.mediaDevices
|
|
199
|
-
.enumerateDevices()
|
|
200
|
-
.then((devices) => {
|
|
201
|
-
this.allowedCameras = devices.filter((device) => device.kind === 'videoinput');
|
|
202
|
-
if (this.allowedCameras.length > 0) {
|
|
203
|
-
this.currentDevice = this.allowedCameras[0]; // Set the first available camera as the default
|
|
204
|
-
}
|
|
205
|
-
})
|
|
206
|
-
.catch((err) => {
|
|
207
|
-
console.error(err);
|
|
208
|
-
this.parameters.showAlert?.({
|
|
209
|
-
message: 'Camera access denied.',
|
|
210
|
-
type: 'danger',
|
|
211
|
-
duration: 3000,
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
toggleScanner() {
|
|
216
|
-
this.isScannerVisible = !this.isScannerVisible;
|
|
217
|
-
if (this.isScannerVisible) {
|
|
218
|
-
this.askForCameraPermission();
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
async handleConfirm() {
|
|
222
|
-
if (this.welcomeForm.invalid) {
|
|
223
|
-
this.error = 'Please fill all the fields correctly.';
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
const { name, secret, eventID, link } = this.welcomeForm.value;
|
|
227
|
-
await this.checkLimitsAndMakeRequest(eventID, secret, link, name);
|
|
228
|
-
}
|
|
229
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: WelcomePage, deps: [{ token: i1.FormBuilder }, { token: i2.CookieService }, { token: 'parameters', optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
230
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: WelcomePage, isStandalone: true, selector: "app-welcome-page", providers: [CookieService], ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"logo-container\">\r\n <img [src]=\"imgSrc || 'https://mediasfu.com/images/logo192.png'\" class=\"logo-image\" alt=\"Logo\" />\r\n </div>\r\n <form [formGroup]=\"welcomeForm\" (ngSubmit)=\"handleConfirm()\">\r\n <div class=\"input-container\">\r\n <input\r\n formControlName=\"name\"\r\n type=\"text\"\r\n placeholder=\"Event Display Name\"\r\n class=\"input-field\"\r\n />\r\n <input\r\n formControlName=\"secret\"\r\n type=\"text\"\r\n placeholder=\"Event Token (Secret)\"\r\n class=\"input-field\"\r\n />\r\n <input\r\n formControlName=\"eventID\"\r\n type=\"text\"\r\n placeholder=\"Event ID\"\r\n class=\"input-field\"\r\n />\r\n <input\r\n formControlName=\"link\"\r\n type=\"text\"\r\n placeholder=\"Event Link\"\r\n class=\"input-field\"\r\n />\r\n </div>\r\n <button type=\"submit\" class=\"confirm-button\">Confirm</button>\r\n </form>\r\n\r\n <div class=\"scanner-container\">\r\n <div class=\"or-container\">\r\n <hr class=\"horizontal-line\" />\r\n <span class=\"or-text\">OR</span>\r\n <hr class=\"horizontal-line\" />\r\n </div>\r\n <div *ngIf=\"isScannerVisible\" class=\"scanner-wrapper\">\r\n <zxing-scanner\r\n [device]=\"currentDevice!\"\r\n (scanSuccess)=\"handleScanSuccess($event)\"\r\n [tryHarder]=\"true\"\r\n ></zxing-scanner>\r\n </div>\r\n <div class=\"scan-button-container\" *ngIf=\"!isScannerVisible\">\r\n <button (click)=\"toggleScanner()\" class=\"scan-button\">\r\n <fa-icon [icon]=\"faQrcode\" style=\"margin-right: 5px\"></fa-icon>\r\n Scan QR Code\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"additional-options-container\">\r\n <p>\r\n Provide the event details either by typing manually or scanning the\r\n QR-code to autofill.\r\n </p>\r\n <p>Don't have a secret?</p>\r\n <a\r\n href=\"https://meeting.mediasfu.com/meeting/start/\"\r\n target=\"_blank\"\r\n class=\"link\"\r\n >Get one from mediasfu.com</a\r\n >\r\n </div>\r\n</div>\r\n", styles: [".container{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100vw;height:100vh;max-width:100vw;max-height:100vh;margin:0;padding:0;background-color:#53c6e0;overflow:auto}.logo-container{margin-top:30px;padding-top:10px;margin-bottom:10px}.logo-image{width:100px;height:100px;border-radius:50%}.input-container{margin-bottom:10px;display:flex;flex-direction:column;align-items:center;justify-content:center}.input-field{height:30px;border-color:gray;border-width:1px;margin-bottom:10px;padding:0 5px;border-radius:5px}.confirm-button{background-color:#000;color:#fff;padding:5px;border-radius:5px;margin-bottom:10px;width:100%}.scanner-container{margin-bottom:10px;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center}.additional-options-container{text-align:center}.link{color:#00f;text-decoration:none;font-weight:700;margin-left:5px}.scan-button{background-color:#000;color:#fff;padding:10px 20px;border-radius:5px;margin-bottom:20px}.scan-button-container{display:flex;justify-content:center;align-items:center}.or-container{display:flex;align-items:center;justify-content:center;width:100%;margin:10px 0}.horizontal-line{flex-grow:1;height:1px;background-color:gray;margin:0 10px}.or-text{color:#000;font-size:medium;font-weight:700}.scanner-wrapper{width:300px;height:300px;max-width:300px;max-height:300px;overflow:hidden;position:relative}zxing-scanner{width:100%;height:100%;object-fit:cover}\n"], dependencies: [{ kind: "ngmodule", type: ZXingScannerModule }, { kind: "component", type: i3.ZXingScannerComponent, selector: "zxing-scanner", inputs: ["autofocusEnabled", "timeBetweenScans", "delayBetweenScanSuccess", "autostart", "previewFitMode", "poster", "device", "formats", "videoConstraints", "torch", "enable", "tryHarder"], outputs: ["autostarted", "autostarting", "torchCompatible", "scanSuccess", "scanFailure", "scanError", "scanComplete", "camerasFound", "camerasNotFound", "permissionResponse", "hasDevices", "deviceChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
231
|
-
}
|
|
232
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: WelcomePage, decorators: [{
|
|
233
|
-
type: Component,
|
|
234
|
-
args: [{ selector: 'app-welcome-page', standalone: true, imports: [ZXingScannerModule, CommonModule, FontAwesomeModule, ReactiveFormsModule], providers: [CookieService], template: "<div class=\"container\">\r\n <div class=\"logo-container\">\r\n <img [src]=\"imgSrc || 'https://mediasfu.com/images/logo192.png'\" class=\"logo-image\" alt=\"Logo\" />\r\n </div>\r\n <form [formGroup]=\"welcomeForm\" (ngSubmit)=\"handleConfirm()\">\r\n <div class=\"input-container\">\r\n <input\r\n formControlName=\"name\"\r\n type=\"text\"\r\n placeholder=\"Event Display Name\"\r\n class=\"input-field\"\r\n />\r\n <input\r\n formControlName=\"secret\"\r\n type=\"text\"\r\n placeholder=\"Event Token (Secret)\"\r\n class=\"input-field\"\r\n />\r\n <input\r\n formControlName=\"eventID\"\r\n type=\"text\"\r\n placeholder=\"Event ID\"\r\n class=\"input-field\"\r\n />\r\n <input\r\n formControlName=\"link\"\r\n type=\"text\"\r\n placeholder=\"Event Link\"\r\n class=\"input-field\"\r\n />\r\n </div>\r\n <button type=\"submit\" class=\"confirm-button\">Confirm</button>\r\n </form>\r\n\r\n <div class=\"scanner-container\">\r\n <div class=\"or-container\">\r\n <hr class=\"horizontal-line\" />\r\n <span class=\"or-text\">OR</span>\r\n <hr class=\"horizontal-line\" />\r\n </div>\r\n <div *ngIf=\"isScannerVisible\" class=\"scanner-wrapper\">\r\n <zxing-scanner\r\n [device]=\"currentDevice!\"\r\n (scanSuccess)=\"handleScanSuccess($event)\"\r\n [tryHarder]=\"true\"\r\n ></zxing-scanner>\r\n </div>\r\n <div class=\"scan-button-container\" *ngIf=\"!isScannerVisible\">\r\n <button (click)=\"toggleScanner()\" class=\"scan-button\">\r\n <fa-icon [icon]=\"faQrcode\" style=\"margin-right: 5px\"></fa-icon>\r\n Scan QR Code\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"additional-options-container\">\r\n <p>\r\n Provide the event details either by typing manually or scanning the\r\n QR-code to autofill.\r\n </p>\r\n <p>Don't have a secret?</p>\r\n <a\r\n href=\"https://meeting.mediasfu.com/meeting/start/\"\r\n target=\"_blank\"\r\n class=\"link\"\r\n >Get one from mediasfu.com</a\r\n >\r\n </div>\r\n</div>\r\n", styles: [".container{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100vw;height:100vh;max-width:100vw;max-height:100vh;margin:0;padding:0;background-color:#53c6e0;overflow:auto}.logo-container{margin-top:30px;padding-top:10px;margin-bottom:10px}.logo-image{width:100px;height:100px;border-radius:50%}.input-container{margin-bottom:10px;display:flex;flex-direction:column;align-items:center;justify-content:center}.input-field{height:30px;border-color:gray;border-width:1px;margin-bottom:10px;padding:0 5px;border-radius:5px}.confirm-button{background-color:#000;color:#fff;padding:5px;border-radius:5px;margin-bottom:10px;width:100%}.scanner-container{margin-bottom:10px;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center}.additional-options-container{text-align:center}.link{color:#00f;text-decoration:none;font-weight:700;margin-left:5px}.scan-button{background-color:#000;color:#fff;padding:10px 20px;border-radius:5px;margin-bottom:20px}.scan-button-container{display:flex;justify-content:center;align-items:center}.or-container{display:flex;align-items:center;justify-content:center;width:100%;margin:10px 0}.horizontal-line{flex-grow:1;height:1px;background-color:gray;margin:0 10px}.or-text{color:#000;font-size:medium;font-weight:700}.scanner-wrapper{width:300px;height:300px;max-width:300px;max-height:300px;overflow:hidden;position:relative}zxing-scanner{width:100%;height:100%;object-fit:cover}\n"] }]
|
|
235
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.CookieService }, { type: undefined, decorators: [{
|
|
236
|
-
type: Optional
|
|
237
|
-
}, {
|
|
238
|
-
type: Inject,
|
|
239
|
-
args: ['parameters']
|
|
240
|
-
}] }] });
|
|
241
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VsY29tZS1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL21pc2MtY29tcG9uZW50cy93ZWxjb21lLXBhZ2Uvd2VsY29tZS1wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL21pc2MtY29tcG9uZW50cy93ZWxjb21lLXBhZ2Uvd2VsY29tZS1wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdELE9BQU8sRUFBMEIsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDLENBQUMsc0NBQXNDO0FBQy9GLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7OztBQUkxQyxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQywrREFBK0Q7QUFDeEYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQywwQkFBMEI7QUF3QjFFOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBV0gsTUFBTSxPQUFP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LENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0MsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhO1FBQ2pCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLHVDQUF1QyxDQUFDO1lBQ3JELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBRS9ELE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7dUdBOU5VLFdBQVcsMEVBY0EsWUFBWTsyRkFkdkIsV0FBVywrREFGWCxDQUFDLGFBQWEsQ0FBQywwQkMzRDVCLCtyRUFxRUEsdy9DRFhZLGtCQUFrQiw4ZkFBRSxZQUFZLGtJQUFFLGlCQUFpQiw0UEFBRSxtQkFBbUI7OzJGQUd2RSxXQUFXO2tCQVJ2QixTQUFTOytCQUNFLGtCQUFrQixjQUdoQixJQUFJLFdBQ1AsQ0FBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsYUFDeEUsQ0FBQyxhQUFhLENBQUM7OzBCQWdCdkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb250QXdlc29tZU1vZHVsZSB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IGZhUXJjb2RlIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcbmltcG9ydCB7IFpYaW5nU2Nhbm5lck1vZHVsZSB9IGZyb20gJ0B6eGluZy9uZ3gtc2Nhbm5lcic7IC8vIEltcG9ydCB0aGUgenhpbmctbmd4LXNjYW5uZXIgbW9kdWxlXG5pbXBvcnQgeyBTb2NrZXQgfSBmcm9tICdzb2NrZXQuaW8tY2xpZW50JztcbmltcG9ydCB7IENvbm5lY3RTb2NrZXRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc29ja2V0cy9zb2NrZXQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNob3dBbGVydCB9IGZyb20gJy4uLy4uLy4uL0B0eXBlcy90eXBlcyc7XG5cbmNvbnN0IE1BWF9BVFRFTVBUUyA9IDEwOyAvLyBNYXhpbXVtIG51bWJlciBvZiB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMgYmVmb3JlIHJhdGUgbGltaXRpbmdcbmNvbnN0IFJBVEVfTElNSVRfRFVSQVRJT04gPSAzICogNjAgKiA2MCAqIDEwMDA7IC8vIDMgaG91cnMgaW4gbWlsbGlzZWNvbmRzXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2VsY29tZVBhZ2VQYXJhbWV0ZXJzIHtcbiAgaW1nU3JjPzogc3RyaW5nO1xuICBzaG93QWxlcnQ/OiBTaG93QWxlcnQ7XG4gIHVwZGF0ZUlzTG9hZGluZ01vZGFsVmlzaWJsZTogKHZpc2libGU6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIGNvbm5lY3RTb2NrZXQ6IENvbm5lY3RTb2NrZXRUeXBlO1xuICB1cGRhdGVTb2NrZXQ6IChzb2NrZXQ6IFNvY2tldCkgPT4gdm9pZDtcbiAgdXBkYXRlVmFsaWRhdGVkOiAodmFsaWRhdGVkOiBib29sZWFuKSA9PiB2b2lkO1xuICB1cGRhdGVBcGlVc2VyTmFtZTogKGFwaVVzZXJOYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHVwZGF0ZUFwaVRva2VuOiAoYXBpVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgdXBkYXRlTGluazogKGxpbms6IHN0cmluZykgPT4gdm9pZDtcbiAgdXBkYXRlUm9vbU5hbWU6IChyb29tTmFtZTogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVNZW1iZXI6ICh1c2VyTmFtZTogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG4vLyBEZWZpbmUgdGhlIHByb3AgdHlwZSBmb3IgdGhlIGNvbXBvbmVudFxuZXhwb3J0IGludGVyZmFjZSBXZWxjb21lUGFnZU9wdGlvbnMge1xuICBwYXJhbWV0ZXJzOiBXZWxjb21lUGFnZVBhcmFtZXRlcnM7XG59XG5cbi8vIERlZmluZSB0aGUgdHlwZSBmb3IgdGhlIGNvbXBvbmVudCBmdW5jdGlvblxuZXhwb3J0IHR5cGUgV2VsY29tZVBhZ2VUeXBlID0gKG9wdGlvbnM6IFdlbGNvbWVQYWdlT3B0aW9ucykgPT4gSFRNTEVsZW1lbnQ7XG5cbi8qKlxuICogQGNvbXBvbmVudCBXZWxjb21lUGFnZVxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBmb3IgaGFuZGxpbmcgcm9vbSBjcmVhdGlvbiBhbmQgam9pbmluZyBvbiBNZWRpYVNGVSB3aXRoIFFSIHNjYW5uaW5nIGFuZCBmb3JtIHN1Ym1pc3Npb24uXG4gKlxuICogQHNlbGVjdG9yIGFwcC13ZWxjb21lLXBhZ2VcbiAqIEBzdGFuZGFsb25lIHRydWVcbiAqIEB0ZW1wbGF0ZVVybCAuL3dlbGNvbWUtcGFnZS5jb21wb25lbnQuaHRtbFxuICogQHN0eWxlVXJscyBbJy4vd2VsY29tZS1wYWdlLmNvbXBvbmVudC5jc3MnXVxuICogQGltcG9ydHMgW1pYaW5nU2Nhbm5lck1vZHVsZSwgQ29tbW9uTW9kdWxlLCBGb250QXdlc29tZU1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV1cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGFwcC13ZWxjb21lLXBhZ2UgW3BhcmFtZXRlcnNdPVwid2VsY29tZVBhcmFtZXRlcnNcIj48L2FwcC13ZWxjb21lLXBhZ2U+XG4gKiBgYGBcbiAqL1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC13ZWxjb21lLXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2VsY29tZS1wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd2VsY29tZS1wYWdlLmNvbXBvbmVudC5jc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1pYaW5nU2Nhbm5lck1vZHVsZSwgQ29tbW9uTW9kdWxlLCBGb250QXdlc29tZU1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHByb3ZpZGVyczogW0Nvb2tpZVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBXZWxjb21lUGFnZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHdlbGNvbWVGb3JtOiBGb3JtR3JvdXA7XG4gIGVycm9yID0gJyc7XG4gIGlzU2Nhbm5lclZpc2libGUgPSBmYWxzZTtcbiAgc2Nhbm5lZERhdGE6IGFueSA9IG51bGw7XG4gIHBhcmFtZXRlcnM6IFdlbGNvbWVQYWdlUGFyYW1ldGVycyA9IHt9IGFzIFdlbGNvbWVQYWdlUGFyYW1ldGVycztcbiAgZmFRcmNvZGUgPSBmYVFyY29kZTtcbiAgYWxsb3dlZENhbWVyYXM6IE1lZGlhRGV2aWNlSW5mb1tdID0gW107IC8vIExpc3Qgb2YgYWxsb3dlZCBjYW1lcmFzXG4gIGN1cnJlbnREZXZpY2U6IE1lZGlhRGV2aWNlSW5mbyB8IG51bGwgPSBudWxsOyAvLyBBY3RpdmUgY2FtZXJhIGRldmljZVxuICBpbWdTcmMgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdCgncGFyYW1ldGVycycpIGluamVjdGVkUGFyYW1ldGVyczogV2VsY29tZVBhZ2VQYXJhbWV0ZXJzLFxuICApIHtcbiAgICB0aGlzLndlbGNvbWVGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBuYW1lOiBbXG4gICAgICAgICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeW2EtekEtWjAtOV0rJCcpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMildLFxuICAgICAgXSxcbiAgICAgIHNlY3JldDogW1xuICAgICAgICAnJyxcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybignXlthLXpBLVowLTldKyQnKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNjQpXSxcbiAgICAgIF0sXG4gICAgICBldmVudElEOiBbXG4gICAgICAgICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeW2EtekEtWjAtOV0rJCcpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgzMildLFxuICAgICAgXSxcbiAgICAgIGxpbms6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybignXmh0dHBzPzovLy4rbWVkaWFzZnVcXFxcLmNvbS4rJCcpXV0sXG4gICAgfSk7XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gaW5qZWN0ZWRQYXJhbWV0ZXJzIHx8IHRoaXMucGFyYW1ldGVycztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYXNrRm9yQ2FtZXJhUGVybWlzc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgY2hlY2tMaW1pdHNBbmRNYWtlUmVxdWVzdChcbiAgICBhcGlVc2VyTmFtZTogc3RyaW5nLFxuICAgIGFwaVRva2VuOiBzdHJpbmcsXG4gICAgbGluazogc3RyaW5nLFxuICAgIHVzZXJOYW1lOiBzdHJpbmcsXG4gICkge1xuICAgIGNvbnN0IFRJTUVPVVRfRFVSQVRJT04gPSAxMDAwMDsgLy8gMTAgc2Vjb25kc1xuXG4gICAgbGV0IHVuc3VjY2Vzc2Z1bEF0dGVtcHRzID0gcGFyc2VJbnQodGhpcy5jb29raWVTZXJ2aWNlLmdldCgndW5zdWNjZXNzZnVsQXR0ZW1wdHMnKSkgfHwgMDtcbiAgICBsZXQgbGFzdFJlcXVlc3RUaW1lc3RhbXAgPSBwYXJzZUludCh0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KCdsYXN0UmVxdWVzdFRpbWVzdGFtcCcpKSB8fCAwO1xuXG4gICAgaWYgKHVuc3VjY2Vzc2Z1bEF0dGVtcHRzID49IE1BWF9BVFRFTVBUUykge1xuICAgICAgaWYgKERhdGUubm93KCkgLSBsYXN0UmVxdWVzdFRpbWVzdGFtcCA8IFJBVEVfTElNSVRfRFVSQVRJT04pIHtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNob3dBbGVydD8uKHtcbiAgICAgICAgICBtZXNzYWdlOiAnVG9vIG1hbnkgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsXG4gICAgICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KCdsYXN0UmVxdWVzdFRpbWVzdGFtcCcsIERhdGUubm93KCkudG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVuc3VjY2Vzc2Z1bEF0dGVtcHRzID0gMDtcbiAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCgndW5zdWNjZXNzZnVsQXR0ZW1wdHMnLCB1bnN1Y2Nlc3NmdWxBdHRlbXB0cy50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCgnbGFzdFJlcXVlc3RUaW1lc3RhbXAnLCBEYXRlLm5vdygpLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnBhcmFtZXRlcnMudXBkYXRlSXNMb2FkaW5nTW9kYWxWaXNpYmxlKHRydWUpO1xuXG4gICAgICBjb25zdCBzb2NrZXRQcm9taXNlID0gdGhpcy5wYXJhbWV0ZXJzLmNvbm5lY3RTb2NrZXQoeyBhcGlVc2VyTmFtZSwgYXBpVG9rZW4sIGxpbmsgfSk7XG4gICAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignUmVxdWVzdCB0aW1lZCBvdXQnKSksIFRJTUVPVVRfRFVSQVRJT04pLFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtzb2NrZXRQcm9taXNlLCB0aW1lb3V0UHJvbWlzZV0pO1xuXG4gICAgICBpZiAoc29ja2V0ICYmIHNvY2tldCBpbnN0YW5jZW9mIFNvY2tldCAmJiBzb2NrZXQuaWQpIHtcbiAgICAgICAgdW5zdWNjZXNzZnVsQXR0ZW1wdHMgPSAwO1xuICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KCd1bnN1Y2Nlc3NmdWxBdHRlbXB0cycsIHVuc3VjY2Vzc2Z1bEF0dGVtcHRzLnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KCdsYXN0UmVxdWVzdFRpbWVzdGFtcCcsIERhdGUubm93KCkudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMucGFyYW1ldGVycy51cGRhdGVTb2NrZXQoc29ja2V0KTtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnVwZGF0ZUFwaVVzZXJOYW1lKGFwaVVzZXJOYW1lKTtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnVwZGF0ZUFwaVRva2VuKGFwaVRva2VuKTtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnVwZGF0ZUxpbmsobGluayk7XG4gICAgICAgIHRoaXMucGFyYW1ldGVycy51cGRhdGVSb29tTmFtZShhcGlVc2VyTmFtZSk7XG4gICAgICAgIHRoaXMucGFyYW1ldGVycy51cGRhdGVNZW1iZXIodXNlck5hbWUpO1xuICAgICAgICB0aGlzLnBhcmFtZXRlcnMudXBkYXRlVmFsaWRhdGVkKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5zdWNjZXNzZnVsQXR0ZW1wdHMgKz0gMTtcbiAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCgndW5zdWNjZXNzZnVsQXR0ZW1wdHMnLCB1bnN1Y2Nlc3NmdWxBdHRlbXB0cy50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCgnbGFzdFJlcXVlc3RUaW1lc3RhbXAnLCBEYXRlLm5vdygpLnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLnBhcmFtZXRlcnMudXBkYXRlSXNMb2FkaW5nTW9kYWxWaXNpYmxlKGZhbHNlKTtcblxuICAgICAgICBpZiAodW5zdWNjZXNzZnVsQXR0ZW1wdHMgPj0gTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNob3dBbGVydD8uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdUb28gbWFueSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJyxcbiAgICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNob3dBbGVydD8uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIGNyZWRlbnRpYWxzLicsXG4gICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucGFyYW1ldGVycy5zaG93QWxlcnQ/Lih7XG4gICAgICAgIG1lc3NhZ2U6ICdVbmFibGUgdG8gY29ubmVjdC4gQ2hlY2sgeW91ciBjcmVkZW50aWFscyBhbmQgdHJ5IGFnYWluLicsXG4gICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgIH0pO1xuXG4gICAgICB1bnN1Y2Nlc3NmdWxBdHRlbXB0cyArPSAxO1xuICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCgndW5zdWNjZXNzZnVsQXR0ZW1wdHMnLCB1bnN1Y2Nlc3NmdWxBdHRlbXB0cy50b1N0cmluZygpKTtcbiAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoJ2xhc3RSZXF1ZXN0VGltZXN0YW1wJywgRGF0ZS5ub3coKS50b1N0cmluZygpKTtcbiAgICAgIHRoaXMucGFyYW1ldGVycy51cGRhdGVJc0xvYWRpbmdNb2RhbFZpc2libGUoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNjYW5TdWNjZXNzKGRhdGE6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzY2FubmVkVGV4dCA9IGRhdGE7XG4gICAgICBjb25zdCBwYXJ0cyA9IHNjYW5uZWRUZXh0LnNwbGl0KCc7Jyk7XG5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDUpIHtcbiAgICAgICAgY29uc3QgW3VzZXJOYW1lLCBsaW5rLCB1c2VyU2VjcmV0LCBwYXNzV29yZCwgbWVldGluZ0lEXSA9IHBhcnRzO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdXNlck5hbWUubGVuZ3RoIHx8XG4gICAgICAgICAgIWxpbmsubGVuZ3RoIHx8XG4gICAgICAgICAgIXVzZXJTZWNyZXQubGVuZ3RoIHx8XG4gICAgICAgICAgIXBhc3NXb3JkLmxlbmd0aCB8fFxuICAgICAgICAgICFtZWV0aW5nSUQubGVuZ3RoIHx8XG4gICAgICAgICAgIXRoaXMudmFsaWRhdGVBbHBoYW51bWVyaWModXNlck5hbWUpIHx8XG4gICAgICAgICAgIXRoaXMudmFsaWRhdGVBbHBoYW51bWVyaWModXNlclNlY3JldCkgfHxcbiAgICAgICAgICAhdGhpcy52YWxpZGF0ZUFscGhhbnVtZXJpYyhwYXNzV29yZCkgfHxcbiAgICAgICAgICAhdGhpcy52YWxpZGF0ZUFscGhhbnVtZXJpYyhtZWV0aW5nSUQpIHx8XG4gICAgICAgICAgdXNlclNlY3JldC5sZW5ndGggIT09IDY0IHx8XG4gICAgICAgICAgdXNlck5hbWUubGVuZ3RoID4gMTIgfHxcbiAgICAgICAgICB1c2VyTmFtZS5sZW5ndGggPCAyIHx8XG4gICAgICAgICAgbWVldGluZ0lELmxlbmd0aCA+IDMyIHx8XG4gICAgICAgICAgbWVldGluZ0lELmxlbmd0aCA8IDggfHxcbiAgICAgICAgICAhbGluay5pbmNsdWRlcygnbWVkaWFzZnUuY29tJykgfHxcbiAgICAgICAgICBtZWV0aW5nSUQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdkJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNob3dBbGVydD8uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHNjYW5uZWQgZGF0YS4nLFxuICAgICAgICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndlbGNvbWVGb3JtLnNldFZhbHVlKHtcbiAgICAgICAgICBuYW1lOiB1c2VyTmFtZSxcbiAgICAgICAgICBzZWNyZXQ6IHVzZXJTZWNyZXQsXG4gICAgICAgICAgZXZlbnRJRDogbWVldGluZ0lELFxuICAgICAgICAgIGxpbms6IGxpbmssXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaXNTY2FubmVyVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjYW5uZWREYXRhID0gbnVsbDtcblxuICAgICAgICB0aGlzLmNoZWNrTGltaXRzQW5kTWFrZVJlcXVlc3QobWVldGluZ0lELCB1c2VyU2VjcmV0LCBsaW5rLCB1c2VyTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2hvd0FsZXJ0Py4oe1xuICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHNjYW5uZWQgZGF0YS4nLFxuICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNob3dBbGVydD8uKHtcbiAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgc2Nhbm5lZCBkYXRhLicsXG4gICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQWxwaGFudW1lcmljKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYWxwaGFudW1lcmljUmVnZXggPSAvXlthLXpBLVowLTldKyQvO1xuICAgIHJldHVybiBhbHBoYW51bWVyaWNSZWdleC50ZXN0KHN0cik7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gbGlzdCBhdmFpbGFibGUgY2FtZXJhc1xuICBhc2tGb3JDYW1lcmFQZXJtaXNzaW9uKCkge1xuICAgIG5hdmlnYXRvci5tZWRpYURldmljZXNcbiAgICAgIC5lbnVtZXJhdGVEZXZpY2VzKClcbiAgICAgIC50aGVuKChkZXZpY2VzOiBNZWRpYURldmljZUluZm9bXSkgPT4ge1xuICAgICAgICB0aGlzLmFsbG93ZWRDYW1lcmFzID0gZGV2aWNlcy5maWx0ZXIoKGRldmljZSkgPT4gZGV2aWNlLmtpbmQgPT09ICd2aWRlb2lucHV0Jyk7XG4gICAgICAgIGlmICh0aGlzLmFsbG93ZWRDYW1lcmFzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnREZXZpY2UgPSB0aGlzLmFsbG93ZWRDYW1lcmFzWzBdOyAvLyBTZXQgdGhlIGZpcnN0IGF2YWlsYWJsZSBjYW1lcmEgYXMgdGhlIGRlZmF1bHRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNob3dBbGVydD8uKHtcbiAgICAgICAgICBtZXNzYWdlOiAnQ2FtZXJhIGFjY2VzcyBkZW5pZWQuJyxcbiAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVNjYW5uZXIoKSB7XG4gICAgdGhpcy5pc1NjYW5uZXJWaXNpYmxlID0gIXRoaXMuaXNTY2FubmVyVmlzaWJsZTtcbiAgICBpZiAodGhpcy5pc1NjYW5uZXJWaXNpYmxlKSB7XG4gICAgICB0aGlzLmFza0ZvckNhbWVyYVBlcm1pc3Npb24oKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVDb25maXJtKCkge1xuICAgIGlmICh0aGlzLndlbGNvbWVGb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSAnUGxlYXNlIGZpbGwgYWxsIHRoZSBmaWVsZHMgY29ycmVjdGx5Lic7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBuYW1lLCBzZWNyZXQsIGV2ZW50SUQsIGxpbmsgfSA9IHRoaXMud2VsY29tZUZvcm0udmFsdWU7XG5cbiAgICBhd2FpdCB0aGlzLmNoZWNrTGltaXRzQW5kTWFrZVJlcXVlc3QoZXZlbnRJRCwgc2VjcmV0LCBsaW5rLCBuYW1lKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxyXG4gICAgPGltZyBbc3JjXT1cImltZ1NyYyB8fCAnaHR0cHM6Ly9tZWRpYXNmdS5jb20vaW1hZ2VzL2xvZ28xOTIucG5nJ1wiIGNsYXNzPVwibG9nby1pbWFnZVwiIGFsdD1cIkxvZ29cIiAvPlxyXG4gIDwvZGl2PlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwid2VsY29tZUZvcm1cIiAobmdTdWJtaXQpPVwiaGFuZGxlQ29uZmlybSgpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIkV2ZW50IERpc3BsYXkgTmFtZVwiXHJcbiAgICAgICAgY2xhc3M9XCJpbnB1dC1maWVsZFwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlY3JldFwiXHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRXZlbnQgVG9rZW4gKFNlY3JldClcIlxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQtZmllbGRcIlxyXG4gICAgICAvPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJldmVudElEXCJcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJFdmVudCBJRFwiXHJcbiAgICAgICAgY2xhc3M9XCJpbnB1dC1maWVsZFwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxpbmtcIlxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIkV2ZW50IExpbmtcIlxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQtZmllbGRcIlxyXG4gICAgICAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImNvbmZpcm0tYnV0dG9uXCI+Q29uZmlybTwvYnV0dG9uPlxyXG4gIDwvZm9ybT5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInNjYW5uZXItY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwib3ItY29udGFpbmVyXCI+XHJcbiAgICAgIDxociBjbGFzcz1cImhvcml6b250YWwtbGluZVwiIC8+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwib3ItdGV4dFwiPk9SPC9zcGFuPlxyXG4gICAgICA8aHIgY2xhc3M9XCJob3Jpem9udGFsLWxpbmVcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXNTY2FubmVyVmlzaWJsZVwiIGNsYXNzPVwic2Nhbm5lci13cmFwcGVyXCI+XHJcbiAgICAgIDx6eGluZy1zY2FubmVyXHJcbiAgICAgICAgW2RldmljZV09XCJjdXJyZW50RGV2aWNlIVwiXHJcbiAgICAgICAgKHNjYW5TdWNjZXNzKT1cImhhbmRsZVNjYW5TdWNjZXNzKCRldmVudClcIlxyXG4gICAgICAgIFt0cnlIYXJkZXJdPVwidHJ1ZVwiXHJcbiAgICAgID48L3p4aW5nLXNjYW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzY2FuLWJ1dHRvbi1jb250YWluZXJcIiAqbmdJZj1cIiFpc1NjYW5uZXJWaXNpYmxlXCI+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cInRvZ2dsZVNjYW5uZXIoKVwiIGNsYXNzPVwic2Nhbi1idXR0b25cIj5cclxuICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYVFyY29kZVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHhcIj48L2ZhLWljb24+XHJcbiAgICAgICAgU2NhbiBRUiBDb2RlXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJhZGRpdGlvbmFsLW9wdGlvbnMtY29udGFpbmVyXCI+XHJcbiAgICA8cD5cclxuICAgICAgUHJvdmlkZSB0aGUgZXZlbnQgZGV0YWlscyBlaXRoZXIgYnkgdHlwaW5nIG1hbnVhbGx5IG9yIHNjYW5uaW5nIHRoZVxyXG4gICAgICBRUi1jb2RlIHRvIGF1dG9maWxsLlxyXG4gICAgPC9wPlxyXG4gICAgPHA+RG9uJ3QgaGF2ZSBhIHNlY3JldD88L3A+XHJcbiAgICA8YVxyXG4gICAgICBocmVmPVwiaHR0cHM6Ly9tZWV0aW5nLm1lZGlhc2Z1LmNvbS9tZWV0aW5nL3N0YXJ0L1wiXHJcbiAgICAgIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAgIGNsYXNzPVwibGlua1wiXHJcbiAgICAgID5HZXQgb25lIGZyb20gbWVkaWFzZnUuY29tPC9hXHJcbiAgICA+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
2
|
-
import { Component, Input } from '@angular/core';
|
|
3
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { ParticipantListItem } from '../participant-list-item/participant-list-item.component';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common";
|
|
7
|
-
/**
|
|
8
|
-
* @component ParticipantList
|
|
9
|
-
* @description Displays a list of participants and provides actions like muting, messaging, and removing participants.
|
|
10
|
-
*
|
|
11
|
-
* @selector app-participant-list
|
|
12
|
-
* @standalone true
|
|
13
|
-
* @templateUrl ./participant-list.component.html
|
|
14
|
-
* @styleUrls ['./participant-list.component.css']
|
|
15
|
-
* @imports [CommonModule, ParticipantListItem]
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```html
|
|
19
|
-
* <app-participant-list [participants]="participants" [isBroadcast]="isBroadcast"
|
|
20
|
-
* [onMuteParticipants]="muteParticipantsHandler"
|
|
21
|
-
* [onMessageParticipants]="messageParticipantsHandler"
|
|
22
|
-
* [onRemoveParticipants]="removeParticipantsHandler">
|
|
23
|
-
* </app-participant-list>
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export class ParticipantList {
|
|
27
|
-
participants = [];
|
|
28
|
-
isBroadcast = false;
|
|
29
|
-
onMuteParticipants;
|
|
30
|
-
onMessageParticipants;
|
|
31
|
-
onRemoveParticipants;
|
|
32
|
-
socket = {};
|
|
33
|
-
coHostResponsibility = [];
|
|
34
|
-
member = '';
|
|
35
|
-
islevel = '';
|
|
36
|
-
showAlert;
|
|
37
|
-
coHost = '';
|
|
38
|
-
roomName = '';
|
|
39
|
-
updateIsMessagesModalVisible = () => { };
|
|
40
|
-
updateDirectMessageDetails = () => { };
|
|
41
|
-
updateStartDirectMessage = () => { };
|
|
42
|
-
updateParticipants = () => { };
|
|
43
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ParticipantList, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
44
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: ParticipantList, isStandalone: true, selector: "app-participant-list", inputs: { participants: "participants", isBroadcast: "isBroadcast", onMuteParticipants: "onMuteParticipants", onMessageParticipants: "onMessageParticipants", onRemoveParticipants: "onRemoveParticipants", socket: "socket", coHostResponsibility: "coHostResponsibility", member: "member", islevel: "islevel", showAlert: "showAlert", coHost: "coHost", roomName: "roomName", updateIsMessagesModalVisible: "updateIsMessagesModalVisible", updateDirectMessageDetails: "updateDirectMessageDetails", updateStartDirectMessage: "updateStartDirectMessage", updateParticipants: "updateParticipants" }, ngImport: i0, template: "<div *ngFor=\"let participant of participants; let i = index\">\r\n <app-participant-list-item\r\n [participant]=\"participant\"\r\n [isBroadcast]=\"isBroadcast\"\r\n [onMuteParticipants]=\"onMuteParticipants\"\r\n [onMessageParticipants]=\"onMessageParticipants\"\r\n [onRemoveParticipants]=\"onRemoveParticipants\"\r\n [socket]=\"socket\"\r\n [coHostResponsibility]=\"coHostResponsibility\"\r\n [coHost]=\"coHost\"\r\n [member]=\"member\"\r\n [islevel]=\"islevel\"\r\n [roomName]=\"roomName\"\r\n [participants]=\"participants\"\r\n [updateIsMessagesModalVisible]=\"updateIsMessagesModalVisible\"\r\n [updateStartDirectMessage]=\"updateStartDirectMessage\"\r\n [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\r\n [updateParticipants]=\"updateParticipants\"\r\n ></app-participant-list-item>\r\n <hr *ngIf=\"i < participants.length - 1\" class=\"separator\" />\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ParticipantListItem, selector: "app-participant-list-item", inputs: ["participant", "isBroadcast", "onMuteParticipants", "onMessageParticipants", "onRemoveParticipants", "socket", "coHostResponsibility", "member", "islevel", "showAlert", "coHost", "roomName", "updateIsMessagesModalVisible", "updateDirectMessageDetails", "updateStartDirectMessage", "participants", "updateParticipants"] }] });
|
|
45
|
-
}
|
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ParticipantList, decorators: [{
|
|
47
|
-
type: Component,
|
|
48
|
-
args: [{ selector: 'app-participant-list', standalone: true, imports: [CommonModule, ParticipantListItem], template: "<div *ngFor=\"let participant of participants; let i = index\">\r\n <app-participant-list-item\r\n [participant]=\"participant\"\r\n [isBroadcast]=\"isBroadcast\"\r\n [onMuteParticipants]=\"onMuteParticipants\"\r\n [onMessageParticipants]=\"onMessageParticipants\"\r\n [onRemoveParticipants]=\"onRemoveParticipants\"\r\n [socket]=\"socket\"\r\n [coHostResponsibility]=\"coHostResponsibility\"\r\n [coHost]=\"coHost\"\r\n [member]=\"member\"\r\n [islevel]=\"islevel\"\r\n [roomName]=\"roomName\"\r\n [participants]=\"participants\"\r\n [updateIsMessagesModalVisible]=\"updateIsMessagesModalVisible\"\r\n [updateStartDirectMessage]=\"updateStartDirectMessage\"\r\n [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\r\n [updateParticipants]=\"updateParticipants\"\r\n ></app-participant-list-item>\r\n <hr *ngIf=\"i < participants.length - 1\" class=\"separator\" />\r\n</div>\r\n" }]
|
|
49
|
-
}], propDecorators: { participants: [{
|
|
50
|
-
type: Input
|
|
51
|
-
}], isBroadcast: [{
|
|
52
|
-
type: Input
|
|
53
|
-
}], onMuteParticipants: [{
|
|
54
|
-
type: Input
|
|
55
|
-
}], onMessageParticipants: [{
|
|
56
|
-
type: Input
|
|
57
|
-
}], onRemoveParticipants: [{
|
|
58
|
-
type: Input
|
|
59
|
-
}], socket: [{
|
|
60
|
-
type: Input
|
|
61
|
-
}], coHostResponsibility: [{
|
|
62
|
-
type: Input
|
|
63
|
-
}], member: [{
|
|
64
|
-
type: Input
|
|
65
|
-
}], islevel: [{
|
|
66
|
-
type: Input
|
|
67
|
-
}], showAlert: [{
|
|
68
|
-
type: Input
|
|
69
|
-
}], coHost: [{
|
|
70
|
-
type: Input
|
|
71
|
-
}], roomName: [{
|
|
72
|
-
type: Input
|
|
73
|
-
}], updateIsMessagesModalVisible: [{
|
|
74
|
-
type: Input
|
|
75
|
-
}], updateDirectMessageDetails: [{
|
|
76
|
-
type: Input
|
|
77
|
-
}], updateStartDirectMessage: [{
|
|
78
|
-
type: Input
|
|
79
|
-
}], updateParticipants: [{
|
|
80
|
-
type: Input
|
|
81
|
-
}] } });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGljaXBhbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYXNmdS1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9wYXJ0aWNpcGFudHMtY29tcG9uZW50cy9wYXJ0aWNpcGFudC1saXN0L3BhcnRpY2lwYW50LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWFzZnUtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvcGFydGljaXBhbnRzLWNvbXBvbmVudHMvcGFydGljaXBhbnQtbGlzdC9wYXJ0aWNpcGFudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMERBQTBELENBQUM7OztBQThCL0Y7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQVVILE1BQU0sT0FBTyxlQUFlO0lBQ2pCLFlBQVksR0FBa0IsRUFBRSxDQUFDO0lBQ2pDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDcEIsa0JBQWtCLENBQXVEO0lBQ3pFLHFCQUFxQixDQUFpRDtJQUN0RSxvQkFBb0IsQ0FBeUQ7SUFDN0UsTUFBTSxHQUFXLEVBQVksQ0FBQztJQUM5QixvQkFBb0IsR0FBMkIsRUFBRSxDQUFDO0lBQ2xELE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDWixPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2IsU0FBUyxDQUFhO0lBQ3RCLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDWixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsNEJBQTRCLEdBQWlDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUN0RSwwQkFBMEIsR0FBOEMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQ2pGLHdCQUF3QixHQUE2QixHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDOUQsa0JBQWtCLEdBQTBDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQzt1R0FoQm5FLGVBQWU7MkZBQWYsZUFBZSw0cEJDN0Q1Qiw0NkJBcUJBLHlERG9DWSxZQUFZLGdRQUFFLG1CQUFtQjs7MkZBSWhDLGVBQWU7a0JBUDNCLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQzs4QkFLbkMsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFBhcnRpY2lwYW50TGlzdEl0ZW0gfSBmcm9tICcuLi9wYXJ0aWNpcGFudC1saXN0LWl0ZW0vcGFydGljaXBhbnQtbGlzdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDb0hvc3RSZXNwb25zaWJpbGl0eSxcbiAgUGFydGljaXBhbnQsXG4gIFNob3dBbGVydCxcbiAgTXV0ZVBhcnRpY2lwYW50c09wdGlvbnMsXG4gIE1lc3NhZ2VQYXJ0aWNpcGFudHNPcHRpb25zLFxuICBSZW1vdmVQYXJ0aWNpcGFudHNPcHRpb25zLFxufSBmcm9tICcuLi8uLi8uLi9AdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgU29ja2V0IH0gZnJvbSAnc29ja2V0LmlvLWNsaWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGljaXBhbnRMaXN0T3B0aW9ucyB7XG4gIHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcbiAgaXNCcm9hZGNhc3Q6IGJvb2xlYW47XG4gIG9uTXV0ZVBhcnRpY2lwYW50czogKG9wdGlvbnM6IE11dGVQYXJ0aWNpcGFudHNPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBvbk1lc3NhZ2VQYXJ0aWNpcGFudHM6IChvcHRpb25zOiBNZXNzYWdlUGFydGljaXBhbnRzT3B0aW9ucykgPT4gdm9pZDtcbiAgb25SZW1vdmVQYXJ0aWNpcGFudHM6IChvcHRpb25zOiBSZW1vdmVQYXJ0aWNpcGFudHNPcHRpb25zKSA9PiB2b2lkO1xuICBzb2NrZXQ6IFNvY2tldDtcbiAgY29Ib3N0UmVzcG9uc2liaWxpdHk6IENvSG9zdFJlc3BvbnNpYmlsaXR5W107XG4gIG1lbWJlcjogc3RyaW5nO1xuICBpc2xldmVsOiBzdHJpbmc7XG4gIHNob3dBbGVydD86IFNob3dBbGVydDtcbiAgY29Ib3N0OiBzdHJpbmc7XG4gIHJvb21OYW1lOiBzdHJpbmc7XG4gIHVwZGF0ZUlzTWVzc2FnZXNNb2RhbFZpc2libGU6IChpc1Zpc2libGU6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHVwZGF0ZURpcmVjdE1lc3NhZ2VEZXRhaWxzOiAocGFydGljaXBhbnQ6IFBhcnRpY2lwYW50IHwgbnVsbCkgPT4gdm9pZDtcbiAgdXBkYXRlU3RhcnREaXJlY3RNZXNzYWdlOiAoc3RhcnQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHVwZGF0ZVBhcnRpY2lwYW50czogKHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXSkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBAY29tcG9uZW50IFBhcnRpY2lwYW50TGlzdFxuICogQGRlc2NyaXB0aW9uIERpc3BsYXlzIGEgbGlzdCBvZiBwYXJ0aWNpcGFudHMgYW5kIHByb3ZpZGVzIGFjdGlvbnMgbGlrZSBtdXRpbmcsIG1lc3NhZ2luZywgYW5kIHJlbW92aW5nIHBhcnRpY2lwYW50cy5cbiAqXG4gKiBAc2VsZWN0b3IgYXBwLXBhcnRpY2lwYW50LWxpc3RcbiAqIEBzdGFuZGFsb25lIHRydWVcbiAqIEB0ZW1wbGF0ZVVybCAuL3BhcnRpY2lwYW50LWxpc3QuY29tcG9uZW50Lmh0bWxcbiAqIEBzdHlsZVVybHMgWycuL3BhcnRpY2lwYW50LWxpc3QuY29tcG9uZW50LmNzcyddXG4gKiBAaW1wb3J0cyBbQ29tbW9uTW9kdWxlLCBQYXJ0aWNpcGFudExpc3RJdGVtXVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8YXBwLXBhcnRpY2lwYW50LWxpc3QgW3BhcnRpY2lwYW50c109XCJwYXJ0aWNpcGFudHNcIiBbaXNCcm9hZGNhc3RdPVwiaXNCcm9hZGNhc3RcIlxuICogICAgICAgICAgICAgICAgICAgICAgIFtvbk11dGVQYXJ0aWNpcGFudHNdPVwibXV0ZVBhcnRpY2lwYW50c0hhbmRsZXJcIlxuICogICAgICAgICAgICAgICAgICAgICAgIFtvbk1lc3NhZ2VQYXJ0aWNpcGFudHNdPVwibWVzc2FnZVBhcnRpY2lwYW50c0hhbmRsZXJcIlxuICogICAgICAgICAgICAgICAgICAgICAgIFtvblJlbW92ZVBhcnRpY2lwYW50c109XCJyZW1vdmVQYXJ0aWNpcGFudHNIYW5kbGVyXCI+XG4gKiA8L2FwcC1wYXJ0aWNpcGFudC1saXN0PlxuICogYGBgXG4gKi9cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcGFydGljaXBhbnQtbGlzdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFBhcnRpY2lwYW50TGlzdEl0ZW1dLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFydGljaXBhbnQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BhcnRpY2lwYW50LWxpc3QuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQYXJ0aWNpcGFudExpc3Qge1xuICBASW5wdXQoKSBwYXJ0aWNpcGFudHM6IFBhcnRpY2lwYW50W10gPSBbXTtcbiAgQElucHV0KCkgaXNCcm9hZGNhc3QgPSBmYWxzZTtcbiAgQElucHV0KCkgb25NdXRlUGFydGljaXBhbnRzITogKG9wdGlvbnM6IE11dGVQYXJ0aWNpcGFudHNPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBASW5wdXQoKSBvbk1lc3NhZ2VQYXJ0aWNpcGFudHMhOiAob3B0aW9uczogTWVzc2FnZVBhcnRpY2lwYW50c09wdGlvbnMpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uUmVtb3ZlUGFydGljaXBhbnRzITogKG9wdGlvbnM6IFJlbW92ZVBhcnRpY2lwYW50c09wdGlvbnMpID0+IFByb21pc2U8dm9pZD47XG4gIEBJbnB1dCgpIHNvY2tldDogU29ja2V0ID0ge30gYXMgU29ja2V0O1xuICBASW5wdXQoKSBjb0hvc3RSZXNwb25zaWJpbGl0eTogQ29Ib3N0UmVzcG9uc2liaWxpdHlbXSA9IFtdO1xuICBASW5wdXQoKSBtZW1iZXIgPSAnJztcbiAgQElucHV0KCkgaXNsZXZlbCA9ICcnO1xuICBASW5wdXQoKSBzaG93QWxlcnQ/OiBTaG93QWxlcnQ7XG4gIEBJbnB1dCgpIGNvSG9zdCA9ICcnO1xuICBASW5wdXQoKSByb29tTmFtZSA9ICcnO1xuICBASW5wdXQoKSB1cGRhdGVJc01lc3NhZ2VzTW9kYWxWaXNpYmxlOiAoaXNWaXNpYmxlOiBib29sZWFuKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIEBJbnB1dCgpIHVwZGF0ZURpcmVjdE1lc3NhZ2VEZXRhaWxzOiAocGFydGljaXBhbnQ6IFBhcnRpY2lwYW50IHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBASW5wdXQoKSB1cGRhdGVTdGFydERpcmVjdE1lc3NhZ2U6IChzdGFydDogYm9vbGVhbikgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBASW5wdXQoKSB1cGRhdGVQYXJ0aWNpcGFudHM6IChwYXJ0aWNpcGFudHM6IFBhcnRpY2lwYW50W10pID0+IHZvaWQgPSAoKSA9PiB7fTtcbn1cbiIsIjxkaXYgKm5nRm9yPVwibGV0IHBhcnRpY2lwYW50IG9mIHBhcnRpY2lwYW50czsgbGV0IGkgPSBpbmRleFwiPlxyXG4gIDxhcHAtcGFydGljaXBhbnQtbGlzdC1pdGVtXHJcbiAgICBbcGFydGljaXBhbnRdPVwicGFydGljaXBhbnRcIlxyXG4gICAgW2lzQnJvYWRjYXN0XT1cImlzQnJvYWRjYXN0XCJcclxuICAgIFtvbk11dGVQYXJ0aWNpcGFudHNdPVwib25NdXRlUGFydGljaXBhbnRzXCJcclxuICAgIFtvbk1lc3NhZ2VQYXJ0aWNpcGFudHNdPVwib25NZXNzYWdlUGFydGljaXBhbnRzXCJcclxuICAgIFtvblJlbW92ZVBhcnRpY2lwYW50c109XCJvblJlbW92ZVBhcnRpY2lwYW50c1wiXHJcbiAgICBbc29ja2V0XT1cInNvY2tldFwiXHJcbiAgICBbY29Ib3N0UmVzcG9uc2liaWxpdHldPVwiY29Ib3N0UmVzcG9uc2liaWxpdHlcIlxyXG4gICAgW2NvSG9zdF09XCJjb0hvc3RcIlxyXG4gICAgW21lbWJlcl09XCJtZW1iZXJcIlxyXG4gICAgW2lzbGV2ZWxdPVwiaXNsZXZlbFwiXHJcbiAgICBbcm9vbU5hbWVdPVwicm9vbU5hbWVcIlxyXG4gICAgW3BhcnRpY2lwYW50c109XCJwYXJ0aWNpcGFudHNcIlxyXG4gICAgW3VwZGF0ZUlzTWVzc2FnZXNNb2RhbFZpc2libGVdPVwidXBkYXRlSXNNZXNzYWdlc01vZGFsVmlzaWJsZVwiXHJcbiAgICBbdXBkYXRlU3RhcnREaXJlY3RNZXNzYWdlXT1cInVwZGF0ZVN0YXJ0RGlyZWN0TWVzc2FnZVwiXHJcbiAgICBbdXBkYXRlRGlyZWN0TWVzc2FnZURldGFpbHNdPVwidXBkYXRlRGlyZWN0TWVzc2FnZURldGFpbHNcIlxyXG4gICAgW3VwZGF0ZVBhcnRpY2lwYW50c109XCJ1cGRhdGVQYXJ0aWNpcGFudHNcIlxyXG4gID48L2FwcC1wYXJ0aWNpcGFudC1saXN0LWl0ZW0+XHJcbiAgPGhyICpuZ0lmPVwiaSA8IHBhcnRpY2lwYW50cy5sZW5ndGggLSAxXCIgY2xhc3M9XCJzZXBhcmF0b3JcIiAvPlxyXG48L2Rpdj5cclxuIl19
|