@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
TypeScript
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 };