← back to Wine Finder Next

lib/affiliates/partners.ts

264 lines

import { AffiliatePartner } from '../types/affiliate';

// Comprehensive Affiliate Partner Database
export const AFFILIATE_PARTNERS: AffiliatePartner[] = [
  // === MARKETPLACES ===
  {
    id: 'vivino',
    name: 'Vivino',
    type: 'marketplace',
    baseUrl: 'https://www.vivino.com',
    affiliateParam: 'affiliate_id',
    affiliateId: process.env.VIVINO_AFFILIATE_ID || 'PENDING',
    commissionRate: '3-8%',
    cookieDuration: 30,
    enabled: true,
    description: 'World\'s largest wine marketplace with 50M+ users',
    signupUrl: 'https://www.vivino.com/affiliates',
    network: 'Direct',
    priority: 10,
    logo: '/logos/vivino.png'
  },
  {
    id: 'wine-com',
    name: 'Wine.com',
    type: 'marketplace',
    baseUrl: 'https://www.wine.com',
    affiliateParam: 'AID',
    affiliateId: process.env.WINE_COM_AFFILIATE_ID || 'PENDING',
    commissionRate: '5-10%',
    cookieDuration: 30,
    enabled: true,
    description: 'America\'s #1 online wine shop with 17,000+ wines',
    signupUrl: 'https://www.cj.com/advertiser/wine.com',
    network: 'CJ',
    priority: 9,
    logo: '/logos/wine-com.png'
  },
  {
    id: 'wine-searcher',
    name: 'Wine-Searcher',
    type: 'marketplace',
    baseUrl: 'https://www.wine-searcher.com',
    affiliateParam: 'aid',
    affiliateId: process.env.WINE_SEARCHER_AFFILIATE_ID || 'PENDING',
    commissionRate: 'CPA $1-5',
    cookieDuration: 30,
    enabled: true,
    description: 'Price comparison engine with 7M+ wines from 75,000 retailers',
    signupUrl: 'https://www.wine-searcher.com/affiliates',
    network: 'Direct',
    priority: 8,
    logo: '/logos/wine-searcher.png'
  },

  // === MAJOR RETAILERS ===
  {
    id: 'total-wine',
    name: 'Total Wine & More',
    type: 'retailer',
    baseUrl: 'https://www.totalwine.com',
    affiliateParam: 'clickId',
    affiliateId: process.env.TOTAL_WINE_AFFILIATE_ID || 'PENDING',
    commissionRate: '2-5%',
    cookieDuration: 30,
    enabled: true,
    description: 'America\'s largest wine retailer with 200+ stores',
    signupUrl: 'https://www.impact.com/advertiser/total-wine-more',
    network: 'Impact',
    priority: 9,
    logo: '/logos/total-wine.png'
  },
  {
    id: 'kl-wines',
    name: 'K&L Wine Merchants',
    type: 'retailer',
    baseUrl: 'https://www.klwines.com',
    affiliateParam: 'affid',
    affiliateId: process.env.KL_WINES_AFFILIATE_ID || 'PENDING',
    commissionRate: '3-7%',
    cookieDuration: 30,
    enabled: true,
    description: 'Premium wine merchant specializing in rare and fine wines',
    signupUrl: 'https://www.klwines.com/affiliate-program',
    network: 'Direct',
    priority: 7,
    logo: '/logos/kl-wines.png'
  },
  {
    id: 'wine-access',
    name: 'Wine Access',
    type: 'retailer',
    baseUrl: 'https://www.wineaccess.com',
    affiliateParam: 'a_aid',
    affiliateId: process.env.WINE_ACCESS_AFFILIATE_ID || 'PENDING',
    commissionRate: '10-15%',
    cookieDuration: 30,
    enabled: true,
    description: 'Curated fine wines from acclaimed producers',
    signupUrl: 'https://www.sharedasale.com/shareasale.cfm?merchantID=wineaccess',
    network: 'ShareASale',
    priority: 8,
    logo: '/logos/wine-access.png'
  },
  {
    id: 'wine-enthusiast',
    name: 'Wine Enthusiast',
    type: 'retailer',
    baseUrl: 'https://www.wineenthusiast.com',
    affiliateParam: 'sscid',
    affiliateId: process.env.WINE_ENTHUSIAST_AFFILIATE_ID || 'PENDING',
    commissionRate: '5-8%',
    cookieDuration: 30,
    enabled: true,
    description: 'Wine, accessories, and expert ratings',
    signupUrl: 'https://www.shareasale.com/shareasale.cfm?merchantID=wineenthusiast',
    network: 'ShareASale',
    priority: 7,
    logo: '/logos/wine-enthusiast.png'
  },

  // === WINE CLUBS ===
  {
    id: 'firstleaf',
    name: 'Firstleaf',
    type: 'club',
    baseUrl: 'https://www.firstleaf.club',
    affiliateParam: 'ref',
    affiliateId: process.env.FIRSTLEAF_AFFILIATE_ID || 'PENDING',
    commissionRate: '$30-50 CPA',
    cookieDuration: 45,
    enabled: true,
    description: 'Personalized wine subscription service',
    signupUrl: 'https://impact.com/advertiser/firstleaf',
    network: 'Impact',
    priority: 8,
    logo: '/logos/firstleaf.png'
  },
  {
    id: 'naked-wines',
    name: 'Naked Wines',
    type: 'club',
    baseUrl: 'https://www.nakedwines.com',
    affiliateParam: 'affid',
    affiliateId: process.env.NAKED_WINES_AFFILIATE_ID || 'PENDING',
    commissionRate: '$25-40 CPA',
    cookieDuration: 30,
    enabled: true,
    description: 'Crowdfunded wine with direct winemaker support',
    signupUrl: 'https://www.cj.com/advertiser/naked-wines',
    network: 'CJ',
    priority: 7,
    logo: '/logos/naked-wines.png'
  },
  {
    id: 'winc',
    name: 'Winc',
    type: 'club',
    baseUrl: 'https://www.winc.com',
    affiliateParam: 'aid',
    affiliateId: process.env.WINC_AFFILIATE_ID || 'PENDING',
    commissionRate: '$20-35 CPA',
    cookieDuration: 30,
    enabled: true,
    description: 'Modern wine club with personalized selections',
    signupUrl: 'https://www.shareasale.com/shareasale.cfm?merchantID=winc',
    network: 'ShareASale',
    priority: 6,
    logo: '/logos/winc.png'
  },

  // === SPECIALTY & GIFT ===
  {
    id: 'wine-insiders',
    name: 'Wine Insiders',
    type: 'gift',
    baseUrl: 'https://www.wineinsiders.com',
    affiliateParam: 'a_aid',
    affiliateId: process.env.WINE_INSIDERS_AFFILIATE_ID || 'PENDING',
    commissionRate: '$15-25 CPA',
    cookieDuration: 30,
    enabled: true,
    description: 'Wine gifts and special offers',
    signupUrl: 'https://www.shareasale.com/shareasale.cfm?merchantID=wineinsiders',
    network: 'ShareASale',
    priority: 5,
    logo: '/logos/wine-insiders.png'
  },
  {
    id: 'wine-library',
    name: 'Wine Library',
    type: 'retailer',
    baseUrl: 'https://www.winelibrary.com',
    affiliateParam: 'affid',
    affiliateId: process.env.WINE_LIBRARY_AFFILIATE_ID || 'PENDING',
    commissionRate: '3-6%',
    cookieDuration: 30,
    enabled: true,
    description: 'Large selection with expert video reviews',
    signupUrl: 'https://www.winelibrary.com/affiliates',
    network: 'Direct',
    priority: 6,
    logo: '/logos/wine-library.png'
  },

  // === AUCTIONS ===
  {
    id: 'wine-bid',
    name: 'WineBid',
    type: 'auction',
    baseUrl: 'https://www.winebid.com',
    affiliateParam: 'ref',
    affiliateId: process.env.WINE_BID_AFFILIATE_ID || 'PENDING',
    commissionRate: '2-4%',
    cookieDuration: 30,
    enabled: true,
    description: 'Online wine auctions for rare and collectible wines',
    signupUrl: 'https://www.winebid.com/affiliate-program',
    network: 'Direct',
    priority: 5,
    logo: '/logos/wine-bid.png'
  },
  {
    id: 'zachy',
    name: 'Zachys',
    type: 'auction',
    baseUrl: 'https://www.zachys.com',
    affiliateParam: 'affiliate',
    affiliateId: process.env.ZACHYS_AFFILIATE_ID || 'PENDING',
    commissionRate: '2-5%',
    cookieDuration: 30,
    enabled: true,
    description: 'Premier wine auctions and fine wine retail',
    signupUrl: 'https://www.zachys.com/affiliates',
    network: 'Direct',
    priority: 5,
    logo: '/logos/zachys.png'
  }
];

// Get enabled partners sorted by priority
export function getEnabledPartners(): AffiliatePartner[] {
  return AFFILIATE_PARTNERS
    .filter(p => p.enabled)
    .sort((a, b) => (b.priority || 0) - (a.priority || 0));
}

// Get partner by ID
export function getPartnerById(id: string): AffiliatePartner | undefined {
  return AFFILIATE_PARTNERS.find(p => p.id === id);
}

// Get partners by type
export function getPartnersByType(type: string): AffiliatePartner[] {
  return AFFILIATE_PARTNERS
    .filter(p => p.enabled && p.type === type)
    .sort((a, b) => (b.priority || 0) - (a.priority || 0));
}

// Check if partner is configured
export function isPartnerConfigured(partnerId: string): boolean {
  const partner = getPartnerById(partnerId);
  return !!(partner && partner.affiliateId && partner.affiliateId !== 'PENDING');
}