Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
interface GoAffProAffiliate { id: number; email: string; ref_code: string; status: string; created_at: string; updated_at: string; } interface CreateAffiliateRequest { email: string; first_name?: string; last_name?: string; name: string; password: string; } interface CreateAffiliateResponse { success: boolean; affiliate: GoAffProAffiliate | null; message?: string; errors?: Record
; } /** * Helper function to update an affiliate via PATCH */ async function updateGoAffProAffiliate( id: number, body: Record
, ): Promise<{ success: boolean; data?: unknown; error?: string }> { try { const response = await fetch( `${serverConfig.goaffproApiUrl}/admin/affiliates/${id}`, { method: "PATCH", headers: { "Content-Type": "application/json", "x-goaffpro-access-token": serverConfig.goaffproApiKey, }, body: JSON.stringify(body), }, ); const responseData = await response.json(); if (!response.ok) { return { success: false, error: responseData.error || responseData.message || "Failed to update affiliate", }; } return { success: true, data: responseData, }; } catch (error) { console.error("Error updating GoAffPro affiliate:", error); return { success: false, error: "Internal server error", }; } } /** * Create a new affiliate in GoAffPro */ export async function createGoAffProAffiliate( affiliateData: CreateAffiliateRequest, ): Promise
{ console.log("affiliateData", affiliateData); try { const response = await fetch( `${serverConfig.goaffproApiUrl}/admin/affiliates`, { method: "POST", headers: { "Content-Type": "application/json", "x-goaffpro-access-token": serverConfig.goaffproApiKey, }, body: JSON.stringify({ email: affiliateData.email, name: affiliateData.name, password: affiliateData.password, password_expired: true, status: "pending", first_name: affiliateData.first_name, last_name: affiliateData.last_name, }), }, ); const responseData = await response.json(); if (!response.ok) { console.error("Error creating GoAffPro affiliate:", responseData); return { success: false, affiliate: null, message: responseData.error || "Failed to create affiliate", errors: responseData.errors, }; } // Get the affiliate ID from the response const createdAffiliateId = responseData.affiliate_id; // Update name fields immediately after creation // This is necessary because the creation endpoint doesn't always persist these fields if ( createdAffiliateId && (affiliateData.name || affiliateData.first_name || affiliateData.last_name) ) { const updateResult = await updateGoAffProAffiliate( createdAffiliateId, { ...(affiliateData.name && { name: affiliateData.name }), ...(affiliateData.first_name && { first_name: affiliateData.first_name }), ...(affiliateData.last_name && { last_name: affiliateData.last_name }), }, ); if (!updateResult.success) { console.warn( "Failed to update affiliate name fields:", updateResult.error, ); // Don't fail the entire creation if update fails } } const affiliate = await getGoAffProAffiliateByEmail( affiliateData.email, ); return { success: true, affiliate: affiliate, message: "Affiliate created successfully", }; } catch (error) { console.error("Error creating GoAffPro affiliate:", error); return { success: false, affiliate: null, message: "Internal server error", }; } } /** * Approve affiliate by id from GoAffPro */ export async function approveGoAffProAffiliate( id: number, ): Promise< { success: boolean; message?: string; error?: string; id?: number } > { try { const updateResult = await updateGoAffProAffiliate(id, { status: "approved", first_name: "David", last_name: "Baker", }); if (!updateResult.success) { return { success: false, message: updateResult.error || "Failed to approve affiliate in GoAffPro", }; } const responseData = updateResult.data as { affiliate?: string | Record
; updated?: boolean; id?: number; }; // Parse affiliate if it's a JSON string const affiliate = typeof responseData.affiliate === "string" ? JSON.parse(responseData.affiliate) : responseData.affiliate; const success = affiliate?.status === "approved" && responseData.updated === true && responseData.id != null; console.log("success", success); console.log("responseData", responseData); console.log("parsed affiliate", affiliate); if (!success) { return { success: false, message: "Failed to approve affiliate in GoAffPro", }; } return { success: true, message: "Affiliate approved successfully", id: responseData.id, }; } catch (error) { console.error("Error approving GoAffPro affiliate:", error); return { success: false, message: "Internal server error" }; } }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)