From fe19de3d9a44183c083bd08a2859097be7a5f26c Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sat, 4 Apr 2026 18:27:45 -0700 Subject: [PATCH] feat: affiliates public API surface (__init__.py) --- circuitforge_core/affiliates/__init__.py | 41 ++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/circuitforge_core/affiliates/__init__.py b/circuitforge_core/affiliates/__init__.py index e69de29..3696c31 100644 --- a/circuitforge_core/affiliates/__init__.py +++ b/circuitforge_core/affiliates/__init__.py @@ -0,0 +1,41 @@ +"""Public API for circuitforge_core.affiliates. + +Usage:: + + from circuitforge_core.affiliates import wrap_url, get_disclosure_text + + # Wrap a URL — env-var mode (no preferences, no opt-out) + url = wrap_url("https://www.ebay.com/itm/123", retailer="ebay") + + # Wrap a URL — with preference injection (opt-out + BYOK) + url = wrap_url( + "https://www.ebay.com/itm/123", + retailer="ebay", + user_id="u123", + get_preference=my_prefs_client.get, + ) + + # Frontend disclosure tooltip + text = get_disclosure_text("ebay") + + # Register a product-specific program at startup + register_program(AffiliateProgram( + name="My Shop", + retailer_key="myshop", + env_var="MYSHOP_AFFILIATE_ID", + build_url=lambda url, id_: f"{url}?ref={id_}", + )) +""" +from .disclosure import BANNER_COPY, get_disclosure_text +from .programs import AffiliateProgram, get_program, register_program, registered_keys +from .router import wrap_url + +__all__ = [ + "wrap_url", + "get_disclosure_text", + "BANNER_COPY", + "AffiliateProgram", + "register_program", + "get_program", + "registered_keys", +]