@@ -20,8 +20,12 @@ import {
20
20
networkStore ,
21
21
pendingRequestsStore ,
22
22
sessionsStore ,
23
+ settingsStore ,
23
24
} from '~/zustand'
24
25
26
+ const inpageMessenger = getMessenger ( 'background:inpage' )
27
+ const walletMessenger = getMessenger ( 'background:wallet' )
28
+
25
29
const clientCache = new Map ( )
26
30
export function getRpcClient ( {
27
31
rpcUrl : rpcUrl_ ,
@@ -49,12 +53,17 @@ export function getRpcClient({
49
53
} ,
50
54
timeout : 5_000 ,
51
55
} )
56
+
57
+ if ( method === 'eth_sendTransaction' )
58
+ walletMessenger . send ( 'transactionExecuted' , undefined )
59
+
52
60
if ( ( response as { success ?: boolean } ) . success === false )
53
61
return {
54
62
id,
55
63
jsonrpc : '2.0' ,
56
64
error : 'An unknown error occurred.' ,
57
65
} as RpcResponse
66
+
58
67
return response
59
68
} ,
60
69
} ) ,
@@ -63,9 +72,6 @@ export function getRpcClient({
63
72
return client
64
73
}
65
74
66
- const inpageMessenger = getMessenger ( 'background:inpage' )
67
- const walletMessenger = getMessenger ( 'background:wallet' )
68
-
69
75
export function setupRpcHandler ( { messenger } : { messenger : Messenger } ) {
70
76
messenger . reply ( 'request' , async ( { request, rpcUrl } , meta ) => {
71
77
const isInpage =
@@ -74,7 +80,6 @@ export function setupRpcHandler({ messenger }: { messenger: Messenger }) {
74
80
const rpcClient = getRpcClient ( { rpcUrl } )
75
81
76
82
const hasOnboarded = isInpage ? networkStore . getState ( ) . onboarded : rpcUrl
77
-
78
83
if ( ! hasOnboarded )
79
84
return {
80
85
id : request . id ,
@@ -85,12 +90,14 @@ export function setupRpcHandler({ messenger }: { messenger: Messenger }) {
85
90
} ,
86
91
} as RpcResponse
87
92
93
+ const { bypassSignatureAuth, bypassTransactionAuth } =
94
+ settingsStore . getState ( )
88
95
// If the method is a "signable" method, request approval from the user.
89
96
if (
90
- request . method === 'eth_sendTransaction' ||
91
- request . method === 'eth_sign' ||
92
- request . method === 'eth_signTypedData_v4' ||
93
- request . method === 'personal_sign'
97
+ ( request . method === 'eth_sendTransaction' && ! bypassTransactionAuth ) ||
98
+ ( request . method === 'eth_sign' && ! bypassSignatureAuth ) ||
99
+ ( request . method === 'eth_signTypedData_v4' && ! bypassSignatureAuth ) ||
100
+ ( request . method === 'personal_sign' && ! bypassSignatureAuth )
94
101
) {
95
102
const { addPendingRequest, removePendingRequest } =
96
103
pendingRequestsStore . getState ( )
@@ -136,14 +143,10 @@ export function setupRpcHandler({ messenger }: { messenger: Messenger }) {
136
143
}
137
144
138
145
if ( isInpage && request . method === 'eth_requestAccounts' ) {
139
- const { addPendingRequest, removePendingRequest } =
140
- pendingRequestsStore . getState ( )
141
-
142
- const { addSession, instantAuth } = sessionsStore . getState ( )
143
-
144
146
const authorize = ( ) => {
145
147
const { accountsForRpcUrl } = accountStore . getState ( )
146
148
const { network } = networkStore . getState ( )
149
+ const { addSession } = sessionsStore . getState ( )
147
150
148
151
const accounts = accountsForRpcUrl ( {
149
152
activeFirst : true ,
@@ -165,7 +168,11 @@ export function setupRpcHandler({ messenger }: { messenger: Messenger }) {
165
168
} as RpcResponse
166
169
}
167
170
168
- if ( instantAuth ) return authorize ( )
171
+ const { bypassConnectAuth } = settingsStore . getState ( )
172
+ if ( bypassConnectAuth ) return authorize ( )
173
+
174
+ const { addPendingRequest, removePendingRequest } =
175
+ pendingRequestsStore . getState ( )
169
176
170
177
addPendingRequest ( { ...request , sender : meta . sender } )
171
178
0 commit comments