@@ -60,6 +60,7 @@ import {
60
60
} from '@metamask/snaps-utils' ;
61
61
import {
62
62
assert ,
63
+ assertIsJsonRpcRequest ,
63
64
Duration ,
64
65
gtRange ,
65
66
gtVersion ,
@@ -2420,8 +2421,16 @@ export class SnapController extends BaseController<
2420
2421
snapId,
2421
2422
origin,
2422
2423
handler : handlerType ,
2423
- request,
2424
+ request : rawRequest ,
2424
2425
} : SnapRpcHookArgs & { snapId : ValidatedSnapId } ) : Promise < unknown > {
2426
+ const request = {
2427
+ jsonrpc : '2.0' ,
2428
+ id : nanoid ( ) ,
2429
+ ...rawRequest ,
2430
+ } ;
2431
+
2432
+ assertIsJsonRpcRequest ( request ) ;
2433
+
2425
2434
const permissionName = handlerEndowments [ handlerType ] ;
2426
2435
const hasPermission = this . messagingSystem . call (
2427
2436
'PermissionController:hasPermission' ,
@@ -2526,23 +2535,13 @@ export class SnapController extends BaseController<
2526
2535
}
2527
2536
}
2528
2537
2529
- let _request = request ;
2530
- if ( ! hasProperty ( request , 'jsonrpc' ) ) {
2531
- _request = { ...( request as Record < string , unknown > ) , jsonrpc : '2.0' } ;
2532
- } else if ( request . jsonrpc !== '2.0' ) {
2533
- throw ethErrors . rpc . invalidRequest ( {
2534
- message : 'Invalid "jsonrpc" property. Must be "2.0" if provided.' ,
2535
- data : request . jsonrpc ,
2536
- } ) ;
2537
- }
2538
-
2539
2538
const timer = new Timer ( this . maxRequestTime ) ;
2540
2539
this . #recordSnapRpcRequestStart( snapId , request . id , timer ) ;
2541
2540
2542
2541
const handleRpcRequestPromise = this . messagingSystem . call (
2543
2542
'ExecutionService:handleRpcRequest' ,
2544
2543
snapId ,
2545
- { origin, handler : handlerType , request : _request } ,
2544
+ { origin, handler : handlerType , request } ,
2546
2545
) ;
2547
2546
2548
2547
// This will either get the result or reject due to the timeout.
0 commit comments