diff --git a/__init__.py b/__init__.py index 43fcdfe..9c4b268 100644 --- a/__init__.py +++ b/__init__.py @@ -1,16 +1,19 @@ import asyncio -from typing import List from fastapi import APIRouter +from loguru import logger from lnbits.db import Database from lnbits.helpers import template_renderer -from lnbits.tasks import catch_everything_and_restart +from lnbits.tasks import create_permanent_unique_task +from .relay.client_manager import NostrClientManager db = Database("ext_nostrrelay") nostrrelay_ext: APIRouter = APIRouter(prefix="/nostrrelay", tags=["NostrRelay"]) +client_manager: NostrClientManager = NostrClientManager() + nostrrelay_static_files = [ { "path": "/nostrrelay/static", @@ -26,8 +29,6 @@ } ] -scheduled_tasks: List[asyncio.Task] = [] - def nostrrelay_renderer(): return template_renderer(["nostrrelay/templates"]) @@ -38,7 +39,20 @@ def nostrrelay_renderer(): from .views_api import * # noqa +scheduled_tasks: list[asyncio.Task] = [] + +async def nostrrelay_stop(): + for task in scheduled_tasks: + try: + task.cancel() + except Exception as ex: + logger.warning(ex) + try: + await client_manager.stop() + except Exception as ex: + logger.warning(ex) + + def nostrrelay_start(): - loop = asyncio.get_event_loop() - task = loop.create_task(catch_everything_and_restart(wait_for_paid_invoices)) + task = create_permanent_unique_task("ext_nostrrelay", wait_for_paid_invoices) scheduled_tasks.append(task) diff --git a/views_api.py b/views_api.py index d21f0bf..c61c80f 100644 --- a/views_api.py +++ b/views_api.py @@ -4,20 +4,17 @@ from fastapi import Depends, Request, WebSocket from fastapi.exceptions import HTTPException from loguru import logger -from pydantic.types import UUID4 from starlette.responses import JSONResponse from lnbits.core.crud import get_user from lnbits.core.services import create_invoice from lnbits.decorators import ( WalletTypeInfo, - check_admin, require_admin_key, require_invoice_key, ) from lnbits.helpers import urlsafe_short_hash - -from . import nostrrelay_ext, scheduled_tasks +from . import nostrrelay_ext, client_manager from .crud import ( create_account, create_relay, @@ -34,11 +31,9 @@ ) from .helpers import extract_domain, normalize_public_key, relay_info_response from .models import BuyOrder, NostrAccount, NostrPartialAccount -from .relay.client_manager import NostrClientConnection, NostrClientManager +from .relay.client_manager import NostrClientConnection from .relay.relay import NostrRelay -client_manager = NostrClientManager() - @nostrrelay_ext.websocket("/{relay_id}") async def websocket_endpoint(relay_id: str, websocket: WebSocket): @@ -360,19 +355,3 @@ async def api_pay_to_join(data: BuyOrder): status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Cannot create invoice for client to join", ) - - -@nostrrelay_ext.delete("/api/v1", status_code=HTTPStatus.OK) -async def api_stop(wallet: WalletTypeInfo = Depends(check_admin)): - for t in scheduled_tasks: - try: - t.cancel() - except Exception as ex: - logger.warning(ex) - - try: - await client_manager.stop() - except Exception as ex: - logger.warning(ex) - - return {"success": True}