11import type { VideoConferenceCapabilities } from '@rocket.chat/core-typings' ;
2+ import { Pexip , PexipVideoConfProvider } from '@rocket.chat/pexip' ;
23
34import { settings } from '../settings' ;
5+ import { getPexipSettings } from '../settings/pexip' ;
46
57const providers = new Map < string , { capabilities : VideoConferenceCapabilities ; label : string ; appId : string } > ( ) ;
68
9+ type Provider = { key : string ; label : string } ;
10+
711export const videoConfProviders = {
812 registerProvider ( providerName : string , capabilities : VideoConferenceCapabilities , appId : string ) : void {
913 providers . set ( providerName . toLowerCase ( ) , { capabilities, label : providerName , appId } ) ;
@@ -18,17 +22,20 @@ export const videoConfProviders = {
1822 } ,
1923
2024 getActiveProvider ( ) : string | undefined {
21- if ( providers . size === 0 ) {
22- return ;
23- }
24- const defaultProvider = settings . get < string > ( 'VideoConf_Default_Provider' ) ;
25+ if ( providers . size !== 0 ) {
26+ const defaultProvider = settings . get < string > ( 'VideoConf_Default_Provider' ) ;
27+
28+ if ( defaultProvider ) {
29+ if ( this . isProviderAvailable ( defaultProvider ) ) {
30+ return defaultProvider ;
31+ }
2532
26- if ( defaultProvider ) {
27- if ( providers . has ( defaultProvider ) ) {
28- return defaultProvider ;
33+ return ;
2934 }
35+ }
3036
31- return ;
37+ if ( this . isProviderAvailable ( 'core.pexip' ) ) {
38+ return 'core.pexip' ;
3239 }
3340
3441 if ( providers . size === 1 ) {
@@ -38,18 +45,56 @@ export const videoConfProviders = {
3845 } ,
3946
4047 hasAnyProvider ( ) : boolean {
41- return providers . size > 0 ;
48+ return providers . size > 0 || settings . get < boolean > ( 'Pexip_Integration_Enabled' ) ;
4249 } ,
4350
44- getProviderList ( ) : { key : string ; label : string } [ ] {
51+ getRegisteredProviders ( ) : Provider [ ] {
4552 return [ ...providers . keys ( ) ] . map ( ( key ) => ( { key, label : providers . get ( key ) ?. label || key } ) ) ;
4653 } ,
4754
55+ getInternalProviders ( ) : Provider [ ] {
56+ const pexip = this . getPexipProvider ( ) ;
57+
58+ if ( pexip ) {
59+ return [ pexip ] ;
60+ }
61+
62+ return [ ] ;
63+ } ,
64+
65+ getPexipProvider ( ) : Provider | null {
66+ if ( ! settings . get < boolean > ( 'Pexip_Integration_Enabled' ) ) {
67+ return null ;
68+ }
69+
70+ return { key : 'core.pexip' , label : 'Pexip_Integration' } ;
71+ } ,
72+
73+ getAllProviders ( ) : Provider [ ] {
74+ const registeredProviders = [ ...providers . keys ( ) ] . map ( ( key ) => ( { key, label : providers . get ( key ) ?. label || key } ) ) ;
75+ const internalProviders = this . getInternalProviders ( ) ;
76+
77+ return [ ...registeredProviders , ...internalProviders ] ;
78+ } ,
79+
4880 isProviderAvailable ( name : string ) : boolean {
81+ if ( name === 'core.pexip' ) {
82+ return settings . get < boolean > ( 'Pexip_Integration_Enabled' ) ;
83+ }
84+
4985 return providers . has ( name ) ;
5086 } ,
5187
5288 getProviderCapabilities ( name : string ) : VideoConferenceCapabilities | undefined {
89+ if ( name === 'core.pexip' ) {
90+ return {
91+ mic : false ,
92+ cam : false ,
93+ title : true ,
94+ persistentChat : true ,
95+ } ;
96+ }
97+
5398 const key = name . toLowerCase ( ) ;
5499 if ( ! providers . has ( key ) ) {
55100 return ;
@@ -60,11 +105,29 @@ export const videoConfProviders = {
60105
61106 getProviderAppId ( name : string ) : string | undefined {
62107 const key = name . toLowerCase ( ) ;
108+ if ( key === 'core.pexip' ) {
109+ return undefined ;
110+ }
63111
64112 if ( ! providers . has ( key ) ) {
65113 return ;
66114 }
67115
68116 return providers . get ( key ) ?. appId ;
69117 } ,
118+
119+ getVideoConfProviderHandler ( providerName : string ) : PexipVideoConfProvider | null {
120+ if ( providerName === 'core.pexip' ) {
121+ return this . getPexipHandler ( ) ;
122+ }
123+
124+ return null ;
125+ } ,
126+
127+ getPexipHandler ( ) {
128+ const pexipSettings = getPexipSettings ( ) ;
129+
130+ const pexip = new Pexip ( pexipSettings ) ;
131+ return new PexipVideoConfProvider ( pexip ) ;
132+ } ,
70133} ;
0 commit comments