"""Shared scaffolding for the BlueLaminate market scrape workers. A market worker (cs.money, skin.land, …) subclasses `Worker`, fills in its scrape + consent steps, and calls `run(MyWorker)`. Everything else — config, logging, the IPRoyal proxy/forwarder, the C2 client, the poll/scrape/post loop, IP rotation, graceful shutdown — lives here so it's written once. """ from .config import Settings from .runtime import ScrapeResult, Worker, click, looks_like_challenge, page_fetch, run __all__ = [ "Settings", "ScrapeResult", "Worker", "click", "looks_like_challenge", "page_fetch", "run", ]