feat: core.affiliates module — wrap_url, AffiliateProgram, eBay/Amazon builders #21
Labels
No labels
architecture
backlog
enhancement
module:documents
module:hardware
module:manage
module:pipeline
module:voice
priority:backlog
priority:high
priority:medium
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Circuit-Forge/circuitforge-core#21
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
New
circuitforge_core.affiliatesmodule. Handles affiliate link wrapping, opt-out enforcement, and BYOK ID resolution for all CF products.Module layout
Public API
Resolution order (router.py)
Built-in programs
eBay Partner Network (
retailer_key="ebay"):EBAY_AFFILIATE_CAMPAIGN_IDmkcid=1&mkrid=711-53200-19255-0&siteid=0&campid={id}&toolid=10001&mkevt=1Amazon Associates (
retailer_key="amazon"):AMAZON_ASSOCIATES_TAGtag={tag}query paramopt-out design
Opt-out check uses an injected
get_preference(user_id, path)callable so the module does not depend on Heimdall directly. Products inject their preferences client; anonymous/self-hosted paths fall through to env-var-only mode.Blocked on: #21 (core.preferences persistence helpers) for cloud opt-out support.
Migration from snipe#20
Replace snipe's one-off
_affiliate_url()helper withwrap_url(retailer="ebay")after this merges.Related
circuitforge-plans/shared/2026-04-04-affiliate-links-design.md