mediasfu-angular 2.1.6 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -182,6 +182,10 @@ export type MediasfuWebinarOptions = {
182
182
  * @input {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} noUIPreJoinOptions - Options for the prejoin page without UI.
183
183
  * @input {JoinRoomOnMediaSFUType} joinMediaSFURoom - Function to join a room on MediaSFU.
184
184
  * @input {CreateRoomOnMediaSFUType} createMediaSFURoom - Function to create a room on MediaSFU.
185
+ * @input {any} customVideoCard - Custom component to replace the default VideoCard component.
186
+ * @input {any} customAudioCard - Custom component to replace the default AudioCard component.
187
+ * @input {any} customMiniCard - Custom component to replace the default MiniCard component.
188
+ * @input {any} customMainComponent - Custom component that provides complete control over the main UI, bypassing default MediaSFU styling.
185
189
  *
186
190
  * @property {string} title - The title of the component, defaults to "MediaSFU-Webinar".
187
191
  *
@@ -206,13 +210,17 @@ export type MediasfuWebinarOptions = {
206
210
  * [useLocalUIMode]="true"
207
211
  * [seedData]="seedDataObject"
208
212
  * [useSeed]="true"
209
- * [imgSrc]="https://example.com/logo.png">
213
+ * [imgSrc]="'https://example.com/logo.png'"
210
214
  * [sourceParameters]="{ source: 'camera', width: 640, height: 480 }"
211
215
  * [updateSourceParameters]="updateSourceParameters"
212
216
  * [returnUI]="true"
213
217
  * [noUIPreJoinOptions]="{ roomName: 'room1', userName: 'user1' }"
214
218
  * [joinMediaSFURoom]="joinMediaSFURoom"
215
- * [createMediaSFURoom]="createMediaSFURoom">
219
+ * [createMediaSFURoom]="createMediaSFURoom"
220
+ * [customVideoCard]="CustomVideoCardComponent"
221
+ * [customAudioCard]="CustomAudioCardComponent"
222
+ * [customMiniCard]="CustomMiniCardComponent"
223
+ * [customMainComponent]="CustomMainComponent">
216
224
  * </app-mediasfu-webinar>
217
225
  * ```
218
226
  */
@@ -357,6 +365,10 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
357
365
  noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;
358
366
  joinMediaSFURoom?: JoinRoomOnMediaSFUType;
359
367
  createMediaSFURoom?: CreateRoomOnMediaSFUType;
368
+ customVideoCard: any;
369
+ customAudioCard: any;
370
+ customMiniCard: any;
371
+ customMainComponent: any;
360
372
  title: string;
361
373
  private mainHeightWidthSubscription;
362
374
  private validatedSubscription;
@@ -367,6 +379,22 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
367
379
  private recordingSubscription;
368
380
  constructor(cdr: ChangeDetectorRef, injector: Injector, updateMiniCardsGrid: UpdateMiniCardsGrid, mixStreams: MixStreams, dispStreams: DispStreams, stopShareScreen: StopShareScreen, checkScreenShare: CheckScreenShare, startShareScreen: StartShareScreen, requestScreenShare: RequestScreenShare, reorderStreams: ReorderStreams, prepopulateUserMedia: PrepopulateUserMedia, getVideos: GetVideos, rePort: RePort, trigger: Trigger, consumerResume: ConsumerResume, connectSendTransport: ConnectSendTransport, connectSendTransportAudio: ConnectSendTransportAudio, connectSendTransportVideo: ConnectSendTransportVideo, connectSendTransportScreen: ConnectSendTransportScreen, processConsumerTransports: ProcessConsumerTransports, resumePauseStreams: ResumePauseStreams, readjust: Readjust, checkGrid: CheckGrid, getEstimate: GetEstimate, calculateRowsAndColumns: CalculateRowsAndColumns, addVideosGrid: AddVideosGrid, onScreenChanges: OnScreenChanges, changeVids: ChangeVids, compareActiveNames: CompareActiveNames, compareScreenStates: CompareScreenStates, createSendTransport: CreateSendTransport, resumeSendTransportAudio: ResumeSendTransportAudio, receiveAllPipedTransports: ReceiveAllPipedTransports, disconnectSendTransportVideo: DisconnectSendTransportVideo, disconnectSendTransportAudio: DisconnectSendTransportAudio, disconnectSendTransportScreen: DisconnectSendTransportScreen, getPipedProducersAlt: GetPipedProducersAlt, signalNewConsumerTransport: SignalNewConsumerTransport, connectRecvTransport: ConnectRecvTransport, reUpdateInter: ReUpdateInter, updateParticipantAudioDecibels: UpdateParticipantAudioDecibels, closeAndResize: CloseAndResize, autoAdjust: AutoAdjust, switchUserVideoAlt: SwitchUserVideoAlt, switchUserVideo: SwitchUserVideo, switchUserAudio: SwitchUserAudio, getDomains: GetDomains, formatNumber: FormatNumber, connectIps: ConnectIps, connectLocalIps: ConnectLocalIps, createDeviceClient: CreateDeviceClient, handleCreatePoll: HandleCreatePoll, handleEndPoll: HandleEndPoll, handleVotePoll: HandleVotePoll, captureCanvasStream: CaptureCanvasStream, resumePauseAudioStreams: ResumePauseAudioStreams, processConsumerTransportsAudio: ProcessConsumerTransportsAudio, launchMenuModal: LaunchMenuModal, launchRecording: LaunchRecording, startRecording: StartRecording, confirmRecording: ConfirmRecording, launchWaiting: LaunchWaiting, launchCoHost: launchCoHost, launchMediaSettings: LaunchMediaSettings, launchDisplaySettings: LaunchDisplaySettings, launchSettings: LaunchSettings, launchRequests: LaunchRequests, launchParticipants: LaunchParticipants, launchMessages: LaunchMessages, launchConfirmExit: LaunchConfirmExit, launchPoll: LaunchPoll, launchBreakoutRooms: LaunchBreakoutRooms, launchConfigureWhiteboard: LaunchConfigureWhiteboard, startMeetingProgressTimer: StartMeetingProgressTimer, updateRecording: UpdateRecording, stopRecording: StopRecording, userWaiting: UserWaiting, personJoined: PersonJoined, allWaitingRoomMembers: AllWaitingRoomMembers, roomRecordParams: RoomRecordParams, banParticipant: BanParticipant, updatedCoHost: UpdatedCoHost, participantRequested: ParticipantRequested, screenProducerId: ScreenProducerId, updateMediaSettings: UpdateMediaSettings, producerMediaPaused: ProducerMediaPaused, producerMediaResumed: ProducerMediaResumed, producerMediaClosed: ProducerMediaClosed, controlMediaHost: ControlMediaHost, meetingEnded: MeetingEnded, disconnectUserSelf: DisconnectUserSelf, receiveMessage: ReceiveMessage, meetingTimeRemaining: MeetingTimeRemaining, meetingStillThere: MeetingStillThere, startRecords: StartRecords, reInitiateRecording: ReInitiateRecording, recordingNotice: RecordingNotice, timeLeftRecording: TimeLeftRecording, stoppedRecording: StoppedRecording, hostRequestResponse: HostRequestResponse, allMembers: AllMembers, allMembersRest: AllMembersRest, disconnect: Disconnect, pollUpdated: PollUpdated, breakoutRoomUpdated: BreakoutRoomUpdated, socketManager: SocketManager, joinRoomClient: JoinRoomClient, joinLocalRoom: JoinLocalRoom, updateRoomParametersClient: UpdateRoomParametersClient, clickVideo: ClickVideo, clickAudio: ClickAudio, clickScreenShare: ClickScreenShare, streamSuccessVideo: StreamSuccessVideo, streamSuccessAudio: StreamSuccessAudio, streamSuccessScreen: StreamSuccessScreen, streamSuccessAudioSwitch: StreamSuccessAudioSwitch, checkPermission: CheckPermission, updateConsumingDomains: UpdateConsumingDomains, receiveRoomMessages: ReceiveRoomMessages);
369
381
  createInjector(inputs: any): Injector;
382
+ /**
383
+ * Gets a list of media devices filtered by the specified kind.
384
+ * @param kind - The kind of media device to filter by ('videoinput' or 'audioinput')
385
+ * @returns A promise that resolves to an array of MediaDeviceInfo objects
386
+ */
387
+ getMediaDevicesList: (kind: "videoinput" | "audioinput") => Promise<MediaDeviceInfo[]>;
388
+ /**
389
+ * Gets the media stream for a participant by their ID or name.
390
+ * @param options - Object containing id, name, and kind parameters
391
+ * @returns A promise that resolves to the participant's MediaStream or null if not found
392
+ */
393
+ getParticipantMedia: (options: {
394
+ id?: string;
395
+ name?: string;
396
+ kind: "video" | "audio";
397
+ }) => Promise<MediaStream | null>;
370
398
  mediaSFUFunctions: () => {
371
399
  updateMiniCardsGrid: ({ rows, cols, defal, actualRows, parameters, }: import("../../consumers/update-mini-cards-grid.service").UpdateMiniCardsGridOptions) => Promise<void>;
372
400
  mixStreams: ({ alVideoStreams, non_alVideoStreams, ref_participants, }: import("../../consumers/mix-streams.service").MixStreamsOptions) => Promise<(Stream | Participant)[]>;
@@ -441,6 +469,12 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
441
469
  clickScreenShare: ({ parameters }: import("../../@types/types").ClickScreenShareOptions) => Promise<void>;
442
470
  requestPermissionCamera: () => Promise<string>;
443
471
  requestPermissionAudio: () => Promise<string>;
472
+ getMediaDevicesList: (kind: "videoinput" | "audioinput") => Promise<MediaDeviceInfo[]>;
473
+ getParticipantMedia: (options: {
474
+ id?: string;
475
+ name?: string;
476
+ kind: "video" | "audio";
477
+ }) => Promise<MediaStream | null>;
444
478
  };
445
479
  validated: BehaviorSubject<boolean>;
446
480
  localUIMode: BehaviorSubject<boolean>;
@@ -891,7 +925,7 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
891
925
  recordingVideoOptions: BehaviorSubject<string>;
892
926
  recordingVideoType: BehaviorSubject<string>;
893
927
  recordingVideoOptimized: BehaviorSubject<boolean>;
894
- recordingDisplayType: BehaviorSubject<"video" | "all" | "media">;
928
+ recordingDisplayType: BehaviorSubject<"video" | "media" | "all">;
895
929
  recordingAddHLS: BehaviorSubject<boolean>;
896
930
  recordingNameTags: BehaviorSubject<boolean>;
897
931
  recordingBackgroundColor: BehaviorSubject<string>;
@@ -1119,7 +1153,7 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
1119
1153
  updateAnnotateScreenStream: (value: boolean) => void;
1120
1154
  updateMainScreenCanvas: (value: HTMLCanvasElement | null) => void;
1121
1155
  updateIsScreenboardModalVisible: (value: boolean) => void;
1122
- checkOrientation: () => "landscape" | "portrait";
1156
+ checkOrientation: () => "portrait" | "landscape";
1123
1157
  showAlert: ({ message, type, duration, }: {
1124
1158
  message: string;
1125
1159
  type: "success" | "danger";
@@ -1362,7 +1396,7 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
1362
1396
  recordingVideoOptions: string;
1363
1397
  recordingVideoType: string;
1364
1398
  recordingVideoOptimized: boolean;
1365
- recordingDisplayType: "video" | "all" | "media";
1399
+ recordingDisplayType: "video" | "media" | "all";
1366
1400
  recordingAddHLS: boolean;
1367
1401
  recordingAddText: boolean;
1368
1402
  recordingCustomText: string;
@@ -1763,11 +1797,14 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
1763
1797
  updateAnnotateScreenStream: (value: boolean) => void;
1764
1798
  updateMainScreenCanvas: (value: HTMLCanvasElement | null) => void;
1765
1799
  updateIsScreenboardModalVisible: (value: boolean) => void;
1766
- checkOrientation: () => "landscape" | "portrait";
1800
+ checkOrientation: () => "portrait" | "landscape";
1767
1801
  updateDevice: (value: Device | null) => void;
1768
1802
  updateSocket: (value: Socket) => void;
1769
1803
  updateLocalSocket: (value: Socket | null) => void;
1770
1804
  updateValidated: (value: boolean) => void;
1805
+ customVideoCard: any;
1806
+ customAudioCard: any;
1807
+ customMiniCard: any;
1771
1808
  showAlert: ({ message, type, duration, }: {
1772
1809
  message: string;
1773
1810
  type: "success" | "danger";
@@ -1847,6 +1884,12 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
1847
1884
  clickScreenShare: ({ parameters }: import("../../@types/types").ClickScreenShareOptions) => Promise<void>;
1848
1885
  requestPermissionCamera: () => Promise<string>;
1849
1886
  requestPermissionAudio: () => Promise<string>;
1887
+ getMediaDevicesList: (kind: "videoinput" | "audioinput") => Promise<MediaDeviceInfo[]>;
1888
+ getParticipantMedia: (options: {
1889
+ id?: string;
1890
+ name?: string;
1891
+ kind: "video" | "audio";
1892
+ }) => Promise<MediaStream | null>;
1850
1893
  localUIMode: boolean;
1851
1894
  roomName: string;
1852
1895
  member: string;
@@ -2083,7 +2126,7 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
2083
2126
  recordingVideoOptions: string;
2084
2127
  recordingVideoType: string;
2085
2128
  recordingVideoOptimized: boolean;
2086
- recordingDisplayType: "video" | "all" | "media";
2129
+ recordingDisplayType: "video" | "media" | "all";
2087
2130
  recordingAddHLS: boolean;
2088
2131
  recordingAddText: boolean;
2089
2132
  recordingCustomText: string;
@@ -2484,11 +2527,14 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
2484
2527
  updateAnnotateScreenStream: (value: boolean) => void;
2485
2528
  updateMainScreenCanvas: (value: HTMLCanvasElement | null) => void;
2486
2529
  updateIsScreenboardModalVisible: (value: boolean) => void;
2487
- checkOrientation: () => "landscape" | "portrait";
2530
+ checkOrientation: () => "portrait" | "landscape";
2488
2531
  updateDevice: (value: Device | null) => void;
2489
2532
  updateSocket: (value: Socket) => void;
2490
2533
  updateLocalSocket: (value: Socket | null) => void;
2491
2534
  updateValidated: (value: boolean) => void;
2535
+ customVideoCard: any;
2536
+ customAudioCard: any;
2537
+ customMiniCard: any;
2492
2538
  showAlert: ({ message, type, duration, }: {
2493
2539
  message: string;
2494
2540
  type: "success" | "danger";
@@ -2571,6 +2617,12 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
2571
2617
  clickScreenShare: ({ parameters }: import("../../@types/types").ClickScreenShareOptions) => Promise<void>;
2572
2618
  requestPermissionCamera: () => Promise<string>;
2573
2619
  requestPermissionAudio: () => Promise<string>;
2620
+ getMediaDevicesList: (kind: "videoinput" | "audioinput") => Promise<MediaDeviceInfo[]>;
2621
+ getParticipantMedia: (options: {
2622
+ id?: string;
2623
+ name?: string;
2624
+ kind: "video" | "audio";
2625
+ }) => Promise<MediaStream | null>;
2574
2626
  localUIMode: boolean;
2575
2627
  roomName: string;
2576
2628
  member: string;
@@ -2807,7 +2859,7 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
2807
2859
  recordingVideoOptions: string;
2808
2860
  recordingVideoType: string;
2809
2861
  recordingVideoOptimized: boolean;
2810
- recordingDisplayType: "video" | "all" | "media";
2862
+ recordingDisplayType: "video" | "media" | "all";
2811
2863
  recordingAddHLS: boolean;
2812
2864
  recordingAddText: boolean;
2813
2865
  recordingCustomText: string;
@@ -3208,11 +3260,14 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
3208
3260
  updateAnnotateScreenStream: (value: boolean) => void;
3209
3261
  updateMainScreenCanvas: (value: HTMLCanvasElement | null) => void;
3210
3262
  updateIsScreenboardModalVisible: (value: boolean) => void;
3211
- checkOrientation: () => "landscape" | "portrait";
3263
+ checkOrientation: () => "portrait" | "landscape";
3212
3264
  updateDevice: (value: Device | null) => void;
3213
3265
  updateSocket: (value: Socket) => void;
3214
3266
  updateLocalSocket: (value: Socket | null) => void;
3215
3267
  updateValidated: (value: boolean) => void;
3268
+ customVideoCard: any;
3269
+ customAudioCard: any;
3270
+ customMiniCard: any;
3216
3271
  showAlert: ({ message, type, duration, }: {
3217
3272
  message: string;
3218
3273
  type: "success" | "danger";
@@ -3292,6 +3347,12 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
3292
3347
  clickScreenShare: ({ parameters }: import("../../@types/types").ClickScreenShareOptions) => Promise<void>;
3293
3348
  requestPermissionCamera: () => Promise<string>;
3294
3349
  requestPermissionAudio: () => Promise<string>;
3350
+ getMediaDevicesList: (kind: "videoinput" | "audioinput") => Promise<MediaDeviceInfo[]>;
3351
+ getParticipantMedia: (options: {
3352
+ id?: string;
3353
+ name?: string;
3354
+ kind: "video" | "audio";
3355
+ }) => Promise<MediaStream | null>;
3295
3356
  localUIMode: boolean;
3296
3357
  roomName: string;
3297
3358
  member: string;
@@ -3528,7 +3589,7 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
3528
3589
  recordingVideoOptions: string;
3529
3590
  recordingVideoType: string;
3530
3591
  recordingVideoOptimized: boolean;
3531
- recordingDisplayType: "video" | "all" | "media";
3592
+ recordingDisplayType: "video" | "media" | "all";
3532
3593
  recordingAddHLS: boolean;
3533
3594
  recordingAddText: boolean;
3534
3595
  recordingCustomText: string;
@@ -3929,11 +3990,14 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
3929
3990
  updateAnnotateScreenStream: (value: boolean) => void;
3930
3991
  updateMainScreenCanvas: (value: HTMLCanvasElement | null) => void;
3931
3992
  updateIsScreenboardModalVisible: (value: boolean) => void;
3932
- checkOrientation: () => "landscape" | "portrait";
3993
+ checkOrientation: () => "portrait" | "landscape";
3933
3994
  updateDevice: (value: Device | null) => void;
3934
3995
  updateSocket: (value: Socket) => void;
3935
3996
  updateLocalSocket: (value: Socket | null) => void;
3936
3997
  updateValidated: (value: boolean) => void;
3998
+ customVideoCard: any;
3999
+ customAudioCard: any;
4000
+ customMiniCard: any;
3937
4001
  showAlert: ({ message, type, duration, }: {
3938
4002
  message: string;
3939
4003
  type: "success" | "danger";
@@ -4016,6 +4080,12 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
4016
4080
  clickScreenShare: ({ parameters }: import("../../@types/types").ClickScreenShareOptions) => Promise<void>;
4017
4081
  requestPermissionCamera: () => Promise<string>;
4018
4082
  requestPermissionAudio: () => Promise<string>;
4083
+ getMediaDevicesList: (kind: "videoinput" | "audioinput") => Promise<MediaDeviceInfo[]>;
4084
+ getParticipantMedia: (options: {
4085
+ id?: string;
4086
+ name?: string;
4087
+ kind: "video" | "audio";
4088
+ }) => Promise<MediaStream | null>;
4019
4089
  localUIMode: boolean;
4020
4090
  roomName: string;
4021
4091
  member: string;
@@ -4252,7 +4322,7 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
4252
4322
  recordingVideoOptions: string;
4253
4323
  recordingVideoType: string;
4254
4324
  recordingVideoOptimized: boolean;
4255
- recordingDisplayType: "video" | "all" | "media";
4325
+ recordingDisplayType: "video" | "media" | "all";
4256
4326
  recordingAddHLS: boolean;
4257
4327
  recordingAddText: boolean;
4258
4328
  recordingCustomText: string;
@@ -4653,11 +4723,14 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
4653
4723
  updateAnnotateScreenStream: (value: boolean) => void;
4654
4724
  updateMainScreenCanvas: (value: HTMLCanvasElement | null) => void;
4655
4725
  updateIsScreenboardModalVisible: (value: boolean) => void;
4656
- checkOrientation: () => "landscape" | "portrait";
4726
+ checkOrientation: () => "portrait" | "landscape";
4657
4727
  updateDevice: (value: Device | null) => void;
4658
4728
  updateSocket: (value: Socket) => void;
4659
4729
  updateLocalSocket: (value: Socket | null) => void;
4660
4730
  updateValidated: (value: boolean) => void;
4731
+ customVideoCard: any;
4732
+ customAudioCard: any;
4733
+ customMiniCard: any;
4661
4734
  showAlert: ({ message, type, duration, }: {
4662
4735
  message: string;
4663
4736
  type: "success" | "danger";
@@ -4737,6 +4810,12 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
4737
4810
  clickScreenShare: ({ parameters }: import("../../@types/types").ClickScreenShareOptions) => Promise<void>;
4738
4811
  requestPermissionCamera: () => Promise<string>;
4739
4812
  requestPermissionAudio: () => Promise<string>;
4813
+ getMediaDevicesList: (kind: "videoinput" | "audioinput") => Promise<MediaDeviceInfo[]>;
4814
+ getParticipantMedia: (options: {
4815
+ id?: string;
4816
+ name?: string;
4817
+ kind: "video" | "audio";
4818
+ }) => Promise<MediaStream | null>;
4740
4819
  localUIMode: boolean;
4741
4820
  roomName: string;
4742
4821
  member: string;
@@ -4973,7 +5052,7 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
4973
5052
  recordingVideoOptions: string;
4974
5053
  recordingVideoType: string;
4975
5054
  recordingVideoOptimized: boolean;
4976
- recordingDisplayType: "video" | "all" | "media";
5055
+ recordingDisplayType: "video" | "media" | "all";
4977
5056
  recordingAddHLS: boolean;
4978
5057
  recordingAddText: boolean;
4979
5058
  recordingCustomText: string;
@@ -5374,11 +5453,14 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
5374
5453
  updateAnnotateScreenStream: (value: boolean) => void;
5375
5454
  updateMainScreenCanvas: (value: HTMLCanvasElement | null) => void;
5376
5455
  updateIsScreenboardModalVisible: (value: boolean) => void;
5377
- checkOrientation: () => "landscape" | "portrait";
5456
+ checkOrientation: () => "portrait" | "landscape";
5378
5457
  updateDevice: (value: Device | null) => void;
5379
5458
  updateSocket: (value: Socket) => void;
5380
5459
  updateLocalSocket: (value: Socket | null) => void;
5381
5460
  updateValidated: (value: boolean) => void;
5461
+ customVideoCard: any;
5462
+ customAudioCard: any;
5463
+ customMiniCard: any;
5382
5464
  showAlert: ({ message, type, duration, }: {
5383
5465
  message: string;
5384
5466
  type: "success" | "danger";
@@ -5552,6 +5634,12 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
5552
5634
  clickScreenShare: ({ parameters }: import("../../@types/types").ClickScreenShareOptions) => Promise<void>;
5553
5635
  requestPermissionCamera: () => Promise<string>;
5554
5636
  requestPermissionAudio: () => Promise<string>;
5637
+ getMediaDevicesList: (kind: "videoinput" | "audioinput") => Promise<MediaDeviceInfo[]>;
5638
+ getParticipantMedia: (options: {
5639
+ id?: string;
5640
+ name?: string;
5641
+ kind: "video" | "audio";
5642
+ }) => Promise<MediaStream | null>;
5555
5643
  localUIMode: boolean;
5556
5644
  roomName: string;
5557
5645
  member: string;
@@ -5788,7 +5876,7 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
5788
5876
  recordingVideoOptions: string;
5789
5877
  recordingVideoType: string;
5790
5878
  recordingVideoOptimized: boolean;
5791
- recordingDisplayType: "video" | "all" | "media";
5879
+ recordingDisplayType: "video" | "media" | "all";
5792
5880
  recordingAddHLS: boolean;
5793
5881
  recordingAddText: boolean;
5794
5882
  recordingCustomText: string;
@@ -6189,11 +6277,14 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
6189
6277
  updateAnnotateScreenStream: (value: boolean) => void;
6190
6278
  updateMainScreenCanvas: (value: HTMLCanvasElement | null) => void;
6191
6279
  updateIsScreenboardModalVisible: (value: boolean) => void;
6192
- checkOrientation: () => "landscape" | "portrait";
6280
+ checkOrientation: () => "portrait" | "landscape";
6193
6281
  updateDevice: (value: Device | null) => void;
6194
6282
  updateSocket: (value: Socket) => void;
6195
6283
  updateLocalSocket: (value: Socket | null) => void;
6196
6284
  updateValidated: (value: boolean) => void;
6285
+ customVideoCard: any;
6286
+ customAudioCard: any;
6287
+ customMiniCard: any;
6197
6288
  showAlert: ({ message, type, duration, }: {
6198
6289
  message: string;
6199
6290
  type: "success" | "danger";
@@ -6273,6 +6364,12 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
6273
6364
  clickScreenShare: ({ parameters }: import("../../@types/types").ClickScreenShareOptions) => Promise<void>;
6274
6365
  requestPermissionCamera: () => Promise<string>;
6275
6366
  requestPermissionAudio: () => Promise<string>;
6367
+ getMediaDevicesList: (kind: "videoinput" | "audioinput") => Promise<MediaDeviceInfo[]>;
6368
+ getParticipantMedia: (options: {
6369
+ id?: string;
6370
+ name?: string;
6371
+ kind: "video" | "audio";
6372
+ }) => Promise<MediaStream | null>;
6276
6373
  localUIMode: boolean;
6277
6374
  roomName: string;
6278
6375
  member: string;
@@ -6509,7 +6606,7 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
6509
6606
  recordingVideoOptions: string;
6510
6607
  recordingVideoType: string;
6511
6608
  recordingVideoOptimized: boolean;
6512
- recordingDisplayType: "video" | "all" | "media";
6609
+ recordingDisplayType: "video" | "media" | "all";
6513
6610
  recordingAddHLS: boolean;
6514
6611
  recordingAddText: boolean;
6515
6612
  recordingCustomText: string;
@@ -6910,11 +7007,14 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
6910
7007
  updateAnnotateScreenStream: (value: boolean) => void;
6911
7008
  updateMainScreenCanvas: (value: HTMLCanvasElement | null) => void;
6912
7009
  updateIsScreenboardModalVisible: (value: boolean) => void;
6913
- checkOrientation: () => "landscape" | "portrait";
7010
+ checkOrientation: () => "portrait" | "landscape";
6914
7011
  updateDevice: (value: Device | null) => void;
6915
7012
  updateSocket: (value: Socket) => void;
6916
7013
  updateLocalSocket: (value: Socket | null) => void;
6917
7014
  updateValidated: (value: boolean) => void;
7015
+ customVideoCard: any;
7016
+ customAudioCard: any;
7017
+ customMiniCard: any;
6918
7018
  showAlert: ({ message, type, duration, }: {
6919
7019
  message: string;
6920
7020
  type: "success" | "danger";
@@ -7019,5 +7119,5 @@ export declare class MediasfuWebinar implements OnInit, OnDestroy {
7019
7119
  })[];
7020
7120
  connect_Socket(apiUserName: string, token: string, skipSockets?: boolean): Promise<Socket | null>;
7021
7121
  static ɵfac: i0.ɵɵFactoryDeclaration<MediasfuWebinar, never>;
7022
- static ɵcmp: i0.ɵɵComponentDeclaration<MediasfuWebinar, "app-mediasfu-webinar", never, { "PrejoinPage": { "alias": "PrejoinPage"; "required": false; }; "localLink": { "alias": "localLink"; "required": false; }; "connectMediaSFU": { "alias": "connectMediaSFU"; "required": false; }; "credentials": { "alias": "credentials"; "required": false; }; "useLocalUIMode": { "alias": "useLocalUIMode"; "required": false; }; "seedData": { "alias": "seedData"; "required": false; }; "useSeed": { "alias": "useSeed"; "required": false; }; "imgSrc": { "alias": "imgSrc"; "required": false; }; "sourceParameters": { "alias": "sourceParameters"; "required": false; }; "updateSourceParameters": { "alias": "updateSourceParameters"; "required": false; }; "returnUI": { "alias": "returnUI"; "required": false; }; "noUIPreJoinOptions": { "alias": "noUIPreJoinOptions"; "required": false; }; "joinMediaSFURoom": { "alias": "joinMediaSFURoom"; "required": false; }; "createMediaSFURoom": { "alias": "createMediaSFURoom"; "required": false; }; }, {}, never, never, true, never>;
7122
+ static ɵcmp: i0.ɵɵComponentDeclaration<MediasfuWebinar, "app-mediasfu-webinar", never, { "PrejoinPage": { "alias": "PrejoinPage"; "required": false; }; "localLink": { "alias": "localLink"; "required": false; }; "connectMediaSFU": { "alias": "connectMediaSFU"; "required": false; }; "credentials": { "alias": "credentials"; "required": false; }; "useLocalUIMode": { "alias": "useLocalUIMode"; "required": false; }; "seedData": { "alias": "seedData"; "required": false; }; "useSeed": { "alias": "useSeed"; "required": false; }; "imgSrc": { "alias": "imgSrc"; "required": false; }; "sourceParameters": { "alias": "sourceParameters"; "required": false; }; "updateSourceParameters": { "alias": "updateSourceParameters"; "required": false; }; "returnUI": { "alias": "returnUI"; "required": false; }; "noUIPreJoinOptions": { "alias": "noUIPreJoinOptions"; "required": false; }; "joinMediaSFURoom": { "alias": "joinMediaSFURoom"; "required": false; }; "createMediaSFURoom": { "alias": "createMediaSFURoom"; "required": false; }; "customVideoCard": { "alias": "customVideoCard"; "required": false; }; "customAudioCard": { "alias": "customAudioCard"; "required": false; }; "customMiniCard": { "alias": "customMiniCard"; "required": false; }; "customMainComponent": { "alias": "customMainComponent"; "required": false; }; }, {}, never, never, true, never>;
7023
7123
  }
@@ -12,6 +12,9 @@ export interface AddVideosGridParameters extends UpdateMiniCardsGridParameters,
12
12
  forceFullDisplay: boolean;
13
13
  otherGridStreams: CustomMediaComponent[][];
14
14
  updateOtherGridStreams: (otherGridStreams: CustomMediaComponent[][]) => void;
15
+ customVideoCard?: any;
16
+ customAudioCard?: any;
17
+ customMiniCard?: any;
15
18
  updateMiniCardsGrid: UpdateMiniCardsGridType;
16
19
  getUpdatedAllParams: () => AddVideosGridParameters;
17
20
  [key: string]: any;
@@ -37,6 +37,9 @@ export interface PrepopulateUserMediaParameters extends AudioCardParameters {
37
37
  updateScreenForceFullDisplay: (force: boolean) => void;
38
38
  updateUpdateMainWindow: (update: boolean) => void;
39
39
  updateMainGridStream: (components: CustomMediaComponent[]) => void;
40
+ customVideoCard?: any;
41
+ customAudioCard?: any;
42
+ customMiniCard?: any;
40
43
  getUpdatedAllParams: () => PrepopulateUserMediaParameters;
41
44
  [key: string]: any;
42
45
  }
@@ -5,7 +5,8 @@ import * as i0 from "@angular/core";
5
5
  *
6
6
  * This method sends a POST request to the MediaSFU API to create a new room.
7
7
  * It validates the provided credentials and dynamically constructs the API endpoint,
8
- * supporting the Community Edition via a custom `localLink`.
8
+ * supporting the Community Edition via a custom `localLink`. The method includes
9
+ * a 30-second protection mechanism to prevent duplicate room creation requests.
9
10
  *
10
11
  * @param {object} options - Configuration options for creating the room.
11
12
  * @param {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} options.payload -
@@ -28,12 +29,12 @@ import * as i0 from "@angular/core";
28
29
  * const response = await createRoomOnMediaSFU.createRoomOnMediaSFU({
29
30
  * payload: {
30
31
  * action: 'create',
31
- * duration: 120, // Duration in minutes
32
- * capacity: 20, // Max participants
32
+ * duration: 60, // Duration in minutes
33
+ * capacity: 10, // Max participants
33
34
  * userName: 'hostUser',
34
35
  * scheduledDate: Date.now() + 3600000, // One hour from now
35
36
  * secureCode: 'secure123', // Optional
36
- * eventType: 'webinar', // Optional
37
+ * eventType: 'conference', // Optional
37
38
  * },
38
39
  * apiUserName: 'yourAPIUSERNAME',
39
40
  * apiKey: 'yourAPIKEY',
@@ -53,7 +54,8 @@ export declare class CreateRoomOnMediaSFU {
53
54
  *
54
55
  * This method sends a POST request to the MediaSFU API to create a new room.
55
56
  * It validates the provided credentials and dynamically constructs the API endpoint,
56
- * supporting the Community Edition via a custom `localLink`.
57
+ * supporting the Community Edition via a custom `localLink`. The method includes
58
+ * a 30-second protection mechanism to prevent duplicate room creation requests.
57
59
  *
58
60
  * @param {object} options - Configuration options for creating the room.
59
61
  * @param {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} options.payload -
@@ -76,12 +78,12 @@ export declare class CreateRoomOnMediaSFU {
76
78
  * const response = await createRoomOnMediaSFU.createRoomOnMediaSFU({
77
79
  * payload: {
78
80
  * action: 'create',
79
- * duration: 120, // Duration in minutes
80
- * capacity: 20, // Max participants
81
+ * duration: 60, // Duration in minutes
82
+ * capacity: 10, // Max participants
81
83
  * userName: 'hostUser',
82
84
  * scheduledDate: Date.now() + 3600000, // One hour from now
83
85
  * secureCode: 'secure123', // Optional
84
- * eventType: 'webinar', // Optional
86
+ * eventType: 'conference', // Optional
85
87
  * },
86
88
  * apiUserName: 'yourAPIUSERNAME',
87
89
  * apiKey: 'yourAPIKEY',
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Custom Component Injection Service
3
+ * Manages custom component injection and rendering for MediaSFU Angular components
4
+ */
5
+ import { Injector, ComponentRef, ViewContainerRef, Type } from '@angular/core';
6
+ import { CustomComponent, CustomComponentType, CustomComponentFunction, CustomComponentParameters, CustomComponentContext } from '../@types/custom-component.types';
7
+ import * as i0 from "@angular/core";
8
+ export declare class CustomComponentInjectionService {
9
+ private defaultConfig;
10
+ constructor();
11
+ /**
12
+ * Creates an injector with custom parameters for component injection
13
+ * @param parameters Custom parameters to inject
14
+ * @param parentInjector Parent injector to inherit from
15
+ * @returns New injector with custom parameters
16
+ */
17
+ createCustomInjector(parameters: CustomComponentParameters, parentInjector?: Injector): Injector;
18
+ /**
19
+ * Checks if a component is a custom Angular component
20
+ */
21
+ isCustomComponent<T>(comp: CustomComponentType<T>): comp is CustomComponent<T>;
22
+ /**
23
+ * Checks if a component is a function-based component
24
+ */
25
+ isFunctionComponent(comp: CustomComponentType): comp is CustomComponentFunction;
26
+ /**
27
+ * Checks if a component is an HTML element
28
+ */
29
+ isHTMLElement(comp: CustomComponentType): comp is HTMLElement;
30
+ /**
31
+ * Safely gets the outerHTML of an HTMLElement component
32
+ * @param comp Component that could be HTMLElement or CustomComponent
33
+ * @returns outerHTML string or empty string if not HTMLElement
34
+ */
35
+ getHtmlElementOuterHTML<T>(comp: CustomComponentType<T>): string;
36
+ /**
37
+ * Renders a custom component in the specified container
38
+ * @param customComponent The custom component to render
39
+ * @param container ViewContainerRef where the component should be rendered
40
+ * @param context Component context with parameters and configuration
41
+ * @returns ComponentRef or HTMLElement reference
42
+ */
43
+ renderCustomComponent<T>(customComponent: CustomComponentType<T>, container: ViewContainerRef, context: CustomComponentContext): ComponentRef<T> | HTMLElement | null;
44
+ /**
45
+ * Creates a component object with injector for dynamic component rendering
46
+ * @param componentType Component type
47
+ * @param parameters Parameters to inject
48
+ * @param parentInjector Parent injector
49
+ * @returns Component object with injector
50
+ */
51
+ createComponentWithInjector<T>(componentType: Type<T>, parameters?: CustomComponentParameters, parentInjector?: Injector): CustomComponent<T>;
52
+ /**
53
+ * Validates if a custom component can be rendered
54
+ * @param customComponent Component to validate
55
+ * @returns boolean indicating if component is valid
56
+ */
57
+ validateCustomComponent<T>(customComponent: CustomComponentType<T>): boolean;
58
+ /**
59
+ * Merges custom component options with defaults
60
+ * @param customOptions Custom component options
61
+ * @param defaultOptions Default component options
62
+ * @returns Merged options
63
+ */
64
+ mergeComponentOptions<T>(customOptions: Partial<T>, defaultOptions: T): T;
65
+ /**
66
+ * Destroys a custom component and cleans up resources
67
+ * @param componentRef Component reference to destroy
68
+ */
69
+ destroyCustomComponent<T>(componentRef: ComponentRef<T> | HTMLElement | null): void;
70
+ /**
71
+ * Helper method to resolve component from custom or default
72
+ * This is useful for the pattern: customComponent || defaultComponent
73
+ * @param customComponent Custom component (can be undefined)
74
+ * @param defaultComponent Default fallback component
75
+ * @returns The resolved component
76
+ */
77
+ resolveComponent<T>(customComponent: CustomComponentType<T> | undefined, defaultComponent: CustomComponentType<T>): CustomComponentType<T>;
78
+ /**
79
+ * Checks if we should use custom main component (for template restructuring)
80
+ * @param customMainComponent Custom main component
81
+ * @returns boolean indicating if custom main component should be used
82
+ */
83
+ shouldUseCustomMainComponent<T>(customMainComponent: CustomComponentType<T> | undefined): boolean;
84
+ static ɵfac: i0.ɵɵFactoryDeclaration<CustomComponentInjectionService, never>;
85
+ static ɵprov: i0.ɵɵInjectableDeclaration<CustomComponentInjectionService>;
86
+ }
@@ -51,6 +51,7 @@ export * from './lib/methods/polls-methods/launch-poll.service';
51
51
  export * from './lib/methods/background-methods/launch-background.service';
52
52
  export * from './lib/methods/breakout-room-methods/launch-breakout-rooms.service';
53
53
  export * from './lib/methods/whiteboard-methods/launch-configure-whiteboard.service';
54
+ export * from './lib/services/custom-component-injection.service';
54
55
  export * from './lib/sockets/socket-manager.service';
55
56
  export * from './lib/producer-client/producer-client-emits/join-room-client.service';
56
57
  export * from './lib/producer-client/producer-client-emits/update-room-parameters-client.service';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mediasfu-angular",
3
- "version": "2.1.6",
3
+ "version": "2.2.1",
4
4
  "author": "MediaSFU",
5
5
  "license": "MIT",
6
6
  "description": "MediaSFU Prebuilt Angular SDK",
@@ -14,26 +14,26 @@
14
14
  "email": "info@mediasfu.com"
15
15
  },
16
16
  "peerDependencies": {
17
- "@angular/animations": "^19.0.1",
18
- "@angular/common": "^19.0.1",
19
- "@angular/compiler": "^19.0.1",
20
- "@angular/core": "^19.0.1",
21
- "@angular/forms": "^19.0.1",
22
- "@angular/platform-browser": "^19.0.1",
23
- "@angular/platform-browser-dynamic": "^19.0.1",
24
- "@angular/router": "^19.0.1",
17
+ "@angular/animations": "^19.2.15",
18
+ "@angular/common": "^19.2.15",
19
+ "@angular/compiler": "^19.2.15",
20
+ "@angular/core": "^19.2.15",
21
+ "@angular/forms": "^19.2.15",
22
+ "@angular/platform-browser": "^19.2.15",
23
+ "@angular/platform-browser-dynamic": "^19.2.15",
24
+ "@angular/router": "^19.2.15",
25
25
  "@fortawesome/angular-fontawesome": "^1.0.0",
26
- "@fortawesome/fontawesome-svg-core": "^6.7.1",
27
- "@fortawesome/free-brands-svg-icons": "^6.7.1",
28
- "@fortawesome/free-solid-svg-icons": "^6.7.1",
26
+ "@fortawesome/fontawesome-svg-core": "^6.7.2",
27
+ "@fortawesome/free-brands-svg-icons": "^6.7.2",
28
+ "@fortawesome/free-solid-svg-icons": "^6.7.2",
29
29
  "@mediapipe/selfie_segmentation": "^0.1.1675465747",
30
30
  "@zxing/ngx-scanner": "^19.0.0",
31
- "bootstrap": "^5.3.3",
32
- "ngx-cookie-service": "^19.0.0",
31
+ "bootstrap": "^5.3.8",
32
+ "ngx-cookie-service": "^19.1.2",
33
33
  "rxjs": "~7.8.0",
34
34
  "zone.js": "~0.15.0",
35
35
  "mediasoup-client": "3.7.17",
36
- "socket.io-client": "^4.3.2"
36
+ "socket.io-client": "^4.8.1"
37
37
  },
38
38
  "dependencies": {
39
39
  "tslib": "^2.3.0"