UNPKG

@ref247/affiliate-sdk

Version:

Ref247.io Affiliate SDK - integrate with us from you backend or build your custom UI

697 lines (683 loc) 22.9 kB
import { AxiosInstance } from 'axios'; declare enum OrganizationPlanEnum { Free = "Free", Starter = "Starter", Growth = "Growth", Enterprise = "Enterprise" } declare enum CommissionStatusEnum { PENDING = "pending", PAID = "paid", REJECTED = "rejected" } declare enum ConditionOperatorEnum { GREATER_THAN = ">", GREATER_THAN_OR_EQUAL = ">=", LESS_THAN = "<", LESS_THAN_OR_EQUAL = "<=", EQUALS = "=", NOT_EQUALS = "!=", NONE = "NONE" } declare enum OrderEnum { ASC = "ASC", DESC = "DESC" } declare enum FileTypeEnum { PROFILE_PICTURE = "PROFILE_PICTURE", ORGANIZATION_LOGO = "ORGANIZATION_LOGO", ORGANIZATION_AFFILIATE_FILES = "ORGANIZATION_AFFILIATE_FILES" } declare enum OrgCurrencyEnum { USD = "USD", EUR = "EUR" } declare enum OrgEventTypeEnum { click = "click", deposit = "deposit" } declare enum PaymentStatusEnum { PENDING = "pending", COMPLETED = "completed", FAILED = "failed", REFUNDED = "refunded" } declare enum RoleEnum { Admin = "admin", Manager = "manager", Viewer = "viewer", Affiliate = "affiliate" } /** * Represents a user's affiliation with an organization. */ type UserOrganization = { id: string; createdAt: Date; role: Role; organization: Organization; }; /** * Represents an organization. */ type Organization = { id: string; name: string; description: string; primaryColor: string; defaultLightMode: boolean; orgLogoPath: string; createdAt: Date; deletedAt: Date; allowedCustomDomain: boolean; eventsIncluded: number; extraEventsPriceUSD: number; monthlyPriceUSD: number; currentMonthEvents: number; customDomain: string; nextBillingDate: Date; billingEmail: string; stripeCustomerId: string; isFreeNextMonth: boolean; }; /** * Represents a user. */ type User = { id: string; firstName: string; lastName: string; email: string; createdAt: string; deletedAt: string; profilePicturePath: string; affiliations: Affiliation[]; }; /** * Represents a role. */ type Role = { id: string; name: string; }; /** * Response type for login. */ type LoginResponse = { accessToken: string; }; /** * Represents a commission. */ type Commission = { id: string; amount: number; currency: OrgCurrency; createdAt: Date; paidAt: Date; status: CommissionStatusEnum; affiliate: Affiliation; referral: Affiliation; }; /** * Represents an affiliation. */ type Affiliation = { id: string; externalUserId: string; createdAt: Date; deletedAt: Date; user: User; campaigns: Campaign[]; organization: Organization; affiliateLinks: AffiliateLink[]; referredByCampaign?: Campaign | null; referredByAffiliateLink?: AffiliateLink | null; parent?: Affiliation | null; }; /** * Represents a campaign. */ type Campaign = { id: string; organization: Organization; affiliateLinks: AffiliateLink[]; referrals: Affiliation[]; commissionStructure: CommissionStructure; createdAt: Date; updated: Date; deletedAt: Date; name: string; description: string; isDefault: boolean; landingPageUrl: string; }; /** * Represents an affiliate link. */ type AffiliateLink = { id: string; user: User; affiliate: Affiliation; campaign: Campaign; referrals: Affiliation[]; createdAt: Date; deletedAt: Date; clicks: number; conversions: number; uri: string; }; /** * Represents a commission structure. */ type CommissionStructure = { id: string; name: string; rules: CommissionRule[]; organization: Organization; campaigns: Campaign[]; affiliationTiers?: number[]; createdAt: Date; updated: Date; deletedAt: Date; }; /** * Represents metadata for a commission rule. */ type CommissionRuleMetaData = { id: number; affiliation: Affiliation; rule: CommissionRule; amount: number; appliedAt: Date; }; /** * Represents a commission rule. */ type CommissionRule = { id: string; isOneTime: boolean; useTotal: boolean; percentage?: number; fixedAmount?: number; commissionRulesMetaData: CommissionRuleMetaData[]; eventType: OrgEventType; currency: OrgCurrency; operator: ConditionOperatorEnum; value: number; commissionStructure: CommissionStructure; createdAt: Date; updated: Date; deletedAt: Date; }; /** * Represents a base item in an organization. */ type BaseOrgItem = { id: string; name: string; }; /** * Represents a currency in an organization. */ type OrgCurrency = BaseOrgItem; /** * Represents an event type in an organization. */ type OrgEventType = BaseOrgItem; /** * Converts a role to a role enum. */ declare const roleToRoleEnum: (role: Role) => RoleEnum; /** * Represents an API key. */ type ApiKey = { id: string; name: string; secret: string; role: Role; lastUsed?: Date; createdAt: Date; updated: Date; deletedAt: Date; user: User; }; /** * DTO for pricing plan. */ type PricingPlanDto = { id: string; name: string; monthlyPriceUSD: number; eventsIncluded: number; extraEventsPriceUSD: number; isApiAccess: boolean; isCustomDomain: boolean; features: string; missingFeatures: string; }; /** * DTO for Stripe configuration. */ type StripeConfigDto = { publishableKey: string; }; /** * DTO for billing session response. */ type BillingSessionResponseDto = { sessionUrl: string; }; /** * Represents an audit log. */ type AuditLog = { _id: string; action: string; performedBy: string; ipAddress: string; organizationId: string; details?: Record<string, any>; createdAt: Date; }; /** * DTO for referral action. */ type ReferralActionDto = { amount: number; typeId: string; affiliationId: string; orgId: string; linkId: string; currencyId: string; ip: string; userAgent: string; fingerPrintHash: string; referrer: string; createdAt: Date; processedDate: Date; }; type Payment = { id: string; amount: number; currency: string; status: PaymentStatusEnum; stripeInvoiceUrl: string; stripeInvoiceId: string; stripeCustomerId: string; createdAt: Date; updatedAt: Date; }; interface CreateApiKey { name: string; role: RoleEnum; } interface UpdateOrganization { name: string; description: string; primaryColor?: string; billingEmail?: string; defaultLightMode?: boolean; orgLogoPath: string; } interface OrgTheme { primaryColor: string; defaultLightMode: boolean; orgLogoPath: string; } interface OrganizationPlan { id: string; nextBillingDate: Date; pricingPlan: OrganizationPlanEnum; monthlyPriceUSD: number; allowedCustomDomain: boolean; eventsIncluded: number; extraEventsPriceUSD: number; customDomain: string; currentMonthEvents: number; stripeCustomerId: string; } interface CreateOrganization { name: string; userId: string; } interface UserRoleStats { role: string; count: number; } interface OrgPrivateStats { userStats: UserRoleStats[]; } interface OrgGenericStats { activeCampaigns: number; currencies: number; eventTypes: number; } interface ListUser { firstName: string; lastName: string; email: string; userId: string; roleId: string; roleName: string; affiliationId: string; createdAt: Date; deletedAt: Date; } interface UpdateUser { firstName?: string; lastName?: string; profilePicturePath?: string; } interface PageMetaParameters { pageOptions: PageOptions; itemCount: number; } interface PageMeta { readonly page: number; readonly take: number; readonly itemCount: number; readonly pageCount: number; readonly hasPreviousPage: boolean; readonly hasNextPage: boolean; } interface Page<T> { readonly data: T[]; readonly meta: PageMeta; } interface PageOptions { readonly order?: OrderEnum; readonly orderBy?: string; readonly searchTerm: string; readonly page: number; readonly take: number; get skip(): number; } interface AffiliateStats { totalCommissionsGenerated: number; totalCommissionsGained: number; totalReferrals: number; } interface OrganizationAffiliateStats { totalCommissionsGenerated: number; totalAffiliations: number; } interface CreateAffiliate { email: string; externalUserId?: string; orgId: string; affiliateParentId?: string; affiliateLinkId?: string; campaignId?: string; } interface UpdateAffiliate { externalUserId?: string; affiliateParentId?: string; affiliateLinkId?: string; campaignId?: string; } interface AffiliationList { id: string; userId: string; externalUserId: string; email: string; createdAt: Date; deletedAt: Date; commissionGained: number; numberOfReferrals: number; commissionsGenerated: number; } interface UpdateParent { affiliationId: string; newParentId: string; } interface EventAffiliate { userId: string; orgId: string; } interface CreateCampaign { orgId: string; name: string; description: string; landingPageUrl: string; isDefault: boolean; createDefaultCommissionStructure: boolean; } interface UpdateCampaign { readonly name: string; readonly description: string; readonly landingPageUrl: string; } interface CreateAffiliateLink { readonly affiliationId: string; readonly campaignId: string; } interface IncrementAffiliateLink { readonly affiliateLinkId: string; } interface CommissionSummary { currency: string; pending: number; paid: number; } interface OrgCommissionChartData { pending: LineData[]; paid: LineData[]; } interface CommissionChartData { gained: LineData[]; generated: LineData[]; } interface LineData { date: string; [key: string]: any; } interface CreateCommissionStructure { name: string; orgId: string; campaignId?: string; affiliationTiers: number[]; } interface UpdateCommissionStructure { name: string; affiliationTiers: number[]; } interface CreateCommissionRule { isOneTime: boolean; percentage?: number; fixedAmount?: number; eventId: string; currencyId: string; operator: ConditionOperatorEnum; value?: number; commissionStructureId: string; } interface UpdateCommissionRule { isOneTime?: boolean; percentage?: number; fixedAmount?: number; eventId?: string; currencyId?: string; operator?: ConditionOperatorEnum; value?: number; commissionStructureId?: string; } interface CreateCommissionStructureAndRuleEvent { createCommissionStructure: CreateCommissionStructure; createCommissionRule: CreateCommissionRule; } interface CreateCommission { amount: number; currencyId: string; affiliateId: string; referralId: string; } interface SignedUrlResponse { signedUrl: string; authorizationToken: string; baseUrl: string; fileName: string; } interface UploadRequestOrganization { orgId: string; fileName: string; fileType: FileTypeEnum; } interface UploadRequestUser { userId: string; fileName: string; fileType: FileTypeEnum; } interface UploadResponse { uploadUrl: string; authorizationToken: string; fileName: string; } interface CreatePayment { amount: number; currency: string; organizationId: string; } interface CreateCheckoutSession { orgId: string; planId: string; } interface JwtPayload { userId: string; email: string; } interface JwtResponse { accessToken: string; tokenType: string; } interface LoginEmail { email: string; } interface ReferralAction { readonly amount: number; readonly affiliationId: string; readonly typeId: string; readonly currencyId?: string; } declare enum ApplicationEvent { CREATE_CAMPAIGN = "create_campaign", CREATE_COMMISSION_STRUCTURE = "create_commission_structure", CREATE_TRACKING = "create_tracking", MAIL_SEND = "mail_send", DELETE_AFFILIATE = "delete_affiliate", ACTIVATE_AFFILIATE = "activate_affiliate", INCREMENT_AFFILIATELINK_CLICK = "increment_affiliatelink_click" } declare enum ApplicationQueue { AFFILIATION_QUEUE = "affiliation_queue", COMMISSION_QUEUE = "commission_queue", TRACKING_QUEUE = "tracking_queue", MAIL_QUEUE = "mail_queue" } declare enum ApplicationEventService { AFFILIATION_SERVICE = "affiliation_service", COMMISSION_SERVICE = "commission_service", TRACKING_SERVICE = "tracking_service", MAIL_SERVICE = "mail_service" } declare class Ref247AffiliateSDK { private apiUrl; private apiKey?; private api; private constructor(); static init(apiUrl?: string, apiKey?: string): Promise<Ref247AffiliateSDK>; getApiInstance(): AxiosInstance; setBearer(token: string): Promise<void>; login(email: string, password: string): Promise<LoginResponse>; resetPasswordRequest(email: string): Promise<void>; updatePassword(token: string, password: string): Promise<LoginResponse>; validateMagicToken(token: string): Promise<LoginResponse>; loginByMagicLink(email: string): Promise<void>; register(firstName: string, lastName: string, email: string, password: string): Promise<LoginResponse>; getRoles(): Promise<Role[]>; getMe(): Promise<User>; updateUser(userId: string, updateData: UpdateUser): Promise<User>; addUserToOrganization(organizationId: string, email: string, roleId: string): Promise<any>; updateUserRole(organizationId: string, userId: string, roleId: string): Promise<UserOrganization>; enterpriseRequest(orgId: string): Promise<void>; deleteUserFromOrganization(organizationId: string, userId: string): Promise<any>; getUsersFromOrganization(organizationId: string, page?: number, take?: number, search?: string, orderBy?: string, order?: 'ASC' | 'DESC', withDeleted?: boolean): Promise<Page<ListUser>>; getOrganizations(): Promise<UserOrganization[]>; createOrganization(name: string, userId: string): Promise<Organization>; updateOrganization(organizationId: string, updateData: Partial<UpdateOrganization>): Promise<Organization>; getOrganizationTheme(organizationId: string): Promise<OrgTheme>; getOrganizationCurrency(organizationId: string): Promise<OrgCurrency[]>; addOrganizationCurrency(organizationId: string, name: string): Promise<OrgCurrency>; updateOrganizationCurrency(organizationId: string, id: string, name: string): Promise<OrgCurrency>; removeOrganizationCurrency(organizationId: string, id: string): Promise<string>; getOrganizationPlan(orgId: string): Promise<OrganizationPlan>; getPricingPlans(): Promise<PricingPlanDto[]>; getPricingPlan(planId: string): Promise<PricingPlanDto>; getOrganizationEventTypes(organizationId: string): Promise<OrgEventType[]>; addOrganizationEventType(organizationId: string, name: string): Promise<OrgEventType>; updateOrganizationEventType(organizationId: string, id: string, name: string): Promise<OrgEventType>; removeOrganizationEventType(organizationId: string, id: string): Promise<string>; getAffiliates(organizationId: string, page?: number, take?: number, search?: string, orderBy?: string, order?: 'ASC' | 'DESC', withDeleted?: boolean): Promise<Page<AffiliationList>>; createAffiliate(affiliateData: CreateAffiliate): Promise<any>; addCampaignToAffiliate(affiliateId: string, campaignId: string): Promise<Affiliation>; removeCampaignToAffiliate(affiliateId: string, campaignId: string): Promise<Affiliation>; getAffiliate(affiliationId: string): Promise<Affiliation>; getAffiliateReferrals(affiliationId: string, page?: number, take?: number, search?: string, orderBy?: string, order?: 'ASC' | 'DESC', withDeleted?: boolean): Promise<Page<Affiliation>>; getAffiliateCommissionsGenerated(affiliationId: string, page?: number, take?: number, search?: string, orderBy?: string, order?: 'ASC' | 'DESC'): Promise<Page<Commission>>; getAffiliateCommissionsGained(affiliationId: string, page?: number, take?: number, search?: string, orderBy?: string, order?: 'ASC' | 'DESC'): Promise<Page<Commission>>; getAffiliatesByAffiliateId(affiliationId: string, page?: number, take?: number, search?: string, orderBy?: string, order?: 'ASC' | 'DESC', withDeleted?: boolean): Promise<Page<AffiliationList>>; updateAffiliate(affiliationId: string, updateData: UpdateAffiliate): Promise<Affiliation>; getAffiliateByOrgIdAndUserId(orgId: string): Promise<Affiliation>; createAffiliateLink(affiliateData: CreateAffiliateLink): Promise<AffiliateLink>; deleteAffiliateLink(affiliateLinkId: string): Promise<void>; getAllAffiliateLinksOfAffiliate(affiliateId: string, withDeleted?: boolean, page?: number, take?: number, search?: string, orderBy?: string, order?: 'ASC' | 'DESC'): Promise<Page<AffiliateLink>>; getAllAffiliateLinksOfOrganization(orgId: string, withDeleted?: boolean, page?: number, take?: number, search?: string, orderBy?: string, order?: 'ASC' | 'DESC'): Promise<Page<AffiliateLink>>; createCampaign(campaignData: CreateCampaign): Promise<Campaign>; getAllCampaignsOfOrganization(orgId: string, withDeleted?: boolean): Promise<Campaign[]>; updateCampaign(id: string, campaignData: Partial<UpdateCampaign>): Promise<Campaign>; deleteCampaign(id: string): Promise<void>; getCommissionStructuresOfOrganization(orgId: string, withDeleted?: boolean): Promise<CommissionStructure[]>; getCommissionStructure(commissionStructureId: string): Promise<CommissionStructure>; addCommissionStructureToCampaign(commissionStructureId: string, campaignId: string): Promise<Campaign>; removeCommissionStructureToCampaign(commissionStructureId: string, campaignId: string): Promise<Campaign>; addCommissionStructure(commissionStructureData: CreateCommissionStructure): Promise<CommissionStructure>; deleteCommissionStructure(commissionStructureId: string): Promise<void>; updateCommissionStructure(id: string, updateData: any): Promise<CommissionStructure>; getCommissionRule(commissionRuleId: string): Promise<CommissionRule>; deleteCommissionRule(commissionRuleId: string): Promise<void>; getCommissionRulesOfcommissionStructure(commissionStructureId: string, withDeleted?: boolean): Promise<CommissionRule[]>; addCommissionRule(commissionRuleData: CreateCommissionRule): Promise<CommissionRule>; updateCommissionRule(id: string, updateData: UpdateCommissionRule): Promise<CommissionRule>; getAffiliateCommissionsChartData(affiliateId: string, startDate?: Date, endDate?: Date): Promise<CommissionChartData>; getAffiliateReferralsChartData(affiliateId: string, startDate?: Date, endDate?: Date): Promise<LineData[]>; getOrgReferralsChartData(orgId: string, startDate?: Date, endDate?: Date): Promise<LineData[]>; getAffiliateStats(affiliateId: string): Promise<AffiliateStats>; getOrganizationAffiliationStats(orgId: string): Promise<OrganizationAffiliateStats>; getOrganizationCommissionStats(orgId: string): Promise<CommissionSummary[]>; getOrganizationGenericStats(orgId: string): Promise<OrgGenericStats>; getOrganizationPrivateStats(orgId: string): Promise<OrgPrivateStats>; getOrgCommissionsChartData(orgId: string, startDate?: Date, endDate?: Date): Promise<OrgCommissionChartData>; createApiKey(organizationId: string, data: CreateApiKey): Promise<ApiKey>; listApiKeysOfOrganization(organizationId: string): Promise<ApiKey[]>; listApiKeysOfUserAndOrganizationId(userId: string, organizationId: string): Promise<ApiKey[]>; revokeApiKey(organizationId: string, apiKeyId: string): Promise<void>; getOrganizationSignedUrl(orgId: string): Promise<SignedUrlResponse>; getPublicSignedUrl(orgId: string): Promise<SignedUrlResponse>; getUploadUrlOrganization(uploadRequest: UploadRequestOrganization): Promise<UploadResponse>; getUploadUrlUser(uploadRequest: UploadRequestUser): Promise<UploadResponse>; getStripeConfig(): Promise<StripeConfigDto>; createBillingSession(checkoutData: CreateCheckoutSession): Promise<BillingSessionResponseDto>; changeSubscription(checkoutData: CreateCheckoutSession): Promise<{ success: boolean; message: string; }>; getPaymentsByOrganization(orgId: string): Promise<Payment[]>; getPaymentsPendingByOrganization(orgId: string): Promise<Payment[]>; getAuditLogsByOrganizationId(orgId: string, page?: number, take?: number, search?: string, orderBy?: string, order?: 'ASC' | 'DESC', startDate?: Date, endDate?: Date): Promise<Page<AuditLog>>; getOrganizationCommissions(orgId: string, page?: number, take?: number, search?: string, orderBy?: string, order?: 'ASC' | 'DESC', status?: CommissionStatusEnum): Promise<Page<Commission>>; updateCommissionsStatus(orgId: string, commissionIds: string[], status: CommissionStatusEnum): Promise<Commission[]>; getOrganizationReferralActions(orgId: string, page: number | undefined, take: number | undefined, search: string | undefined, orderBy: string | undefined, order: "ASC" | "DESC" | undefined, isProcessed: boolean): Promise<Page<ReferralActionDto>>; } export { ApplicationEvent, ApplicationEventService, ApplicationQueue, CommissionStatusEnum, ConditionOperatorEnum, FileTypeEnum, OrderEnum, OrgCurrencyEnum, OrgEventTypeEnum, OrganizationPlanEnum, PaymentStatusEnum, Ref247AffiliateSDK, RoleEnum, roleToRoleEnum }; export type { AffiliateLink, AffiliateStats, Affiliation, AffiliationList, ApiKey, AuditLog, BaseOrgItem, BillingSessionResponseDto, Campaign, Commission, CommissionChartData, CommissionRule, CommissionRuleMetaData, CommissionStructure, CommissionSummary, CreateAffiliate, CreateAffiliateLink, CreateApiKey, CreateCampaign, CreateCheckoutSession, CreateCommission, CreateCommissionRule, CreateCommissionStructure, CreateCommissionStructureAndRuleEvent, CreateOrganization, CreatePayment, EventAffiliate, IncrementAffiliateLink, JwtPayload, JwtResponse, LineData, ListUser, LoginEmail, LoginResponse, OrgCommissionChartData, OrgCurrency, OrgEventType, OrgGenericStats, OrgPrivateStats, OrgTheme, Organization, OrganizationAffiliateStats, OrganizationPlan, Page, PageMeta, PageMetaParameters, PageOptions, Payment, PricingPlanDto, ReferralAction, ReferralActionDto, Role, SignedUrlResponse, StripeConfigDto, UpdateAffiliate, UpdateCampaign, UpdateCommissionRule, UpdateCommissionStructure, UpdateOrganization, UpdateParent, UpdateUser, UploadRequestOrganization, UploadRequestUser, UploadResponse, User, UserOrganization, UserRoleStats };