feat: configure settings
This commit is contained in:
+7
-2
@@ -590,8 +590,13 @@ class SparkFundingSource(LNbitsSettings):
|
|||||||
|
|
||||||
|
|
||||||
class SparkL2FundingSource(LNbitsSettings):
|
class SparkL2FundingSource(LNbitsSettings):
|
||||||
spark_l2_endpoint: str | None = Field(default="http://127.0.0.1:8765")
|
spark_l2_mnemonic: str | None = Field(default=None)
|
||||||
spark_l2_api_key: str | None = Field(default=None)
|
spark_l2_network: str = Field(default="MAINNET")
|
||||||
|
spark_l2_external_endpoint: str | None = Field(default=None)
|
||||||
|
spark_l2_external_api_key: str | None = Field(default=None)
|
||||||
|
spark_l2_pay_wait_ms: int = Field(default=4000, ge=0)
|
||||||
|
spark_l2_pay_poll_ms: int = Field(default=500, ge=0)
|
||||||
|
spark_l2_stream_keepalive_ms: int = Field(default=15000, ge=0)
|
||||||
|
|
||||||
|
|
||||||
class LnTipsFundingSource(LNbitsSettings):
|
class LnTipsFundingSource(LNbitsSettings):
|
||||||
|
|||||||
@@ -232,12 +232,36 @@ window.app.component('lnbits-admin-funding-sources', {
|
|||||||
'LightsparkSparkWallet',
|
'LightsparkSparkWallet',
|
||||||
'Spark (L2)',
|
'Spark (L2)',
|
||||||
{
|
{
|
||||||
spark_l2_endpoint: {
|
spark_l2_mnemonic: {
|
||||||
label: 'Sidecar Endpoint',
|
label: 'Mnemonic'
|
||||||
value: 'http://127.0.0.1:8765'
|
|
||||||
},
|
},
|
||||||
spark_l2_api_key: {
|
spark_l2_network: {
|
||||||
label: 'Sidecar API Key',
|
label: 'Network',
|
||||||
|
value: 'MAINNET'
|
||||||
|
},
|
||||||
|
spark_l2_external_endpoint: {
|
||||||
|
label:
|
||||||
|
'Sidecar Endpoint (only if you do not want to use the default sidecar at http://127.0.0.1:8765)',
|
||||||
|
value: '',
|
||||||
|
advanced: true
|
||||||
|
},
|
||||||
|
spark_l2_external_api_key: {
|
||||||
|
label:
|
||||||
|
'Sidecar API Key (only if you do not want to use the default sidecar at http://127.0.0.1:8765)',
|
||||||
|
value: '',
|
||||||
|
advanced: true
|
||||||
|
},
|
||||||
|
|
||||||
|
spark_l2_pay_wait_ms: {
|
||||||
|
label: 'Pay Wait Time (ms)',
|
||||||
|
advanced: true
|
||||||
|
},
|
||||||
|
spark_l2_pay_poll_ms: {
|
||||||
|
label: 'Pay Poll Time (ms)',
|
||||||
|
advanced: true
|
||||||
|
},
|
||||||
|
spark_l2_stream_keepalive_ms: {
|
||||||
|
label: 'Stream Keepalive Time (ms)',
|
||||||
advanced: true
|
advanced: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import httpx
|
|||||||
from bolt11 import decode as bolt11_decode
|
from bolt11 import decode as bolt11_decode
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from lnbits.helpers import download_url, normalize_endpoint
|
from lnbits.helpers import download_url, normalize_endpoint, urlsafe_short_hash
|
||||||
from lnbits.settings import settings
|
from lnbits.settings import settings
|
||||||
|
|
||||||
from .base import (
|
from .base import (
|
||||||
@@ -43,20 +43,24 @@ class LightsparkSparkWallet(Wallet):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._status = "Initializing"
|
self._status = "Initializing"
|
||||||
self._sidecar_path = Path(settings.lnbits_data_folder, "light_spark")
|
self._sidecar_path = Path(settings.lnbits_data_folder, "light_spark")
|
||||||
|
|
||||||
self.pending_invoices: list[str] = []
|
self.pending_invoices: list[str] = []
|
||||||
|
|
||||||
self.endpoint = normalize_endpoint(cast(str, settings.spark_l2_endpoint))
|
if settings.spark_l2_external_endpoint:
|
||||||
self.network = "MAINNET"
|
self.endpoint = normalize_endpoint(
|
||||||
self.pay_wait_ms = 20000
|
cast(str, settings.spark_l2_external_endpoint)
|
||||||
self.mnemonic = (
|
)
|
||||||
"garage soldier inch broccoli"
|
logger.info(f"Using external Spark sidecar endpoint: {self.endpoint}")
|
||||||
" prize owner build dignity slam embark mouse drill"
|
else:
|
||||||
)
|
self.endpoint = "http://127.0.0.1:8765"
|
||||||
|
logger.info(f"Using internal Spark sidecar endpoint: {self.endpoint}")
|
||||||
|
|
||||||
api_key = settings.spark_l2_api_key
|
if settings.spark_l2_external_api_key:
|
||||||
headers = {"User-Agent": settings.user_agent}
|
self._api_key = settings.spark_l2_external_api_key
|
||||||
if api_key:
|
else:
|
||||||
headers["X-Api-Key"] = api_key
|
self._api_key = urlsafe_short_hash()
|
||||||
|
|
||||||
|
headers = {"User-Agent": settings.user_agent, "X-Api-Key": self._api_key}
|
||||||
|
|
||||||
self.sidecar_task = asyncio.create_task(self._start_sidecar())
|
self.sidecar_task = asyncio.create_task(self._start_sidecar())
|
||||||
|
|
||||||
@@ -325,13 +329,13 @@ class LightsparkSparkWallet(Wallet):
|
|||||||
else:
|
else:
|
||||||
logger.info("Spark sidecar already downloaded.")
|
logger.info("Spark sidecar already downloaded.")
|
||||||
|
|
||||||
if not Path(self._sidecar_path, node_modules_path, "node_modules").is_dir():
|
if not Path(node_modules_path, "node_modules").is_dir():
|
||||||
self._install_sidecar_packages(node_modules_path)
|
self._install_sidecar_packages(node_modules_path)
|
||||||
else:
|
else:
|
||||||
logger.info("Spark sidecar npm dependencies already installed.")
|
logger.info("Spark sidecar npm dependencies already installed.")
|
||||||
|
|
||||||
def _install_sidecar_packages(self, node_modules_path: Path):
|
def _install_sidecar_packages(self, node_modules_path: Path):
|
||||||
logger.info("Installing Spark sidecar npm dependencies")
|
logger.info(f"Installing Spark sidecar npm dependencies {node_modules_path}")
|
||||||
npm_path = shutil.which("npm")
|
npm_path = shutil.which("npm")
|
||||||
if not npm_path:
|
if not npm_path:
|
||||||
logger.error("npm not found in PATH, cannot start Spark sidecar")
|
logger.error("npm not found in PATH, cannot start Spark sidecar")
|
||||||
@@ -352,13 +356,16 @@ class LightsparkSparkWallet(Wallet):
|
|||||||
logger.error(result.stderr)
|
logger.error(result.stderr)
|
||||||
|
|
||||||
async def _start_sidecar_process(self, node_path: str, node_modules_path: Path):
|
async def _start_sidecar_process(self, node_path: str, node_modules_path: Path):
|
||||||
|
print(f"### Starting Spark sidecar with NODE_PATH={node_path} in {node_modules_path}")
|
||||||
logger.info("Starting Spark sidecar node process.")
|
logger.info("Starting Spark sidecar node process.")
|
||||||
|
|
||||||
env = {
|
env = {
|
||||||
"SPARK_NETWORK": self.network,
|
"SPARK_NETWORK": settings.spark_l2_network,
|
||||||
"SPARK_PAY_WAIT_MS": str(self.pay_wait_ms),
|
"API_KEY": self._api_key or "",
|
||||||
"SPARK_MNEMONIC": self.mnemonic,
|
"SPARK_PAY_WAIT_MS": str(settings.spark_l2_pay_wait_ms),
|
||||||
|
"SPARK_MNEMONIC": str(settings.spark_l2_mnemonic),
|
||||||
}
|
}
|
||||||
|
print("### Spark sidecar environment variables:",env)
|
||||||
|
|
||||||
process = subprocess.Popen( # noqa: S603
|
process = subprocess.Popen( # noqa: S603
|
||||||
[node_path, "server.mjs"],
|
[node_path, "server.mjs"],
|
||||||
|
|||||||
Reference in New Issue
Block a user