Compare commits

..
50 Commits
Author SHA1 Message Date
Chris Troutner ec4c61f38e Merge pull request #39 from Permissionless-Software-Foundation/ct-unstable
Syncing upstream: Improvements to Docker container
2021-09-29 07:20:47 -07:00
Chris Troutner 9ed610e3a4 fix(upstream): Synced with upstream ipfs-service-provider 2021-09-29 07:05:52 -07:00
Chris Troutner a9e7fc616e Merge pull request #51 from Permissionless-Software-Foundation/ct-unstable
fix(docker): disabling circuit relays by default
2021-09-28 20:30:45 -07:00
Chris Troutner 9d5ffbe26e fix(docker): disabling circuit relays by default 2021-09-28 20:11:25 -07:00
Chris Troutner 3829e90844 Merge pull request #50 from Permissionless-Software-Foundation/ct-unstable
fix(docker): Matching ports to dev env
2021-09-28 19:55:58 -07:00
Chris Troutner f181d8b095 fix(docker): Matching ports to dev env 2021-09-28 19:52:10 -07:00
Chris Troutner a2270e70af Merge pull request #49 from Permissionless-Software-Foundation/ct-unstable
fix(Docker): Dropping RAM to 500MB
2021-09-28 18:18:26 -07:00
Chris Troutner 34604d53b0 fix(Docker): Dropping RAM to 500MB 2021-09-28 18:16:56 -07:00
Chris Troutner 6257b96bc3 fix(Docker): Forcing memory limit of 1GB 2021-09-28 18:14:18 -07:00
Chris Troutner 1d8912f60d Slight update to docker container 2021-09-28 18:04:52 -07:00
Chris Troutner 3c9b63d009 Merge pull request #48 from Permissionless-Software-Foundation/ct-unstable
fix(circuit relay): Auto-discover IP4 addr when CR enabled
2021-09-28 17:53:29 -07:00
Chris Troutner e6f9f64b4a fix(circuit relay): Auto-discover IP4 addr when CR enabled 2021-09-28 17:51:19 -07:00
Chris Troutner a8ad4149e0 fix(shell-scripts): Added shell-script dir with example scripts 2021-09-28 16:58:57 -07:00
Chris Troutner 3924812985 Merge pull request #47 from Permissionless-Software-Foundation/ct-unstable
fix(ipfs): HOP setting is controlled by config.isCircuitRelay
2021-09-28 15:48:44 -07:00
Chris Troutner fef0f3a987 fix(ipfs): HOP setting is controlled by config.isCircuitRelay 2021-09-28 15:44:06 -07:00
Chris Troutner 1c012322fd Merge pull request #46 from Permissionless-Software-Foundation/ct-unstable
fix(ipfs-coord): Bumping to v6.7.0
2021-09-28 06:56:26 -07:00
Chris Troutner 545e8aa670 fix(ipfs-coord): Bumping to v6.7.0 2021-09-28 06:54:12 -07:00
Chris Troutner 449bd500c2 Merge pull request #38 from Permissionless-Software-Foundation/ct-unstable
fix(ipfs-coord): Updating bootstrap peers. v6.6.8
2021-09-27 12:52:00 -07:00
Chris Troutner ea295f2f41 linting 2021-09-27 12:47:10 -07:00
Chris Troutner 9175b8abe8 Fixing merge conflicts 2021-09-27 12:44:59 -07:00
Chris Troutner 9d4a61ea99 Merge pull request #45 from Permissionless-Software-Foundation/ct-unstable
fix(ipfs-coord): Updating bootstrap peers. v6.6.8
2021-09-27 12:40:53 -07:00
Chris Troutner cb50fdc70d fix(ipfs-coord): Updating bootstrap peers. v6.6.8 2021-09-27 12:39:10 -07:00
Chris Troutner cf488e1440 Merge pull request #37 from Permissionless-Software-Foundation/ct-unstable
fix(ipfs-coord): Updating to v6.6.7
2021-09-20 10:41:57 -07:00
Chris Troutner 4fc6def1cd Merge branch 'master' of https://github.com/Permissionless-Software-Foundation/ipfs-service-provider into ct-unstable 2021-09-20 10:34:59 -07:00
Chris Troutner e0b2fd2525 Merge pull request #44 from Permissionless-Software-Foundation/ct-unstable
fix(ipfs-coord): Updating to v6.6.7
2021-09-20 10:21:12 -07:00
Chris Troutner 8e08201b16 fix(ipfs-coord): Updating to v6.6.7 2021-09-20 10:19:33 -07:00
Chris Troutner c347a2d99a Merge pull request #36 from Permissionless-Software-Foundation/ct-unstable
fix(ipfs-service-provider): Syncing with upstream repo
2021-09-18 11:37:16 -07:00
Chris Troutner 5b7d8d4db4 fix(ipfs-service-provider): Syncing with upstream repo 2021-09-18 11:34:23 -07:00
Chris Troutner dd0692e91f Merge pull request #43 from Permissionless-Software-Foundation/ct-unstable
fix(ipfs-coord): Bumping to v6.6.6
2021-09-18 11:23:26 -07:00
Chris Troutner 576da66194 fix(ipfs-coord): Bumping to v6.6.6 2021-09-18 11:20:11 -07:00
Chris Troutner f4851d6771 Merge pull request #42 from Permissionless-Software-Foundation/ct-unstable
Minor tweeks
2021-09-17 17:43:33 -07:00
Chris Troutner 96abb0d56e fix(ipfs-coord): Updating to v6.6.5 2021-09-17 17:41:08 -07:00
Chris Troutner fdf3141c91 fix(reset): Restarting app after 4 hours, not 8 2021-09-17 16:23:47 -07:00
Chris Troutner 6692d234da Adding link to video in readme 2021-09-17 16:23:04 -07:00
Chris Troutner b8655e31ca Fixing typo in shell script 2021-09-17 12:22:05 -07:00
Chris Troutner e118fe4d6e Merge pull request #41 from Permissionless-Software-Foundation/ct-unstable
fix(startup script): Added startup script
2021-09-17 11:20:39 -07:00
Chris Troutner 86283195c5 slight tweek to README 2021-09-17 11:18:26 -07:00
Chris Troutner a037646aca fix(startup script): Added startup script 2021-09-17 11:17:10 -07:00
Chris Troutner ae6bdcdd5f Merge pull request #35 from Permissionless-Software-Foundation/ct-unstable
fix(bch-js): Selecting custom server when not using JWT token
2021-09-08 14:02:25 -07:00
Chris Troutner 9fe822024c fix(bch-js): Selecting custom server when not using JWT token 2021-09-08 14:00:00 -07:00
Chris Troutner fc94041d17 Merge pull request #34 from Permissionless-Software-Foundation/ct-unstable
fix(docker): Using Ubuntu base container
2021-09-08 13:05:58 -07:00
Chris Troutner a3f780b1f5 fix(docker): Using Ubuntu base container 2021-09-08 13:02:23 -07:00
Chris Troutner 9487f19233 Merge pull request #33 from Permissionless-Software-Foundation/ct-unstable
fix(JWT): Added env var to enable/disable JWT retrieval at startup
2021-09-08 12:38:05 -07:00
Chris Troutner 2988374769 linting 2021-09-08 12:35:26 -07:00
Chris Troutner 22ab7260f4 fix(startup): Fixing startup issues caused by code mixup with upstream 2021-09-08 12:35:00 -07:00
Chris Troutner 27f6f62f8c fix(gitignore): Adding run-dev.sh to gitignore 2021-09-08 12:03:46 -07:00
Chris Troutner 33ab787a95 Integrating JWT env var in production 2021-09-08 12:02:57 -07:00
Chris Troutner 4f2cde2599 Merge branch 'master' of https://github.com/Permissionless-Software-Foundation/ipfs-service-provider into ct-unstable 2021-09-08 12:00:41 -07:00
Chris Troutner d419084216 Merge pull request #40 from Permissionless-Software-Foundation/ct-unstable
fix(JWT): Added env var to enable/disable JWT retrieval at startup
2021-09-08 11:59:55 -07:00
Chris Troutner 553e0081fa fix(JWT): Added env var to enable/disable JWT retrieval at startup 2021-09-08 11:58:18 -07:00
20 changed files with 285 additions and 57 deletions
+1
View File
@@ -68,5 +68,6 @@ ipfsdata
ipfs-service-provider.sh
start-bch-wallet-service.sh
data/
run-dev.sh
!README.md
+22 -2
View File
@@ -29,14 +29,34 @@ This repository is one step in a longer path. Here are the major milestones of t
## Installation
### Development Environment
A development environment will allow you modify the code on-the-fly and contribute to the code base of this repository. [PM2](https://www.npmjs.com/package/pm2) is recommended for running this code base as an IPFS Circuit Relay.
- [Video: Installing ipfs-service-provider](https://youtu.be/Z0NsboIVN44)
- [Step-by-step installation instructions](https://gist.github.com/christroutner/3304a71d4c12a3a3e1664a438f64d9d0)
```bash
git clone https://github.com/Permissionless-Software-Foundation/ipfs-bch-wallet-service
cd ipfs-bch-wallet-service
sudo npm install -g node-pre-gyp
./install-mongo-sh
npm install
npm start
./ipfs-bch-wallet-service.sh
```
### Production Environment
The [docker](./production/docker) directory contains a Dockerfile for building a production deployment. However, there is currently [a bug](https://github.com/Permissionless-Software-Foundation/ipfs-service-provider/issues/38) preventing the Docker container from being used as a Circuit Relay.
```
docker-compose build --no-cache
docker-compose up -d
```
### Operation Notes
- There is a memory leak in the version of js-ipfs. The app is currently configured to shut down every 8 hours to flush memory. It relies on a process manager like pm2, Docker, or systemd to restart the app after it shuts down, in order to ensure continuous operation.
## Structure
The file layout of this repository differs from the koa-api-boilerplate. Instead, it follows the file layout of [Clean Architecture](troutsblog.com/blog/clean-architecture).
+2 -2
View File
@@ -100,12 +100,12 @@ class Server {
// Attach the other IPFS controllers
await controllers.attachControllers(app)
// ipfs-coord has a memory leak. This app shuts down after 8 hours. It
// ipfs-coord has a memory leak. This app shuts down after 4 hours. It
// expects to be run by Docker or pm2, which can automatically restart
// the app.
setTimeout(function () {
process.exit(0)
}, 60000 * 60 * 8)
}, 60000 * 60 * 2) // 2 hours
return app
} catch (err) {
+5 -1
View File
@@ -13,6 +13,8 @@ const ipfsCoordName = process.env.COORD_NAME
? process.env.COORD_NAME
: 'ipfs-bch-wallet-service'
console.log('GET_JWT_AT_STARTUP: ', process.env.GET_JWT_AT_STARTUP)
module.exports = {
// Configure TCP port.
port: process.env.PORT || 5001,
@@ -32,7 +34,7 @@ module.exports = {
: 'emailpassword',
// FullStack.cash account information, used for automatic JWT handling.
getJwtAtStartup: false,
getJwtAtStartup: process.env.GET_JWT_AT_STARTUP ? true : false,
authServer: process.env.AUTHSERVER
? process.env.AUTHSERVER
: 'https://auth.fullstack.cash',
@@ -48,6 +50,8 @@ module.exports = {
// IPFS settings.
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 : '',
// Information passed to other IPFS peers about this node.
apiInfo: 'https://ipfs-bch-wallet-service.fullstack.cash/',
+106 -16
View File
@@ -10,11 +10,11 @@
"license": "MIT",
"dependencies": {
"@chris.troutner/ipfs": "2.0.2",
"@psf/bch-js": "^4.20.3",
"@psf/bch-js": "^4.20.13",
"axios": "^0.21.1",
"bcryptjs": "^2.4.3",
"glob": "^7.1.6",
"ipfs-coord": "^6.6.4",
"ipfs-coord": "^6.7.1",
"jsonrpc-lite": "^2.2.0",
"jsonwebtoken": "^8.5.1",
"jwt-bch-lib": "^1.3.0",
@@ -34,6 +34,7 @@
"node-fetch": "npm:@achingbrain/node-fetch@^2.6.7",
"nodemailer": "^6.4.17",
"passport-local": "^1.0.0",
"public-ip": "^4.0.4",
"winston": "^3.3.3",
"winston-daily-rotate-file": "^4.5.0"
},
@@ -56,6 +57,38 @@
"uuid": "^8.3.2"
}
},
"../ipfs-coord": {
"version": "6.0.0",
"extraneous": true,
"license": "MIT",
"dependencies": {
"axios": "^0.21.4",
"bch-encrypt-lib": "^2.0.0",
"orbit-db": "^0.26.1"
},
"devDependencies": {
"@psf/bch-js": "^4.20.10",
"apidoc": "^0.25.0",
"chai": "^4.2.0",
"coveralls": "^3.1.0",
"eslint": "7.17.0",
"eslint-config-prettier": "^7.1.0",
"eslint-config-standard": "^16.0.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-standard": "^4.0.0",
"husky": "^4.3.6",
"lodash.clonedeep": "^4.5.0",
"mocha": "^8.4.0",
"nyc": "^15.1.0",
"semantic-release": "^17.4.4",
"sinon": "^9.2.2",
"standard": "^16.0.3"
},
"peerDependencies": {
"@chris.troutner/ipfs": "^2.0.2"
}
},
"node_modules/@assemblyscript/loader": {
"version": "0.9.4",
"integrity": "sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA=="
@@ -959,6 +992,7 @@
},
"node_modules/@ethersproject/bignumber": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.4.2.tgz",
"integrity": "sha512-fJhdxqoQNuDOk6epfM7yD6J8Pol4NUCy1vkaGAkuujZm0+lNow//MKu1hLhRiYV4BsOHyBv5/lsTjF+7hWwhJg==",
"funding": [
{
@@ -2131,8 +2165,9 @@
"integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
},
"node_modules/@psf/bch-js": {
"version": "4.20.10",
"integrity": "sha512-qDrJ3OTPwTJoRf8nryMRmd5ed9aAcnnskcv1+Tdd1Iu47n2jXhtFzI9v2Fc/FswECclmzwwjRVAfNB/LGNhsfw==",
"version": "4.20.13",
"resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-4.20.13.tgz",
"integrity": "sha512-BY2nFQofeynJLQm1qZNDBBLEAlCr8Sz6DwBtkD5pofM5ABX9njXFf3Ndwbhko6xcnjHl++hR88A8dPC/Bi4Q8A==",
"dependencies": {
"@psf/bip21": "^2.0.1",
"@psf/bip32-utils": "^1.0.0",
@@ -3954,6 +3989,7 @@
},
"node_modules/axios": {
"version": "0.21.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
"integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
"dependencies": {
"follow-redirects": "^1.10.0"
@@ -5894,6 +5930,17 @@
"node": ">=6"
}
},
"node_modules/dns-socket": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-4.2.2.tgz",
"integrity": "sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==",
"dependencies": {
"dns-packet": "^5.2.4"
},
"engines": {
"node": ">=6"
}
},
"node_modules/doctrine": {
"version": "3.0.0",
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
@@ -7006,6 +7053,7 @@
},
"node_modules/ethers": {
"version": "5.4.6",
"resolved": "https://registry.npmjs.org/ethers/-/ethers-5.4.7.tgz",
"integrity": "sha512-F7LXARyB/Px3AQC6/QKedWZ8eqCkgOLORqL4B/F0Mag/K+qJSFGqsR36EaOZ6fKg3ZonI+pdbhb4A8Knt/43jQ==",
"funding": [
{
@@ -7024,7 +7072,7 @@
"@ethersproject/address": "5.4.0",
"@ethersproject/base64": "5.4.0",
"@ethersproject/basex": "5.4.0",
"@ethersproject/bignumber": "5.4.1",
"@ethersproject/bignumber": "5.4.2",
"@ethersproject/bytes": "5.4.0",
"@ethersproject/constants": "5.4.0",
"@ethersproject/contracts": "5.4.1",
@@ -9472,10 +9520,11 @@
}
},
"node_modules/ipfs-coord": {
"version": "6.6.4",
"resolved": "https://registry.npmjs.org/ipfs-coord/-/ipfs-coord-6.6.4.tgz",
"integrity": "sha512-0rrfunCMvC9Oiw+MCCUZ5/J2VSY1Z3Wdq6qph2VN+ibdhxeRFtDcfZbVT7VrlWnGo/Q4lbGE+nDAPRro/pgitg==",
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/ipfs-coord/-/ipfs-coord-6.7.1.tgz",
"integrity": "sha512-II0z1fNeWIHmEkRC9b2bNyMt0qJXH8+XNH7352iF7V/5hn7ix8+gNfmgDtno+C8DDy3kk6voQntf0v/WSzC45Q==",
"dependencies": {
"axios": "^0.21.4",
"bch-encrypt-lib": "^2.0.0",
"orbit-db": "^0.26.1"
},
@@ -18199,9 +18248,9 @@
},
"node_modules/orbit-db-access-controllers": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/orbit-db-access-controllers/-/orbit-db-access-controllers-0.3.2.tgz",
"integrity": "sha512-H7xfgpcyAx9ToFYMvpP7StCt269uaqM33lnMdY9T1o3gbP8IYe0wPurkPQwg6IVZHrDeeBvTDA7kbOqShf9vJw==",
"dependencies": {
"orbit-db-io": "^0.3.0",
"p-map-series": "^1.0.0"
}
},
@@ -20054,6 +20103,7 @@
},
"node_modules/protocol-buffers-schema": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz",
"integrity": "sha512-LPzSaBYp/TcbuSlpGwqT5jR9kvJ3Zp5ic2N5c2ybx6XB/lSfEHq2D7ja8AgoxHoMD91wXFALJoXsvshKPuXyew=="
},
"node_modules/protons": {
@@ -20094,6 +20144,22 @@
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
"dev": true
},
"node_modules/public-ip": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/public-ip/-/public-ip-4.0.4.tgz",
"integrity": "sha512-EJ0VMV2vF6Cu7BIPo3IMW1Maq6ME+fbR0NcPmqDfpfNGIRPue1X8QrGjrg/rfjDkOsIkKHIf2S5FlEa48hFMTA==",
"dependencies": {
"dns-socket": "^4.2.2",
"got": "^9.6.0",
"is-ip": "^3.1.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pump": {
"version": "3.0.0",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
@@ -24742,6 +24808,7 @@
},
"@ethersproject/bignumber": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.4.2.tgz",
"integrity": "sha512-fJhdxqoQNuDOk6epfM7yD6J8Pol4NUCy1vkaGAkuujZm0+lNow//MKu1hLhRiYV4BsOHyBv5/lsTjF+7hWwhJg==",
"requires": {
"@ethersproject/bytes": "^5.4.0",
@@ -25606,8 +25673,9 @@
"integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
},
"@psf/bch-js": {
"version": "4.20.10",
"integrity": "sha512-qDrJ3OTPwTJoRf8nryMRmd5ed9aAcnnskcv1+Tdd1Iu47n2jXhtFzI9v2Fc/FswECclmzwwjRVAfNB/LGNhsfw==",
"version": "4.20.13",
"resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-4.20.13.tgz",
"integrity": "sha512-BY2nFQofeynJLQm1qZNDBBLEAlCr8Sz6DwBtkD5pofM5ABX9njXFf3Ndwbhko6xcnjHl++hR88A8dPC/Bi4Q8A==",
"requires": {
"@psf/bip21": "^2.0.1",
"@psf/bip32-utils": "^1.0.0",
@@ -27049,6 +27117,7 @@
},
"axios": {
"version": "0.21.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
"integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
"requires": {
"follow-redirects": "^1.10.0"
@@ -28572,6 +28641,14 @@
"@leichtgewicht/ip-codec": "^2.0.1"
}
},
"dns-socket": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-4.2.2.tgz",
"integrity": "sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==",
"requires": {
"dns-packet": "^5.2.4"
}
},
"doctrine": {
"version": "3.0.0",
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
@@ -29421,6 +29498,7 @@
},
"ethers": {
"version": "5.4.6",
"resolved": "https://registry.npmjs.org/ethers/-/ethers-5.4.7.tgz",
"integrity": "sha512-F7LXARyB/Px3AQC6/QKedWZ8eqCkgOLORqL4B/F0Mag/K+qJSFGqsR36EaOZ6fKg3ZonI+pdbhb4A8Knt/43jQ==",
"requires": {
"@ethersproject/abi": "5.4.1",
@@ -29429,7 +29507,7 @@
"@ethersproject/address": "5.4.0",
"@ethersproject/base64": "5.4.0",
"@ethersproject/basex": "5.4.0",
"@ethersproject/bignumber": "5.4.1",
"@ethersproject/bignumber": "5.4.2",
"@ethersproject/bytes": "5.4.0",
"@ethersproject/constants": "5.4.0",
"@ethersproject/contracts": "5.4.1",
@@ -31269,10 +31347,11 @@
}
},
"ipfs-coord": {
"version": "6.6.4",
"resolved": "https://registry.npmjs.org/ipfs-coord/-/ipfs-coord-6.6.4.tgz",
"integrity": "sha512-0rrfunCMvC9Oiw+MCCUZ5/J2VSY1Z3Wdq6qph2VN+ibdhxeRFtDcfZbVT7VrlWnGo/Q4lbGE+nDAPRro/pgitg==",
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/ipfs-coord/-/ipfs-coord-6.7.1.tgz",
"integrity": "sha512-II0z1fNeWIHmEkRC9b2bNyMt0qJXH8+XNH7352iF7V/5hn7ix8+gNfmgDtno+C8DDy3kk6voQntf0v/WSzC45Q==",
"requires": {
"axios": "^0.21.4",
"bch-encrypt-lib": "^2.0.0",
"orbit-db": "^0.26.1"
}
@@ -38015,9 +38094,9 @@
},
"orbit-db-access-controllers": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/orbit-db-access-controllers/-/orbit-db-access-controllers-0.3.2.tgz",
"integrity": "sha512-H7xfgpcyAx9ToFYMvpP7StCt269uaqM33lnMdY9T1o3gbP8IYe0wPurkPQwg6IVZHrDeeBvTDA7kbOqShf9vJw==",
"requires": {
"orbit-db-io": "^0.3.0",
"p-map-series": "^1.0.0"
}
},
@@ -39368,6 +39447,7 @@
},
"protocol-buffers-schema": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz",
"integrity": "sha512-LPzSaBYp/TcbuSlpGwqT5jR9kvJ3Zp5ic2N5c2ybx6XB/lSfEHq2D7ja8AgoxHoMD91wXFALJoXsvshKPuXyew=="
},
"protons": {
@@ -39410,6 +39490,16 @@
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
"dev": true
},
"public-ip": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/public-ip/-/public-ip-4.0.4.tgz",
"integrity": "sha512-EJ0VMV2vF6Cu7BIPo3IMW1Maq6ME+fbR0NcPmqDfpfNGIRPue1X8QrGjrg/rfjDkOsIkKHIf2S5FlEa48hFMTA==",
"requires": {
"dns-socket": "^4.2.2",
"got": "^9.6.0",
"is-ip": "^3.1.0"
}
},
"pump": {
"version": "3.0.0",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+4 -3
View File
@@ -23,12 +23,12 @@
},
"repository": "Permissionless-Software-Foundation/ipfs-bch-wallet-service",
"dependencies": {
"@psf/bch-js": "^4.20.3",
"@chris.troutner/ipfs": "2.0.2",
"@psf/bch-js": "^4.20.13",
"axios": "^0.21.1",
"bcryptjs": "^2.4.3",
"glob": "^7.1.6",
"@chris.troutner/ipfs": "2.0.2",
"ipfs-coord": "^6.6.4",
"ipfs-coord": "^6.7.1",
"jsonrpc-lite": "^2.2.0",
"jsonwebtoken": "^8.5.1",
"jwt-bch-lib": "^1.3.0",
@@ -48,6 +48,7 @@
"node-fetch": "npm:@achingbrain/node-fetch@^2.6.7",
"nodemailer": "^6.4.17",
"passport-local": "^1.0.0",
"public-ip": "^4.0.4",
"winston": "^3.3.3",
"winston-daily-rotate-file": "^4.5.0"
},
+23 -11
View File
@@ -2,32 +2,44 @@
#
#IMAGE BUILD COMMANDS
# ct-base-ubuntu = ubuntu 18.04 + nodejs v10 LTS
FROM christroutner/ct-base-ubuntu:latest
FROM ubuntu:20.04
MAINTAINER Chris Troutner <chris.troutner@gmail.com>
#Update the OS and install any OS packages needed.
RUN apt-get update
RUN apt-get install -y sudo git curl nano gnupg wget
#Install Node and NPM
RUN curl -sL https://deb.nodesource.com/setup_14.x -o nodesource_setup.sh
RUN bash nodesource_setup.sh
RUN apt-get install -y nodejs build-essential
#Create the user 'safeuser' and add them to the sudo group.
#RUN useradd -ms /bin/bash safeuser
#RUN adduser safeuser sudo
RUN useradd -ms /bin/bash safeuser
RUN adduser safeuser sudo
#Set password to 'password' change value below if you want a different password
#RUN echo safeuser:password | chpasswd
RUN echo safeuser:password | chpasswd
#Set the working directory to be the home directory
WORKDIR /home/safeuser
#Setup NPM for non-root global install
#RUN mkdir /home/safeuser/.npm-global
#RUN chown -R safeuser .npm-global
#RUN echo "export PATH=~/.npm-global/bin:$PATH" >> /home/safeuser/.profile
#RUN runuser -l safeuser -c "npm config set prefix '~/.npm-global'"
RUN mkdir /home/safeuser/.npm-global
RUN chown -R safeuser .npm-global
RUN echo "export PATH=~/.npm-global/bin:$PATH" >> /home/safeuser/.profile
RUN runuser -l safeuser -c "npm config set prefix '~/.npm-global'"
# Update to the latest version of npm.
# Working with npm@7.21.1
RUN npm install -g npm
# Switch to user account.
#USER safeuser
# Prep 'sudo' commands.
#RUN echo 'abcd8765' | sudo -S pwd
# Clone the rest.bitcoin.com repository
# Clone the repository
WORKDIR /home/safeuser
RUN git clone https://github.com/Permissionless-Software-Foundation/ipfs-bch-wallet-service
@@ -39,7 +51,7 @@ WORKDIR /home/safeuser/ipfs-bch-wallet-service
RUN git checkout ct-unstable
# Install dependencies
RUN npm install -g @mapbox/node-pre-gyp
#RUN npm install -g @mapbox/node-pre-gyp
RUN npm install
# Generate the API docs
+1
View File
@@ -20,6 +20,7 @@ services:
options:
max-size: '10m'
max-file: '10'
mem_limit: 500mb
links:
- bch-wallet-mongodb
ports:
+6 -1
View File
@@ -4,13 +4,17 @@
# This mnemonic is used to set up persistent public key for e2ee
# Replace this with your own 12-word mnemonic.
# You can get one at https://wallet.fullstack.cash.
export MNEMONIC="olive two muscle bottom coral ancient wait legend bronze useful process session"
# The human readable name this IPFS node identifies as.
export COORD_NAME=ipfs-service-provider-generic
export COORD_NAME=bch-wallet-service-generic
# Allow this node to function as a circuit relay. It must not be behind a firewall.
#export ENABLE_CIRCUIT_RELAY=true
# For browsers to use your circuit realy, you must set up a domain, SSL certificate,
# and you must forward that subdomain to the IPFS_WS_PORT.
#export CR_DOMAIN=subdomain.yourdomain.com
# Debug level. 0 = minimal info. 2 = max info.
export DEBUG_LEVEL=1
@@ -22,6 +26,7 @@ export DEBUG_LEVEL=1
export DBURL=mongodb://172.17.0.1:5555/ipfs-service-prod
# Customize these environment variables for your own installation.
export GET_JWT_AT_STARTUP=1
export AUTHSERVER=https://auth.fullstack.cash
export APISERVER=https://api.fullstack.cash/v5/
export FULLSTACKLOGIN=demo@demo.com
+22
View File
@@ -0,0 +1,22 @@
#!/bin/bash
# This script is an example for running a generic ipfs-service-provider instance.
# Ports
export PORT=5001 # REST API port
export IPFS_TCP_PORT=5268
export IPFS_WS_PORT=5269
# The human-readible name that is used when displaying data about this node.
export COORD_NAME=ipfs-service-provider-generic
# This is used for end-to-end encryption (e2ee).
export MNEMONIC="churn aisle shield silver ladder swear hunt slim pen demand spoil veteran"
# 0 = less verbose. 3 = most verbose
export DEBUG_LEVEL=1
# MongoDB connection string.
#export DBURL=mongodb://localhost:27017/bch-service-dev
npm start
+22
View File
@@ -0,0 +1,22 @@
#!/bin/bash
# This script is an example for running a generic ipfs-service-provider instance.
# Ports
export PORT=5001 # REST API port
export IPFS_TCP_PORT=5268
export IPFS_WS_PORT=5269
# The human-readible name that is used when displaying data about this node.
export COORD_NAME=ipfs-service-provider-generic
# This is used for end-to-end encryption (e2ee).
export MNEMONIC="churn aisle shield silver ladder swear hunt slim pen demand spoil veteran"
# 0 = less verbose. 3 = most verbose
export DEBUG_LEVEL=1
# MongoDB connection string.
#export DBURL=mongodb://localhost:27017/bch-service-dev
npm start
+31
View File
@@ -0,0 +1,31 @@
#!/bin/bash
# This script is an example for running a ipfs-service-provider as a Circuit Relay.
# Circuit Relays are help other nodes on the network communicate. They are
# critical for reliable functioning of the network, and for circumventing
# censorship.
# Ports
export PORT=5001 # REST API port
export IPFS_TCP_PORT=5268
export IPFS_WS_PORT=5269
# The human-readible name that is used when displaying data about this node.
export COORD_NAME=ipfs-service-provider-generic
# This is used for end-to-end encryption (e2ee).
export MNEMONIC="churn aisle shield silver ladder swear hunt slim pen demand spoil veteran"
# 0 = less verbose. 3 = most verbose
export DEBUG_LEVEL=1
# MongoDB connection string.
#export DBURL=mongodb://localhost:27017/bch-service-dev
# Comment to disable circuit relay functionality. Or set to 1 to enable.
export ENABLE_CIRCUIT_RELAY=1
# For browsers to use your circuit realy, you must set up a domain, SSL certificate,
# and you must forward that subdomain to the IPFS_WS_PORT.
#export CR_DOMAIN=subdomain.yourdomain.com
npm start
+2
View File
@@ -43,6 +43,8 @@ class Adapters {
await this.fullStackJwt.getJWT()
// Instantiate bch-js with the JWT token, and overwrite the placeholder for bch-js.
this.bchjs = await this.fullStackJwt.instanceBchjs()
} else {
this.bchjs = new BCHJS({ restURL: this.config.apiServer })
}
// Start the IPFS node.
+10 -4
View File
@@ -47,10 +47,16 @@ class IPFS {
} catch (err) {
console.error('Error in adapters/ipfs/index.js/start()')
// If error is due to a lock file issue. Kill the process, so that
// Docker or pm2 has a chance to restart the service.
if (err.message.includes('Lock already being held')) {
process.exit(1)
// If we are not in a test environment.
if (process.env.SVC_ENV !== 'test') {
// If error is due to a lock file issue. Kill the process, so that
// Docker or pm2 has a chance to restart the service.
if (err.message.includes('Lock already being held')) {
console.log(
'Lock file issue with IPFS. Shutting down so that process manager can restart app.'
)
process.exit(1)
}
}
throw err
+19 -1
View File
@@ -7,6 +7,7 @@
// Global npm libraries
const IpfsCoord = require('ipfs-coord')
// const BCHJS = require('@psf/bch-js')
const publicIp = require('public-ip')
// Local libraries
const config = require('../../../config')
@@ -43,7 +44,23 @@ class IpfsCoordAdapter {
}
async start (localConfig = {}) {
// console.log('this.config.announceJsonLd: ', this.config.announceJsonLd)
const circuitRelayInfo = {}
// If configured as a Circuit Relay, get the public IP addresses for this node.
if (this.config.isCircuitRelay) {
try {
const ip4 = await publicIp.v4()
// const ip6 = await publicIp.v6()
circuitRelayInfo.ip4 = ip4
circuitRelayInfo.tcpPort = this.config.ipfsTcpPort
// Domain used by browser-based secure websocket connections.
circuitRelayInfo.crDomain = this.config.crDomain
} catch (err) {
/* exit quietly */
}
}
this.ipfsCoord = new this.IpfsCoord({
ipfs: this.ipfs,
@@ -52,6 +69,7 @@ class IpfsCoordAdapter {
bchjs: this.bchjs,
privateLog: console.log, // Default to console.log
isCircuitRelay: this.config.isCircuitRelay,
circuitRelayInfo,
apiInfo: this.config.apiInfo,
announceJsonLd: this.config.announceJsonLd,
mnemonic: this.config.mnemonic,
+5 -1
View File
@@ -36,7 +36,7 @@ class IpfsAdapter {
relay: {
enabled: true, // enable circuit relay dialer and listener
hop: {
enabled: true // enable circuit relay HOP (make this node a relay)
enabled: config.isCircuitRelay // enable circuit relay HOP (make this node a relay)
}
},
pubsub: true, // enable pubsub
@@ -61,6 +61,10 @@ class IpfsAdapter {
// Set the 'server' profile so the node does not scan private networks.
await this.ipfs.config.profiles.apply('server')
// Debugging: Display IPFS config settings.
// const configSettings = await this.ipfs.config.getAll()
// console.log(`configSettings: ${JSON.stringify(configSettings, null, 2)}`)
// Signal that this adapter is ready.
this.isReady = true
-9
View File
@@ -26,18 +26,9 @@ class Controllers {
}
async attachControllers (app) {
// Get a JWT token and instantiate bch-js with it. Then pass that instance
// to all the rest of the apps controllers and adapters.
await this.adapters.fullStackJwt.getJWT()
// Instantiate bch-js with the JWT token, and overwrite the placeholder for bch-js.
this.adapters.bchjs = await this.adapters.fullStackJwt.instanceBchjs()
// Wait for any startup processes to complete for the Adapters libraries.
await this.adapters.start()
// Attach the REST controllers to the Koa app.
// this.attachRESTControllers(app)
this.attachRPCControllers()
}
+1 -1
View File
@@ -5,7 +5,7 @@
// Public npm libraries
const BCHJS = require('@psf/bch-js')
const IpfsCoord = require('ipfs-coord')
const IPFS = require('ipfs')
const IPFS = require('@chris.troutner/ipfs')
const EventEmitter = require('events')
const { v4: uid } = require('uuid')
const jsonrpc = require('jsonrpc-lite')
+2 -2
View File
@@ -1,4 +1,4 @@
{
"uutAddr": "/ip4/127.0.0.1/tcp/5701/p2p/QmWkjYRRTaxVEuGK8ip2X3trVyJShFs6U9g1h9x6fK5mZ2",
"uutId": "QmWkjYRRTaxVEuGK8ip2X3trVyJShFs6U9g1h9x6fK5mZ2"
"uutAddr": "/ip4/127.0.0.1/tcp/5268/p2p/QmdBGB8S6sEr19gaAxJYjhRbz5ZmMiH5a1JyyMmaxcRKnY",
"uutId": "QmdBGB8S6sEr19gaAxJYjhRbz5ZmMiH5a1JyyMmaxcRKnY"
}
+1 -3
View File
@@ -45,9 +45,7 @@ describe('#Controllers', () => {
it('should catch and throw errors', async () => {
try {
// Force an error
sandbox
.stub(uut.adapters.fullStackJwt, 'getJWT')
.rejects(new Error('test error'))
sandbox.stub(uut.adapters, 'start').rejects(new Error('test error'))
const app = {
use: () => {}