@@ -1120,9 +1120,50 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
11201120 *
11211121 * Do not use this method to emit notifications! Use notification() instead.
11221122 */
1123- request < T extends AnySchema > ( request : SendRequestT , resultSchema : T , options ?: RequestOptions ) : Promise < SchemaOutput < T > > {
1123+ async request < T extends AnySchema > ( request : SendRequestT , resultSchema : T , options ?: RequestOptions ) : Promise < SchemaOutput < T > > {
11241124 const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options ?? { } ;
11251125
1126+ // Build the JSON-RPC request
1127+ const messageId = this . _requestMessageId ++ ;
1128+ let jsonrpcRequest : JSONRPCRequest = {
1129+ ...request ,
1130+ jsonrpc : '2.0' ,
1131+ id : messageId
1132+ } ;
1133+
1134+ if ( options ?. onprogress ) {
1135+ this . _progressHandlers . set ( messageId , options . onprogress ) ;
1136+ jsonrpcRequest . params = {
1137+ ...request . params ,
1138+ _meta : {
1139+ ...( request . params ?. _meta || { } ) ,
1140+ progressToken : messageId
1141+ }
1142+ } ;
1143+ }
1144+
1145+ // Augment with task creation parameters if provided
1146+ if ( task ) {
1147+ jsonrpcRequest . params = {
1148+ ...jsonrpcRequest . params ,
1149+ task : task
1150+ } ;
1151+ }
1152+
1153+ // Augment with related task metadata if relatedTask is provided
1154+ if ( relatedTask ) {
1155+ jsonrpcRequest . params = {
1156+ ...jsonrpcRequest . params ,
1157+ _meta : {
1158+ ...( jsonrpcRequest . params ?. _meta || { } ) ,
1159+ [ RELATED_TASK_META_KEY ] : relatedTask
1160+ }
1161+ } ;
1162+ }
1163+
1164+ // Apply send middleware before sending
1165+ jsonrpcRequest = await this . _applyMiddleware ( jsonrpcRequest , this . _options ?. sendMiddleware ) as JSONRPCRequest ;
1166+
11261167 // Send the request
11271168 return new Promise < SchemaOutput < T > > ( ( resolve , reject ) => {
11281169 const earlyReject = ( error : unknown ) => {
@@ -1150,43 +1191,6 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
11501191
11511192 options ?. signal ?. throwIfAborted ( ) ;
11521193
1153- const messageId = this . _requestMessageId ++ ;
1154- const jsonrpcRequest : JSONRPCRequest = {
1155- ...request ,
1156- jsonrpc : '2.0' ,
1157- id : messageId
1158- } ;
1159-
1160- if ( options ?. onprogress ) {
1161- this . _progressHandlers . set ( messageId , options . onprogress ) ;
1162- jsonrpcRequest . params = {
1163- ...request . params ,
1164- _meta : {
1165- ...( request . params ?. _meta || { } ) ,
1166- progressToken : messageId
1167- }
1168- } ;
1169- }
1170-
1171- // Augment with task creation parameters if provided
1172- if ( task ) {
1173- jsonrpcRequest . params = {
1174- ...jsonrpcRequest . params ,
1175- task : task
1176- } ;
1177- }
1178-
1179- // Augment with related task metadata if relatedTask is provided
1180- if ( relatedTask ) {
1181- jsonrpcRequest . params = {
1182- ...jsonrpcRequest . params ,
1183- _meta : {
1184- ...( jsonrpcRequest . params ?. _meta || { } ) ,
1185- [ RELATED_TASK_META_KEY ] : relatedTask
1186- }
1187- } ;
1188- }
1189-
11901194 const cancel = ( reason : unknown ) => {
11911195 this . _responseHandlers . delete ( messageId ) ;
11921196 this . _progressHandlers . delete ( messageId ) ;
@@ -1257,38 +1261,23 @@ export abstract class Protocol<SendRequestT extends Request, SendNotificationT e
12571261 } ;
12581262 this . _requestResolvers . set ( messageId , responseResolver ) ;
12591263
1260- // Apply send middleware before queuing
1261- this . _applyMiddleware ( jsonrpcRequest , this . _options ?. sendMiddleware )
1262- . then ( transformedRequest => {
1263- this . _enqueueTaskMessage ( relatedTaskId , {
1264- type : 'request' ,
1265- message : transformedRequest as JSONRPCRequest ,
1266- timestamp : Date . now ( )
1267- } ) . catch ( error => {
1268- this . _cleanupTimeout ( messageId ) ;
1269- reject ( error ) ;
1270- } ) ;
1271- } )
1272- . catch ( error => {
1273- this . _cleanupTimeout ( messageId ) ;
1274- reject ( error ) ;
1275- } ) ;
1264+ this . _enqueueTaskMessage ( relatedTaskId , {
1265+ type : 'request' ,
1266+ message : jsonrpcRequest ,
1267+ timestamp : Date . now ( )
1268+ } ) . catch ( error => {
1269+ this . _cleanupTimeout ( messageId ) ;
1270+ reject ( error ) ;
1271+ } ) ;
12761272
12771273 // Don't send through transport - queued messages are delivered via tasks/result only
12781274 // This prevents duplicate delivery for bidirectional transports
12791275 } else {
1280- // No related task - apply send middleware and send through transport normally
1281- this . _applyMiddleware ( jsonrpcRequest , this . _options ?. sendMiddleware )
1282- . then ( transformedRequest => {
1283- this . _transport ! . send ( transformedRequest as JSONRPCRequest , { relatedRequestId, resumptionToken, onresumptiontoken } ) . catch ( error => {
1284- this . _cleanupTimeout ( messageId ) ;
1285- reject ( error ) ;
1286- } ) ;
1287- } )
1288- . catch ( error => {
1289- this . _cleanupTimeout ( messageId ) ;
1290- reject ( error ) ;
1291- } ) ;
1276+ // No related task - send through transport normally
1277+ this . _transport ! . send ( jsonrpcRequest , { relatedRequestId, resumptionToken, onresumptiontoken } ) . catch ( error => {
1278+ this . _cleanupTimeout ( messageId ) ;
1279+ reject ( error ) ;
1280+ } ) ;
12921281 }
12931282 } ) ;
12941283 }
0 commit comments