11import { spawn } from 'child_process' ;
22import find from 'find-process' ;
33import path from 'path' ;
4- import fs from 'fs' ;
4+ import fs , { WriteStream } from 'fs' ;
55import which from 'which' ;
66import tcpPortUsed from 'tcp-port-used' ;
77import type { ChildProcess } from 'child_process' ;
@@ -12,7 +12,9 @@ import { logger } from '../utils/logging';
1212
1313export type SelfnodeOptions = {
1414 selfnodeBin : string ;
15+ walletLogFile : WriteStream ;
1516 mockTokenMetadataServerBin : string ;
17+ mockTokenMetadataServerLogFile : WriteStream ;
1618 processName : CardanoNodeProcessNames ;
1719 onStop : ( ...args : Array < any > ) => any ;
1820} ;
@@ -44,7 +46,9 @@ export async function CardanoSelfnodeLauncher(
4446 return new Promise ( async ( resolve , reject ) => {
4547 const {
4648 selfnodeBin,
49+ walletLogFile,
4750 mockTokenMetadataServerBin,
51+ mockTokenMetadataServerLogFile,
4852 processName,
4953 onStop,
5054 } = selfnodeOptions ;
@@ -55,11 +59,11 @@ export async function CardanoSelfnodeLauncher(
5559 path . resolve ( path . join ( binDir , 'data' , 'cardano-node-shelley' ) ) , // Windows installer
5660 path . resolve ( path . join ( binDir , '..' , 'Resources' , 'data' , 'cardano-node-shelley' ) ) , // Darwin installer
5761 // Linux installer substitutes SHELLEY_TEST_DATA in the local-cluster Bash wrapper
58- '../../utils/cardano/selfnode' // nix-shell
62+ '../../utils/cardano/selfnode' // nix-shell? but nix-shell has the substitute ↑ as well… Some other scenario?
5963 ] )
6064 } ) ( ) ;
6165
62- setupMockTokenMetadataServer ( mockTokenMetadataServerBin ) ;
66+ setupMockTokenMetadataServer ( mockTokenMetadataServerBin , mockTokenMetadataServerLogFile ) ;
6367 // @ts -ignore ts-migrate(2322) FIXME: Type '{ pid: number; ppid?: number; uid?: number; ... Remove this comment to see the full error message
6468 const processList : Array < Process > = await find ( 'port' , CARDANO_WALLET_PORT ) ;
6569 const isSelfnodeRunning =
@@ -104,11 +108,19 @@ export async function CardanoSelfnodeLauncher(
104108 // for now – @michalrus
105109
106110 // allows Daedalus to exit independently of selfnode (1/3)
107- stdio : 'ignore' , // allows Daedalus to exit independently of selfnode (2/3)
111+ stdio : environment . isDev ? 'ignore' : 'pipe' , // 'ignore' allows Daedalus to exit independently of selfnode, 'pipe' kills it on exit (2/3)
108112 } ) ;
109113 if ( environment . isDev ) {
110114 nodeProcess . unref ( ) ; // allows Daedalus to exit independently of selfnode (3/3)
111115 }
116+ if ( ! environment . isDev && nodeProcess . stdout && nodeProcess . stderr && walletLogFile ) {
117+ nodeProcess . stdout . on ( 'data' , data => {
118+ walletLogFile . write ( data ) ;
119+ } ) ;
120+ nodeProcess . stderr . on ( 'data' , data => {
121+ walletLogFile . write ( data ) ;
122+ } ) ;
123+ }
112124
113125 const node : Selfnode = setupSelfnode ( {
114126 processName,
@@ -175,7 +187,8 @@ const setupSelfnode = ({
175187 } ) ;
176188
177189const setupMockTokenMetadataServer = async (
178- mockTokenMetadataServerBin : string
190+ mockTokenMetadataServerBin : string ,
191+ mockTokenMetadataServerLogFile : WriteStream
179192) => {
180193 const TOKEN_METADATA_REGISTRY = ( ( ) => {
181194 const binDir = path . dirname ( which . sync ( mockTokenMetadataServerBin ) ) ;
@@ -220,12 +233,20 @@ const setupMockTokenMetadataServer = async (
220233 {
221234 env : { ...process . env } ,
222235 detached : environment . isDev ,
223- stdio : 'ignore' ,
236+ stdio : environment . isDev ? 'ignore' : 'pipe ',
224237 }
225238 ) ;
226239 if ( environment . isDev ) {
227240 mockTokenMetadataServerProcess . unref ( ) ;
228241 }
242+ if ( ! environment . isDev && mockTokenMetadataServerProcess . stdout && mockTokenMetadataServerProcess . stderr && mockTokenMetadataServerLogFile ) {
243+ mockTokenMetadataServerProcess . stdout . on ( 'data' , data => {
244+ mockTokenMetadataServerLogFile . write ( data ) ;
245+ } ) ;
246+ mockTokenMetadataServerProcess . stderr . on ( 'data' , data => {
247+ mockTokenMetadataServerLogFile . write ( data )
248+ } ) ;
249+ }
229250 mockTokenMetadataServer = mockTokenMetadataServerProcess ;
230251 }
231252} ;
0 commit comments