{ "version": 3, "sources": ["apps/partner-center-client/src/app/common/table-pricing/utils.ts", "apps/partner-center-client/src/app/activation/core/app-edition.service.ts"], "sourcesContent": ["import { CurrencyPipe, TitleCasePipe } from '@angular/common';\nimport { ProductPricing } from '@galaxy/billing';\nimport { Pricing, PricingMessageContainer, TieredPrice } from './interface';\n\nexport function getPricingMessageContainers(p: Pricing): PricingMessageContainer {\n if (!p) {\n return { pricingMessages: ['Contact Sales'], commitmentMessages: undefined };\n }\n let pricingMessages: string[];\n let tooltipMessages: string[];\n\n if (p.prices.length > 1) {\n pricingMessages = [buildPricingString(p.prices[0], p.purchaseCostTotal, p.currency, p.frequency)];\n tooltipMessages = (p ? p.prices || [] : []).map((price) => {\n return buildPricingTierString(price, p.currency, p.frequency);\n });\n } else {\n pricingMessages = (p ? p.prices || [] : []).map((price) => {\n return buildPricingTierString(price, p.currency, p.frequency);\n });\n }\n\n if (p.setupFee > 0) {\n const setupFee = addCurrencyToPricingString(String(p.setupFee / 100), p.currency);\n pricingMessages.push(`${setupFee} Setup fee`);\n }\n\n const committmentMessages = buildCommitmentMessages(p.frequency, p.initialCommitment, p.recurringCommitment);\n return {\n pricingMessages: pricingMessages,\n tooltipMessages: tooltipMessages,\n commitmentMessages: committmentMessages,\n };\n}\n\nexport function formatBillingFrequency(value?: string): string {\n let returnValue = '';\n if (value) {\n switch (value.toLowerCase()) {\n case 'once':\n case 'one time':\n case 'one_time':\n returnValue = 'One Time';\n break;\n default:\n returnValue = new TitleCasePipe().transform(value);\n }\n }\n return returnValue;\n}\n\nexport function isValidRange(min: number, max: number): boolean {\n const defined = min && max;\n const outOfBounds = max <= 0 && min <= 0;\n const isOneToInfinity = max === -1 && min === 1;\n if (!defined || outOfBounds || isOneToInfinity) {\n return false;\n }\n return true;\n}\n\nfunction isValidPrice(tier: TieredPrice): boolean {\n return Boolean(tier && (tier.price || tier.override));\n}\n\nexport function buildPricingTierString(tier: TieredPrice, currency: string, frequency: string): string {\n let pricingString = '';\n if (!(isValidPrice(tier) && currency && frequency)) {\n return 'Contact Sales';\n }\n\n if (tier.override) {\n if (tier.override === 'FREE') {\n pricingString = 'Free';\n } else {\n pricingString = 'Contact Sales';\n }\n } else {\n pricingString = addCurrencyToPricingString(String(tier.price / 100), currency);\n if (frequency) {\n pricingString = pricingString + ' ' + formatBillingFrequency(frequency);\n }\n }\n\n if (isValidRange(tier.quantityMin, tier.quantityMax)) {\n const quantityMax = tier.quantityMax && tier.quantityMax >= 0 ? String(tier.quantityMax) : '∞';\n const quantityMin = tier.quantityMin && tier.quantityMin >= 0 ? String(tier.quantityMin) : '0';\n const tierRange = `${quantityMin} to ${quantityMax}`;\n pricingString = `${tierRange} ${pricingString}`;\n }\n if (tier.isStartingPrice) {\n pricingString = `Starting at ${pricingString}`;\n }\n\n return pricingString;\n}\n\nexport function buildPricingString(\n tier: TieredPrice,\n purchaseCost: number,\n currency: string,\n frequency: string,\n): string {\n let pricingString = '';\n\n if (!(isValidPrice(tier) && currency && frequency)) {\n return 'Contact Sales';\n }\n\n if (tier.override && !purchaseCost) {\n if (tier.override === 'FREE') {\n pricingString = 'Free';\n return pricingString;\n } else {\n pricingString = 'Contact Sales';\n return pricingString;\n }\n }\n\n if (!purchaseCost) {\n pricingString = 'Contact Sales';\n return pricingString;\n }\n\n pricingString = addCurrencyToPricingString(String(purchaseCost / 100), currency);\n if (frequency) {\n pricingString = pricingString + ' ' + formatBillingFrequency(frequency);\n }\n return pricingString;\n}\n\nfunction addCurrencyToPricingString(priceString: string, currency: string): string {\n if (!priceString) {\n return '';\n }\n if (!currency) {\n return priceString;\n }\n return new CurrencyPipe('en-US').transform(priceString, currency, 'symbol', '1.2-2');\n}\n\nfunction formatBillingFrequencyForCommitment(frequency: string, num: number): string {\n switch (frequency.toLowerCase()) {\n case 'monthly':\n return 'month';\n case 'yearly':\n return 'year';\n case 'one time':\n case 'once':\n case 'one_time':\n return num <= 1 ? 'one time' : 'times';\n }\n return frequency;\n}\n\nexport function buildCommitmentMessages(\n frequency: string,\n initialCommitment?: number,\n recurringCommitment?: number,\n): string[] {\n frequency = formatBillingFrequency(frequency);\n const hasInitialCommitment = initialCommitment && initialCommitment > 1;\n const hasRecurringCommitment = recurringCommitment && recurringCommitment > 1;\n const msgs: string[] = [];\n\n if (hasInitialCommitment) {\n const initialFrequency = formatBillingFrequencyForCommitment(frequency, initialCommitment);\n msgs.push(`Initial ${initialCommitment} ${initialFrequency} commitment`);\n }\n if (hasRecurringCommitment) {\n const recurringFrequency = formatBillingFrequencyForCommitment(frequency, recurringCommitment);\n msgs.push(`Recurring ${recurringCommitment} ${recurringFrequency} commitment`);\n }\n return msgs;\n}\n\nexport function convertPricingToTablePricing(pricing: ProductPricing, purchaseCostTotal?: number): Pricing {\n if (!pricing) {\n return undefined;\n }\n\n const convertedPricing = {\n currency: pricing.currency,\n frequency: pricing.frequency,\n purchaseCostTotal: purchaseCostTotal,\n setupFee: pricing.setupFee,\n } as Pricing;\n\n if (pricing.commitment) {\n convertedPricing.initialCommitment = pricing.commitment.initial;\n convertedPricing.recurringCommitment = pricing.commitment.recurring;\n }\n\n convertedPricing.prices = (pricing.pricingRules || []).map((p) => {\n const tieredPricing = {\n price: p.price,\n quantityMin: p.minUnits,\n quantityMax: p.maxUnits,\n isStartingPrice: pricing.isStartingPrice,\n } as TieredPrice;\n\n if (!p.price) {\n tieredPricing.override = 'FREE';\n } else if (p.price < 0) {\n tieredPricing.override = 'CONTACT SALES';\n }\n return tieredPricing;\n });\n\n return convertedPricing;\n}\n", "import { Inject, Injectable } from '@angular/core';\nimport { ProductPricing } from '@galaxy/billing';\nimport { Edition as APIEdition, EditionsService } from '@galaxy/marketplace-apps/v1';\nimport { firstValueFrom, forkJoin, Observable, of } from 'rxjs';\nimport { map, withLatestFrom } from 'rxjs/operators';\nimport { convertPricingToTablePricing } from '../../common/table-pricing/utils';\nimport { BillingApiService } from '../../core/billing/billing-api.service';\nimport { PricingService } from '../../core/billing/pricing.service';\nimport { PurchaseCost } from '../../core/billing/purchase-cost';\nimport { DEFAULT_QUANTITY_PURCHASE_COST } from './constants';\nimport { AppIdToEditionIdToEditionMap, Edition, ProductEditionMap } from './interface';\n\nexport interface EditionIdentifier {\n editionId: string;\n appId: string;\n}\n\nconst LIST_EDITIONS_DEFAULT_PAGE_SIZE = 100;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AppEditionService {\n constructor(\n private editionsService: EditionsService,\n private pricingService: PricingService,\n private billingApiService: BillingApiService,\n @Inject('PARTNER_ID') private readonly partnerId$: Observable,\n ) {}\n\n async getEditionsForApps(appIds: string[]): Promise {\n const productEditionMap = await firstValueFrom(this.getEditionsForAppsWithoutPricing(appIds));\n const partnerId = await firstValueFrom(this.partnerId$);\n const pricingMap = await this.extractPricingFrom(productEditionMap, partnerId);\n this.setPricingEditionFrom(productEditionMap, pricingMap);\n\n const pricingEditionPurchaseCostMap = await this.extractPricingEditionPurchaseCostFrom(\n productEditionMap,\n partnerId,\n );\n\n this.setPurchaseCostTotal(productEditionMap, pricingEditionPurchaseCostMap);\n\n return productEditionMap;\n }\n\n private async extractPricingEditionPurchaseCostFrom(\n pricingEditionMap: Map,\n partnerId: string,\n ): Promise> {\n const editionsToSend = [];\n\n pricingEditionMap.forEach((pricingEdition: Edition[]) => {\n pricingEdition.forEach((edition) => {\n if (edition.pricing && edition.pricing.prices && edition.pricing.prices.length > 1) {\n editionsToSend.push(edition);\n }\n });\n });\n\n const skuCosts = await firstValueFrom(this.getMultiPurchaseCost(partnerId, editionsToSend));\n return this.getMultiPurchaseCostMapping(skuCosts);\n }\n\n private setPricingEditionFrom(productEditionMap: Map, pricingMap: Map) {\n productEditionMap.forEach((editions: Edition[]) => {\n editions.forEach((edition) => {\n edition.pricing = convertPricingToTablePricing(pricingMap.get(edition.billingId));\n });\n });\n }\n\n private async extractPricingFrom(\n productEditionMap: Map,\n partnerId: string,\n ): Promise> {\n const billingIds = Array.from(productEditionMap.values()).reduce((ids: string[], item: Edition[]) => {\n return ids.concat(item.map((edition) => edition.billingId));\n }, []);\n\n let pricingDict = {};\n if (billingIds.length !== 0) {\n pricingDict = await firstValueFrom(this.pricingService.getMultiProductPricing(partnerId, billingIds));\n }\n return pricingDict ? new Map(Object.entries(pricingDict)) : new Map();\n }\n\n private setPurchaseCostTotal(\n productEditionMap: Map,\n pricingEditionPurchaseCostMap: Map,\n ) {\n productEditionMap.forEach((editions: Edition[]) => {\n editions.forEach((edition) => {\n const skuId = edition.editionId ? edition.billingId : edition.appId;\n const purchaseCost = pricingEditionPurchaseCostMap.get(skuId);\n if (purchaseCost) {\n edition.pricing.purchaseCostTotal = purchaseCost.totalCost;\n }\n });\n });\n }\n\n getEditionsForAppsWithoutPricing(appIds: string[]): Observable {\n const editionObservables: Observable[] = [];\n for (const appId of appIds) {\n const editionsObservable = this.editionsService\n .listEditionsForApp(appId, null, LIST_EDITIONS_DEFAULT_PAGE_SIZE)\n .pipe(\n withLatestFrom(this.partnerId$),\n map(([eds]) => {\n return parseEditions(eds);\n }),\n );\n editionObservables.push(editionsObservable);\n }\n\n if (editionObservables.length < 1) {\n return of(new Map());\n }\n\n const productEditionMap$ = forkJoin(editionObservables).pipe(\n map((editionLists) => constructEditionMapFromEditionLists(editionLists)),\n );\n\n return productEditionMap$;\n }\n\n getMultiPurchaseCost(partnerId: string, skus: Edition[]): Observable<{ id: string; cost: PurchaseCost }[]> {\n const calls: Observable<{ id: string; cost: PurchaseCost }>[] = [];\n if (skus.length > 0) {\n skus.forEach((edition) => {\n const skuId = edition.editionId ? edition.billingId : edition.appId;\n calls.push(\n this.billingApiService.getPurchaseCost(partnerId, skuId, DEFAULT_QUANTITY_PURCHASE_COST).pipe(\n map((cost) => {\n return { id: skuId, cost: cost };\n }),\n ),\n );\n });\n return forkJoin(calls);\n } else {\n return of([]);\n }\n }\n\n getMultiPurchaseCostMapping(editionsCosts: { id: string; cost: PurchaseCost }[]): Map {\n return editionsCosts.reduce((acc, skuCost) => {\n acc.set(skuCost.id, skuCost.cost);\n return acc;\n }, new Map());\n }\n\n getEditionsForEditionIdentifiers(identifiers: EditionIdentifier[]): Observable {\n if (identifiers.length <= 0) {\n return of(new Map>());\n }\n return this.editionsService.getMultiEditionForMultiApp(identifiers).pipe(\n map((sdkEditions) => parseEditions(sdkEditions)),\n map((appEditions) => constructEditionMapFromEditionList(appEditions)),\n );\n }\n\n getEditionsForApp(appId: string): Observable {\n return this.editionsService.listEditionsForApp(appId, null, LIST_EDITIONS_DEFAULT_PAGE_SIZE).pipe(\n withLatestFrom(this.partnerId$),\n map(([eds]: [APIEdition[], string]) => {\n return parseEditions(eds);\n }),\n );\n }\n}\n\nfunction parseEditions(eds: any[]): Edition[] {\n if (!eds) {\n return [];\n }\n const editions = eds\n .filter((ed) => !!ed)\n .map((ed) => {\n return {\n appId: ed.appId,\n editionId: ed.editionId || '',\n editionName: ed.name || '',\n billingId: ed.billingId,\n } as Edition;\n });\n return editions;\n}\n\n/**\n * checkForEditionWithEmptyStringId returns true if any edition in a list of editions has an empty string as edition id\n * @param {Edition[]} editions - Editions to check\n * @returns {boolean}\n */\nexport function checkForEditionWithEmptyStringId(editions: Edition[]): boolean {\n if (!editions) {\n return false;\n }\n return editions.some((edition) => edition.editionId === '');\n}\n\n/**\n * constructEditionMapFromEditionList takes in a list of editions and builds a map of app id to a map of edition id to editions\n * @param {Edition[]} appEditions - Editions to build map from\n * @returns {AppIdToEditionIdToEditionMap}\n */\nexport function constructEditionMapFromEditionList(appEditions: Edition[]): AppIdToEditionIdToEditionMap {\n const editionMap = new Map>();\n if (!appEditions) {\n return editionMap;\n }\n appEditions.map((appEdition) => {\n if (appEdition) {\n const appEditionMap = editionMap.get(appEdition.appId) || new Map();\n appEditionMap.set(appEdition.editionId, appEdition);\n editionMap.set(appEdition.appId, appEditionMap);\n }\n });\n return editionMap;\n}\n\n/**\n * constructEditionMapFromEditionLists takes in a list of lists of editions and builds a map of app id to editions\n * @param {Edition[][]} editionLists - List of edition lists to build map from\n * @returns {ProductEditionMap}\n */\nexport function constructEditionMapFromEditionLists(editionLists: Edition[][]): ProductEditionMap {\n const editionMap = new Map() as ProductEditionMap;\n if (!editionLists) {\n return editionMap;\n }\n editionLists.map((appEditions) => {\n if (appEditions && appEditions.length > 0) {\n const appId = appEditions[0].appId;\n editionMap.set(appId, appEditions);\n }\n });\n return editionMap;\n}\n"], "mappings": "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", "names": ["getPricingMessageContainers", "p", "pricingMessages", "commitmentMessages", "undefined", "tooltipMessages", "prices", "length", "buildPricingString", "purchaseCostTotal", "currency", "frequency", "map", "price", "buildPricingTierString", "setupFee", "addCurrencyToPricingString", "String", "push", "committmentMessages", "buildCommitmentMessages", "initialCommitment", "recurringCommitment", "formatBillingFrequency", "value", "returnValue", "toLowerCase", "TitleCasePipe", "transform", "isValidRange", "min", "max", "defined", "outOfBounds", "isValidPrice", "tier", "Boolean", "override", "pricingString", "quantityMin", "quantityMax", "isStartingPrice", "purchaseCost", "priceString", "CurrencyPipe", "formatBillingFrequencyForCommitment", "num", "hasInitialCommitment", "hasRecurringCommitment", "msgs", "initialFrequency", "recurringFrequency", "convertPricingToTablePricing", "pricing", "convertedPricing", "commitment", "initial", "recurring", "pricingRules", "tieredPricing", "minUnits", "maxUnits", "LIST_EDITIONS_DEFAULT_PAGE_SIZE", "AppEditionService", "constructor", "editionsService", "pricingService", "billingApiService", "partnerId$", "getEditionsForApps", "appIds", "__async", "productEditionMap", "firstValueFrom", "getEditionsForAppsWithoutPricing", "partnerId", "pricingMap", "extractPricingFrom", "setPricingEditionFrom", "pricingEditionPurchaseCostMap", "extractPricingEditionPurchaseCostFrom", "setPurchaseCostTotal", "pricingEditionMap", "editionsToSend", "forEach", "pricingEdition", "edition", "pricing", "prices", "length", "push", "skuCosts", "getMultiPurchaseCost", "getMultiPurchaseCostMapping", "editions", "convertPricingToTablePricing", "get", "billingId", "billingIds", "Array", "from", "values", "reduce", "ids", "item", "concat", "map", "pricingDict", "getMultiProductPricing", "Map", "Object", "entries", "skuId", "editionId", "appId", "purchaseCost", "purchaseCostTotal", "totalCost", "editionObservables", "editionsObservable", "listEditionsForApp", "pipe", "withLatestFrom", "eds", "parseEditions", "of", "forkJoin", "editionLists", "constructEditionMapFromEditionLists", "skus", "calls", "getPurchaseCost", "DEFAULT_QUANTITY_PURCHASE_COST", "cost", "id", "editionsCosts", "acc", "skuCost", "set", "getEditionsForEditionIdentifiers", "identifiers", "getMultiEditionForMultiApp", "sdkEditions", "appEditions", "constructEditionMapFromEditionList", "getEditionsForApp", "\u0275\u0275inject", "EditionsService", "PricingService", "BillingApiService", "factory", "\u0275fac", "providedIn", "_AppEditionService", "filter", "ed", "editionName", "name", "checkForEditionWithEmptyStringId", "some", "editionMap", "appEdition", "appEditionMap"] }