From 6a4aadde8a624bce9904b901c0cf19e2ea1a1133 Mon Sep 17 00:00:00 2001 From: Chris Troutner Date: Sat, 23 Mar 2024 17:14:26 -0700 Subject: [PATCH] Refactoring config file --- config/env/common.js | 55 ++++++++++++++++++----- src/adapters/wallet.adapter.js | 8 ++-- test/unit/adapters/test-wallet.json | 11 ----- test/unit/adapters/wallet.adapter.unit.js | 18 +++++--- wallet.json | 11 +++++ 5 files changed, 71 insertions(+), 32 deletions(-) delete mode 100644 test/unit/adapters/test-wallet.json create mode 100644 wallet.json diff --git a/config/env/common.js b/config/env/common.js index cb42e65..464357d 100644 --- a/config/env/common.js +++ b/config/env/common.js @@ -43,14 +43,43 @@ export default { ? process.env.EMAILPASS : 'emailpassword', + // BEGIN WALLET CONFIGURATION + + // BCH Mnemonic for generating encryption keys and payment address + mnemonic: process.env.MNEMONIC ? process.env.MNEMONIC : '', + + // (Optional) use a wallet file generated by psf-bch-wallet. + walletFile: process.env.WALLET_FILE + ? process.env.WALLET_FILE + : `${__dirname.toString()}/../../wallet.json`, + + // Wallet Configuration + // Default value: web3 - connect to bch-api through web 3 JSON RPC over IPFS. + // Alternate value: web2 - connect to bch-api through a web 2 REST API over HTTP. + walletInterface: process.env.WALLET_INTERFACE ? process.env.WALLET_INTERFACE : 'web3', + + // Wallet API Server + // Default web2 server: https://api.fullstack.cash/v5/ + // Default web3 server: https://free-bch.fullstack.cash/ + apiServer: process.env.WALLET_INTERFACE === 'web2' + ? ( + process.env.APISERVER + ? process.env.APISERVER + : 'https://api.fullstack.cash/v5/' + ) + : 'https://free-bch.fullstack.cash/', + + // Basic Authentication Password for connecting to bch-api through a web 2 + // REST API over HTTP. + authPass: process.env.WALLET_AUTH_PASS + ? process.env.WALLET_AUTH_PASS + : '', + // FullStack.cash account information, used for automatic JWT handling. getJwtAtStartup: process.env.GET_JWT_AT_STARTUP ? true : false, authServer: process.env.AUTHSERVER ? process.env.AUTHSERVER : 'https://auth.fullstack.cash', - apiServer: process.env.APISERVER - ? process.env.APISERVER - : 'https://api.fullstack.cash/v5/', fullstackLogin: process.env.FULLSTACKLOGIN ? process.env.FULLSTACKLOGIN : 'demo@demo.com', @@ -58,8 +87,17 @@ export default { ? process.env.FULLSTACKPASS : 'demo', - // IPFS settings. - useIpfs: process.env.DISABLE_IPFS ? false : true, // Disable IPFS flag + // END WALLET CONFIGURATION + + // BEGIN IPFS CONFIGURATION + + // Debug verbosity level of helia-coord. + // 0 = no debug logs. 3 = maximum logs. + debugLevel: process.env.DEBUG_LEVEL ? parseInt(process.env.DEBUG_LEVEL) : 2, + + // Enable/Disable the IPFS node at startup. Enabled by default. + useIpfs: process.env.DISABLE_IPFS ? false : true, + isCircuitRelay: process.env.ENABLE_CIRCUIT_RELAY ? true : false, // SSL domain used for websocket connection via browsers. crDomain: process.env.CR_DOMAIN ? process.env.CR_DOMAIN : '', @@ -88,11 +126,6 @@ export default { ipfsTcpPort: process.env.IPFS_TCP_PORT ? process.env.IPFS_TCP_PORT : 4001, ipfsWsPort: process.env.IPFS_WS_PORT ? process.env.IPFS_WS_PORT : 4003, - // BCH Mnemonic for generating encryption keys and payment address - mnemonic: process.env.MNEMONIC ? process.env.MNEMONIC : '', - - debugLevel: process.env.DEBUG_LEVEL ? parseInt(process.env.DEBUG_LEVEL) : 2, - // Settings for production, using external go-ipfs node. isProduction: process.env.SVC_ENV === 'prod' ? true : false, ipfsHost: process.env.IPFS_HOST ? process.env.IPFS_HOST : 'localhost', @@ -110,4 +143,6 @@ export default { // v2 Circuit Relay server (FullStack.cash) // '/ip4/78.46.129.7/tcp/4001/p2p/12D3KooWFQ11GQ5NubsJGhYZ4X3wrAGimLevxfm6HPExCrMYhpSL' ] + + // END IPFS CONFIGURATION } diff --git a/src/adapters/wallet.adapter.js b/src/adapters/wallet.adapter.js index 57d3fb2..5925f55 100644 --- a/src/adapters/wallet.adapter.js +++ b/src/adapters/wallet.adapter.js @@ -40,7 +40,7 @@ class Wallet { } // Detect and configure different blockchain infrastructure settings. - if (this.config.useFullStackCash) { + if (this.config.walletInterface === 'web2') { advancedConfig.interface = 'rest-api' advancedConfig.restURL = this.config.apiServer } else { @@ -98,8 +98,8 @@ class Wallet { // Try to open the wallet.json file. try { - // console.log('this.WALLET_FILE: ', this.WALLET_FILE) - walletData = await this.jsonFiles.readJSON(this.WALLET_FILE) + // console.log('this.config.walletFile: ', this.config.walletFile) + walletData = await this.jsonFiles.readJSON(this.config.walletFile) } catch (err) { // Create a new wallet file if one does not already exist. console.log('Wallet file not found. Creating new wallet.json file.') @@ -114,7 +114,7 @@ class Wallet { walletData.nextAddress = 1 // Write the wallet data to the JSON file. - await this.jsonFiles.writeJSON(walletData, this.WALLET_FILE) + await this.jsonFiles.writeJSON(walletData, this.config.walletFile) } // console.log('walletData: ', walletData) diff --git a/test/unit/adapters/test-wallet.json b/test/unit/adapters/test-wallet.json deleted file mode 100644 index 7ff3a31..0000000 --- a/test/unit/adapters/test-wallet.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "privateKey": "KwftZ1XUKMP9cLwTjXM3Axk5dnjy28nZ7b54PMushFEYs71tXQZu", - "publicKey": "038ac0965dc75b9b98a8e1fee01d8e4bcb23770ad00d8b41f76ef3c07519e76ded", - "mnemonic": "blue unfair eye isolate capital devote horse lumber thrive second text flame", - "cashAddress": "bitcoincash:qprt28ydgfgx8da26y35us57ur5pexwjns0uvyn3qj", - "address": "bitcoincash:qprt28ydgfgx8da26y35us57ur5pexwjns0uvyn3qj", - "legacyAddress": "17SsGH7mb4nQEVh7hwTPYbYbgmWTnyWf3y", - "hdPath": "m/44'/245'/0'/0/0", - "slpAddress": "simpleledger:qprt28ydgfgx8da26y35us57ur5pexwjnsr88lx37v", - "nextAddress": 1 -} \ No newline at end of file diff --git a/test/unit/adapters/wallet.adapter.unit.js b/test/unit/adapters/wallet.adapter.unit.js index 7f8551e..2f919d6 100644 --- a/test/unit/adapters/wallet.adapter.unit.js +++ b/test/unit/adapters/wallet.adapter.unit.js @@ -59,7 +59,7 @@ describe('#wallet', () => { // Mock dependencies uut.BchWallet = MockBchWallet // Ensure we open the test file, not the production wallet file. - uut.WALLET_FILE = testWalletFile + uut.walletFile = testWalletFile const result = await uut.openWallet() // console.log('result: ', result) assert.property(result, 'mnemonic') @@ -75,7 +75,7 @@ describe('#wallet', () => { it('should open existing wallet file', async () => { // This test case uses the file created in the previous test case. // Ensure we open the test file, not the production wallet file. - uut.WALLET_FILE = testWalletFile + uut.walletFile = testWalletFile const result = await uut.openWallet() // console.log('result: ', result) assert.property(result, 'mnemonic') @@ -91,7 +91,7 @@ describe('#wallet', () => { it('should catch and throw an error', async () => { try { // Force an error - uut.WALLET_FILE = '' + uut.config.walletFile = '' uut.BchWallet = () => { } await uut.openWallet() @@ -116,7 +116,7 @@ describe('#wallet', () => { uut.config.authPass = 'fake-auth-pass' // Ensure we open the test file, not the production wallet file. - uut.WALLET_FILE = testWalletFile + uut.config.walletFile = testWalletFile const walletData = await uut.openWallet() // console.log('walletData: ', walletData) @@ -146,15 +146,19 @@ describe('#wallet', () => { const mockWallet = new BchWallet() await mockWallet.walletInfoPromise sandbox.stub(mockWallet, 'initialize').resolves() + // Mock dependencies sandbox.stub(uut, '_instanceWallet').resolves(mockWallet) + // Ensure we open the test file, not the production wallet file. - uut.WALLET_FILE = testWalletFile + uut.config.walletFile = testWalletFile const walletData = await uut.openWallet() // console.log('walletData: ', walletData) + // Force desired code path - uut.config.useFullStackCash = true + uut.config.walletInterface = 'web2' const result = await uut.instanceWalletWithoutInitialization(walletData) + // console.log('result: ', result) assert.property(result, 'walletInfoPromise') assert.property(result, 'walletInfo') @@ -170,7 +174,7 @@ describe('#wallet', () => { sandbox.stub(uut, '_instanceWallet').resolves(mockWallet) // Ensure we open the test file, not the production wallet file. - uut.WALLET_FILE = testWalletFile + uut.config.walletFile = testWalletFile const walletData = await uut.openWallet() // console.log('walletData: ', walletData) diff --git a/wallet.json b/wallet.json new file mode 100644 index 0000000..3c81c77 --- /dev/null +++ b/wallet.json @@ -0,0 +1,11 @@ +{ + "mnemonic": "course abstract aerobic deer try switch turtle diet fence affair butter top", + "privateKey": "L5D2UAam8tvo3uii5kpgaGyjvVMimdrXu8nWGQSQjuuAix6ji1YQ", + "publicKey": "0379433ffc401483ade310469953c1cba77c71af904f07c15bde330d7198b4d6dc", + "cashAddress": "bitcoincash:qzl0d3gcqeypv4cy7gh8rgdszxa9vvm2acv7fqtd00", + "address": "bitcoincash:qzl0d3gcqeypv4cy7gh8rgdszxa9vvm2acv7fqtd00", + "slpAddress": "simpleledger:qzl0d3gcqeypv4cy7gh8rgdszxa9vvm2acq9zm7d33", + "legacyAddress": "1JQj1KcQL7GPKzc1D2PvdUSgw3MbDtrHzi", + "hdPath": "m/44'/245'/0'/0/0", + "nextAddress": 1 +} \ No newline at end of file