feat: add LNBits wallet plugin integration
- Introduced LNBits as a Lightning Network wallet provider for Lamassu ATMs. - Added configuration options for LNBits in the environment variables. - Implemented core functionalities including invoice creation, payment processing, balance monitoring, and payment status tracking. - Created unit tests for the LNBits plugin to ensure functionality and error handling. - Updated development environment setup to include LNBits configuration.
This commit is contained in:
parent
2f0cc901eb
commit
fc761844b7
7 changed files with 757 additions and 28 deletions
|
|
@ -1,38 +1,76 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const setEnvVariable = require('./set-env-var')
|
||||
const envPath = path.resolve(__dirname, '../.env')
|
||||
const sampleEnvPath = path.resolve(__dirname, '../.sample.env')
|
||||
|
||||
fs.copyFileSync(
|
||||
path.resolve(__dirname, '../.sample.env'),
|
||||
path.resolve(__dirname, '../.env'),
|
||||
)
|
||||
// Check if .env already exists
|
||||
if (fs.existsSync(envPath)) {
|
||||
console.log('.env file already exists. To rebuild, delete it first.')
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
setEnvVariable('NODE_ENV', 'development')
|
||||
// Copy sample env
|
||||
const sampleContent = fs.readFileSync(sampleEnvPath, 'utf8')
|
||||
|
||||
setEnvVariable('POSTGRES_USER', 'postgres')
|
||||
setEnvVariable('POSTGRES_PASSWORD', 'postgres123')
|
||||
setEnvVariable('POSTGRES_HOST', 'localhost')
|
||||
setEnvVariable('POSTGRES_PORT', '5432')
|
||||
setEnvVariable('POSTGRES_DB', 'lamassu')
|
||||
// Development defaults
|
||||
const devDefaults = {
|
||||
NODE_ENV: 'development',
|
||||
|
||||
// Database
|
||||
POSTGRES_USER: 'lamassu',
|
||||
POSTGRES_PASSWORD: 'lamassu',
|
||||
POSTGRES_HOST: 'localhost',
|
||||
POSTGRES_PORT: '5432',
|
||||
POSTGRES_DB: 'lamassu',
|
||||
|
||||
// Paths
|
||||
CA_PATH: path.resolve(__dirname, '../Lamassu_CA.pem'),
|
||||
CERT_PATH: path.resolve(__dirname, '../../../certs/Lamassu_LS.pem'),
|
||||
KEY_PATH: path.resolve(__dirname, '../../../certs/Lamassu_LS.key'),
|
||||
MNEMONIC_PATH: path.resolve(__dirname, '../../../mnemonic.txt'),
|
||||
|
||||
// Directories
|
||||
BLOCKCHAIN_DIR: path.resolve(__dirname, '../../../blockchain'),
|
||||
OFAC_DATA_DIR: path.resolve(__dirname, '../../../ofac'),
|
||||
ID_PHOTO_CARD_DIR: path.resolve(__dirname, '../../../photos/idcard'),
|
||||
FRONT_CAMERA_DIR: path.resolve(__dirname, '../../../photos/front'),
|
||||
OPERATOR_DATA_DIR: path.resolve(__dirname, '../../../operator-data'),
|
||||
|
||||
// Misc
|
||||
HOSTNAME: 'localhost',
|
||||
LOG_LEVEL: 'debug',
|
||||
|
||||
// Bitcoin (for development, use remote node to avoid full sync)
|
||||
BTC_NODE_LOCATION: 'remote',
|
||||
BTC_WALLET_LOCATION: 'local',
|
||||
BTC_NODE_HOST: 'blockstream.info',
|
||||
BTC_NODE_PORT: '8333',
|
||||
|
||||
// LNBits development defaults
|
||||
LNBITS_ENDPOINT: 'https://legend.lnbits.com',
|
||||
LNBITS_ADMIN_KEY: '' // User needs to set this
|
||||
}
|
||||
|
||||
setEnvVariable('CA_PATH', `${process.env.PWD}/certs/Lamassu_OP_Root_CA.pem`)
|
||||
setEnvVariable('CERT_PATH', `${process.env.PWD}/certs/Lamassu_OP.pem`)
|
||||
setEnvVariable('KEY_PATH', `${process.env.PWD}/certs/Lamassu_OP.key`)
|
||||
// Build .env content
|
||||
let envContent = sampleContent
|
||||
|
||||
setEnvVariable(
|
||||
'MNEMONIC_PATH',
|
||||
`${process.env.PWD}/.lamassu/mnemonics/mnemonic.txt`,
|
||||
)
|
||||
// Replace empty values with dev defaults
|
||||
Object.keys(devDefaults).forEach(key => {
|
||||
const regex = new RegExp(`^${key}=.*$`, 'gm')
|
||||
envContent = envContent.replace(regex, `${key}=${devDefaults[key]}`)
|
||||
})
|
||||
|
||||
setEnvVariable('BLOCKCHAIN_DIR', `${process.env.PWD}/blockchains`)
|
||||
setEnvVariable('OFAC_DATA_DIR', `${process.env.PWD}/.lamassu/ofac`)
|
||||
setEnvVariable('ID_PHOTO_CARD_DIR', `${process.env.PWD}/.lamassu/idphotocard`)
|
||||
setEnvVariable('FRONT_CAMERA_DIR', `${process.env.PWD}/.lamassu/frontcamera`)
|
||||
setEnvVariable('OPERATOR_DATA_DIR', `${process.env.PWD}/.lamassu/operatordata`)
|
||||
// Write .env file
|
||||
fs.writeFileSync(envPath, envContent)
|
||||
|
||||
setEnvVariable('BTC_NODE_LOCATION', 'remote')
|
||||
setEnvVariable('BTC_WALLET_LOCATION', 'local')
|
||||
|
||||
setEnvVariable('HOSTNAME', 'localhost')
|
||||
setEnvVariable('LOG_LEVEL', 'debug')
|
||||
console.log('Development .env file created with defaults.')
|
||||
console.log('IMPORTANT: You still need to:')
|
||||
console.log(' 1. Generate certificates using: bash tools/cert-gen.sh')
|
||||
console.log(' 2. Create a mnemonic file at: ../../../mnemonic.txt')
|
||||
console.log(' 3. Set up PostgreSQL database')
|
||||
console.log(' 4. Configure LNBits admin key if using Lightning')
|
||||
console.log('')
|
||||
console.log('Run migrations with: node bin/lamassu-migrate')
|
||||
Loading…
Add table
Add a link
Reference in a new issue