Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 18 additions & 5 deletions examples/python/servers/fastapi/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,19 @@
load_dotenv()

# Get configuration from environment
ADDRESS = os.getenv("ADDRESS")
ACP_V1_RECEIVER_ADDRESS = os.getenv("ACP_V1_RECEIVER_ADDRESS")
ACP_V2_RECEIVER_ADDRESS = os.getenv("ACP_V2_RECEIVER_ADDRESS")
CDP_API_KEY_ID = os.getenv("CDP_API_KEY_ID")
CDP_API_KEY_SECRET = os.getenv("CDP_API_KEY_SECRET")
NETWORK = os.getenv("NETWORK")

print(f"🔍 Loading environment variables:")
print(f" ADDRESS: {ADDRESS}")
print(f" ADDRESS: {ACP_V1_RECEIVER_ADDRESS}" + f" {ACP_V2_RECEIVER_ADDRESS}")
print(f" CDP_API_KEY_ID: {CDP_API_KEY_ID[:20] if CDP_API_KEY_ID else 'NOT SET'}...")
print(f" CDP_API_KEY_SECRET: {'SET' if CDP_API_KEY_SECRET else 'NOT SET'} ({len(CDP_API_KEY_SECRET) if CDP_API_KEY_SECRET else 0} chars)")

if not ADDRESS:
raise ValueError("Missing required environment variable: ADDRESS")
if not ACP_V1_RECEIVER_ADDRESS or not ACP_V2_RECEIVER_ADDRESS:
raise ValueError("Missing required environment variable: ACP_V1_RECEIVER_ADDRESS or ACP_V2_RECEIVER_ADDRESS")
if not NETWORK or NETWORK not in ["base", "base-sepolia"]:
raise ValueError(f"Invalid network: {NETWORK}")

Expand Down Expand Up @@ -111,12 +112,24 @@ async def dynamic_price_middleware(request: Request, call_next):
# Read dynamic price from X-Budget header
budget = request.headers.get("X-Budget", "$0.001")
print(f"📋 Dynamic budget from header: {budget}")

# Receiver depends on ACP version
acp_version_str = request.headers.get("X-ACP-VERSION", "1")
try:
acp_version = int(acp_version_str)
except ValueError:
acp_version = 1

if acp_version == 2:
pay_to_address = ACP_V2_RECEIVER_ADDRESS
else:
pay_to_address = ACP_V1_RECEIVER_ADDRESS

# Use the standard require_payment middleware with dynamic price
payment_middleware = require_payment(
path="/acp-budget",
price=budget, # ⭐ dynamic price
pay_to_address=ADDRESS,
pay_to_address=pay_to_address,
network=NETWORK,
facilitator_config=facilitator_config,
description=f"acp job budget ({budget})",
Expand Down
Loading