66 assertValidExecutionArguments ,
77 execute ,
88} from 'graphql/execution/execute'
9- import { APIGatewayWebSocketEvent , ServerClosure , SubscribeHandler , MessageHandler } from '../types'
9+ import { APIGatewayWebSocketEvent , ServerClosure , MessageHandler , SubscribePseudoIterable , PubSubEvent } from '../types'
1010import { constructContext } from '../utils/constructContext'
1111import { getResolverAndArgs } from '../utils/getResolverAndArgs'
1212import { sendMessage } from '../utils/sendMessage'
@@ -25,9 +25,11 @@ export const subscribe: MessageHandler<SubscribeMessage> =
2525 }
2626
2727const setupSubscription : MessageHandler < SubscribeMessage > = async ( { server, event, message } ) => {
28+ const connectionId = event . requestContext . connectionId
29+
2830 const connection = await server . mapper . get (
2931 Object . assign ( new server . model . Connection ( ) , {
30- id : event . requestContext . connectionId ,
32+ id : connectionId ,
3133 } ) ,
3234 )
3335 const connectionParams = connection . payload || { }
@@ -39,7 +41,7 @@ const setupSubscription: MessageHandler<SubscribeMessage> = async ({ server, eve
3941 throw new AggregateError ( errors )
4042 }
4143
42- const contextValue = await constructContext ( { server, connectionParams, connectionId : connection . id } )
44+ const contextValue = await constructContext ( { server, connectionParams, connectionId } )
4345
4446 const execContext = buildExecutionContext (
4547 server . schema ,
@@ -74,33 +76,33 @@ const setupSubscription: MessageHandler<SubscribeMessage> = async ({ server, eve
7476 throw new Error ( 'No field' )
7577 }
7678
77- const { topicDefinitions, onSubscribe, onAfterSubscribe } = await ( field . subscribe as SubscribeHandler ) (
78- root ,
79- args ,
80- context ,
81- info ,
82- )
79+ const { topicDefinitions, onSubscribe, onAfterSubscribe } = field . subscribe as SubscribePseudoIterable < PubSubEvent >
8380
81+ server . log ( 'onSubscribe' , { onSubscribe : ! ! onSubscribe } )
8482 await onSubscribe ?.( root , args , context , info )
8583
8684 await Promise . all ( topicDefinitions . map ( async ( { topic, filter } ) => {
85+ const filterData = typeof filter === 'function' ? await filter ( root , args , context , info ) : filter
86+
8787 const subscription = Object . assign ( new server . model . Subscription ( ) , {
88- id : `${ event . requestContext . connectionId } |${ message . id } ` ,
88+ id : `${ connectionId } |${ message . id } ` ,
8989 topic,
90- filter : filter || { } ,
90+ filter : filterData || { } ,
9191 subscriptionId : message . id ,
9292 subscription : {
9393 variableValues : args ,
9494 ...message . payload ,
9595 } ,
96- connectionId : event . requestContext . connectionId ,
96+ connectionId,
9797 connectionParams,
9898 requestContext : event . requestContext ,
9999 ttl : connection . ttl ,
100100 } )
101+ server . log ( 'subscribe:putSubscription %j' , subscription )
101102 await server . mapper . put ( subscription )
102103 } ) )
103104
105+ server . log ( 'onAfterSubscribe' , { onAfterSubscribe : ! ! onAfterSubscribe } )
104106 await onAfterSubscribe ?.( root , args , context , info )
105107}
106108
@@ -125,6 +127,8 @@ const validateMessage = (server: ServerClosure) => (message: SubscribeMessage) =
125127
126128// eslint-disable-next-line @typescript-eslint/no-explicit-any
127129async function executeQuery ( server : ServerClosure , message : SubscribeMessage , contextValue : any , event : APIGatewayWebSocketEvent ) {
130+ server . log ( 'executeQuery' , { connectionId : event . requestContext . connectionId } )
131+
128132 const result = await execute (
129133 server . schema ,
130134 parse ( message . payload . query ) ,
0 commit comments