feat: first migration
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
const fs = require('fs')
|
||||
const http = require('http')
|
||||
const path = require('path')
|
||||
const {spawn} = require('child_process')
|
||||
|
||||
const root = path.resolve(__dirname, '..', '..')
|
||||
const host = process.env.HOST || '127.0.0.1'
|
||||
const port = process.env.PORT || '5000'
|
||||
const mirrorPort = process.env.MIRROR_PORT || '8500'
|
||||
const dataFolder =
|
||||
process.env.LNBITS_DATA_FOLDER ||
|
||||
path.join(root, 'tests', 'data', 'integration')
|
||||
|
||||
if (process.env.LNBITS_INTEGRATION_RESET_DATA !== 'false') {
|
||||
fs.rmSync(dataFolder, {recursive: true, force: true})
|
||||
}
|
||||
fs.mkdirSync(dataFolder, {recursive: true})
|
||||
|
||||
const mirrorRequests = []
|
||||
|
||||
function readBody(req) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const chunks = []
|
||||
req.on('data', chunk => chunks.push(chunk))
|
||||
req.on('error', reject)
|
||||
req.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')))
|
||||
})
|
||||
}
|
||||
|
||||
function parseBody(body) {
|
||||
if (!body) return null
|
||||
try {
|
||||
return JSON.parse(body)
|
||||
} catch {
|
||||
return body
|
||||
}
|
||||
}
|
||||
|
||||
const mirror = http.createServer(async (req, res) => {
|
||||
const bodyText = await readBody(req)
|
||||
const body = parseBody(bodyText)
|
||||
const record = {
|
||||
method: req.method,
|
||||
url: req.url,
|
||||
headers: req.headers,
|
||||
body,
|
||||
bodyText,
|
||||
receivedAt: new Date().toISOString()
|
||||
}
|
||||
|
||||
if (req.url === '/__mirror__/clear') {
|
||||
mirrorRequests.splice(0, mirrorRequests.length)
|
||||
res.writeHead(204)
|
||||
res.end()
|
||||
return
|
||||
}
|
||||
|
||||
if (req.url === '/__mirror__/requests') {
|
||||
res.writeHead(200, {'content-type': 'application/json'})
|
||||
res.end(JSON.stringify(mirrorRequests))
|
||||
return
|
||||
}
|
||||
|
||||
mirrorRequests.push(record)
|
||||
res.writeHead(200, {
|
||||
'content-type': 'application/json',
|
||||
h1: '1'
|
||||
})
|
||||
res.end(JSON.stringify(body ?? record))
|
||||
})
|
||||
|
||||
mirror.listen(Number(mirrorPort), '127.0.0.1', () => {
|
||||
console.log(`Mirror server listening on http://127.0.0.1:${mirrorPort}`)
|
||||
})
|
||||
|
||||
const env = {
|
||||
...process.env,
|
||||
HOST: host,
|
||||
PORT: port,
|
||||
LNBITS_DATA_FOLDER: dataFolder,
|
||||
LNBITS_ADMIN_UI: process.env.LNBITS_ADMIN_UI || 'true',
|
||||
AUTH_HTTPS_ONLY: process.env.AUTH_HTTPS_ONLY || 'false',
|
||||
LNBITS_BACKEND_WALLET_CLASS:
|
||||
process.env.LNBITS_BACKEND_WALLET_CLASS || 'FakeWallet',
|
||||
LNBITS_EXTENSIONS_DEFAULT_INSTALL:
|
||||
process.env.LNBITS_EXTENSIONS_DEFAULT_INSTALL ||
|
||||
'watchonly,satspay,tipjar,tpos,lnurlp,withdraw'
|
||||
}
|
||||
|
||||
const lnbits = spawn('uv', ['run', 'lnbits', '--host', host, '--port', port], {
|
||||
cwd: root,
|
||||
env,
|
||||
stdio: 'inherit'
|
||||
})
|
||||
|
||||
function shutdown(signal) {
|
||||
mirror.close()
|
||||
if (!lnbits.killed) {
|
||||
lnbits.kill(signal)
|
||||
}
|
||||
}
|
||||
|
||||
process.on('SIGINT', () => shutdown('SIGINT'))
|
||||
process.on('SIGTERM', () => shutdown('SIGTERM'))
|
||||
|
||||
lnbits.on('exit', code => {
|
||||
mirror.close()
|
||||
process.exit(code ?? 0)
|
||||
})
|
||||
Reference in New Issue
Block a user