from threading import Thread from typing import Callable import httpx from loguru import logger from websocket import WebSocketApp from lnbits.app import settings from lnbits.helpers import url_for from .event import NostrEvent async def publish_nostr_event(e: NostrEvent): url = url_for("/nostrclient/api/v1/publish", external=True) data = dict(e) print("### published", dict(data)) async with httpx.AsyncClient() as client: try: await client.post( url, json=data, ) except Exception as ex: logger.warning(ex) async def connect_to_nostrclient_ws( on_open: Callable, on_message: Callable ) -> WebSocketApp: def on_error(_, error): logger.warning(error) logger.debug(f"Subscribing to websockets for nostrclient extension") ws = WebSocketApp( f"ws://localhost:{settings.port}/nostrclient/api/v1/filters", on_message=on_message, on_open=on_open, on_error=on_error, ) wst = Thread(target=ws.run_forever) wst.daemon = True wst.start() return ws # async def handle_event(event, pubkeys): # tags = [t[1] for t in event["tags"] if t[0] == "p"] # to_merchant = None # if tags and len(tags) > 0: # to_merchant = tags[0] # if event["pubkey"] in pubkeys or to_merchant in pubkeys: # logger.debug(f"Event sent to {to_merchant}") # pubkey = to_merchant if to_merchant in pubkeys else event["pubkey"] # # Send event to market extension # await send_event_to_market(event=event, pubkey=pubkey) # async def send_event_to_market(event: dict, pubkey: str): # # Sends event to market extension, for decrypt and handling # market_url = url_for(f"/market/api/v1/nip04/{pubkey}", external=True) # async with httpx.AsyncClient() as client: # await client.post(url=market_url, json=event)