UNPKG

skip-event-bridge

Version:
505 lines (340 loc) 13.1 kB
/* 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 }); } }