start without env file
This commit is contained in:
parent
e96a6449ad
commit
f5375d4f10
4 changed files with 43 additions and 21 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -10,3 +10,4 @@ db.sqlite
|
||||||
metrics.sqlite
|
metrics.sqlite
|
||||||
.key/
|
.key/
|
||||||
logs
|
logs
|
||||||
|
.jwt_secret
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
import { EnvMustBeNonEmptyString, EnvMustBeInteger, EnvCanBeBoolean } from '../helpers/envParser.js'
|
import { EnvMustBeNonEmptyString, EnvMustBeInteger, EnvCanBeBoolean, EnvCanBeInteger } from '../helpers/envParser.js'
|
||||||
import { LndSettings } from './settings.js'
|
import { LndSettings } from './settings.js'
|
||||||
export const LoadLndSettingsFromEnv = (): LndSettings => {
|
export const LoadLndSettingsFromEnv = (): LndSettings => {
|
||||||
const lndAddr = EnvMustBeNonEmptyString("LND_ADDRESS")
|
const lndAddr = process.env.LND_ADDRESS || "127.0.0.1:10009"
|
||||||
const lndCertPath = EnvMustBeNonEmptyString("LND_CERT_PATH")
|
const lndCertPath = process.env.LND_CERT_PATH || "~/.lnd/tls.cert"
|
||||||
const lndMacaroonPath = EnvMustBeNonEmptyString("LND_MACAROON_PATH")
|
const lndMacaroonPath = process.env.LND_MACAROON_PATH || "~/.lnd/data/chain/bitcoin/mainnet/admin.macaroon"
|
||||||
const feeRateLimit = EnvMustBeInteger("OUTBOUND_MAX_FEE_BPS") / 10000
|
const feeRateLimit = EnvCanBeInteger("OUTBOUND_MAX_FEE_BPS", 60) / 10000
|
||||||
const feeFixedLimit = EnvMustBeInteger("OUTBOUND_MAX_FEE_EXTRA_SATS")
|
const feeFixedLimit = EnvCanBeInteger("OUTBOUND_MAX_FEE_EXTRA_SATS", 100)
|
||||||
const mockLnd = EnvCanBeBoolean("MOCK_LND")
|
const mockLnd = EnvCanBeBoolean("MOCK_LND")
|
||||||
return { mainNode: { lndAddr, lndCertPath, lndMacaroonPath }, feeRateLimit, feeFixedLimit, mockLnd }
|
return { mainNode: { lndAddr, lndCertPath, lndMacaroonPath }, feeRateLimit, feeFixedLimit, mockLnd }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,10 @@ import { LoadStorageSettingsFromEnv, StorageSettings } from '../storage/index.js
|
||||||
import { LndSettings, NodeSettings } from '../lnd/settings.js'
|
import { LndSettings, NodeSettings } from '../lnd/settings.js'
|
||||||
import { LoadWatchdogSettingsFromEnv, WatchdogSettings } from './watchdog.js'
|
import { LoadWatchdogSettingsFromEnv, WatchdogSettings } from './watchdog.js'
|
||||||
import { LoadLndSettingsFromEnv } from '../lnd/index.js'
|
import { LoadLndSettingsFromEnv } from '../lnd/index.js'
|
||||||
import { EnvMustBeInteger, EnvMustBeNonEmptyString } from '../helpers/envParser.js'
|
import { EnvCanBeInteger, EnvMustBeInteger, EnvMustBeNonEmptyString } from '../helpers/envParser.js'
|
||||||
|
import { getLogger } from '../helpers/logger.js'
|
||||||
|
import fs from 'fs'
|
||||||
|
import crypto from 'crypto';
|
||||||
export type MainSettings = {
|
export type MainSettings = {
|
||||||
storageSettings: StorageSettings,
|
storageSettings: StorageSettings,
|
||||||
lndSettings: LndSettings,
|
lndSettings: LndSettings,
|
||||||
|
|
@ -33,17 +36,17 @@ export const LoadMainSettingsFromEnv = (): MainSettings => {
|
||||||
watchDogSettings: LoadWatchdogSettingsFromEnv(),
|
watchDogSettings: LoadWatchdogSettingsFromEnv(),
|
||||||
lndSettings: LoadLndSettingsFromEnv(),
|
lndSettings: LoadLndSettingsFromEnv(),
|
||||||
storageSettings: LoadStorageSettingsFromEnv(),
|
storageSettings: LoadStorageSettingsFromEnv(),
|
||||||
jwtSecret: EnvMustBeNonEmptyString("JWT_SECRET"),
|
jwtSecret: loadJwtSecret(),
|
||||||
incomingTxFee: EnvMustBeInteger("INCOMING_CHAIN_FEE_ROOT_BPS") / 10000,
|
incomingTxFee: EnvCanBeInteger("INCOMING_CHAIN_FEE_ROOT_BPS", 0) / 10000,
|
||||||
outgoingTxFee: EnvMustBeInteger("OUTGOING_CHAIN_FEE_ROOT_BPS") / 10000,
|
outgoingTxFee: EnvCanBeInteger("OUTGOING_CHAIN_FEE_ROOT_BPS", 60) / 10000,
|
||||||
incomingAppInvoiceFee: EnvMustBeInteger("INCOMING_INVOICE_FEE_ROOT_BPS") / 10000,
|
incomingAppInvoiceFee: EnvCanBeInteger("INCOMING_INVOICE_FEE_ROOT_BPS", 0) / 10000,
|
||||||
outgoingAppInvoiceFee: EnvMustBeInteger("OUTGOING_INVOICE_FEE_ROOT_BPS") / 10000,
|
outgoingAppInvoiceFee: EnvCanBeInteger("OUTGOING_INVOICE_FEE_ROOT_BPS", 60) / 10000,
|
||||||
incomingAppUserInvoiceFee: EnvMustBeInteger("INCOMING_INVOICE_FEE_USER_BPS") / 10000,
|
incomingAppUserInvoiceFee: EnvCanBeInteger("INCOMING_INVOICE_FEE_USER_BPS", 0) / 10000,
|
||||||
outgoingAppUserInvoiceFee: EnvMustBeInteger("OUTGOING_INVOICE_FEE_USER_BPS") / 10000,
|
outgoingAppUserInvoiceFee: EnvCanBeInteger("OUTGOING_INVOICE_FEE_USER_BPS", 0) / 10000,
|
||||||
userToUserFee: EnvMustBeInteger("TX_FEE_INTERNAL_USER_BPS") / 10000,
|
userToUserFee: EnvCanBeInteger("TX_FEE_INTERNAL_USER_BPS", 0) / 10000,
|
||||||
appToUserFee: EnvMustBeInteger("TX_FEE_INTERNAL_ROOT_BPS") / 10000,
|
appToUserFee: EnvCanBeInteger("TX_FEE_INTERNAL_ROOT_BPS", 0) / 10000,
|
||||||
serviceUrl: process.env.SERVICE_URL || `http://localhost:${EnvMustBeInteger("PORT")}`,
|
serviceUrl: process.env.SERVICE_URL || `http://localhost:${EnvCanBeInteger("PORT", 1776)}`,
|
||||||
servicePort: EnvMustBeInteger("PORT"),
|
servicePort: EnvCanBeInteger("PORT", 1776),
|
||||||
recordPerformance: process.env.RECORD_PERFORMANCE === 'true' || false,
|
recordPerformance: process.env.RECORD_PERFORMANCE === 'true' || false,
|
||||||
skipSanityCheck: process.env.SKIP_SANITY_CHECK === 'true' || false,
|
skipSanityCheck: process.env.SKIP_SANITY_CHECK === 'true' || false,
|
||||||
disableExternalPayments: process.env.DISABLE_EXTERNAL_PAYMENTS === 'true' || false
|
disableExternalPayments: process.env.DISABLE_EXTERNAL_PAYMENTS === 'true' || false
|
||||||
|
|
@ -82,3 +85,21 @@ export const LoadTestSettingsFromEnv = (): TestSettings => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const loadJwtSecret = (): string => {
|
||||||
|
const secret = process.env["JWT_SECRET"]
|
||||||
|
const log = getLogger({})
|
||||||
|
if (secret) {
|
||||||
|
return secret
|
||||||
|
}
|
||||||
|
log("JWT_SECRET not set in env, checking .jwt_secret file")
|
||||||
|
try {
|
||||||
|
const fileContent = fs.readFileSync(".jwt_secret", "utf-8")
|
||||||
|
return fileContent.trim()
|
||||||
|
} catch (e) {
|
||||||
|
log(".jwt_secret file not found, generating random secret")
|
||||||
|
const secret = crypto.randomBytes(32).toString('hex')
|
||||||
|
fs.writeFileSync(".jwt_secret", secret)
|
||||||
|
return secret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -26,9 +26,9 @@ export type DbSettings = {
|
||||||
}
|
}
|
||||||
export const LoadDbSettingsFromEnv = (): DbSettings => {
|
export const LoadDbSettingsFromEnv = (): DbSettings => {
|
||||||
return {
|
return {
|
||||||
databaseFile: EnvMustBeNonEmptyString("DATABASE_FILE"),
|
databaseFile: process.env.DATABASE_FILE || "db.sqlite",
|
||||||
migrate: process.env.MIGRATE_DB === 'true' || false,
|
migrate: process.env.MIGRATE_DB === 'true' || false,
|
||||||
metricsDatabaseFile: EnvMustBeNonEmptyString("METRICS_DATABASE_FILE")
|
metricsDatabaseFile: process.env.METRICS_DATABASE_FILE || "metrics.sqlite"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue