{ "version": 3, "sources": ["apps/partner-center-client/src/app/subscription-tier/utils/manage-subscriptions.service.ts"], "sourcesContent": ["import { Inject, Injectable } from '@angular/core';\nimport {\n BillableItem,\n BillingService,\n Currency,\n Discount,\n DiscountService,\n DiscountType,\n Frequency,\n ListBillableItemsRequestFilters,\n ProductPricing,\n ProductPricingType,\n WholesalePricingService,\n} from '@galaxy/billing';\nimport {\n FREE_SUBSCRIPTION_ID,\n PartnerTrialService,\n SubscriptionTierInterface,\n SubscriptionTiersService,\n VBP2022_VERSION,\n VBP2023_VERSION,\n} from '@galaxy/partner';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AutomataService, Context } from '@vendasta/automata';\nimport { CampaignQuotaCategory, Period, QuotaService, SenderType } from '@vendasta/campaigns';\nimport moment from 'moment';\nimport { Observable, combineLatest, forkJoin, of } from 'rxjs';\nimport { catchError, map, publishReplay, refCount, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { AppConfigService } from '../../app-config.service';\nimport { PartnerService } from '../../core/partner.service';\nimport { ProductSummary } from '../../core/product-summary/product-summary';\nimport { ProductSummaryService } from '../../core/product-summary/product-summary.service';\nimport { ProductService } from '../../core/product.service';\nimport { Product } from '../../core/product/product';\nimport { toUTCTime } from '../../core/utils';\n\nconst SNAPSHOT_SKU = 'ST';\nconst TEAM_MEMBER_SEATS_SKU = 'sa-team-member-seats';\n\nexport interface SubscriptionLimit {\n showLimit: boolean;\n limitMax: number;\n currentValue: number;\n exceededLimitValue: number;\n limitTitle?: string;\n limitImageUrl?: string;\n}\n\nexport interface SubscriptionCardData {\n skus: string[];\n showCard: boolean;\n upgradeCTA: string;\n title: string;\n subtitle: string;\n hasCurrentValue: boolean;\n learnMoreUrl?: string;\n maxLimit?: number;\n resetDate?: Date;\n subscriptionLimits: SubscriptionLimit[];\n loading?: boolean;\n exceedUnit: string;\n nextTierId: string;\n nextTierLimit: string;\n type: string;\n}\n\nexport interface TierInfo {\n id: string;\n tierVersion: string;\n name: string;\n monthlyPrice: number;\n annualPrice: number;\n onboardingPrice: number;\n monthlyAddonPrice: number;\n yearlyAddonPrice: number;\n enabledFeatures: string[];\n teamMembers: number;\n emailsPerMonth: number;\n automationsPerMonth: number;\n snapshotLimit: number;\n expressProductLimit: number;\n newSeatCost: number;\n wholesaleDiscount: number;\n rank: number;\n currency: string;\n}\n\nexport const defaultSubscriptionCardData = ['SNAPSHOT', 'TOOLKIT', 'EMAIL', 'AUTOMATION', 'SEATS'].map(\n (cardNameShortHand) => {\n return {\n showCard: true,\n title: `SUBSCRIPTIONS.${cardNameShortHand}_TITLE`,\n subtitle: '',\n hasCurrentValue: false,\n loading: true,\n } as SubscriptionCardData;\n },\n);\n\n@Injectable()\nexport class ManageSubscriptionsService {\n env: string;\n billingFrequency$: Observable;\n currentTierId$: Observable;\n currentTier$: Observable;\n subscriptionPricing$: Observable;\n isFreeTier$: Observable;\n cardData$: Observable = of(defaultSubscriptionCardData);\n renewDate$: Observable;\n partnerSinceDate$: Observable;\n partnerCurrency$: Observable;\n subscriptionPrice$: Observable;\n isOnFreeTrial$: Observable;\n freeTrialEndDate$: Observable;\n\n tiers$: Observable;\n freeTier$: Observable;\n\n private pricingPlans$: Observable<{ [sku: string]: ProductPricing }>;\n private productSummaryMap$: Observable<{ [sku: string]: ProductSummary }>;\n private products$: Observable;\n private emailDetails$: Observable;\n private seatDetails$: Observable;\n nextSubscriptionTier$: Observable;\n mostSimilarSubscriptionTier$: Observable;\n private nextSubscriptionUpgradeInfo$: Observable;\n private productDetailsMap$: Observable<{ [sku: string]: SubscriptionLimit }>;\n private seatDiscounts$: Observable;\n private skus$: Observable;\n private toolkitSKUs$: Observable;\n private discounts$: Observable;\n\n constructor(\n private readonly partnerService: PartnerService,\n private readonly subscriptionTiersService: SubscriptionTiersService,\n private readonly billingService: BillingService,\n private readonly productSummaryService: ProductSummaryService,\n private readonly appConfigService: AppConfigService,\n private readonly productService: ProductService,\n private readonly discountService: DiscountService,\n private readonly wholesalePricingService: WholesalePricingService,\n private readonly partnerTrialService: PartnerTrialService,\n private readonly automataService: AutomataService,\n private readonly emailQuotaService: QuotaService,\n @Inject('PARTNER_ID') readonly partnerId$: Observable,\n private readonly translate: TranslateService,\n ) {\n this.env = this.getEnvironment();\n this.currentTier$ = this.partnerService.subscriptionTier$;\n this.currentTierId$ = this.currentTier$.pipe(\n map((t) => {\n return t.id;\n }),\n );\n\n this.toolkitSKUs$ = this.currentTier$.pipe(\n map((tier) => {\n const skus = [];\n const toolkitData = tier?.usageLimits?.toolkitData || [];\n toolkitData.forEach((tk) => skus.push(tk.sku));\n return skus;\n }),\n );\n\n this.skus$ = this.toolkitSKUs$.pipe(map((skus) => [TEAM_MEMBER_SEATS_SKU, SNAPSHOT_SKU, ...skus]));\n\n this.seatDetails$ = this.currentTier$.pipe(\n map((tier) => {\n return {\n showLimit: false,\n limitMax: tier.usageLimits?.teamMembers || 0,\n currentValue: -1,\n exceededLimitValue: 0,\n limitTitle: null,\n limitImageUrl: null,\n };\n }),\n );\n this.emailDetails$ = this.partnerId$.pipe(\n switchMap((pid) => {\n return this.emailQuotaService.getCampaignQuota(\n {\n type: SenderType.SENDER_TYPE_PARTNER,\n id: pid,\n },\n CampaignQuotaCategory.CAMPAIGN_QUOTA_TYPE_EMAIL,\n Period.PERIOD_MONTH,\n );\n }),\n map((resp) => {\n return {\n showLimit: true,\n limitMax: resp.limit || 0,\n currentValue: resp.count || 0,\n exceededLimitValue: 0,\n limitTitle: null,\n limitImageUrl: null,\n };\n }),\n catchError(() => {\n return of({\n showLimit: false,\n limitMax: -1,\n currentValue: -1,\n exceededLimitValue: 0,\n limitTitle: null,\n limitImageUrl: null,\n });\n }),\n );\n\n this.isFreeTier$ = this.currentTier$.pipe(\n map((st) => SubscriptionTiersService.isFree(st)),\n publishReplay(1),\n refCount(),\n );\n\n this.pricingPlans$ = combineLatest([this.partnerId$, this.currentTierId$, this.skus$]).pipe(\n switchMap(([partnerId, tierSKU, skus]) =>\n this.billingService.getMultiProductPricing(partnerId, [tierSKU, ...skus]),\n ),\n publishReplay(1),\n refCount(),\n );\n\n this.initTierInfo();\n\n this.nextSubscriptionTier$ = this.getNextHighestSubscriptionTier(this.currentTier$);\n this.mostSimilarSubscriptionTier$ = this.getMostSimilarSubscriptionTier(this.currentTier$);\n\n this.nextSubscriptionUpgradeInfo$ = combineLatest([this.tiers$, this.nextSubscriptionTier$]).pipe(\n map(([upgradeTierInfo, nextTier]) => {\n return upgradeTierInfo.find((t) => t.id === nextTier?.id);\n }),\n );\n\n const billingSubscription$ = combineLatest([this.partnerId$, this.currentTierId$]).pipe(\n switchMap(([partnerId, subscriptionSku]) => {\n const filters = new ListBillableItemsRequestFilters({\n skus: [subscriptionSku],\n merchantId: partnerId,\n });\n return this.billingService\n .listBillableItems('', filters, null, 1)\n .pipe(map((items) => items?.results[0] || ({} as BillableItem)));\n }),\n publishReplay(1),\n refCount(),\n );\n\n this.billingFrequency$ = billingSubscription$.pipe(map((item) => item.frequency));\n\n this.renewDate$ = billingSubscription$.pipe(map((item) => item.nextRenewal || new Date(0)));\n\n const subscriptionPrices$ = combineLatest([this.partnerId$, this.currentTierId$]).pipe(\n switchMap(([partnerId, subscriptionSku]) => {\n return this.wholesalePricingService.getMultiWholesalePrices(partnerId, [subscriptionSku]);\n }),\n );\n\n this.subscriptionPricing$ = combineLatest([subscriptionPrices$, this.billingFrequency$]).pipe(\n map(([prices, frequency]) => {\n if (prices.length > 0 && frequency) {\n return prices[0].prices.find((p) => p.frequency === frequency);\n }\n return {} as ProductPricing;\n }),\n publishReplay(1),\n refCount(),\n );\n\n this.subscriptionPrice$ = this.subscriptionPricing$.pipe(\n map((productPricing) => {\n if (productPricing) {\n if (productPricing.pricingType === ProductPricingType.Standard && productPricing.pricingRules.length === 1) {\n return productPricing.pricingRules[0].price;\n }\n }\n return -1;\n }),\n publishReplay(1),\n refCount(),\n );\n\n this.partnerSinceDate$ = this.appConfigService.config$.pipe(\n map((ac) => {\n return new Date(ac.partnerCreated * 1000);\n }),\n );\n\n this.partnerCurrency$ = this.partnerId$.pipe(\n switchMap((partnerId) => {\n return this.billingService\n .getMultiContract([partnerId])\n .pipe(map((contracts) => contracts[partnerId].currency));\n }),\n );\n\n this.productSummaryMap$ = combineLatest([this.partnerId$, this.skus$]).pipe(\n tap(([partnerId, skus]) => this.loadProductSummaries(partnerId, skus)),\n switchMap(([, skus]) => this.getProductSummaryMap(skus)),\n );\n\n this.products$ = this.partnerId$.pipe(\n switchMap(() => {\n return this.productService.products.pipe(shareReplay(1));\n }),\n );\n\n this.discounts$ = combineLatest([this.partnerId$, this.skus$]).pipe(\n switchMap(([partnerId, skus]) => {\n const tomorrow = moment().utc().add(1, 'day').hour(0).minute(0).second(0).millisecond(0).toDate();\n return this.discountService.list(\n {\n merchantId: partnerId,\n expiry: tomorrow,\n skus: skus,\n },\n '',\n 100,\n );\n }),\n map((resp) => resp.results.filter((d) => d.resetEachPeriod)),\n );\n\n this.productDetailsMap$ = this.getProductDetailsMap();\n\n this.seatDiscounts$ = this.productDetailsMap$.pipe(\n map((productDetailsMap) => productDetailsMap[TEAM_MEMBER_SEATS_SKU]),\n );\n\n this.cardData$ = this.getCardData().pipe(publishReplay(1), refCount());\n\n const freeTrial$ = this.partnerId$.pipe(\n switchMap((partnerId) => {\n return this.partnerTrialService.getTrial(partnerId);\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n this.isOnFreeTrial$ = freeTrial$.pipe(\n map((trial) => {\n const currentDate = new Date();\n // isActive checks if the current date is between start and end dates and cancel date is not set\n return trial.start <= currentDate && trial.end >= currentDate;\n }),\n );\n\n this.freeTrialEndDate$ = freeTrial$.pipe(\n map((trial) => {\n return trial.end;\n }),\n );\n }\n\n private initTierInfo(): void {\n this.tiers$ = this.choseSubscriptionTier(this.getCurrentSubscriptionTiers());\n this.freeTier$ = this.choseSubscriptionTier(this.getFreeSubscriptionTier());\n }\n\n private choseSubscriptionTier(\n selectedSubscriptionTier: Observable,\n ): Observable {\n let shouldHaveOnboarding = false;\n\n return combineLatest([selectedSubscriptionTier, this.partnerId$]).pipe(\n switchMap(([tiers, partnerId]) => {\n return forkJoin(\n tiers.map((tier) => {\n const tierID = tier.id;\n let requestSkus = [tierID];\n if (tier?.subscriptionUpdate?.oneTimeSubscriptionSkus?.length > 0) {\n requestSkus = requestSkus.concat(tier.subscriptionUpdate.oneTimeSubscriptionSkus);\n }\n if (tier?.subscriptionUpdate.monthlySubscriptionSkus?.length > 0) {\n requestSkus = requestSkus.concat(tier.subscriptionUpdate.monthlySubscriptionSkus);\n }\n\n return this.wholesalePricingService.getMultiWholesalePrices(partnerId, requestSkus).pipe(\n map((pricing) => {\n let onboardingPrice = 0;\n if (tier?.subscriptionUpdate?.oneTimeSubscriptionSkus?.length > 0) {\n pricing\n .filter((p) => tier.subscriptionUpdate.oneTimeSubscriptionSkus.includes(p.sku))\n .forEach((p) => {\n shouldHaveOnboarding = true;\n if (p.prices.length > 0) {\n onboardingPrice += p.prices[0]?.pricingRules[0]?.price / 100;\n }\n });\n }\n let monthlyAddonPrice = 0;\n let yearlyAddonPrice = 0;\n if (tier?.subscriptionUpdate?.monthlySubscriptionSkus?.length > 0) {\n pricing\n .filter((p) => tier.subscriptionUpdate.monthlySubscriptionSkus.includes(p.sku))\n .forEach((p) => {\n if (p.prices.length > 0) {\n const monthlyPrice = p.prices.filter((pr) => pr.frequency === 'MONTHLY');\n monthlyAddonPrice += monthlyPrice[0]?.pricingRules[0]?.price / 100;\n\n const yearlyPrice = p.prices.filter((pr) => pr.frequency === 'YEARLY');\n yearlyAddonPrice += yearlyPrice[0]?.pricingRules[0]?.price / 100;\n }\n });\n }\n const subscriptionPricing = pricing.find((p) => p.sku === tierID);\n let monthlyPrice =\n subscriptionPricing?.prices.find((p) => p.frequency === Frequency.Monthly)?.pricingRules[0]?.price /\n 100;\n let annualPrice =\n subscriptionPricing?.prices.find((p) => p.frequency === Frequency.Yearly)?.pricingRules[0]?.price /\n 100 +\n yearlyAddonPrice;\n const snapshotLimit = tier?.usageLimits?.snapshots || 0;\n const expressProductLimit = tier?.usageLimits?.toolkits || 0;\n const currency = subscriptionPricing?.prices[0]?.currency;\n const {\n enabledFeatures,\n usageLimits: {\n teamMembers: teamMembers,\n emailsPerMonth: emailsPerMonth,\n automationsPerMonth: automationsPerMonth,\n newSeatCost: newSeatCost,\n wholesaleDiscount: wholesaleDiscount,\n },\n id,\n name,\n rank,\n } = tier;\n\n if (!monthlyPrice) {\n monthlyPrice = tier.usageLimits.monthlyFee / 100;\n }\n if (!annualPrice) {\n annualPrice = tier.usageLimits.annualFee / 100;\n }\n if (shouldHaveOnboarding && onboardingPrice === 0) {\n onboardingPrice = tier.usageLimits.onboardingFee / 100;\n }\n\n return {\n id,\n tierVersion: tier.tierVersion,\n name,\n monthlyPrice,\n annualPrice: annualPrice,\n onboardingPrice,\n monthlyAddonPrice,\n yearlyAddonPrice,\n enabledFeatures,\n teamMembers,\n emailsPerMonth,\n automationsPerMonth,\n snapshotLimit,\n expressProductLimit,\n newSeatCost,\n wholesaleDiscount,\n rank,\n currency,\n } as TierInfo;\n }),\n );\n }),\n );\n }),\n );\n }\n\n loadProductSummaries(partnerId: string, skus: string[]): void {\n const now = new Date();\n const startDate = new Date(now.getFullYear(), now.getMonth(), 1);\n const endDate = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59);\n this.productSummaryService.loadProductSummaries(\n partnerId,\n toUTCTime(startDate),\n toUTCTime(endDate),\n null,\n skus.length,\n skus,\n );\n }\n\n private getCurrentSubscriptionTiers(): Observable {\n return this.subscriptionTiersService.subscriptionTierList$.pipe(\n map((tiers) =>\n tiers.filter(\n (tier) =>\n !tier.archived &&\n tier.allowSelfUpgrade &&\n (tier.tierVersion === VBP2022_VERSION || tier.tierVersion === VBP2023_VERSION),\n ),\n ),\n );\n }\n\n private getFreeSubscriptionTier(): Observable {\n return this.subscriptionTiersService.subscriptionTierList$.pipe(\n map((tiers) =>\n tiers.filter((tier) => {\n return tier.id === FREE_SUBSCRIPTION_ID;\n }),\n ),\n );\n }\n\n // Used to get the tier above their current one to promote upgrading\n private getNextHighestSubscriptionTier(\n tier$: Observable,\n ): Observable {\n return combineLatest([this.subscriptionTiersService.subscriptionTierList$, tier$]).pipe(\n map(([tiers, currentTier]) => {\n const availableTiersSorted = tiers\n .filter(\n (t) =>\n (t.tierVersion === VBP2022_VERSION || t.tierVersion === VBP2023_VERSION) &&\n t.allowSelfUpgrade &&\n !t.archived,\n )\n .sort((a: SubscriptionTierInterface, b: SubscriptionTierInterface) => a.rank - b.rank);\n\n // Return first tier with a higher rank than current tier OR nothing\n return availableTiersSorted.filter((t) => Math.floor(t.rank / 100) > Math.floor(currentTier.rank / 100))[0];\n }),\n );\n }\n\n // Used to recommend a currently supported tier for those on a legacy subscription\n private getMostSimilarSubscriptionTier(\n tier$: Observable,\n ): Observable {\n return combineLatest([this.subscriptionTiersService.subscriptionTierList$, tier$]).pipe(\n map(([tiers, currentTier]) => {\n const availableTiersSorted = tiers\n .filter((t) => (t.tierVersion === VBP2022_VERSION || t.tierVersion === VBP2023_VERSION) && !t.archived)\n .sort((a: SubscriptionTierInterface, b: SubscriptionTierInterface) => a.rank - b.rank);\n\n // Return first tier with the same or higher rank than current tier OR return the highest tier we have\n return (\n availableTiersSorted.filter((t) => Math.floor(t.rank / 100) >= Math.floor(currentTier.rank / 100))[0] ||\n availableTiersSorted[availableTiersSorted.length - 1]\n );\n }),\n );\n }\n\n private getProductSummaryMap(skus: string[]): Observable<{ [sku: string]: ProductSummary }> {\n return this.productSummaryService.productSummaries$.pipe(\n map((productSummaries) => {\n const productSummaryMap: { [sku: string]: ProductSummary } = {};\n skus.forEach((sku) => {\n const summary = productSummaries.find((ps) => ps.sku === sku);\n if (summary) {\n productSummaryMap[sku] = summary;\n }\n });\n return productSummaryMap;\n }),\n );\n }\n\n private getProductDetailsMap(): Observable<{ [sku: string]: SubscriptionLimit }> {\n return combineLatest([\n this.skus$,\n this.productSummaryMap$,\n this.pricingPlans$,\n this.products$,\n this.discounts$,\n ]).pipe(\n map(([skus, productSummaryMap, pricingPlans, products, discounts]) => {\n const productDetailsMap: { [sku: string]: SubscriptionLimit } = {};\n skus.forEach((sku) => {\n const productSummary: ProductSummary = productSummaryMap[sku];\n const pricingPlan: ProductPricing = pricingPlans[sku];\n const product: Product = products.find((p) => sku.includes(p.billing_id));\n\n const limitTitle = product?.name;\n const limitImageUrl = product?.icon_url || null;\n let limitMax = pricingPlan.pricingRules.find((pr) => pr.price === 0)?.maxUnits || 0;\n discounts\n .filter((discount) => discount.SKU === sku && discount.discountType === DiscountType.FIXED_NUMBER_OF_UNITS)\n .forEach((discount) => {\n limitMax += discount.amount;\n });\n const totalQuantity = productSummary?.totalQuantity || 0;\n let currentValue = totalQuantity;\n if (limitMax > 0 && currentValue > limitMax) {\n currentValue = limitMax;\n }\n productDetailsMap[sku] = {\n showLimit: limitMax !== 0 && (!!limitTitle || !!limitImageUrl),\n limitMax: limitMax,\n currentValue: currentValue,\n exceededLimitValue: totalQuantity > limitMax ? totalQuantity - limitMax : 0,\n limitTitle: limitTitle,\n limitImageUrl: limitImageUrl,\n };\n });\n return productDetailsMap;\n }),\n publishReplay(1),\n refCount(),\n );\n }\n\n private getCardData(): Observable {\n const snapshotCardData$ = combineLatest([\n this.productDetailsMap$,\n this.nextSubscriptionTier$,\n this.nextSubscriptionUpgradeInfo$,\n ]).pipe(\n map(([productDetailsMap, nextTier, nextTierUpgradeInfo]) => {\n const snapshotDetails = productDetailsMap[SNAPSHOT_SKU];\n const now = new Date();\n const resetDate = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth() + 1, 1));\n\n const snapShotSubtitle =\n snapshotDetails.limitMax >= 0\n ? `SUBSCRIPTIONS.SNAPSHOT_SUBTITLE${snapshotDetails.limitMax > 1 ? '_PLURAL' : ''}`\n : 'SUBSCRIPTIONS.SNAPSHOT_SUBTITLE_UNLIMITED';\n const showSnapshotCTA = this.showCTA(snapshotDetails);\n\n return {\n skus: [SNAPSHOT_SKU],\n showCard: snapshotDetails.limitMax !== 0,\n upgradeCTA: showSnapshotCTA ? 'SUBSCRIPTIONS.SNAPSHOT_UPGRADE_CTA' : '',\n title: 'SUBSCRIPTIONS.SNAPSHOT_TITLE',\n subtitle: snapShotSubtitle,\n maxLimit: snapshotDetails.limitMax,\n hasCurrentValue: true,\n resetDate,\n exceedUnit: 'REPORT',\n subscriptionLimits: [{ ...snapshotDetails, showLimit: true, hasCurrentValue: true }],\n nextTierId: nextTier?.id,\n nextTierLimit:\n nextTierUpgradeInfo?.snapshotLimit >= 0\n ? nextTierUpgradeInfo.snapshotLimit.toString()\n : 'SUBSCRIPTIONS.UNLIMITED',\n type: 'Snapshot Reports',\n };\n }),\n );\n\n const toolkitCardData$ = combineLatest([\n this.toolkitSKUs$,\n this.productDetailsMap$,\n this.nextSubscriptionTier$,\n this.nextSubscriptionUpgradeInfo$,\n ]).pipe(\n map(([skus, productDetailsMap, nextTier, nextTierUpgradeInfo]) => {\n const toolkitLimits: SubscriptionLimit[] = skus.map((sku) => productDetailsMap[sku]);\n const toolKitLimitMax = this.getToolKitLimitMax(toolkitLimits);\n const toolKitSubtitle =\n toolKitLimitMax >= 0\n ? `SUBSCRIPTIONS.EXPRESS_PRODUCT_SUBTITLE${toolKitLimitMax > 1 ? '_PLURAL' : ''}`\n : 'SUBSCRIPTIONS.EXPRESS_PRODUCT_SUBTITLE_UNLIMITED';\n return {\n skus: skus,\n showCard: toolKitLimitMax !== 0,\n upgradeCTA: '',\n title: 'SUBSCRIPTIONS.EXPRESS_PRODUCT_TITLE',\n subtitle: toolKitSubtitle,\n learnMoreUrl: 'https://support.vendasta.com/hc/en-us/articles/4406953679383',\n maxLimit: toolKitLimitMax,\n hasCurrentValue: true,\n exceedUnit: 'PRODUCT',\n subscriptionLimits: toolkitLimits,\n nextTierId: nextTier?.id,\n nextTierLimit:\n nextTierUpgradeInfo?.expressProductLimit >= 0\n ? nextTierUpgradeInfo.expressProductLimit.toString()\n : 'SUBSCRIPTIONS.UNLIMITED',\n type: 'Express Products',\n };\n }),\n );\n\n const emailCardData$ = combineLatest([\n this.emailDetails$,\n this.nextSubscriptionTier$,\n this.nextSubscriptionUpgradeInfo$,\n ]).pipe(\n map(([emailDetails, nextTier, nextTierUpgradeInfo]) => {\n return {\n skus: [],\n showCard: emailDetails.limitMax > 0,\n upgradeCTA: '',\n title: 'SUBSCRIPTIONS.EMAIL_TITLE',\n subtitle: this.translate.instant('SUBSCRIPTIONS.EMAIL_SUBTITLE', { maxLimit: emailDetails.limitMax }),\n maxLimit: emailDetails.limitMax,\n hasCurrentValue: true,\n exceedUnit: 'EMAIL',\n subscriptionLimits: [{ ...emailDetails, showLimit: true, hasCurrentValue: true }],\n nextTierId: nextTier?.id,\n nextTierLimit:\n nextTierUpgradeInfo?.emailsPerMonth >= 0\n ? nextTierUpgradeInfo.emailsPerMonth.toString()\n : 'SUBSCRIPTIONS.UNLIMITED',\n type: 'Emails',\n };\n }),\n );\n\n const automationCardData$: Observable = this.partnerId$.pipe(\n switchMap((pid) => {\n return this.automataService.getAutomationUsage(pid, Context.AUTOMATION_CONTEXT_PARTNER);\n }),\n catchError(() => {\n return of({ usage: 0, quota: -1 });\n }),\n map((usage) => {\n // Don't show a usage greater than the quota as it messes the UI up\n usage.usage = usage.usage > usage.quota ? usage.quota : usage.usage || 0;\n return {\n skus: [],\n showCard: usage.quota >= 0,\n upgradeCTA: '',\n title: 'SUBSCRIPTIONS.AUTOMATION_TITLE',\n subtitle: `SUBSCRIPTIONS.AUTOMATION_SUBTITLE`,\n hasCurrentValue: true,\n maxLimit: usage.quota,\n subscriptionLimits: [\n {\n showLimit: true,\n limitMax: usage.quota,\n currentValue: usage.usage,\n exceededLimitValue: 0,\n },\n ],\n exceedUnit: '',\n nextTierId: '',\n nextTierLimit: '',\n type: '',\n };\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n const seatCardData$ = combineLatest([\n this.seatDetails$,\n this.nextSubscriptionTier$,\n this.nextSubscriptionUpgradeInfo$,\n this.isFreeTier$,\n this.seatDiscounts$,\n ]).pipe(\n map(([seatDetails, nextTier, nextTierUpgradeInfo, isFreeTier, seatDiscounts]) => {\n const seatLimit = seatDiscounts?.limitMax ?? seatDetails?.limitMax;\n\n return {\n skus: [],\n showCard: seatLimit !== 0 && !isFreeTier,\n upgradeCTA: '',\n title: 'SUBSCRIPTIONS.SEATS_TITLE',\n subtitle: `SUBSCRIPTIONS.SEATS_SUBTITLE${seatLimit > 1 ? '_PLURAL' : seatLimit < 0 ? '_UNLIMITED' : ''}`,\n maxLimit: seatLimit,\n hasCurrentValue: false,\n exceedUnit: 'SEAT',\n subscriptionLimits: [{ ...seatDetails }],\n nextTierId: nextTier?.id,\n nextTierLimit:\n nextTierUpgradeInfo?.teamMembers >= 0\n ? nextTierUpgradeInfo.teamMembers.toString()\n : 'SUBSCRIPTIONS.UNLIMITED',\n type: 'Seats',\n };\n }),\n );\n\n return combineLatest([snapshotCardData$, toolkitCardData$, emailCardData$, automationCardData$, seatCardData$]);\n }\n\n private showCTA(limits: SubscriptionLimit): boolean {\n return limits.currentValue / limits.limitMax >= 0.8 || limits.limitMax < 2;\n }\n\n private getToolKitLimitMax(subscriptionLimits: SubscriptionLimit[]): number {\n const limits = subscriptionLimits.map((sl) => sl.limitMax);\n let limitMax = limits.filter((n) => n > 0).sort()[0];\n if (!limitMax) {\n limitMax = limits.filter((n) => n === -1)[0] || 0;\n }\n return limitMax;\n }\n\n private getEnvironment(): string {\n return this.appConfigService.config.environment !== 'prod' ? 'demo' : 'prod';\n }\n\n getProductDetailsMap$ = (): Observable<{ [sku: string]: SubscriptionLimit }> => {\n return this.productDetailsMap$;\n };\n\n getToolkitSKUs$ = (): Observable => {\n return this.toolkitSKUs$;\n };\n\n public getProductDetails(sku: string): Observable {\n return this.productDetailsMap$.pipe(map((resp) => resp[sku]));\n }\n}\n"], "mappings": "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", "names": ["import_moment", "SNAPSHOT_SKU", "TEAM_MEMBER_SEATS_SKU", "defaultSubscriptionCardData", "map", "cardNameShortHand", "showCard", "title", "subtitle", "hasCurrentValue", "loading", "ManageSubscriptionsService", "constructor", "partnerService", "subscriptionTiersService", "billingService", "productSummaryService", "appConfigService", "productService", "discountService", "wholesalePricingService", "partnerTrialService", "automataService", "emailQuotaService", "partnerId$", "translate", "cardData$", "of", "getProductDetailsMap$", "productDetailsMap$", "getToolkitSKUs$", "toolkitSKUs$", "env", "getEnvironment", "currentTier$", "subscriptionTier$", "currentTierId$", "pipe", "t", "id", "tier", "skus", "toolkitData", "usageLimits", "forEach", "tk", "push", "sku", "skus$", "seatDetails$", "showLimit", "limitMax", "teamMembers", "currentValue", "exceededLimitValue", "limitTitle", "limitImageUrl", "emailDetails$", "switchMap", "pid", "getCampaignQuota", "type", "SenderType", "SENDER_TYPE_PARTNER", "CampaignQuotaCategory", "CAMPAIGN_QUOTA_TYPE_EMAIL", "Period", "PERIOD_MONTH", "resp", "limit", "count", "catchError", "isFreeTier$", "st", "SubscriptionTiersService", "isFree", "publishReplay", "refCount", "pricingPlans$", "combineLatest", "partnerId", "tierSKU", "getMultiProductPricing", "initTierInfo", "nextSubscriptionTier$", "getNextHighestSubscriptionTier", "mostSimilarSubscriptionTier$", "getMostSimilarSubscriptionTier", "nextSubscriptionUpgradeInfo$", "tiers$", "upgradeTierInfo", "nextTier", "find", "billingSubscription$", "subscriptionSku", "filters", "ListBillableItemsRequestFilters", "merchantId", "listBillableItems", "items", "results", "billingFrequency$", "item", "frequency", "renewDate$", "nextRenewal", "Date", "subscriptionPrices$", "getMultiWholesalePrices", "subscriptionPricing$", "prices", "length", "p", "subscriptionPrice$", "productPricing", "pricingType", "ProductPricingType", "Standard", "pricingRules", "price", "partnerSinceDate$", "config$", "ac", "partnerCreated", "partnerCurrency$", "getMultiContract", "contracts", "currency", "productSummaryMap$", "tap", "loadProductSummaries", "getProductSummaryMap", "products$", "products", "shareReplay", "discounts$", "tomorrow", "moment", "utc", "add", "hour", "minute", "second", "millisecond", "toDate", "list", "expiry", "filter", "d", "resetEachPeriod", "getProductDetailsMap", "seatDiscounts$", "productDetailsMap", "getCardData", "freeTrial$", "getTrial", "bufferSize", "isOnFreeTrial$", "trial", "currentDate", "start", "end", "freeTrialEndDate$", "choseSubscriptionTier", "getCurrentSubscriptionTiers", "freeTier$", "getFreeSubscriptionTier", "selectedSubscriptionTier", "shouldHaveOnboarding", "tiers", "forkJoin", "tierID", "requestSkus", "subscriptionUpdate", "oneTimeSubscriptionSkus", "concat", "monthlySubscriptionSkus", "pricing", "onboardingPrice", "includes", "monthlyAddonPrice", "yearlyAddonPrice", "monthlyPrice", "pr", "yearlyPrice", "subscriptionPricing", "Frequency", "Monthly", "annualPrice", "Yearly", "snapshotLimit", "snapshots", "expressProductLimit", "toolkits", "enabledFeatures", "emailsPerMonth", "automationsPerMonth", "newSeatCost", "wholesaleDiscount", "name", "rank", "monthlyFee", "annualFee", "onboardingFee", "tierVersion", "now", "startDate", "getFullYear", "getMonth", "endDate", "toUTCTime", "subscriptionTierList$", "archived", "allowSelfUpgrade", "VBP2022_VERSION", "VBP2023_VERSION", "FREE_SUBSCRIPTION_ID", "tier$", "currentTier", "sort", "a", "b", "Math", "floor", "availableTiersSorted", "productSummaries$", "productSummaries", "productSummaryMap", "summary", "ps", "pricingPlans", "discounts", "productSummary", "pricingPlan", "product", "billing_id", "icon_url", "maxUnits", "discount", "SKU", "discountType", "DiscountType", "FIXED_NUMBER_OF_UNITS", "amount", "totalQuantity", "snapshotCardData$", "nextTierUpgradeInfo", "snapshotDetails", "resetDate", "UTC", "getUTCFullYear", "getUTCMonth", "snapShotSubtitle", "showSnapshotCTA", "showCTA", "upgradeCTA", "maxLimit", "exceedUnit", "subscriptionLimits", "__spreadProps", "__spreadValues", "nextTierId", "nextTierLimit", "toString", "toolkitCardData$", "toolkitLimits", "toolKitLimitMax", "getToolKitLimitMax", "toolKitSubtitle", "learnMoreUrl", "emailCardData$", "emailDetails", "instant", "automationCardData$", "getAutomationUsage", "Context", "AUTOMATION_CONTEXT_PARTNER", "usage", "quota", "seatCardData$", "seatDetails", "isFreeTier", "seatDiscounts", "seatLimit", "limits", "sl", "n", "config", "environment", "getProductDetails", "\u0275\u0275inject", "PartnerService", "BillingService", "ProductSummaryService", "AppConfigService", "ProductService", "DiscountService", "WholesalePricingService", "PartnerTrialService", "AutomataService", "QuotaService", "TranslateService", "factory", "\u0275fac", "_ManageSubscriptionsService"] }