@@ -186,74 +186,75 @@ class SocketWSServer extends SocketServer {
186186 context = message . context ;
187187 identifier = message . identifier ;
188188 }
189- tenant = tenant || socket ?. context . tenant ;
190- path = path || this . defaultPath ( service ) ;
191- const serviceClients = this . fetchClients ( tenant , this . servicePath ( path ) ) ;
192- let clients = new Set ( serviceClients . all ) ;
193- if ( user ?. include ?. length || role ?. include ?. length || context ?. include ?. length || identifier ?. include ?. length ) {
194- switch ( this . serviceOperator ( service , event , "include" ) ) {
195- case "or" :
196- default :
197- clients = new Set ( [
198- ...this . collectFromMap ( serviceClients . users , user ?. include ) ,
199- ...this . collectFromMap ( serviceClients . roles , role ?. include ) ,
200- ...this . collectFromMap ( serviceClients . contexts , context ?. include ) ,
201- ...this . collectFromMap ( serviceClients . identifiers , identifier ?. include ) ,
202- ] ) ;
203- break ;
204- case "and" :
205- user ?. include ?. length &&
206- this . keepEntriesFromSet ( clients , this . collectFromMap ( serviceClients . users , user . include ) ) ;
207- role ?. include ?. length &&
208- this . keepEntriesFromSet ( clients , this . collectFromMap ( serviceClients . roles , role . include ) ) ;
209- context ?. include ?. length &&
210- this . keepEntriesFromSet ( clients , this . collectFromMap ( serviceClients . contexts , context . include ) ) ;
211- identifier ?. include ?. length &&
212- this . keepEntriesFromSet ( clients , this . collectFromMap ( serviceClients . identifiers , identifier . include ) ) ;
213- break ;
189+ if ( ! this . adapterActive || local ) {
190+ tenant = tenant || socket ?. context . tenant ;
191+ path = path || this . defaultPath ( service ) ;
192+ const serviceClients = this . fetchClients ( tenant , this . servicePath ( path ) ) ;
193+ let clients = new Set ( serviceClients . all ) ;
194+ if ( user ?. include ?. length || role ?. include ?. length || context ?. include ?. length || identifier ?. include ?. length ) {
195+ switch ( this . serviceOperator ( service , event , "include" ) ) {
196+ case "or" :
197+ default :
198+ clients = new Set ( [
199+ ...this . collectFromMap ( serviceClients . users , user ?. include ) ,
200+ ...this . collectFromMap ( serviceClients . roles , role ?. include ) ,
201+ ...this . collectFromMap ( serviceClients . contexts , context ?. include ) ,
202+ ...this . collectFromMap ( serviceClients . identifiers , identifier ?. include ) ,
203+ ] ) ;
204+ break ;
205+ case "and" :
206+ user ?. include ?. length &&
207+ this . keepEntriesFromSet ( clients , this . collectFromMap ( serviceClients . users , user . include ) ) ;
208+ role ?. include ?. length &&
209+ this . keepEntriesFromSet ( clients , this . collectFromMap ( serviceClients . roles , role . include ) ) ;
210+ context ?. include ?. length &&
211+ this . keepEntriesFromSet ( clients , this . collectFromMap ( serviceClients . contexts , context . include ) ) ;
212+ identifier ?. include ?. length &&
213+ this . keepEntriesFromSet ( clients , this . collectFromMap ( serviceClients . identifiers , identifier . include ) ) ;
214+ break ;
215+ }
214216 }
215- }
216- if ( user ?. exclude ?. length || role ?. exclude ?. length || context ?. exclude ?. length || identifier ?. exclude ?. length ) {
217- switch ( this . serviceOperator ( service , event , "exclude" ) ) {
218- case "or" :
219- default :
220- this . keepEntriesFromSet (
221- clients ,
222- this . collectFromSet ( clients , ( client ) => {
223- return ! (
224- user ?. exclude ?. includes ( client . context . user ?. id ) ||
225- role ?. exclude ?. find ( ( role ) => client . context . user ?. is ( role ) ) ||
226- context ?. exclude ?. find ( ( context ) => client . contexts . has ( context ) ) ||
227- identifier ?. exclude ?. includes ( client . request ?. id )
228- ) ;
229- } ) ,
230- ) ;
231- break ;
232- case "and" :
233- this . keepEntriesFromSet (
234- clients ,
235- this . collectFromSet ( clients , ( client ) => {
236- return ! (
237- ( ! user ?. exclude ?. length || user ?. exclude . includes ( client . context . user ?. id ) ) &&
238- ( ! role ?. exclude ?. length || role ?. exclude . find ( ( role ) => client . context . user ?. is ( role ) ) ) &&
239- ( ! context ?. exclude ?. length || context ?. exclude . find ( ( context ) => client . contexts . has ( context ) ) ) &&
240- ( ! identifier ?. exclude ?. length || identifier ?. exclude . includes ( client . request ?. id ) )
241- ) ;
242- } ) ,
243- ) ;
244- break ;
217+ if ( user ?. exclude ?. length || role ?. exclude ?. length || context ?. exclude ?. length || identifier ?. exclude ?. length ) {
218+ switch ( this . serviceOperator ( service , event , " exclude" ) ) {
219+ case "or" :
220+ default :
221+ this . keepEntriesFromSet (
222+ clients ,
223+ this . collectFromSet ( clients , ( client ) => {
224+ return ! (
225+ user ?. exclude ?. includes ( client . context . user ?. id ) ||
226+ role ?. exclude ?. find ( ( role ) => client . context . user ?. is ( role ) ) ||
227+ context ?. exclude ?. find ( ( context ) => client . contexts . has ( context ) ) ||
228+ identifier ?. exclude ?. includes ( client . request ?. id )
229+ ) ;
230+ } ) ,
231+ ) ;
232+ break ;
233+ case "and" :
234+ this . keepEntriesFromSet (
235+ clients ,
236+ this . collectFromSet ( clients , ( client ) => {
237+ return ! (
238+ ( ! user ?. exclude ?. length || user ?. exclude . includes ( client . context . user ?. id ) ) &&
239+ ( ! role ?. exclude ?. length || role ?. exclude . find ( ( role ) => client . context . user ?. is ( role ) ) ) &&
240+ ( ! context ?. exclude ?. length || context ?. exclude . find ( ( context ) => client . contexts . has ( context ) ) ) &&
241+ ( ! identifier ?. exclude ?. length || identifier ?. exclude . includes ( client . request ?. id ) )
242+ ) ;
243+ } ) ,
244+ ) ;
245+ break ;
246+ }
245247 }
246- }
247- if ( clients . size > 0 ) {
248- const format = this . format ( service , event ) ;
249- const clientMessage = format . compose ( event , data , headers ) ;
250- for ( const client of clients ) {
251- if ( client !== socket && client . readyState === WebSocket . OPEN ) {
252- await client . send ( clientMessage ) ;
248+ if ( clients . size > 0 ) {
249+ const format = this . format ( service , event ) ;
250+ const clientMessage = format . compose ( event , data , headers ) ;
251+ for ( const client of clients ) {
252+ if ( client !== socket && client . readyState === WebSocket . OPEN ) {
253+ await client . send ( clientMessage ) ;
254+ }
253255 }
254256 }
255- }
256- if ( ! local ) {
257+ } else {
257258 const adapterMessage = isEventMessage
258259 ? eventMessage
259260 : JSON . stringify ( { tenant, event, data, headers, user, role, context, identifier } ) ;
0 commit comments