{ "version": 3, "sources": ["apps/partner-center-client/src/app/core/enums.ts", "apps/partner-center-client/src/app/core/product/product.ts", "apps/partner-center-client/src/app/core/product-change.service.ts", "apps/partner-center-client/src/app/core/marketplace-app/marketplace-app.ts", "apps/partner-center-client/src/app/core/marketplace-app.service.ts", "apps/partner-center-client/src/app/arrays/pluck.ts", "apps/partner-center-client/src/app/core/product.service.ts"], "sourcesContent": ["export enum ProductOrigin {\n partner_created,\n marketplace_app,\n}\n\nexport class Enum {\n static getNamesAndValues(e: any): any {\n return Enum.getNames(e).map((n) => ({ name: n, value: e[n] as T }));\n }\n\n static getNames(e: any): string[] {\n return Enum.getObjValues(e).filter((v) => typeof v === 'string') as string[];\n }\n\n static getValues(e: any): T[] {\n return Enum.getObjValues(e).filter((v) => typeof v === 'number') as T[];\n }\n\n private static getObjValues(e: any): (number | string)[] {\n return Object.keys(e).map((k) => e[k]);\n }\n}\n", "import { OrderFormInterface, Restrictions } from '@galaxy/marketplace-apps/v1';\nimport { AccountAccountStatus } from '@vendasta/accounts/legacy';\nimport {\n Categories,\n Currency as CurrencyEnum,\n LmiCategory,\n LMI_CATEGORIES,\n LMI_CATEGORY_MAP,\n} from '@vendasta/marketplace-packages';\nimport { Faq, Product as StoreProduct } from '@vendasta/store';\nimport { Edition } from '../../activation/core/interface';\nimport { DiscoverableItem } from '../discoverable-item/discoverable-item.model';\nimport { ProductOrigin } from '../enums';\nimport { BillingFrequency, Currency } from '../types';\nimport { Updatable } from '../utils/array-utils';\n\nexport class Product implements Updatable {\n constructor(data: any) {\n this.name = data.name;\n this.tagline = data.tagline;\n this.origin = data.origin;\n this.product_id = data.productId || data.product_id;\n this.edition_name = data.editionName || data.edition_name;\n this.partner_id = data.partnerId || data.partner_id;\n this.description = data.description;\n this.category = data.category;\n this.faqs = data.faqs;\n this.lmi_categories = this.getLmiCategory(data);\n this.service_model = data.serviceModel || data.service_model;\n this.header_image_url = data.headerImageUrl || data.header_image_url;\n this.icon_url = data.iconUrl || data.icon_url || data.icon;\n this.icon_color = data.iconColor || data.icon_color;\n this.screenshot_urls = data.screenshotUrls || data.screenshot_urls;\n this.pdf_upload_urls = data.pdfUploadUrls || data.pdf_upload_urls;\n this.recommended_sell_price = data.recommendedSellPrice || data.recommended_sell_price;\n this.wholesale_price = data.wholesalePrice || data.wholesale_price;\n this.setup_fee = data.setupFee || data.setup_fee;\n this.enabled = data.enabled;\n this.billing_frequency = this.getBillingFrequency(data);\n this.billing_frequency_other = this.getBillingFrequency(data);\n this.currency = this.getCurrency(data);\n this.hide_product_icons_and_names = data.hideProductIconsAndNames || data.hide_product_icons_and_names;\n this.hide_product_details = data.hideProductDetails || data.hide_product_details;\n this.uses_customization_form = data.usesCustomizationForm || data.uses_customization_form;\n this.key_selling_points = data.keySellingPoints || data.key_selling_points;\n this.entry_url = data.entryUrl || data.entry_url;\n this.website_url = data.websiteUrl || data.website_url;\n this.createdDate = data.created ? new Date(data.created) : null;\n this.updatedDate = data.created ? new Date(data.updated) : null;\n this.suspendedDate = data.suspended ? new Date(data.suspended) : null;\n this.order_form = data.OrderForm || data.order_form;\n this.restrictions = data.restrictions;\n this.billing_id = data.billingId || data.billing_id;\n this.trial = data.trial;\n this.uses_activation_specific_entry_url =\n data.uses_activation_specific_entry_url || data.usesActivationSpecificEntryUrl;\n this.usesCustomPricing = data.uses_custom_pricing || data.usesCustomPricing;\n this.editionId = data.editionId;\n this.isSuspended = data.isSuspended;\n this.editions = data.editions || [];\n /* TODO: Fix this constructor. For now don't change behaviour unless the constructor is called with an\n anniversery or commitment date.\n */\n this.anniversaryDate = data.anniversaryDate ? new Date(data.anniversaryDate) : undefined;\n this.commitmentDate = data.commitmentDate ? new Date(data.commitmentDate) : undefined;\n }\n\n get isRmProduct(): boolean {\n return this.product_id === 'RM';\n }\n\n get isCustom(): boolean {\n return this.origin === ProductOrigin[ProductOrigin.partner_created];\n }\n\n get dollarWholesalePrice(): number {\n return this.wholesale_price / 100;\n }\n name: string;\n tagline: string;\n origin: string;\n product_id: string;\n edition_name?: string;\n partner_id: string;\n description: string;\n category: string;\n faqs: Faq[];\n lmi_categories: LmiCategory[];\n service_model: string[];\n header_image_url: string;\n icon_url: string;\n icon_color: string;\n screenshot_urls: string[];\n pdf_upload_urls: string[];\n recommended_sell_price: number;\n wholesale_price: number;\n setup_fee: number;\n enabled: boolean;\n billing_frequency: BillingFrequency;\n billing_frequency_other: string;\n currency: Currency;\n hide_product_icons_and_names: boolean;\n hide_product_details: boolean;\n uses_customization_form: boolean;\n uses_activation_specific_entry_url: boolean;\n usesCustomPricing: boolean;\n key_selling_points: string[];\n entry_url: string;\n website_url: string;\n trial: boolean;\n editionId?: string;\n editions: Edition[]; //list of available editions for the product.\n isSuspended: boolean;\n\n status: AccountAccountStatus;\n order_form: {\n label: string;\n id: string;\n type: string;\n required: boolean;\n options: any;\n description: string;\n uploadUrl?: string;\n }[];\n restrictions?: { country?: { whitelist?: string[]; blacklist?: string[] } };\n billing_id: string;\n\n createdDate: Date;\n updatedDate: Date;\n anniversaryDate: Date;\n commitmentDate: Date;\n\n suspendedDate: Date;\n\n static getProductFromDiscoverableItem(item: DiscoverableItem): Product {\n const product = new Product({});\n product.product_id = item.appId;\n product.name = item.name;\n product.icon_url = item.icon;\n product.tagline = item.tagline;\n product.header_image_url = item.headerImage;\n product.currency = item.currency as Currency;\n product.wholesale_price = item.price;\n product.billing_frequency = Product.getBillingFrequency(item.billingFrequency);\n product.lmi_categories = item.lmiCategories ? item.lmiCategories.map((category) => LMI_CATEGORIES[category]) : null;\n product.origin = item.isCustom\n ? ProductOrigin[ProductOrigin.partner_created]\n : ProductOrigin[ProductOrigin.marketplace_app];\n product.enabled = item.enabled;\n return product;\n }\n\n static getBillingFrequency(billingFrequency: string): BillingFrequency {\n if (!billingFrequency) {\n return 'monthly';\n }\n if (billingFrequency.toLowerCase() === 'one time') {\n return 'once';\n }\n return billingFrequency as BillingFrequency;\n }\n\n static addOrderFormFieldsToProduct(product: Product, orderFormContainer: OrderFormInterface): Product {\n if (!orderFormContainer || !product) {\n return null;\n }\n product.order_form = [];\n if (orderFormContainer.orderForm) {\n orderFormContainer.orderForm.forEach((field) => {\n const customFormField = {\n label: field.label,\n id: field.id,\n type: field.type,\n required: field.required,\n options: field.options,\n description: field.description,\n };\n product.order_form.push(customFormField);\n });\n }\n return product;\n }\n\n static buildOrderFormForCustomProduct(product: Product): Product {\n if (product.origin === 'partner_created' && product.uses_customization_form) {\n product.order_form = [\n {\n id: 'custom-entry-url-' + product.product_id,\n label: 'Custom Entry Url',\n type: 'text',\n required: true,\n description: '',\n options: null,\n },\n ];\n }\n return product;\n }\n\n static isCustomProductBasedOnId(id: string): boolean {\n return id.startsWith('CP-');\n }\n\n convertToStoreProduct(): StoreProduct {\n const p = new StoreProduct();\n p.productId = this.product_id;\n p.editionId = this.editionId;\n p.editionName = this.edition_name;\n p.name = this.name;\n p.description = this.description;\n p.tagline = this.tagline;\n p.iconUrl = this.icon_url;\n p.entryUrl = this.entry_url;\n p.screenshotUrls = this.screenshot_urls;\n p.pdfUploadUrls = this.pdf_upload_urls;\n p.lmiCategories = this.getLmiCategoryNames();\n p.keySellingPoints = this.key_selling_points;\n p.faqs = this.faqs;\n p.wholesalePrice = this.wholesale_price;\n p.currency = this.currency;\n p.billingFrequency = this.billing_frequency;\n p.billingId = this.billing_id;\n p.restrictions = this.restrictions as Restrictions;\n return p;\n }\n\n private getLmiCategory(data: any): LmiCategory[] {\n if (data.lmiCategories) {\n return data.lmiCategories.map((cat) => LMI_CATEGORY_MAP[Categories[cat].toLowerCase()]);\n } else if (data.lmi_categories) {\n return data.lmi_categories.map((cat) => LMI_CATEGORY_MAP[cat]);\n } else {\n return [];\n }\n }\n\n private getBillingFrequency(data: any): BillingFrequency {\n let billing_frequency: string;\n billing_frequency = data.billingFrequency || data.billing_frequency;\n if (!billing_frequency) {\n billing_frequency = data.billingFrequencyOther || data.billing_frequency_other;\n }\n if (billing_frequency === 'one time') {\n billing_frequency = 'once';\n }\n return billing_frequency as BillingFrequency;\n }\n\n private getCurrency(data: any): Currency {\n if (data.currency) {\n if (typeof data.currency !== 'string') {\n return CurrencyEnum[data.currency] as Currency;\n } else {\n return data.currency as Currency;\n }\n } else {\n return CurrencyEnum[0] as Currency;\n }\n }\n\n getLmiCategoryNames(): string[] {\n return this.lmi_categories.map((lmi) => lmi.name);\n }\n}\n\nexport class ProductFormValues {\n productId?: string;\n name: string;\n tagline: string;\n usesCustomizationFormFlag: boolean;\n entryUrl: string;\n websiteUrl: string;\n currency: Currency;\n wholesalePrice: number;\n recommendedSellPrice: number;\n billingFrequency: BillingFrequency;\n headerImageUrl: string;\n iconUrl: string;\n serviceModel: string[];\n faqsJson: any;\n keySellingPoints: string[];\n description: string;\n screenshotUrls: string[];\n pdfUploadUrls: string[];\n}\n\nexport class ActivatedProduct extends Product {\n activationId: string;\n descriptor: string;\n orderFormSubmissionId: string;\n deactivationIsEditionChange: boolean;\n deactivationNewEditionId: string;\n deactivationNewBillingOrderId: string;\n appLevelAdminDashboard: boolean;\n\n constructor(data: any) {\n super(data);\n Object.assign(this, data);\n }\n}\n", "import { Injectable } from '@angular/core';\nimport { AppEnablementStatus, PartnerAppEnablementStatus } from '@vendasta/marketplace-packages';\nimport { Observable, ReplaySubject } from 'rxjs';\n\nexport interface ChangedProduct {\n productId: string;\n isEnabled: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ProductChangeService {\n private _changedPartnerAppEnablementStatus$$: ReplaySubject = new ReplaySubject();\n\n changePartnerAppEnablementStatus(partnerId: string, appId: string, status: AppEnablementStatus): void {\n this._changedPartnerAppEnablementStatus$$.next({ partnerId, appId, status } as PartnerAppEnablementStatus);\n }\n\n get changedPartnerAppEnablementStatus$(): Observable {\n return this._changedPartnerAppEnablementStatus$$.asObservable();\n }\n}\n", "import {\n AppType,\n FrequentlyAskedQuestions,\n IncludedCommonFormFields,\n Integration,\n OrderFormField,\n Restrictions,\n TrialConfiguration,\n} from '@galaxy/marketplace-apps/v1';\nimport { BillingFrequency, Currency } from '../types';\nimport { CaseTransform } from '../utils/case-transform';\nimport { formatDisplayPrice } from '../utils/pipe-utils';\n\nconst lmiCategoriesMap: { [type: string]: string } = {\n advertising: 'Advertising',\n content_and_experience: 'Content and Experience',\n reputation: 'Reputation',\n seo: 'SEO',\n social: 'Social',\n website: 'Website',\n listings: 'Listings',\n};\n\nexport interface EndUserMarketing {\n description: string;\n keySellingPoints: string[];\n faqs: FrequentlyAskedQuestions[];\n files: string[];\n}\n\nexport class MarketplaceApp {\n appId: string;\n name: string;\n type: AppType;\n vendor: string;\n price: number;\n setupFee: number;\n suggestedRetailPrice: number; // price is in cents\n allowPriceNegotiation: boolean;\n currency: Currency;\n billingFrequency: BillingFrequency;\n tagline?: string;\n lmiCategories?: any[];\n icon?: string;\n headerImage?: string;\n screenshot?: string[];\n orderForm?: OrderFormField[];\n commonForm?: IncludedCommonFormFields;\n integration?: Integration;\n\n // Reseller marketing\n description?: string;\n activationMessage?: string;\n _keySellingPoints?: string[];\n faqs?: any[];\n pdfUpload?: string[];\n restrictions?: Restrictions;\n allowMultipleActivations?: boolean;\n usesOrderForm: boolean;\n usesActivationSpecificEntryUrl: boolean;\n activationRequiresApproval?: boolean;\n billingId: string;\n usesEditions: boolean;\n editionIds: string[];\n suspended: Date;\n usesCustomPricing: boolean;\n\n endUserMarketing: EndUserMarketing;\n trialConfiguration: TrialConfiguration;\n\n /* tslint:disable:no-string-literal */\n constructor(data: any) {\n data = CaseTransform.objectPropertiesSnakeToCamel(data);\n Object.assign(this, data, {\n currency: data['currency'] ? data['currency'].toUpperCase() : 'USD',\n billingFrequency: data['billingFrequency'] ? data['billingFrequency'].toLowerCase() : 'monthly',\n });\n }\n\n get formattedPrice(): string {\n return formatDisplayPrice(this.price, this.currency, this.billingFrequency);\n }\n\n get lmiCategoriesText(): string[] {\n return this.lmiCategories.map((category) => lmiCategoriesMap[category]);\n }\n\n set keySellingPoints(keySellingPoints: string[]) {\n this._keySellingPoints = keySellingPoints;\n }\n\n get keySellingPoints(): string[] {\n return this._keySellingPoints.filter((sellingPoint) => sellingPoint && sellingPoint !== '');\n }\n}\n", "import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { combineLatest, Observable, of, ReplaySubject, Subject, zip } from 'rxjs';\nimport { map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\n\nimport {\n AppType,\n FieldMask,\n MarketingInformation,\n MarketplaceApp,\n MarketplaceAppService as MarketplaceAppSDKService,\n} from '@galaxy/marketplace-apps/v1';\nimport { TranslateService } from '@ngx-translate/core';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport {\n Addon,\n AddonService,\n AppEnablementStatus,\n AppType as MarketplacePackagesAppType,\n ENUM_TO_LMI_ARRAY,\n MarketplaceAppService as MarketplacePackagesAppService,\n PartnerAppEnablementStatusService,\n} from '@vendasta/marketplace-packages';\nimport { File, Product as frontendProduct, TrialConfigurationInterface } from '@vendasta/store';\nimport { AppConfigService } from '../app-config.service';\nimport { AppIDs, GET_VENDOR_APP_NAMES_INSTEAD_OF_WHITELABELED_NAMES } from '../constants';\nimport { VConfigService } from '../vconfig/vconfig.service';\nimport { MarketplaceApp as InternalMarketplaceApp } from './marketplace-app/marketplace-app';\nimport { MarketsService } from './markets/markets.service';\nimport { PartnerService } from './partner.service';\nimport { ProductChangeService } from './product-change.service';\n\n@Injectable({ providedIn: 'root' })\nexport class MarketplaceAppService implements OnDestroy {\n unsubscribe$ = new Subject();\n\n constructor(\n @Inject('PARTNER_ID') private readonly partnerId$: Observable,\n private marketPlaceApiService: MarketplaceAppSDKService,\n private enablementService: PartnerAppEnablementStatusService,\n private productChangeService: ProductChangeService,\n private addonService: AddonService,\n private snackbarService: SnackbarService,\n private translationService: TranslateService,\n private partnerService?: PartnerService,\n private marketsService?: MarketsService,\n private vconfigService?: VConfigService,\n private configService?: AppConfigService,\n private pkgAppsService?: MarketplacePackagesAppService,\n ) {\n this.loadAllMarketplaceApps();\n }\n\n get apps$(): Observable {\n return this.internalMarketplaceApps$;\n }\n\n get appsForSelectedMarket(): Observable {\n return combineLatest([\n this.apps$,\n this.marketsService.currentMarket$.pipe(\n switchMap((market) =>\n this.vconfigService.getConfigurations(this.partnerId, ['rm_name', 'sm_name', 'ms_name'], market.market_id),\n ),\n ),\n ]).pipe(\n map(([apps, config]) => this.whitelabelVendastaApps(apps, config)),\n shareReplay(1),\n );\n }\n\n private get partnerId(): string {\n return this.partnerService.partnerId;\n }\n\n private internalMarketplaceApps$$: ReplaySubject = new ReplaySubject<\n InternalMarketplaceApp[]\n >();\n private internalMarketplaceApps$: Observable =\n this.internalMarketplaceApps$$.asObservable();\n\n static internalAppFromSDKApp(app: MarketplaceApp): InternalMarketplaceApp {\n app.endUserMarketing = app.endUserMarketing || ({} as MarketingInformation);\n return new InternalMarketplaceApp({\n appId: app.appId,\n name: app.name,\n type: app.type || AppType.APP_TYPE_APP,\n vendor: app.integration ? app.integration.vendor : '',\n price: app.price,\n setupFee: app.setupFee,\n allowPriceNegotiation: app.allowPriceNegotiation,\n currency: app.currency,\n billingFrequency: app.billingFrequency,\n tagline: app.tagline,\n lmiCategories: app.lmiCategories ? app.lmiCategories.map((lmi) => ENUM_TO_LMI_ARRAY[lmi.valueOf()].name) : [],\n icon: app.icon,\n headerImage: app.headerImage,\n screenshot: app.screenshot,\n orderForm: app.orderForm ? app.orderForm.orderForm : null,\n commonForm: app.orderForm ? app.orderForm.commonForm : null,\n integration: app.integration,\n suspended: app.suspended,\n usesCustomPricing: app.usesCustomPricing,\n\n // Reseller marketing\n description: app.resellerMarketing ? app.resellerMarketing.description : '',\n activationMessage: app.orderForm ? app.orderForm.activationMessage : '',\n _keySellingPoints: app.resellerMarketing ? app.resellerMarketing.keySellingPoints : [],\n restrictions: app.restrictions,\n usesOrderForm: app.usesOrderForm,\n usesActivationSpecificEntryUrl: app.usesActivationSpecificEntryUrl,\n activationRequiresApproval: app.integration ? app.integration.activationRequiresApproval : false,\n billingId: app.billingId,\n\n // end user marketing\n endUserMarketing: {\n description: app.endUserMarketing.description,\n keySellingPoints: app.endUserMarketing.keySellingPoints,\n faqs: (app.endUserMarketing.faqs || []).map((f) => {\n return { question: f.question, answer: f.answer };\n }),\n files: app.endUserMarketing.files || [],\n },\n allowMultipleActivations: app.multipleActivations,\n usesEditions: app.usesEditions,\n editionIds: app.editionIds,\n suggestedRetailPrice: app.suggestedRetailPrice,\n trialConfiguration: app.trialConfiguration,\n });\n }\n\n ngOnDestroy(): void {\n this.unsubscribe$.complete();\n }\n\n loadAllMarketplaceApps(): void {\n const appsFieldMask = new FieldMask();\n appsFieldMask.paths = [\n 'appId',\n 'version',\n 'name',\n 'icon',\n 'allowWhitelabel',\n 'inDevelopment',\n 'trialSupport',\n 'usesOrderForm',\n 'tagline',\n 'signInUrl',\n 'currency',\n 'price',\n 'billingFrequency',\n 'serviceModel',\n 'screenshot',\n 'websiteUrl',\n 'headerImage',\n 'productCategory',\n 'lmiCategories',\n 'orderForm',\n 'created',\n 'updated',\n 'restrictions',\n 'billingId',\n 'gdprCompliant',\n 'preventPriceConversionBetweenCurrencies',\n 'suggestedRetailPrice',\n 'integration',\n 'multipleActivations',\n 'usesActivationSpecificEntryUrl',\n 'usesEditions',\n 'editionIds',\n 'suspended',\n 'usesCustomPricing',\n 'setupFee',\n ];\n this.marketsService.currentMarket$\n .pipe(\n switchMap((market) =>\n this.pkgAppsService.getAllDistributedAppIds(market.partner_id, market.market_id, [\n MarketplacePackagesAppType.APP,\n ]),\n ),\n switchMap((IDs) => this.marketPlaceApiService.getMultiApps(IDs, appsFieldMask)),\n map((apps) => apps.filter(Boolean)),\n map((apps) => apps.map(MarketplaceAppService.internalAppFromSDKApp)),\n take(1),\n )\n .subscribe((apps) => this.internalMarketplaceApps$$.next(apps));\n }\n\n getAppWithId(appId: string): Observable {\n return this.marketPlaceApiService.getApp(appId);\n }\n\n getProductFromMarketplaceApp(app: MarketplaceApp, isEnabled: boolean, addons: Addon[]): frontendProduct {\n const isSuperAdmin = this.configService.config.isSuperAdmin;\n let price = null;\n if (app.price >= 0) {\n price = app.price;\n }\n const output = new frontendProduct({\n productId: app.appId,\n name: app.name,\n billingId: app.billingId,\n description: app.resellerMarketing ? app.resellerMarketing.description : '',\n tagline: app.tagline,\n iconUrl: app.icon,\n headerImageUrl: app.headerImage,\n screenshotUrls: app.screenshot,\n pdfUploadUrls: app.resellerMarketing ? app.resellerMarketing.files : [],\n keySellingPoints: app.resellerMarketing ? app.resellerMarketing.keySellingPoints : [],\n faqs: app.resellerMarketing.faqs ? app.resellerMarketing.faqs : [],\n needHelp: app.resellerMarketing ? app.resellerMarketing.needHelp : '',\n wholesalePrice: price,\n isArchived: !isEnabled,\n isSuspended: !!app.suspended,\n addons: addons,\n restrictions: app.restrictions,\n usesEditions: app.usesEditions,\n });\n output.videos = app.resellerMarketing ? app.resellerMarketing.videos : [];\n output.lmiCategories = app.lmiCategories\n ? app.lmiCategories.map((lmi) => ENUM_TO_LMI_ARRAY[lmi.valueOf()].name)\n : [];\n output.currency = app.currency;\n output.billingFrequency = app.billingFrequency;\n output.pricing = {\n currency: output.currency,\n prices: [\n {\n price: app.price,\n frequency: output.billingFrequency,\n },\n ],\n };\n output.usesCustomPricing = app.usesCustomPricing;\n output.trialConfiguration = app.trialConfiguration as TrialConfigurationInterface;\n output.files = (app.resellerMarketing.files || [])\n .map((fileUrl) => new File(fileUrl))\n .filter((curFile) => {\n // TODO: Temporary hack to hide battlesheets from non-vendasta users; once the platform has a concept\n // of view permissions for files (or at least a separate set of files for this purpose) on the marketing\n // data we can implement this properly, and rip this hack out.\n if (!curFile || !curFile.name) {\n return false;\n } else if (!isSuperAdmin && curFile.name.toLowerCase().includes('[v]')) {\n return false;\n }\n return true;\n });\n\n return output;\n }\n\n private whitelabelVendastaApps(apps: InternalMarketplaceApp[], config: any): InternalMarketplaceApp[] {\n return apps.map((app) => {\n if (!!config.rm_name && app.appId === 'RM') {\n app.name = config.rm_name;\n } else if (!!config.sm_name && app.appId === 'SM') {\n app.name = config.sm_name;\n } else if (!!config.ms_name && app.appId === AppIDs.ListingBuilder) {\n app.name = config.ms_name;\n }\n return app;\n });\n }\n\n enableAppAndAddons(appId: string, origin: string, requiredAppIds?: string[]): Observable {\n const enableApp$ = this.partnerId$.pipe(\n switchMap((partnerId) => this.enablementService.enableAppForPartner(partnerId, appId, origin)),\n );\n\n // TODO - write a workflow in the backend that triggers the enablement of the required products (for both apps and addons).\n const enableRequirements$ = this.partnerId$.pipe(\n switchMap((partnerId) =>\n requiredAppIds?.length > 0\n ? zip(...requiredAppIds.map((rai) => this.enablementService.enableAppForPartner(partnerId, rai, origin)))\n : of([]),\n ),\n );\n\n const addons$ = this.partnerId$.pipe(\n switchMap((partnerId) => {\n return this.addonService.getAllAddons(partnerId, [appId], GET_VENDOR_APP_NAMES_INSTEAD_OF_WHITELABELED_NAMES);\n }),\n );\n\n return combineLatest([this.partnerId$, addons$, enableApp$, enableRequirements$]).pipe(\n take(1),\n tap(\n ([partnerId, addons]) => {\n const enabledIds = [appId, ...(requiredAppIds ?? []), ...addons.map((a) => a.addonId)];\n enabledIds.forEach((ei) => {\n this.productChangeService.changePartnerAppEnablementStatus(partnerId, ei, AppEnablementStatus.ENABLED);\n });\n },\n () => {\n this.snackbarService.errorSnack(\n this.translationService.instant('MARKETPLACE.DISCOVERABLE_ITEM.ENABLE_FAILED'),\n );\n },\n ),\n map(() => null),\n );\n }\n}\n", "export function pluckUndefined(o: T): T {\n if (!o) {\n return;\n }\n const keys = Array.from(Object.keys(o));\n keys.forEach((key) => {\n if (typeof o[key] === 'undefined') {\n delete o[key];\n }\n });\n return o;\n}\n", "import { HttpErrorResponse } from '@angular/common/http';\nimport { Inject, Injectable, OnDestroy } from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest,\n EMPTY,\n Observable,\n of as observableOf,\n of,\n ReplaySubject,\n Subject,\n} from 'rxjs';\nimport { catchError, expand, filter, map, reduce, switchMap, take, takeUntil } from 'rxjs/operators';\n\nimport {\n ListProductFilter,\n ListProductsResponse,\n MarketplacePackagesApiService,\n ProductService as ProductsService,\n} from '@vendasta/marketplace-packages';\nimport { MarketsService } from './markets/markets.service';\nimport { Product } from './product/product';\nimport { AppPartnerService } from '@galaxy/marketplace-apps';\nimport { AccountsService } from '@vendasta/accounts/legacy';\nimport { ListAppSettingsResponse } from '@vendasta/marketplace-apps';\nimport { IdentityProviderApiService } from '@vendasta/sso';\nimport { pluckUndefined } from '../arrays/pluck';\nimport { MarketplaceAppService } from './marketplace-app.service';\nimport { mergeUpdatedArrays } from './utils';\n\n@Injectable({ providedIn: 'root' })\nexport class ProductService implements OnDestroy {\n constructor(\n private marketsService: MarketsService,\n @Inject('PARTNER_ID') private readonly partnerId$: Observable,\n private productsService: ProductsService,\n private accountsService: AccountsService,\n private marketplaceAppsService: MarketplaceAppService,\n private packagesService: MarketplacePackagesApiService,\n private appPartnerService: AppPartnerService,\n private identityProviderApiService: IdentityProviderApiService,\n ) {\n const currentMarket$ = this.marketsService.currentMarket$;\n\n combineLatest([this.marketplaceAllProducts$])\n .pipe(takeUntil(this._destroyed$$))\n .subscribe(([productsData]) => {\n const existingProducts = this.products$$.getValue();\n const products = productsData.products.map(this.productFromProductData);\n const newestProducts = this.mergeProducts(existingProducts, products);\n this.products$$.next(newestProducts);\n });\n\n combineLatest([this.marketplaceAllApprovedProducts$])\n .pipe(takeUntil(this._destroyed$$))\n .subscribe(([approvedProductsData]) => {\n const approvedProducts = approvedProductsData.products.map(this.productFromProductData);\n this.approvedProducts$$.next(approvedProducts);\n });\n\n // TODO: If products have a market, and we know we want all products preloaded, could be a frontend filter on all products instead?\n this._productsForMarket$ = combineLatest([this.partnerId$, currentMarket$]).pipe(\n switchMap(([partnerId, market]) => this.getAllProducts(partnerId, null, market.market_id)),\n filter((resp) => !!resp),\n map((resp) => resp.products.map(this.productFromProductData)),\n );\n\n this.loadAllProducts();\n this.loadApprovedProducts();\n }\n\n get productsForMarket(): Observable {\n return this._productsForMarket$;\n }\n\n get products(): Observable {\n return this._products$;\n }\n\n private get approvedProducts(): Observable {\n return this._approvedProducts$;\n }\n\n get approvedProductsForSelectedMarket(): Observable {\n return this.approvedProducts.pipe(\n map((approvedProducts) => approvedProducts.filter((product) => !product.suspendedDate)),\n );\n }\n\n private products$$: BehaviorSubject = new BehaviorSubject([]);\n private approvedProducts$$: ReplaySubject = new ReplaySubject();\n private _products$: Observable = this.products$$.asObservable();\n private _approvedProducts$: Observable = this.approvedProducts$$.asObservable();\n private _productsForMarket$: Observable;\n\n private marketplaceAllProducts$$: ReplaySubject = new ReplaySubject();\n private marketplaceAllProducts$: Observable = this.marketplaceAllProducts$$.asObservable();\n private marketplaceAllApprovedProducts$$: ReplaySubject =\n new ReplaySubject();\n private marketplaceAllApprovedProducts$: Observable =\n this.marketplaceAllApprovedProducts$$.asObservable();\n\n private readonly _destroyed$$: Subject = new Subject();\n\n static validateAndFillNewProductWithOtherOldProduct(newProduct: Product, oldProduct: Product): Product {\n if (!newProduct) {\n return null;\n }\n\n if (!oldProduct) {\n return newProduct;\n }\n const oldProductClone = { ...oldProduct };\n const newProductClone = pluckUndefined({ ...newProduct } as Product);\n\n return Object.assign(oldProductClone, newProductClone);\n }\n\n appWithId(productId: string): Observable {\n return this.marketplaceAppsService.getAppWithId(productId).pipe(map((app) => this.productFromProductData(app)));\n }\n\n getProducts(productIds: string[], marketIdObservable: Observable = null): Observable {\n if (!productIds || !productIds.length) {\n return of([]);\n }\n\n if (marketIdObservable === null) {\n marketIdObservable = this.marketsService.currentMarket$.pipe(map((market) => market.market_id));\n }\n\n return combineLatest([this.partnerId$, marketIdObservable]).pipe(\n switchMap(([partnerId, marketId]) => {\n return this.packagesService.getMultiProducts({\n partnerId: partnerId,\n marketId: marketId,\n productIds: productIds,\n });\n }),\n map((resp) => {\n return resp.products.map((productContainer) => this.productFromProductData(productContainer.product));\n }),\n take(1),\n );\n }\n\n loadAllProducts(): void {\n this.partnerId$\n .pipe(\n switchMap((partnerId) => this.getAllProducts(partnerId, null, null)),\n filter((resp) => !!resp),\n takeUntil(this._destroyed$$),\n )\n .subscribe((resp) => this.marketplaceAllProducts$$.next(resp));\n }\n\n loadApprovedProducts(): void {\n this.partnerId$\n .pipe(\n switchMap((partnerId) => {\n const listFilter = new ListProductFilter({ approved: true });\n return this.getAllProducts(partnerId, listFilter, null);\n }),\n filter((resp) => !!resp),\n takeUntil(this._destroyed$$),\n )\n .subscribe((resp) => this.marketplaceAllApprovedProducts$$.next(resp));\n }\n\n /**\n * Retrieves all products for a given partner ID and filter by paging over the API until hasMore is false\n */\n getAllProducts(\n partnerId: string,\n listFilter: ListProductFilter | null,\n marketId: string | null,\n ): Observable {\n const pageSize = 500;\n const loadFunc = (cursor?: string): Observable => {\n return this.productsService.loadAllProducts(partnerId, pageSize, cursor, marketId, listFilter);\n };\n return loadFunc().pipe(\n expand((resp) => (resp.hasMore ? loadFunc(resp.nextCursor) : EMPTY)),\n reduce(\n (acc, res) => {\n if (!!res.products && res.products.length > 0) {\n acc.products.push(...res.products);\n }\n return acc;\n },\n new ListProductsResponse({\n products: [],\n hasMore: false,\n nextCursor: null,\n }),\n ),\n );\n }\n\n private productFromProductData(productData: any): Product {\n productData.enabled = true;\n productData.product_id = productData.appId;\n return new Product(productData);\n }\n\n /**\n * Given two lists of products, merge them into one, containing only the newest unique items from\n * each.\n */\n mergeProducts(products1: Product[], products2: Product[]): Product[] {\n if (products1.length > 0 && products2.length > 0) {\n return mergeUpdatedArrays(products1, products2, 'product_id');\n }\n return products1.length > 0 ? products1 : products2.length > 0 ? products2 : [];\n }\n\n canActivateProducts(appIds: string[], accountGroupId?: string): Observable {\n // TODO: Remove catch if 404 after accounts is redeployed\n return this.checkAppRequirements(appIds, accountGroupId).pipe(\n catchError((err: HttpErrorResponse) => {\n if (err.status === 404) {\n return observableOf(true);\n }\n }),\n );\n }\n\n checkAppRequirements(appIds: string[], accountGroupId: string): Observable {\n const response$ = this.accountsService.canActivate(appIds, accountGroupId);\n return response$.pipe(\n map((r) => {\n if (r.invalidAppIds.length > 0) {\n console.log(`Error: apps ${r.invalidAppIds} are not eligible to be activated on this account.`);\n return false;\n }\n return true;\n }),\n );\n }\n\n listAppSettings$(partnerId: string, marketId: string): Observable {\n return this.appPartnerService.listAppSettings(partnerId, marketId, '', 1000);\n }\n\n getEntryUrl(serviceProviderId: string): Observable {\n return this.identityProviderApiService.getEntryUrl({ serviceProviderId }).pipe(\n map((resp) => resp.entryUrl),\n take(1),\n );\n }\n\n ngOnDestroy(): void {\n this._destroyed$$.next();\n this._destroyed$$.complete();\n }\n}\n"], "mappings": "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", "names": ["ProductOrigin", "Product", "constructor", "data", "name", "tagline", "origin", "product_id", "productId", "edition_name", "editionName", "partner_id", "partnerId", "description", "category", "faqs", "lmi_categories", "getLmiCategory", "service_model", "serviceModel", "header_image_url", "headerImageUrl", "icon_url", "iconUrl", "icon", "icon_color", "iconColor", "screenshot_urls", "screenshotUrls", "pdf_upload_urls", "pdfUploadUrls", "recommended_sell_price", "recommendedSellPrice", "wholesale_price", "wholesalePrice", "setup_fee", "setupFee", "enabled", "billing_frequency", "getBillingFrequency", "billing_frequency_other", "currency", "getCurrency", "hide_product_icons_and_names", "hideProductIconsAndNames", "hide_product_details", "hideProductDetails", "uses_customization_form", "usesCustomizationForm", "key_selling_points", "keySellingPoints", "entry_url", "entryUrl", "website_url", "websiteUrl", "createdDate", "created", "Date", "updatedDate", "updated", "suspendedDate", "suspended", "order_form", "OrderForm", "restrictions", "billing_id", "billingId", "trial", "uses_activation_specific_entry_url", "usesActivationSpecificEntryUrl", "usesCustomPricing", "uses_custom_pricing", "editionId", "isSuspended", "editions", "anniversaryDate", "undefined", "commitmentDate", "isRmProduct", "isCustom", "ProductOrigin", "partner_created", "dollarWholesalePrice", "getProductFromDiscoverableItem", "item", "product", "appId", "headerImage", "price", "billingFrequency", "lmiCategories", "map", "LMI_CATEGORIES", "marketplace_app", "toLowerCase", "addOrderFormFieldsToProduct", "orderFormContainer", "orderForm", "forEach", "field", "customFormField", "label", "id", "type", "required", "options", "push", "buildOrderFormForCustomProduct", "isCustomProductBasedOnId", "startsWith", "convertToStoreProduct", "p", "StoreProduct", "getLmiCategoryNames", "cat", "LMI_CATEGORY_MAP", "Categories", "billingFrequencyOther", "CurrencyEnum", "lmi", "ActivatedProduct", "Product", "constructor", "data", "Object", "assign", "ProductChangeService", "constructor", "_changedPartnerAppEnablementStatus$$", "ReplaySubject", "changePartnerAppEnablementStatus", "partnerId", "appId", "status", "next", "changedPartnerAppEnablementStatus$", "asObservable", "factory", "\u0275fac", "providedIn", "_ProductChangeService", "lmiCategoriesMap", "advertising", "content_and_experience", "reputation", "seo", "social", "website", "listings", "MarketplaceApp", "constructor", "data", "CaseTransform", "objectPropertiesSnakeToCamel", "Object", "assign", "currency", "toUpperCase", "billingFrequency", "toLowerCase", "formattedPrice", "formatDisplayPrice", "price", "lmiCategoriesText", "lmiCategories", "map", "category", "keySellingPoints", "_keySellingPoints", "filter", "sellingPoint", "MarketplaceAppService", "constructor", "partnerId$", "marketPlaceApiService", "enablementService", "productChangeService", "addonService", "snackbarService", "translationService", "partnerService", "marketsService", "vconfigService", "configService", "pkgAppsService", "unsubscribe$", "Subject", "internalMarketplaceApps$$", "ReplaySubject", "internalMarketplaceApps$", "asObservable", "loadAllMarketplaceApps", "apps$", "appsForSelectedMarket", "combineLatest", "currentMarket$", "pipe", "switchMap", "market", "getConfigurations", "partnerId", "market_id", "map", "apps", "config", "whitelabelVendastaApps", "shareReplay", "internalAppFromSDKApp", "app", "endUserMarketing", "InternalMarketplaceApp", "appId", "name", "type", "AppType", "APP_TYPE_APP", "vendor", "integration", "price", "setupFee", "allowPriceNegotiation", "currency", "billingFrequency", "tagline", "lmiCategories", "lmi", "ENUM_TO_LMI_ARRAY", "valueOf", "icon", "headerImage", "screenshot", "orderForm", "commonForm", "suspended", "usesCustomPricing", "description", "resellerMarketing", "activationMessage", "_keySellingPoints", "keySellingPoints", "restrictions", "usesOrderForm", "usesActivationSpecificEntryUrl", "activationRequiresApproval", "billingId", "faqs", "f", "question", "answer", "files", "allowMultipleActivations", "multipleActivations", "usesEditions", "editionIds", "suggestedRetailPrice", "trialConfiguration", "ngOnDestroy", "complete", "appsFieldMask", "FieldMask", "paths", "getAllDistributedAppIds", "partner_id", "MarketplacePackagesAppType", "APP", "IDs", "getMultiApps", "filter", "Boolean", "take", "subscribe", "next", "getAppWithId", "getApp", "getProductFromMarketplaceApp", "isEnabled", "addons", "isSuperAdmin", "output", "frontendProduct", "productId", "iconUrl", "headerImageUrl", "screenshotUrls", "pdfUploadUrls", "needHelp", "wholesalePrice", "isArchived", "isSuspended", "videos", "pricing", "prices", "frequency", "fileUrl", "File", "curFile", "toLowerCase", "includes", "rm_name", "sm_name", "ms_name", "AppIDs", "ListingBuilder", "enableAppAndAddons", "origin", "requiredAppIds", "enableApp$", "enableAppForPartner", "enableRequirements$", "length", "zip", "rai", "of", "addons$", "getAllAddons", "GET_VENDOR_APP_NAMES_INSTEAD_OF_WHITELABELED_NAMES", "tap", "a", "addonId", "forEach", "ei", "changePartnerAppEnablementStatus", "AppEnablementStatus", "ENABLED", "errorSnack", "instant", "\u0275\u0275inject", "PartnerAppEnablementStatusService", "ProductChangeService", "AddonService", "SnackbarService", "TranslateService", "PartnerService", "MarketsService", "VConfigService", "AppConfigService", "factory", "\u0275fac", "providedIn", "_MarketplaceAppService", "pluckUndefined", "o", "Array", "from", "Object", "keys", "forEach", "key", "ProductService", "constructor", "marketsService", "partnerId$", "productsService", "accountsService", "marketplaceAppsService", "packagesService", "appPartnerService", "identityProviderApiService", "products$$", "BehaviorSubject", "approvedProducts$$", "ReplaySubject", "_products$", "asObservable", "_approvedProducts$", "marketplaceAllProducts$$", "marketplaceAllProducts$", "marketplaceAllApprovedProducts$$", "marketplaceAllApprovedProducts$", "_destroyed$$", "Subject", "currentMarket$", "combineLatest", "pipe", "takeUntil", "subscribe", "productsData", "existingProducts", "getValue", "products", "map", "productFromProductData", "newestProducts", "mergeProducts", "next", "approvedProductsData", "approvedProducts", "_productsForMarket$", "switchMap", "partnerId", "market", "getAllProducts", "market_id", "filter", "resp", "loadAllProducts", "loadApprovedProducts", "productsForMarket", "approvedProductsForSelectedMarket", "product", "suspendedDate", "validateAndFillNewProductWithOtherOldProduct", "newProduct", "oldProduct", "oldProductClone", "__spreadValues", "newProductClone", "pluckUndefined", "Object", "assign", "appWithId", "productId", "getAppWithId", "app", "getProducts", "productIds", "marketIdObservable", "length", "of", "marketId", "getMultiProducts", "productContainer", "take", "listFilter", "ListProductFilter", "approved", "loadFunc", "cursor", "pageSize", "expand", "hasMore", "nextCursor", "EMPTY", "reduce", "acc", "res", "push", "ListProductsResponse", "productData", "enabled", "product_id", "appId", "Product", "products1", "products2", "mergeUpdatedArrays", "canActivateProducts", "appIds", "accountGroupId", "checkAppRequirements", "catchError", "err", "status", "observableOf", "canActivate", "r", "invalidAppIds", "console", "log", "listAppSettings$", "listAppSettings", "getEntryUrl", "serviceProviderId", "entryUrl", "ngOnDestroy", "complete", "\u0275\u0275inject", "MarketsService", "AccountsService", "MarketplaceAppService", "MarketplacePackagesApiService", "AppPartnerService", "IdentityProviderApiService", "factory", "\u0275fac", "providedIn", "_ProductService"] }