skip-event-bridge
Version:
Event bridge to partner tracking SDKs
505 lines (340 loc) • 13.1 kB
text/typescript
/* eslint-disable @typescript-eslint/camelcase */
/* eslint-disable @typescript-eslint/no-explicit-any */
import GenericStrategy from './GenericStrategy';
import EventAction from '../EventAction';
import { LoginProps, LoginStatus, Order, Provider, ProviderMethod, UserProfile } from '../types';
import { onLoginOnboardingReasons, onLoginTransformProfile } from '../transforms/transforms.web';
import { makeTrustworthy } from '../util';
export default class WebStrategy extends GenericStrategy implements Provider {
protected action: EventAction;
protected provider: any;
protected debug: boolean;
constructor(provider: any, debug: boolean) {
super();
this.action = new EventAction();
this.provider = provider;
this.debug = debug;
}
addEvent(eventName: string, payload: Record<string, any> = {}): void {
if (!payload) {
// eslint-disable-next-line no-param-reassign
payload = {};
}
// eslint-disable-next-line no-param-reassign
payload.channel = 'Web';
if (window && window.location.href) {
const ref = new URLSearchParams(window.location.href.split('?')[1]).get('ref');
// eslint-disable-next-line no-param-reassign
payload.ref = ref;
}
this.provider.event.push(eventName, payload);
if (this.debug) console.log('Event send to Providers: ', eventName, payload);
}
charged(payload: any): void {
const { completed } = payload as Record<string, Order>;
this.action.charged(this.addEvent.bind(this), completed);
}
login(payload: LoginStatus): void {
this.action.login(this.addEvent.bind(this), payload);
}
logout(): void {
this.action.logout(this.addEvent.bind(this));
}
onUserLogin(payload: any): void {
const { authUser } = payload;
const userProfile: UserProfile = onLoginTransformProfile(authUser);
if (this.debug) console.log('Profile send: ', userProfile);
if (!userProfile) return;
this.provider.onUserLogin.push({ Site: makeTrustworthy(userProfile) });
}
onUserSelectReasons(payload: any): void {
const { user } = payload;
const userProfile: UserProfile = onLoginOnboardingReasons(user);
if (this.debug) console.log('Profile send: ', userProfile);
if (!userProfile) return;
this.provider.onUserLogin.push({ Site: makeTrustworthy(userProfile) });
}
orderSubmited(): void {
// NOTE: It doesn't have implementation for web.
}
passwordResetSent(): void {
this.action.passwordResetSent(this.addEvent.bind(this));
}
productAddedToSkipList(): void {
// NOTE: It doesn't have implementation for web.
}
productRemovedFromSkipList(): void {
// NOTE: It doesn't have implementation for web.
}
signUpStarted(payload: any): void {
const { product } = payload as Record<string, LoginProps>;
this.action.signUpStarted(this.addEvent.bind(this), product);
}
deepLinkClicked(): void {
// NOTE: It doesn't have implementation for web.
}
deepLinkOpened(): void {
// NOTE: It doesn't have implementation for web.
}
setUserLocation(): void {
// NOTE: It doesn't have implementation for web.
}
updateFCMtoken(): void {
// NOTE: It doesn't have implementation for web.
}
visitsHomePage(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.visitsHomePage(this.addEvent.bind(this), { Current_Page: url });
}
visitsJoinPage(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.visitsJoinPage(this.addEvent.bind(this), { Current_Page: url });
}
visitsPremiumPage(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.visitsPremiumPage(this.addEvent.bind(this), { Current_Page: url });
}
visitsFreePage(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.visitsFreePage(this.addEvent.bind(this), { Current_Page: url });
}
visitsOnboarding(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.visitsOnboarding(this.addEvent.bind(this), { Current_Page: url });
}
visitsDashboard?(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.visitsDashboard(this.addEvent.bind(this), { Current_Page: url });
}
visitsBusinessProfile?(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.visitsBusinessProfile(this.addEvent.bind(this), { Current_Page: url });
}
visitsRemindersPage?(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.visitsRemindersPage(this.addEvent.bind(this), { Current_Page: url });
}
userClicksSignUp(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.userClicksSignUp(this.addEvent.bind(this), { Current_Page: url });
}
userCompletesBusinessProfile(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.userCompletesBusinessProfile(this.addEvent.bind(this), { Current_Page: url });
}
userClickTodoItem(payload: any): void {
const { todoType } = payload;
if (!todoType) return;
this.action.userClickTodoItem(this.addEvent.bind(this), { TodoType: todoType });
}
userConfirmsSubscription(payload: any): void {
const { selectedPlan, url, billingInterval } = payload;
if (!selectedPlan) return;
this.action.userConfirmsSubscription(this.addEvent.bind(this), {
Selected_Plan: selectedPlan,
Current_Page: url,
Billing_Interval: billingInterval
});
}
userScheduledOnboardingCall(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.userScheduledOnboardingCall(this.addEvent.bind(this), { Current_Page: url });
}
appReviewed?(payload: any): void {
// NOTE: It doesn't have implementation for web.
}
userFeaturedBusinessOnSkip(payload: any): void {
this.action.userFeaturedBusinessOnSkip(this.addEvent.bind(this), payload);
}
// CONTINUE FROM HERE
accountCreated(payload: any): void {
const { url, source } = payload;
if (!url || !source) return;
this.action.accountCreated(this.addEvent.bind(this), { Current_Page: url, source });
}
accountCreatedError(payload: any): void {
const { url, source } = payload;
if (!url || !source) return;
this.action.accountCreatedError(this.addEvent.bind(this), { Current_Page: url, source });
}
clickedAnnual(payload: any): void {
const { url, source } = payload;
if (!url || !source) return;
this.action.clickedAnnual(this.addEvent.bind(this), { Current_Page: url, source });
}
clickedAutoSubCheckbox(payload: any): void {
// NOTE: It doesn't have implementation for web.
}
clickedCardNumberField(payload: any): void {
const { url, source } = payload;
if (!url || !source) return;
this.action.clickedCardNumberField(this.addEvent.bind(this), { Current_Page: url, source });
}
clickedCheckAvailability(payload: any): void {
const { url, source, billingInterval } = payload;
if (!url || !source || !billingInterval) return;
this.action.clickedCheckAvailability(this.addEvent.bind(this), {
Current_Page: url,
source,
Billing_Interval: billingInterval
});
}
clickedConfirm(payload: any): void {
const { url, source } = payload;
if (!url || !source) return;
this.action.clickedConfirm(this.addEvent.bind(this), { Current_Page: url, source });
}
clickedContinuetoDashboard(payload: any): void {
const { url, source } = payload;
if (!url || !source) return;
this.action.clickedMonthly(this.addEvent.bind(this), { Current_Page: url, source });
}
clickedDownloadApp(payload: any): void {
const { url, source } = payload;
if (!url) return;
this.action.clickedDownloadApp(this.addEvent.bind(this), { Current_Page: url, source });
}
clickedFunding(payload: any): void {
const { url, cta } = payload;
if (!url || !cta) return;
this.action.clickedFunding(this.addEvent.bind(this), { Current_Page: url, cta });
}
clickedLogin(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.clickedDownloadApp(this.addEvent.bind(this), { Current_Page: url });
}
clickedMonthly(payload: any): void {
const { url, source } = payload;
if (!url || !source) return;
this.action.clickedMonthly(this.addEvent.bind(this), { Current_Page: url, source });
}
clickedPrivacyPolicy(payload: any): void {
// NOTE: It doesn't have implementation for web.
}
clickedReferralEmailField(payload: any): void {
// NOTE: It doesn't have implementation for web.
}
clickedReviewReadMore(payload: any): void {
// NOTE: It doesn't have implementation for web.
}
clickedSaveNewPassword(payload: any): void {
// NOTE: It doesn't have implementation for web.
}
clickedSendInvites(payload: any): void {
const { url, invite1, invite2 } = payload;
if (!url) return;
this.action.clickedSendInvites(this.addEvent.bind(this), { Current_Page: url, invite1, invite2 });
}
clickedTermsandConditions(payload: any): void {
// NOTE: It doesn't have implementation for web.
}
paymentVerifiedError(payload: any): void {
const { url, source } = payload;
if (!url || !source) return;
this.action.paymentVerifiedError(this.addEvent.bind(this), { Current_Page: url, source });
}
paymentVerifiedSuccess(payload: any): void {
const { url, source } = payload;
if (!url || !source) return;
this.action.paymentVerifiedSuccess(this.addEvent.bind(this), { Current_Page: url, source });
}
saveNewPasswordError(payload: any): void {
// NOTE: It doesn't have implementation for web.
}
viewedCalendlyCalendar(payload: any): void {
const { url, source } = payload;
if (!url || !source) return;
this.action.viewedCalendlyCalendar(this.addEvent.bind(this), { Current_Page: url, source });
}
viewedNewPasswordPage(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.viewedNewPasswordPage(this.addEvent.bind(this), { Current_Page: url });
}
viewedPaymentInfo(payload: any): void {
const { url, source } = payload;
if (!url || !source) return;
this.action.viewedPaymentInfo(this.addEvent.bind(this), { Current_Page: url, source });
}
viewedPlusPage(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.viewedPlusPage(this.addEvent.bind(this), { Current_Page: url });
}
viewedPremiumConciergePage(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.viewedPremiumConciergePage(this.addEvent.bind(this), { Current_Page: url });
}
// plop
addedLoanApplicationTracking(payload: any): void {
const { businessId } = payload;
if (!businessId) return;
this.action.addedLoanApplicationTracking(this.addEvent.bind(this), { businessId });
}
clickedServiceFlow(payload: any): void {
const { serviceFlowName } = payload;
if (!serviceFlowName) return;
this.action.clickedServiceFlow(this.addEvent.bind(this), { serviceFlowName });
}
upgradedFromAccountDetails(payload: any): void {
const { userData } = payload;
if (!userData) return;
this.action.upgradedFromAccountDetails(this.addEvent.bind(this), { userData });
}
upgradedFromLatestFundingOpportunity(payload: any): void {
const { opportunity } = payload;
if (!opportunity) return;
this.action.upgradedFromLatestFundingOpportunity(this.addEvent.bind(this), { opportunity });
}
addedFundingGoal(payload: any): void {
const { fundingGoal } = payload;
if (!fundingGoal) return;
this.action.addedFundingGoal(this.addEvent.bind(this), { fundingGoal });
}
clickOnBlog(payload: any): void {
this.action.clickOnBlog(this.addEvent.bind(this), {});
}
notInterestedInFundingOpportunity(payload: any): void {
const { opportunity } = payload;
if (!opportunity) return;
this.action.notInterestedInFundingOpportunity(this.addEvent.bind(this), { opportunity });
}
sharedReferralLink(payload: any): void {
const { referralCode } = payload;
if (!referralCode) return;
this.action.sharedReferralLink(this.addEvent.bind(this), { referralCode });
}
exitedAddBusinessModal(payload: any): void {
const { userId } = payload;
if (!userId) return;
this.action.exitedAddBusinessModal(this.addEvent.bind(this), { userId });
}
addedBusiness(payload: any): void {
const { userId } = payload;
if (!userId) return;
this.action.addedBusiness(this.addEvent.bind(this), { userId });
}
invitesAFriend(payload: any): void {
const { emailList } = payload;
if (!emailList) return;
this.action.invitesAFriend(this.addEvent.bind(this), { emailList });
}
viewedPlatinumConciergePage(payload: any): void {
const { url } = payload;
if (!url) return;
this.action.viewedPlatinumConciergePage(this.addEvent.bind(this), { Current_Page: url });
}
}