relay
This commit is contained in:
parent
cc3a605f42
commit
e090cfc5f7
4 changed files with 89 additions and 71 deletions
|
|
@ -41,6 +41,7 @@
|
|||
"graphviz": "0.0.8",
|
||||
"grpc": "1.24.4",
|
||||
"gun": "git://github.com/amark/gun#97aa976c97e6219a9f93095d32c220dcd371ca62",
|
||||
"hybrid-relay-client": "git://github.com/shocknet/hybridRelayClient#43478046e160f2b85a18cea4400c3076389dda64",
|
||||
"husky": "^4.2.5",
|
||||
"jsonfile": "^4.0.0",
|
||||
"jsonwebtoken": "^8.3.0",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ const setAccessControlHeaders = (req, res) => {
|
|||
res.header("Access-Control-Allow-Methods", "OPTIONS,POST,GET,PUT,DELETE")
|
||||
res.header(
|
||||
"Access-Control-Allow-Headers",
|
||||
"Origin, X-Requested-With, Content-Type, Accept, Authorization, public-key-for-decryption, encryption-device-id, public-key-for-decryption"
|
||||
"Origin, X-Requested-With, Content-Type, Accept, Authorization, public-key-for-decryption, encryption-device-id, public-key-for-decryption,x-shock-hybrid-relay-id-x"
|
||||
);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,6 @@ const server = program => {
|
|||
const Path = require('path')
|
||||
const { Logger: CommonLogger } = require('shock-common')
|
||||
const binaryParser = require('socket.io-msgpack-parser')
|
||||
const { fork } = require('child_process')
|
||||
const EventEmitter = require('events')
|
||||
|
||||
const ECC = require('../utils/ECC')
|
||||
const LightningServices = require('../utils/lightningServices')
|
||||
|
|
@ -30,6 +28,7 @@ const server = program => {
|
|||
const session = require('express-session')
|
||||
const methodOverride = require('method-override')
|
||||
const qrcode = require('qrcode-terminal')
|
||||
const relayClient = require('hybrid-relay-client/build')
|
||||
const {
|
||||
unprotectedRoutes,
|
||||
sensitiveRoutes,
|
||||
|
|
@ -59,31 +58,6 @@ const server = program => {
|
|||
require('../utils/server-utils')(module)
|
||||
|
||||
logger.info('Mainnet Mode:', !!program.mainnet)
|
||||
const tunnelTimeout = 5000
|
||||
let latestAliveTunnel = 0
|
||||
let tunnelHealthInterval = null
|
||||
const tunnelHealthManager = new EventEmitter()
|
||||
tunnelHealthManager.on('fork', ({ params, cb }) => {
|
||||
if (latestAliveTunnel !== 0 && latestAliveTunnel < tunnelTimeout) {
|
||||
return
|
||||
}
|
||||
clearInterval(tunnelHealthInterval)
|
||||
tunnelHealthInterval = setInterval(() => {
|
||||
if (Date.now() - latestAliveTunnel > tunnelTimeout) {
|
||||
console.log('oh no! tunnel is dead, will restart it now')
|
||||
tunnelHealthManager.emit('fork', { params, cb })
|
||||
}
|
||||
}, 2000)
|
||||
const forked = fork('src/tunnel.js')
|
||||
forked.on('message', msg => {
|
||||
//console.log('Message from child', msg);
|
||||
if (msg && msg.type === 'info') {
|
||||
cb(msg.tunnel)
|
||||
}
|
||||
latestAliveTunnel = Date.now()
|
||||
})
|
||||
forked.send(params)
|
||||
})
|
||||
|
||||
if (process.env.SHOCK_ENCRYPTION_ECC === 'false') {
|
||||
logger.error('Encryption Mode: false')
|
||||
|
|
@ -426,58 +400,40 @@ const server = program => {
|
|||
app.use(modifyResponseBody)
|
||||
}
|
||||
|
||||
serverInstance.listen(serverPort, serverHost)
|
||||
|
||||
if (program.tunnel) {
|
||||
// setup localtunnel ==========
|
||||
const [tunnelToken, tunnelSubdomain, tunnelUrl] = await Promise.all([
|
||||
Storage.getItem('tunnel/token'),
|
||||
Storage.getItem('tunnel/subdomain'),
|
||||
Storage.getItem('tunnel/url')
|
||||
const [relayToken, relayId, relayUrl] = await Promise.all([
|
||||
Storage.getItem('relay/token'),
|
||||
Storage.getItem('relay/id'),
|
||||
Storage.getItem('relay/url')
|
||||
])
|
||||
const tunnelOpts = {
|
||||
port: serverPort,
|
||||
host: tunnelHost,
|
||||
print_requests: true
|
||||
const opts = {
|
||||
relayId,
|
||||
relayToken,
|
||||
address: tunnelHost,
|
||||
port: serverPort
|
||||
}
|
||||
if (tunnelToken && tunnelSubdomain) {
|
||||
tunnelOpts.tunnelToken = tunnelToken
|
||||
tunnelOpts.subdomain = tunnelSubdomain
|
||||
logger.info('Recreating tunnel... with subdomain: ' + tunnelSubdomain)
|
||||
} else {
|
||||
logger.info('Creating new tunnel...This will require a pair ')
|
||||
}
|
||||
tunnelHealthManager.emit('fork', {
|
||||
params: tunnelOpts,
|
||||
cb: async tunnel => {
|
||||
if (tunnelSubdomain !== tunnel.clientId && !tunnel.token) {
|
||||
logger.error(
|
||||
'An error occurred while opening tunnel, will try again in 2 sec with a new one'
|
||||
)
|
||||
|
||||
return
|
||||
}
|
||||
logger.info('Tunnel created! connect to: ' + tunnel.url)
|
||||
console.log(opts)
|
||||
relayClient.default(opts, async (connected, params) => {
|
||||
if (connected) {
|
||||
await Promise.all([
|
||||
Storage.setItem('relay/token', params.relayToken),
|
||||
Storage.setItem('relay/id', params.relayId),
|
||||
Storage.setItem('relay/url', params.address)
|
||||
])
|
||||
const dataToQr = JSON.stringify({
|
||||
internalIP: tunnel.url,
|
||||
internalIP: `${params.relayId}@${params.address}`,
|
||||
walletPort: 443,
|
||||
externalIP: tunnel.url
|
||||
externalIP: `${params.relayId}@${params.address}`
|
||||
})
|
||||
qrcode.generate(dataToQr, { small: true })
|
||||
if (tunnel.token) {
|
||||
console.log('writing to storage...')
|
||||
await Promise.all([
|
||||
Storage.setItem('tunnel/token', tunnel.token),
|
||||
Storage.setItem('tunnel/subdomain', tunnel.clientId),
|
||||
Storage.setItem('tunnel/url', tunnel.url)
|
||||
])
|
||||
}
|
||||
console.log(`connect to ${params.relayId}@${params.address}`)
|
||||
} else {
|
||||
logger.error('!! Relay did not connect to server !!')
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
serverInstance.listen(serverPort, serverHost)
|
||||
logger.info('App listening on ' + serverHost + ' port ' + serverPort)
|
||||
|
||||
module.server = serverInstance
|
||||
} catch (err) {
|
||||
logger.error({ exception: err, message: err.message, code: err.code })
|
||||
|
|
|
|||
65
yarn.lock
65
yarn.lock
|
|
@ -1361,6 +1361,11 @@ babylon@^6.18.0:
|
|||
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
|
||||
integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
|
||||
|
||||
backo2@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
|
||||
integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||
|
|
@ -2463,7 +2468,22 @@ end-of-stream@^1.1.0:
|
|||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
engine.io-parser@~4.0.0:
|
||||
engine.io-client@~5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-5.1.1.tgz#f5c3aaaef1bdc9443aac6ffde48b3b2fb2dc56fc"
|
||||
integrity sha512-jPFpw2HLL0lhZ2KY0BpZhIJdleQcUO9W1xkIpo0h3d6s+5D6+EV/xgQw9qWOmymszv2WXef/6KUUehyxEKomlQ==
|
||||
dependencies:
|
||||
base64-arraybuffer "0.1.4"
|
||||
component-emitter "~1.3.0"
|
||||
debug "~4.3.1"
|
||||
engine.io-parser "~4.0.1"
|
||||
has-cors "1.1.0"
|
||||
parseqs "0.0.6"
|
||||
parseuri "0.0.6"
|
||||
ws "~7.4.2"
|
||||
yeast "0.1.2"
|
||||
|
||||
engine.io-parser@~4.0.0, engine.io-parser@~4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-4.0.2.tgz#e41d0b3fb66f7bf4a3671d2038a154024edb501e"
|
||||
integrity sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==
|
||||
|
|
@ -3410,6 +3430,11 @@ has-ansi@^2.0.0:
|
|||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
has-cors@1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
|
||||
integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
|
||||
|
||||
has-flag@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||
|
|
@ -3581,6 +3606,14 @@ husky@^4.2.5:
|
|||
slash "^3.0.0"
|
||||
which-pm-runs "^1.0.0"
|
||||
|
||||
"hybrid-relay-client@git://github.com/shocknet/hybridRelayClient#43478046e160f2b85a18cea4400c3076389dda64":
|
||||
version "1.0.0"
|
||||
resolved "git://github.com/shocknet/hybridRelayClient#43478046e160f2b85a18cea4400c3076389dda64"
|
||||
dependencies:
|
||||
node-fetch "^2.6.1"
|
||||
socket.io-client "^4.1.2"
|
||||
socket.io-msgpack-parser "^3.0.1"
|
||||
|
||||
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
|
||||
version "0.4.24"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||
|
|
@ -5623,6 +5656,16 @@ parse5@4.0.0:
|
|||
resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
|
||||
integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
|
||||
|
||||
parseqs@0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5"
|
||||
integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==
|
||||
|
||||
parseuri@0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a"
|
||||
integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==
|
||||
|
||||
parseurl@~1.3.2, parseurl@~1.3.3:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
|
||||
|
|
@ -6579,6 +6622,19 @@ socket.io-adapter@~2.2.0:
|
|||
resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz#43af9157c4609e74b8addc6867873ac7eb48fda2"
|
||||
integrity sha512-rG49L+FwaVEwuAdeBRq49M97YI3ElVabJPzvHT9S6a2CWhDKnjSFasvwAwSYPRhQzfn4NtDIbCaGYgOCOU/rlg==
|
||||
|
||||
socket.io-client@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.1.2.tgz#95ad7113318ea01fba0860237b96d71e1b1fd2eb"
|
||||
integrity sha512-RDpWJP4DQT1XeexmeDyDkm0vrFc0+bUsHDKiVGaNISJvJonhQQOMqV9Vwfg0ZpPJ27LCdan7iqTI92FRSOkFWQ==
|
||||
dependencies:
|
||||
"@types/component-emitter" "^1.2.10"
|
||||
backo2 "~1.0.2"
|
||||
component-emitter "~1.3.0"
|
||||
debug "~4.3.1"
|
||||
engine.io-client "~5.1.1"
|
||||
parseuri "0.0.6"
|
||||
socket.io-parser "~4.0.4"
|
||||
|
||||
socket.io-msgpack-parser@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/socket.io-msgpack-parser/-/socket.io-msgpack-parser-3.0.1.tgz#48ea37b51f1fa1b09253bc97073be9204664f3c6"
|
||||
|
|
@ -6587,7 +6643,7 @@ socket.io-msgpack-parser@^3.0.1:
|
|||
component-emitter "~1.3.0"
|
||||
notepack.io "~2.2.0"
|
||||
|
||||
socket.io-parser@~4.0.3:
|
||||
socket.io-parser@~4.0.3, socket.io-parser@~4.0.4:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0"
|
||||
integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==
|
||||
|
|
@ -7707,6 +7763,11 @@ yargs@^3.10.0:
|
|||
window-size "^0.1.4"
|
||||
y18n "^3.2.0"
|
||||
|
||||
yeast@0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
|
||||
integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
|
||||
|
||||
yn@3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue