diff --git a/lnbits/core/helpers.py b/lnbits/core/helpers.py index 214fee2f..54c3cd35 100644 --- a/lnbits/core/helpers.py +++ b/lnbits/core/helpers.py @@ -2,6 +2,7 @@ import importlib import re from typing import Any +import httpx from loguru import logger from lnbits.db import Connection @@ -42,3 +43,12 @@ async def run_migration(db: Connection, migrations_module: Any, current_version: else: async with core_db.connect() as conn: await update_migration_version(conn, db_name, version) + + +async def stop_extension_work(ext_id: str, user: str): + """Stop background workk for extension (like asyncio.Tasks, WebSockets, etc)""" + async with httpx.AsyncClient() as client: + try: + await client.delete(url=f"/{ext_id}/api/v1?usr={user}") + except Exception as ex: + logger.warning(ex) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 07049b73..365bc5a1 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -29,7 +29,7 @@ from sse_starlette.sse import EventSourceResponse from starlette.responses import RedirectResponse, StreamingResponse from lnbits import bolt11, lnurl -from lnbits.core.helpers import migrate_extension_database +from lnbits.core.helpers import migrate_extension_database, stop_extension_work from lnbits.core.models import Payment, User, Wallet from lnbits.decorators import ( WalletTypeInfo, @@ -755,6 +755,8 @@ async def api_install_extension( if data.ext_id not in settings.lnbits_deactivated_extensions: settings.lnbits_deactivated_extensions += [data.ext_id] + # call stop while the old routes are still active + await stop_extension_work(data.ext_id, settings.super_user) # mount routes for the new version core_app_extra.register_new_ext_routes(extension) @@ -798,6 +800,9 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin) ) try: + # call stop while the old routes are still active + await stop_extension_work(ext_id, settings.super_user) + if ext_id not in settings.lnbits_deactivated_extensions: settings.lnbits_deactivated_extensions += [ext_id]