refactor: app usage

This commit is contained in:
Vlad Stan
2026-07-01 16:57:23 +03:00
parent 1f3d141f49
commit 6d71526b88
5 changed files with 28 additions and 11 deletions
+2 -3
View File
@@ -16,6 +16,7 @@ from pydantic import UUID4
from starlette.staticfiles import PathLike as StaticFilesPathLike
from starlette.types import Scope
from lnbits.core.db import core_app_extra
from lnbits.decorators import (
check_access_token,
check_user_exists,
@@ -141,9 +142,7 @@ def register_wasm_extension(app: FastAPI, ext_id: str) -> WasmExtension:
_register_wasm_extension_ui_routes(app, loaded)
_register_wasm_extension_api_routes(app, loaded)
extensions = getattr(app.state, "lnbits_wasm_extensions", {})
extensions[ext_id] = loaded
app.state.lnbits_wasm_extensions = extensions
core_app_extra.wasm_extension_registry.register(loaded)
settings.activate_extension_paths(ext_id, "", [])
logger.info(
+6 -6
View File
@@ -10,9 +10,10 @@ from typing import Any
from fastapi import FastAPI
from lnbits.core.crud.extensions import get_installed_extension
from lnbits.core.db import core_app_extra
from .api import ExtensionAPI, list_extension_api_methods
from .loader import WasmExtension, register_wasm_extension
from .loader import WasmExtension
from .runtime import ExtensionAPIHost
@@ -26,7 +27,7 @@ async def invoke_wasm_extension_export(
context: str = "user",
owner_id: str | None = None,
) -> dict[str, Any]:
extension = _get_registered_extension(app, ext_id)
extension = _get_registered_extension(ext_id)
permissions = await _extension_permissions(extension)
api = ExtensionAPI(
extension.id,
@@ -190,12 +191,11 @@ def _parse_wasm_export_result(extension: WasmExtension, value: Any) -> dict[str,
return {"ok": True, "data": parsed}
def _get_registered_extension(app: FastAPI, ext_id: str) -> WasmExtension:
extensions = getattr(app.state, "lnbits_wasm_extensions", {})
extension = extensions.get(ext_id)
def _get_registered_extension(ext_id: str) -> WasmExtension:
extension = core_app_extra.wasm_extension_registry.get(ext_id)
if extension:
return extension
return register_wasm_extension(app, ext_id)
raise RuntimeError(f"WASM extension '{ext_id}' is not registered.")
async def _extension_permissions(extension: WasmExtension) -> list[Any]:
+2
View File
@@ -7,6 +7,7 @@ from .misc import (
CoreAppExtra,
DbVersion,
SimpleStatus,
WasmExtensionRegistry,
)
from .payments import (
CancelInvoice,
@@ -102,5 +103,6 @@ __all__ = [
"Wallet",
"WalletInfo",
"WalletTypeInfo",
"WasmExtensionRegistry",
"WebPushSubscription",
]
+17
View File
@@ -22,6 +22,23 @@ class CoreAppExtra:
_do_nothing_async
)
def __init__(self) -> None:
self.wasm_extension_registry = WasmExtensionRegistry()
class WasmExtensionRegistry:
def __init__(self) -> None:
self._extensions: dict[str, Any] = {}
def register(self, extension: Any) -> None:
self._extensions[extension.id] = extension
def get(self, ext_id: str) -> Any | None:
return self._extensions.get(ext_id)
def list(self) -> list[Any]:
return list(self._extensions.values())
class ConversionData(BaseModel):
from_: str = "sat"
+1 -2
View File
@@ -112,8 +112,7 @@ async def dispatch_wasm_invoice_paid(app: FastAPI, payment: Any) -> None:
if not extension_id:
return
extensions = getattr(app.state, "lnbits_wasm_extensions", {})
extension = extensions.get(extension_id)
extension = core_app_extra.wasm_extension_registry.get(extension_id)
if not extension:
return