import asyncio import requests from .metadata_engine import generate_metadata from .hashtags import generate_hashtags from .thumbnail import generate_thumbnail from .scheduler_engine import schedule_post from .router import publish_all async def run_publisher(payload: dict): source = payload["source"] webhook = payload.get("webhook") platforms = payload.get( "platforms", ["tiktok", "reels", "shorts", "facebook"] ) # 1. Metadata metadata = await asyncio.to_thread(generate_metadata, source) # 2. Hashtags hashtags = await asyncio.to_thread(generate_hashtags, metadata) # 3. Thumbnail thumbnail = await asyncio.to_thread(generate_thumbnail, source) # 4. Schedule schedule_time = schedule_post(payload) # 5. Publish results = await publish_all( source=source, platforms=platforms, metadata=metadata, hashtags=hashtags, thumbnail=thumbnail, schedule_time=schedule_time, ) response = { "status": "completed", "metadata": metadata, "hashtags": hashtags, "thumbnail": thumbnail, "results": results, } if webhook: await asyncio.to_thread(requests.post, webhook, json=response, timeout=10) return response