11/* global Buffer __ exports require */
22
3+ require ( './httpProxyOverride' ) ;
34const Asm = require ( 'stream-json/Assembler' ) ;
45const { canonicalHost, defaultHost} = require ( '../../utils/host' ) ;
56const constants = require ( '../../constants.json' ) ;
7+ const { Duplex} = require ( 'stream' ) ;
68const http = require ( 'http' ) ;
79const httpProxy = require ( 'http-proxy' ) ;
810const { parser : jsonParser } = require ( 'stream-json' ) ;
911const pump = require ( 'pump' ) ;
1012const utils = require ( '../../utils/utils' ) ;
1113const WsParser = require ( 'simples/lib/parsers/ws' ) ;
14+ const WsWrapper = require ( 'simples/lib/ws/wrapper' ) ;
15+ const modifyResponse = require ( 'node-http-proxy-json' ) ;
16+
17+ const METHODS_TO_MODIFY = { accounts : 'eth_accounts' } ;
18+
19+ function modifyPayload ( toModifyPayloads , body , accounts ) {
20+ switch ( toModifyPayloads [ body . id ] ) {
21+ case METHODS_TO_MODIFY . accounts :
22+ body . result = body . result . concat ( accounts ) ;
23+ break ;
24+ default :
25+ }
26+ return body ;
27+ }
1228
1329const hex = ( n ) => {
1430 let _n = n . toString ( 16 ) ;
@@ -32,14 +48,18 @@ const parseJsonMaybe = (string) => {
3248 return object ;
3349} ;
3450
35- exports . serve = async ( ipc , host , port , ws , origin , certOptions = { } ) => {
51+ exports . serve = async ( ipc , host , port , ws , origin , accounts , certOptions = { } ) => {
3652 const commList = { } ;
3753 const receipts = { } ;
3854 const transactions = { } ;
55+ const toModifyPayloads = { } ;
3956
4057 const trackRequest = ( req ) => {
4158 if ( ! req ) return ;
4259 try {
60+ if ( Object . values ( METHODS_TO_MODIFY ) . includes ( req . method ) ) {
61+ toModifyPayloads [ req . id ] = req . method ;
62+ }
4363 if ( req . method === 'eth_sendTransaction' ) {
4464 commList [ req . id ] = {
4565 type : 'contract-log' ,
@@ -121,7 +141,32 @@ exports.serve = async (ipc, host, port, ws, origin, certOptions={}) => {
121141 host : canonicalHost ( host ) ,
122142 port : port
123143 } ,
124- ws : ws
144+ ws : ws ,
145+ createWsServerTransformStream : ( _req , _proxyReq , _proxyRes ) => {
146+ const parser = new WsParser ( 0 , true ) ;
147+ parser . on ( 'frame' , ( { data : buffer } ) => {
148+ let object = parseJsonMaybe ( buffer . toString ( ) ) ;
149+ if ( object ) {
150+ object = modifyPayload ( toModifyPayloads , object , accounts ) ;
151+ // track the modified response
152+ trackResponse ( object ) ;
153+ // send the modified response
154+ WsWrapper . wrap (
155+ { connection : dupl , masked : 0 } ,
156+ Buffer . from ( JSON . stringify ( object ) ) ,
157+ ( ) => { }
158+ ) ;
159+ }
160+ } ) ;
161+ const dupl = new Duplex ( {
162+ read ( _size ) { } ,
163+ write ( chunk , encoding , callback ) {
164+ parser . write ( chunk ) ;
165+ callback ( ) ;
166+ }
167+ } ) ;
168+ return dupl ;
169+ }
125170 } ) ;
126171
127172 proxy . on ( 'error' , ( err ) => {
@@ -131,15 +176,14 @@ exports.serve = async (ipc, host, port, ws, origin, certOptions={}) => {
131176 ) ;
132177 } ) ;
133178
134- proxy . on ( 'proxyRes' , ( proxyRes , req , _res ) => {
135- if ( req . method === 'POST' ) {
136- // messages FROM the target
137- Asm . connectTo (
138- pump ( proxyRes , jsonParser ( ) )
139- ) . on ( 'done' , ( { current : object } ) => {
140- trackResponse ( object ) ;
141- } ) ;
142- }
179+ proxy . on ( 'proxyRes' , ( proxyRes , req , res ) => {
180+ modifyResponse ( res , proxyRes , ( body ) => {
181+ if ( body ) {
182+ body = modifyPayload ( toModifyPayloads , body , accounts ) ;
183+ trackResponse ( body ) ;
184+ }
185+ return body ;
186+ } ) ;
143187 } ) ;
144188
145189 const server = http . createServer ( ( req , res ) => {
@@ -162,13 +206,7 @@ exports.serve = async (ipc, host, port, ws, origin, certOptions={}) => {
162206 proxy . ws ( msg , socket , head ) ;
163207 } ) ;
164208
165- proxy . on ( 'open' , ( proxySocket ) => {
166- // messages FROM the target
167- pump ( proxySocket , new WsParser ( 0 , true ) ) . on ( 'frame' , ( { data : buffer } ) => {
168- const object = parseJsonMaybe ( buffer . toString ( ) ) ;
169- trackResponse ( object ) ;
170- } ) ;
171- } ) ;
209+ proxy . on ( 'open' , ( _proxySocket ) => { /* messages FROM the target */ } ) ;
172210
173211 proxy . on ( 'proxyReqWs' , ( _proxyReq , _req , socket ) => {
174212 // messages TO the target
0 commit comments