@@ -7,6 +7,7 @@ import { z } from 'zod';
77
88const subscribeSchema = z . object ( {
99 streams : z . array ( z . string ( ) ) . optional ( ) . default ( [ ] ) ,
10+ users : z . array ( z . string ( ) ) . optional ( ) . default ( [ ] ) ,
1011 all : z . boolean ( ) . optional ( ) . default ( false ) ,
1112} ) ;
1213
@@ -41,7 +42,7 @@ export const subscribe = async (req: Request, res: Response) => {
4142 }
4243
4344 const { publicKey } = ( req as AuthenticatedRequest ) . user ;
44- const { streams, all } = subscribeSchema . parse ( req . query ) ;
45+ const { streams, users , all } = subscribeSchema . parse ( req . query ) ;
4546
4647 // Scope: only streams where the authenticated user is sender or recipient
4748 const ownedStreams = await prisma . stream . findMany ( {
@@ -61,6 +62,8 @@ export const subscribe = async (req: Request, res: Response) => {
6162 subscriptions = [ ...ownedIds ] as string [ ] ;
6263 }
6364
65+ subscriptions . push ( ...users . map ( ( userKey ) => `user:${ userKey } ` ) ) ;
66+
6467 // Always add user-scoped subscription key
6568 subscriptions . push ( `user:${ publicKey } ` ) ;
6669
@@ -77,11 +80,11 @@ export const subscribe = async (req: Request, res: Response) => {
7780 res . write ( `data: ${ JSON . stringify ( { type : 'connected' , clientId, requestId } ) } \n\n` ) ;
7881
7982 sseService . addClient ( clientId , res , subscriptions , sourceIp ) ;
80- } catch ( error : any ) {
81- if ( error . name === ' ZodError' ) {
83+ } catch ( error : unknown ) {
84+ if ( error instanceof z . ZodError ) {
8285 return res . status ( 400 ) . json ( {
8386 message : 'Invalid subscription parameters' ,
84- errors : error . errors ,
87+ errors : error . issues ,
8588 } ) ;
8689 }
8790 return res . status ( 500 ) . json ( { message : 'Internal server error' } ) ;
0 commit comments