{"version":3,"sources":["apps/partner-center-client/src/app/checkout/checkout.service.ts","apps/partner-center-client/src/app/checkout/instant-bill-payment-info.component.ts","apps/partner-center-client/src/app/checkout/checkout-dialog.component.ts","apps/partner-center-client/src/app/checkout/checkout-dialog.component.html","node_modules/@vendasta/snapshot/fesm2020/vendasta-snapshot.mjs","libs/snapshot/src/lib/scorecard/scorecard.ts","libs/snapshot/src/lib/scorecard/scorecard.service.ts","libs/snapshot/src/lib/scorecard/overall-score/overall-score.component.ts","libs/snapshot/src/lib/scorecard/overall-score/overall-score.component.html","libs/snapshot/src/lib/core/grade/grade.component.ts","libs/snapshot/src/lib/core/grade/grade.component.html","libs/snapshot/src/lib/scorecard/section-grade/section-grade.component.ts","libs/snapshot/src/lib/scorecard/section-grade/section-grade.component.html","libs/snapshot/src/lib/scorecard/actions/actions.component.ts","libs/snapshot/src/lib/scorecard/actions/actions.component.html","libs/snapshot/src/lib/scorecard/action-refresh/action-refresh.component.ts","libs/snapshot/src/lib/scorecard/action-refresh/action-refresh.component.html","libs/snapshot/src/lib/scorecard/empty-state/not-ready.component.ts","libs/snapshot/src/lib/scorecard/empty-state/not-ready.component.html","libs/snapshot/src/lib/scorecard/empty-state/not-supported.component.ts","libs/snapshot/src/lib/scorecard/empty-state/not-supported.component.html","libs/snapshot/src/lib/scorecard/scorecard.component.ts","libs/snapshot/src/lib/scorecard/scorecard.component.html","libs/snapshot/src/lib/assets/i18n/en_devel.json","libs/snapshot/src/lib/scorecard/scorecard.module.ts","libs/snapshot/src/lib/create-snapshot/tokens.ts","libs/snapshot/src/lib/create-snapshot/whitelabeling/whitelabel-translation.service.ts","apps/partner-center-client/src/app/core/snapshot.service.ts"],"sourcesContent":["import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {\n BillingService,\n billingStrategyFromAPI,\n CanCreateSubscriptionsResponse,\n GetPurchaseCostResponse,\n isBillingStrategyInstant,\n SubscribeValidationStatus,\n ValidateResponse,\n} from '@galaxy/billing';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { combineLatest, EMPTY, Observable, ReplaySubject } from 'rxjs';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\nimport { BillingSettingsService } from '../shared-billing/settings/billing-settings.service';\n\nexport enum BillingAction {\n PAYMENT_CONFIGURED = 1,\n NO_PAYMENT_CONFIGURED,\n INVALID_PAYMENT,\n NO_INSTANT_PAYMENT_NEEDED,\n NO_MERCHANT_CONFIGURED,\n}\n\nexport interface PaymentInfo {\n lastFourDigits: string;\n paymentClass: string;\n}\n\ninterface CanCreateSubscriptionsRequest {\n merchantId: string;\n productSKU: string;\n quantity: number;\n}\n\nexport const INSTANT_BILLING_STRATEGY = 'charge-instantly';\n\n@Injectable()\nexport class CheckoutService {\n canCreateSubscriptionsRequest$$: ReplaySubject =\n new ReplaySubject();\n billingAction$: Observable;\n\n private snapshotActionEnabled$$: ReplaySubject = new ReplaySubject(1);\n instantBillConsentGived$$: ReplaySubject = new ReplaySubject();\n\n snapshotActionEnabled$: Observable = this.snapshotActionEnabled$$.asObservable();\n\n constructor(\n private billingSettingsService: BillingSettingsService,\n private billingService: BillingService,\n private snackbarService: SnackbarService,\n ) {\n this.snapshotActionEnabled$$.next(false);\n this.instantBillConsentGived$$.next(false);\n this.initBillingStatus();\n }\n\n initBillingStatus(): void {\n const validationResponse$ = this.canCreateSubscriptionsRequest$$.asObservable().pipe(\n tap(({ merchantId }) => {\n this.billingSettingsService.merchantId = merchantId;\n }),\n switchMap(({ merchantId, productSKU, quantity }) => {\n return this.getSubscriptionValidation(merchantId, productSKU, quantity);\n }),\n );\n const purchaseCost$ = this.canCreateSubscriptionsRequest$$.asObservable().pipe(\n switchMap(({ merchantId, productSKU, quantity }) => {\n return this.billingService.getPurchaseCost(merchantId, productSKU, quantity);\n }),\n catchError(() => {\n this.snackbarService.errorSnack('Unable to get Purchase Cost');\n return null;\n }),\n );\n this.billingAction$ = combineLatest([purchaseCost$, validationResponse$]).pipe(\n map(([cost, validation]) => this.getBillingAction(cost as GetPurchaseCostResponse, validation)),\n tap((billingAction) => {\n if (billingAction === BillingAction.NO_INSTANT_PAYMENT_NEEDED) {\n this.instantBillConsentChange(true);\n } else if (billingAction === BillingAction.PAYMENT_CONFIGURED) {\n this.billingSettingsService.loadMerchantCreditCards();\n }\n }),\n );\n }\n\n getBillingAction(purchaseCost: GetPurchaseCostResponse, validationResponse: ValidateResponse): BillingAction {\n if (validationResponse) {\n switch (validationResponse.code.status) {\n case SubscribeValidationStatus.SUBSCRIBE_VALIDATION_STATUS_MISSING_MERCHANT_INFO:\n return BillingAction.NO_MERCHANT_CONFIGURED;\n case SubscribeValidationStatus.SUBSCRIBE_VALIDATION_STATUS_MISSING_PAYMENT_INFO:\n return BillingAction.NO_PAYMENT_CONFIGURED;\n case SubscribeValidationStatus.SUBSCRIBE_VALIDATION_STATUS_CANNOT_INSTANT_BILL:\n throw new Error('Cannot instant bill for this product');\n case SubscribeValidationStatus.SUBSCRIBE_VALIDATION_STATUS_WILL_CAUSE_FUTURE_CHARGES:\n // checkout service currently only deals with snapshots, snapshots aren't a recurring product we won't see this case for snapshots.\n // This is for if we decided to use this service for other products, we would need to handle this case.\n throw new Error('Not Implemented: handling will exceed free usage');\n }\n }\n if (isBillingStrategyInstant(billingStrategyFromAPI(purchaseCost.strategy)) && purchaseCost.totalCost > 0) {\n return BillingAction.PAYMENT_CONFIGURED;\n }\n return BillingAction.NO_INSTANT_PAYMENT_NEEDED;\n }\n\n getSubscriptionValidation(merchantId: string, productSKU: string, quantity: number): Observable {\n return this.canCreateSubscriptions(merchantId, {\n [productSKU]: quantity,\n }).pipe(\n map((validationViolations) => validationViolations?.find((violation) => violation.sku === productSKU) || null),\n );\n }\n\n setSnapshotActionEnabled(enabled: boolean): void {\n this.snapshotActionEnabled$$.next(enabled);\n }\n\n loadProductRequest(merchantId: string, productSKU: string, quantity = 1): void {\n this.canCreateSubscriptionsRequest$$.next({\n merchantId: merchantId,\n productSKU: productSKU,\n quantity: quantity,\n });\n }\n\n instantBillConsentChange(given: boolean): void {\n this.snapshotActionEnabled$$.next(given);\n }\n\n canCreateSubscriptions(merchantId: string, skus: { [sku: string]: number }): Observable {\n return this.billingService.canCreateSubscriptions(merchantId, skus).pipe(\n map((response: CanCreateSubscriptionsResponse) => (response ? response.validationResponse || [] : null)),\n catchError((error: HttpErrorResponse): Observable => {\n if (error.status >= 500) {\n this.snackbarService.errorSnack('Uh-oh. Looks like something went wrong on our end. Please try again.');\n } else if (error.status >= 400) {\n this.snackbarService.errorSnack(error.message);\n }\n return EMPTY;\n }),\n );\n }\n}\n","import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Merchant, PaymentCard, PaymentCardTypeLabel, StripeService } from '@galaxy/billing';\nimport { EditContactInfoDialogComponent, EditPaymentMethodDialogComponent } from '@vendasta/billing-ui';\nimport { Observable, Subscription } from 'rxjs';\nimport { map, take, withLatestFrom } from 'rxjs/operators';\nimport { BillingSettingsService } from '../shared-billing/settings/billing-settings.service';\nimport { BillingAction, CheckoutService, PaymentInfo } from './checkout.service';\n\n@Component({\n selector: 'app-instant-bill-payment-info',\n template: `\n \n

\n {{ 'CHECKOUT.CONTACT_NOT_CONFIGURED' | translate }}\n \n {{ 'CHECKOUT.ADD' | translate }}\n \n

\n

\n {{ 'CHECKOUT.PAYMENT_NOT_CONFIGURED' | translate }}\n \n {{ 'CHECKOUT.ADD' | translate }}\n \n

\n

\n {{ 'CHECKOUT.INVALID_PAYMENT' | translate }}\n \n {{ 'CHECKOUT.EDIT' | translate }}\n \n

\n

\n \n {{ 'CHECKOUT.CHARGE' | translate }}\n {{ 'CHECKOUT.CHARGE_IF_APPLICABLE' | translate }}\n \n \n \n {{ 'CHECKOUT.ENDING_IN' | translate: { lastFourDigits: info?.lastFourDigits } }}\n \n \n {{ 'CHECKOUT.EDIT' | translate }}\n \n

\n
\n `,\n styleUrls: ['./instant-bill-payment-info.component.scss'],\n})\nexport class InstantBillPaymentInfoComponent implements OnInit, OnDestroy {\n @ViewChild('consent') consentCheckbox: MatCheckbox;\n @Input() editable = false;\n @Input() merchantId: string;\n @Input() productSKU: string;\n @Input() paymentRequired: boolean;\n\n billingAction$: Observable;\n paymentInfo$: Observable;\n BillingAction = BillingAction;\n\n stripeKey$: Observable;\n\n subscriptions: Subscription[] = [];\n\n constructor(\n private snapshotCheckoutService: CheckoutService,\n private dialog: MatDialog,\n private billingSettingsService: BillingSettingsService,\n private stripeService: StripeService,\n ) {}\n\n ngOnInit(): void {\n this.snapshotCheckoutService.loadProductRequest(this.merchantId, this.productSKU);\n\n this.billingAction$ = this.snapshotCheckoutService.billingAction$;\n this.paymentInfo$ = this.billingSettingsService.paymentDetails.pipe(\n map((paymentDetails: PaymentCard) => {\n let paymentClass = '';\n if (paymentDetails.cardId.length) {\n paymentClass = this.getPaymentFontClass(paymentDetails.cardType);\n }\n return {\n lastFourDigits: paymentDetails.lastFourDigits,\n paymentClass: paymentClass,\n };\n }),\n );\n\n this.stripeKey$ = this.stripeService.getPublicKeyByMerchant(this.merchantId);\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n }\n\n openEditContactDialog(): void {\n this.subscriptions.push(\n this.billingSettingsService.merchantDetailsInfo.pipe(take(1)).subscribe((contactInfo) => {\n const dialogRef = this.dialog.open(EditContactInfoDialogComponent, {\n width: '500px',\n data: {\n merchantId: this.merchantId,\n merchant: contactInfo.merchantId ? (contactInfo as Merchant) : null,\n },\n });\n dialogRef\n .afterClosed()\n .pipe(take(1))\n .subscribe((_) => {\n this.snapshotCheckoutService.loadProductRequest(this.merchantId, this.productSKU);\n });\n }),\n );\n }\n\n openEditPaymentDialog(): void {\n if (this.consentCheckbox) {\n this.consentCheckbox.checked = false;\n this.snapshotCheckoutService.instantBillConsentChange(false);\n }\n\n this.subscriptions.push(\n this.stripeKey$\n .pipe(\n withLatestFrom(this.billingSettingsService.paymentDetailsInfo),\n map(([stripeKey, card]) => {\n const dialogRef = this.dialog.open(EditPaymentMethodDialogComponent, {\n width: '500px',\n data: {\n merchantId: this.merchantId,\n stripePublicKey: stripeKey,\n recaptchaKey: '6Lf0gKwUAAAAAMiDLNbVfgyFN8fzT3KDSkWeC92d',\n requireRecaptcha: true,\n paymentCard: card !== this.billingSettingsService.emptyPaymentDetails ? card : null,\n },\n });\n dialogRef\n .afterClosed()\n .pipe(take(1))\n .subscribe((merchantUpdated) => {\n if (merchantUpdated) {\n this.billingSettingsService.loadMerchantCreditCards();\n }\n this.snapshotCheckoutService.loadProductRequest(this.merchantId, this.productSKU);\n });\n }),\n take(1),\n )\n .subscribe(),\n );\n }\n\n checkboxClicked(change: MatCheckboxChange): void {\n this.snapshotCheckoutService.instantBillConsentChange(change.checked);\n }\n\n getPaymentFontClass(cardType: PaymentCardTypeLabel): string {\n const cardBrandToPfClass = {\n Visa: 'pf-visa',\n Mastercard: 'pf-mastercard',\n 'American Express': 'pf-american-express',\n Discover: 'pf-discover',\n 'Diners Club': 'pf-diners',\n JCB: 'pf-jcb',\n };\n return Object.prototype.hasOwnProperty.call(cardBrandToPfClass, cardType.value)\n ? cardBrandToPfClass[cardType.value]\n : 'pf-credit-card';\n }\n}\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { AccountGroupService, ProjectionFilter } from '@galaxy/account-group';\nimport { Currency, SNAPSHOT_REPORT_SKU } from '@galaxy/billing';\nimport { FeatureFlagService } from '@galaxy/partner';\nimport { BillingFrequency } from '@vendasta/shared';\nimport { BehaviorSubject, combineLatest, firstValueFrom, Observable } from 'rxjs';\nimport { map, startWith, take, tap } from 'rxjs/operators';\nimport { AppConfigService } from '../app-config.service';\nimport { PricePipe } from '../common/pipes/price.pipe';\nimport { BillingApiService } from '../core/billing/billing-api.service';\nimport { PurchaseCost } from '../core/billing/purchase-cost';\nimport { HidePricingGuard } from '../core/guards/hide-pricing-guard.service';\nimport { formatDisplayPrice } from '../core/utils/pipe-utils';\nimport { ManageSubscriptionsService } from '../subscription-tier/utils/manage-subscriptions.service';\nimport { CheckoutService } from './checkout.service';\n\ninterface Upgrade {\n show: boolean;\n cta: string;\n nextTierId: string;\n nextTierLimit: string;\n}\n\ninterface Pricing {\n price: PurchaseCost;\n pricingString: string;\n showPricing: boolean;\n showContractPricing: boolean;\n upgrade: Upgrade;\n}\n\nconst INFERABLE_FIELDS = ['website', 'workNumber', 'address'];\n\n@Component({\n templateUrl: './checkout-dialog.component.html',\n styleUrls: ['./checkout-dialog.component.scss'],\n})\nexport class CheckoutDialogComponent implements OnInit, OnDestroy {\n partnerId: string;\n successLabel: string;\n productSKU: string;\n title: string;\n description: string;\n billingInfoEditable = false;\n createButtonId: string;\n accountGroupId?: string;\n accountType?: string;\n isInferMissingData: FormControl;\n\n private showContractPricing$$: BehaviorSubject = new BehaviorSubject(false);\n private showContractPricing$: Observable = this.showContractPricing$$.asObservable();\n snapshotActionEnabled$: Observable;\n shouldInferAccountData$: Observable;\n\n pricing$: Observable;\n freeSnapshotsRemaining$: Observable;\n\n constructor(\n @Inject(MAT_DIALOG_DATA)\n public data: {\n partnerId: string;\n successLabel: string;\n productSKU: string;\n title: string;\n description: string;\n createButtonId: string;\n accountGroupId?: string;\n accountType?: string;\n },\n public dialogRef: MatDialogRef,\n private billingApiService: BillingApiService,\n private snapshotCheckoutService: CheckoutService,\n private app: AppConfigService,\n private pricePipe: PricePipe,\n private hidePricingGuard: HidePricingGuard,\n private manageSubscriptionsService: ManageSubscriptionsService,\n private featureFlagService: FeatureFlagService,\n private accountGroupService: AccountGroupService,\n ) {\n this.partnerId = data.partnerId;\n this.successLabel = data.successLabel;\n this.productSKU = data.productSKU;\n this.title = data.title;\n this.description = data.description;\n this.billingInfoEditable = this.app.config.userCanAccessBilling;\n this.createButtonId = data.createButtonId || data.partnerId + '-createId';\n this.accountGroupId = data.accountGroupId;\n this.accountType = data.accountType || 'account';\n }\n\n ngOnInit(): void {\n this.isInferMissingData = new FormControl(false);\n\n if (this.accountGroupId) {\n this.shouldInferAccountData$ = this.accountGroupService\n .get(this.accountGroupId, new ProjectionFilter({ richData: true, napData: true }))\n .pipe(\n take(1),\n map((accountGroup) => {\n const hasNAPFields =\n accountGroup?.napData?.website &&\n accountGroup?.napData?.address &&\n accountGroup?.napData?.workNumber?.some((n) => n);\n const alreadyInferred = INFERABLE_FIELDS.every((field) =>\n accountGroup?.richData?.inferredAttributes?.includes(field),\n );\n return !hasNAPFields && !alreadyInferred;\n }),\n );\n }\n\n this.shouldInferAccountData$.pipe(\n tap((shouldInfer) => {\n this.isInferMissingData.setValue(shouldInfer);\n }),\n );\n\n const showPricing$ = this.hidePricingGuard.canActivate().pipe(map((hidePricing) => !hidePricing));\n\n const price$ = this.getPurchaseCost(this.partnerId, this.productSKU);\n this.snapshotActionEnabled$ = this.snapshotCheckoutService.snapshotActionEnabled$;\n const pricingString$ = price$.pipe(map((purchaseCost) => this.getPurchasePriceString(purchaseCost)));\n\n const upgradeData$ = this.manageSubscriptionsService.cardData$.pipe(\n map((cards) => {\n const card = cards.find((c) => c.skus.some((sku) => sku === this.productSKU));\n if (card === undefined || !card.showCard) {\n return undefined;\n }\n return card;\n }),\n );\n\n this.freeSnapshotsRemaining$ = upgradeData$.pipe(\n map((data) => {\n const index = data?.skus?.findIndex((c) => c === SNAPSHOT_REPORT_SKU);\n if (index > -1) {\n const ssl = data.subscriptionLimits[index];\n return ssl.limitMax - ssl.currentValue < 0 ? 0 : ssl.limitMax - ssl.currentValue;\n }\n return 0;\n }),\n );\n\n this.pricing$ = combineLatest([\n price$,\n pricingString$,\n showPricing$,\n this.showContractPricing$,\n upgradeData$,\n this.app.config$,\n ]).pipe(\n map(([price, priceString, showPricing, showContractPricing, upgradeData, appConfig]) => {\n return {\n price: price,\n pricingString: priceString,\n showPricing: showPricing,\n showContractPricing: showContractPricing,\n upgrade: {\n show:\n upgradeData !== undefined &&\n price?.totalCost > 0 &&\n showContractPricing &&\n (appConfig.userIsAdmin || appConfig.supportEnabled),\n cta: upgradeData?.upgradeCTA,\n nextTierId: upgradeData?.nextTierId,\n nextTierLimit: upgradeData?.nextTierLimit,\n },\n };\n }),\n startWith({\n showPricing: false,\n showContractPricing: false,\n upgrade: {\n show: false,\n },\n } as Pricing),\n );\n }\n\n ngOnDestroy(): void {\n this.snapshotCheckoutService.setSnapshotActionEnabled(false);\n }\n\n getPurchasePriceString(purchaseCost: PurchaseCost): string {\n if (purchaseCost) {\n this.showContractPricing$$.next(true);\n return formatDisplayPrice(\n purchaseCost.totalCost,\n purchaseCost.currency,\n purchaseCost.billingFrequency as BillingFrequency,\n );\n } else {\n this.showContractPricing$$.next(false);\n return null;\n }\n }\n\n getDiscountDescription(purchaseCost: PurchaseCost): string {\n return 'Discount: ' + this.pricePipe.transform(purchaseCost.discountAmount, Currency[purchaseCost.currency]);\n }\n\n getPurchaseCost(merchantId: string, SKU: string, quantity = 1): Observable {\n return this.billingApiService.getPurchaseCost(merchantId, SKU, quantity);\n }\n\n protected async closeSuccess(): Promise {\n const isEnabled = await firstValueFrom(this.snapshotActionEnabled$);\n if (isEnabled) {\n this.dialogRef.close({ status: 'success', inferMissingData: this.isInferMissingData.value });\n }\n }\n}\n","

{{ title }}

\n\n
\n \n \n \n

\n {{ 'CHECKOUT.ESTIMATED_COST' | translate }}\n \n

\n 0\"\n class=\"item-price-before-discount\"\n matTooltipPosition=\"above\"\n [matTooltip]=\"getDiscountDescription(pricing.price)\"\n >\n {{ pricing.price?.subtotalCost | price: pricing.price?.currency }}\n \n {{ pricing.pricingString }}\n
\n
\n \n {{\n (ssr === 1 ? 'SUBSCRIPTIONS.FREE_REMAINING_CHECKOUT' : 'SUBSCRIPTIONS.FREE_REMAINING_CHECKOUT_MULTI')\n | translate: { freeLeft: ssr }\n }}\n \n
\n \n

\n
\n
\n 0\"\n >\n\n \n
\n \n {{\n 'SUBSCRIPTIONS.MISSING_ACCOUNT_FIELDS.DESCRIPTION'\n | translate\n : {\n accountType:\n ((accountType === 'company'\n ? 'SUBSCRIPTIONS.MISSING_ACCOUNT_FIELDS.COMPANY'\n : 'SUBSCRIPTIONS.MISSING_ACCOUNT_FIELDS.ACCOUNT'\n ) | translate)\n }\n }}\n
    \n
  • {{ 'SUBSCRIPTIONS.MISSING_ACCOUNT_FIELDS.PHONE_NUMBER' | translate }}
  • \n
  • {{ 'SUBSCRIPTIONS.MISSING_ACCOUNT_FIELDS.ADDRESS' | translate }}
  • \n
  • {{ 'SUBSCRIPTIONS.MISSING_ACCOUNT_FIELDS.WEBSITE' | translate }}
  • \n
\n
\n
\n \n {{ 'SUBSCRIPTIONS.CONSENT_INFERENCE_CHECKBOX' | translate }}\n \n
\n
\n
\n\n \n \n \n {{ 'COMMON.ACTION_LABELS.UPGRADE' | translate }}\n open_in_new\n \n \n\n \n

*{{ 'CHECKOUT.STANDARD_FEES_APPLY' | translate }}

\n
\n
\n\n \n
\n
\n
\n\n \n \n {{ successLabel }}\n \n\n","import * as i0 from '@angular/core';\nimport { Injectable } from '@angular/core';\nimport * as i1 from '@angular/common/http';\nimport { HttpHeaders } from '@angular/common/http';\nimport { map } from 'rxjs/operators';\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar CompetitionAnalysis = /*#__PURE__*/function (CompetitionAnalysis) {\n CompetitionAnalysis[CompetitionAnalysis[\"UNSET\"] = 0] = \"UNSET\";\n CompetitionAnalysis[CompetitionAnalysis[\"INDUSTRY_DATA\"] = 1] = \"INDUSTRY_DATA\";\n CompetitionAnalysis[CompetitionAnalysis[\"COMPETITOR_DATA\"] = 2] = \"COMPETITOR_DATA\";\n CompetitionAnalysis[CompetitionAnalysis[\"DIRECT_COMPETITOR_DATA\"] = 3] = \"DIRECT_COMPETITOR_DATA\";\n return CompetitionAnalysis;\n}(CompetitionAnalysis || {});\nvar GlobalConfigEnabledSection = /*#__PURE__*/function (GlobalConfigEnabledSection) {\n GlobalConfigEnabledSection[GlobalConfigEnabledSection[\"REVIEWS\"] = 0] = \"REVIEWS\";\n GlobalConfigEnabledSection[GlobalConfigEnabledSection[\"LISTINGS\"] = 1] = \"LISTINGS\";\n GlobalConfigEnabledSection[GlobalConfigEnabledSection[\"SOCIAL\"] = 2] = \"SOCIAL\";\n GlobalConfigEnabledSection[GlobalConfigEnabledSection[\"WEBSITE\"] = 3] = \"WEBSITE\";\n GlobalConfigEnabledSection[GlobalConfigEnabledSection[\"ADVERTISING\"] = 4] = \"ADVERTISING\";\n GlobalConfigEnabledSection[GlobalConfigEnabledSection[\"SEO\"] = 5] = \"SEO\";\n GlobalConfigEnabledSection[GlobalConfigEnabledSection[\"ECOMMERCE\"] = 6] = \"ECOMMERCE\";\n GlobalConfigEnabledSection[GlobalConfigEnabledSection[\"TECHNOLOGY\"] = 7] = \"TECHNOLOGY\";\n return GlobalConfigEnabledSection;\n}(GlobalConfigEnabledSection || {});\nvar Grade = /*#__PURE__*/function (Grade) {\n Grade[Grade[\"NO_GRADE\"] = 0] = \"NO_GRADE\";\n Grade[Grade[\"A\"] = 1] = \"A\";\n Grade[Grade[\"B\"] = 2] = \"B\";\n Grade[Grade[\"C\"] = 3] = \"C\";\n Grade[Grade[\"D\"] = 4] = \"D\";\n Grade[Grade[\"F\"] = 5] = \"F\";\n return Grade;\n}(Grade || {});\nvar Section = /*#__PURE__*/function (Section) {\n Section[Section[\"REVIEWS\"] = 0] = \"REVIEWS\";\n Section[Section[\"LISTINGS\"] = 1] = \"LISTINGS\";\n Section[Section[\"SOCIAL\"] = 2] = \"SOCIAL\";\n Section[Section[\"WEBSITE\"] = 3] = \"WEBSITE\";\n Section[Section[\"ADVERTISING\"] = 4] = \"ADVERTISING\";\n Section[Section[\"SNAPSHOT\"] = 5] = \"SNAPSHOT\";\n Section[Section[\"SEO\"] = 6] = \"SEO\";\n Section[Section[\"ECOMMERCE\"] = 7] = \"ECOMMERCE\";\n Section[Section[\"TECHNOLOGY\"] = 8] = \"TECHNOLOGY\";\n return Section;\n}(Section || {});\nvar VideoStyle = /*#__PURE__*/function (VideoStyle) {\n VideoStyle[VideoStyle[\"NO_VIDEOS\"] = 0] = \"NO_VIDEOS\";\n VideoStyle[VideoStyle[\"NORTH_AMERICAN_LEGACY\"] = 1] = \"NORTH_AMERICAN_LEGACY\";\n VideoStyle[VideoStyle[\"NORTH_AMERICAN\"] = 2] = \"NORTH_AMERICAN\";\n VideoStyle[VideoStyle[\"AUSTRALIAN\"] = 3] = \"AUSTRALIAN\";\n VideoStyle[VideoStyle[\"UNITED_KINGDOM\"] = 4] = \"UNITED_KINGDOM\";\n VideoStyle[VideoStyle[\"SOUTH_AFRICA\"] = 5] = \"SOUTH_AFRICA\";\n VideoStyle[VideoStyle[\"FRENCH\"] = 6] = \"FRENCH\";\n return VideoStyle;\n}(VideoStyle || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar ListingListingStatus = /*#__PURE__*/function (ListingListingStatus) {\n ListingListingStatus[ListingListingStatus[\"ACCURATE\"] = 0] = \"ACCURATE\";\n ListingListingStatus[ListingListingStatus[\"INACCURATE\"] = 1] = \"INACCURATE\";\n ListingListingStatus[ListingListingStatus[\"NOT_FOUND\"] = 2] = \"NOT_FOUND\";\n return ListingListingStatus;\n}(ListingListingStatus || {});\nvar ListingV2ListingStatus = /*#__PURE__*/function (ListingV2ListingStatus) {\n ListingV2ListingStatus[ListingV2ListingStatus[\"UNSPECIFIED\"] = 0] = \"UNSPECIFIED\";\n ListingV2ListingStatus[ListingV2ListingStatus[\"ACCURATE\"] = 1] = \"ACCURATE\";\n ListingV2ListingStatus[ListingV2ListingStatus[\"INACCURATE\"] = 2] = \"INACCURATE\";\n ListingV2ListingStatus[ListingV2ListingStatus[\"NOT_FOUND\"] = 3] = \"NOT_FOUND\";\n return ListingV2ListingStatus;\n}(ListingV2ListingStatus || {});\nvar DataProviderAccuracyStatus = /*#__PURE__*/function (DataProviderAccuracyStatus) {\n DataProviderAccuracyStatus[DataProviderAccuracyStatus[\"ACCURATE\"] = 0] = \"ACCURATE\";\n DataProviderAccuracyStatus[DataProviderAccuracyStatus[\"NOT_FOUND\"] = 1] = \"NOT_FOUND\";\n DataProviderAccuracyStatus[DataProviderAccuracyStatus[\"CONTAINS_ERRORS\"] = 2] = \"CONTAINS_ERRORS\";\n return DataProviderAccuracyStatus;\n}(DataProviderAccuracyStatus || {});\nvar DataProviderAccuracyStatusV2 = /*#__PURE__*/function (DataProviderAccuracyStatusV2) {\n DataProviderAccuracyStatusV2[DataProviderAccuracyStatusV2[\"UNSPECIFIED_V2\"] = 0] = \"UNSPECIFIED_V2\";\n DataProviderAccuracyStatusV2[DataProviderAccuracyStatusV2[\"ACCURATE_V2\"] = 1] = \"ACCURATE_V2\";\n DataProviderAccuracyStatusV2[DataProviderAccuracyStatusV2[\"NOT_FOUND_V2\"] = 2] = \"NOT_FOUND_V2\";\n DataProviderAccuracyStatusV2[DataProviderAccuracyStatusV2[\"CONTAINS_ERRORS_V2\"] = 3] = \"CONTAINS_ERRORS_V2\";\n return DataProviderAccuracyStatusV2;\n}(DataProviderAccuracyStatusV2 || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar GMBClaimStatus = /*#__PURE__*/function (GMBClaimStatus) {\n GMBClaimStatus[GMBClaimStatus[\"GMB_CLAIM_STATUS_INVALID\"] = 0] = \"GMB_CLAIM_STATUS_INVALID\";\n GMBClaimStatus[GMBClaimStatus[\"GMB_CLAIM_STATUS_UNKNOWN\"] = 1] = \"GMB_CLAIM_STATUS_UNKNOWN\";\n GMBClaimStatus[GMBClaimStatus[\"GMB_CLAIM_STATUS_CLAIMED\"] = 2] = \"GMB_CLAIM_STATUS_CLAIMED\";\n GMBClaimStatus[GMBClaimStatus[\"GMB_CLAIM_STATUS_UNCLAIMED\"] = 3] = \"GMB_CLAIM_STATUS_UNCLAIMED\";\n return GMBClaimStatus;\n}(GMBClaimStatus || {});\nvar Status = /*#__PURE__*/function (Status) {\n Status[Status[\"STATUS_UNDEFINED\"] = 0] = \"STATUS_UNDEFINED\";\n Status[Status[\"STATUS_DOES_NOT_EXIST\"] = 1] = \"STATUS_DOES_NOT_EXIST\";\n Status[Status[\"STATUS_IN_PROGRESS\"] = 2] = \"STATUS_IN_PROGRESS\";\n Status[Status[\"STATUS_FINISHED\"] = 3] = \"STATUS_FINISHED\";\n return Status;\n}(Status || {});\nvar Vicinity = /*#__PURE__*/function (Vicinity) {\n Vicinity[Vicinity[\"VICINITY_UNDEFINED\"] = 0] = \"VICINITY_UNDEFINED\";\n Vicinity[Vicinity[\"VICINITY_CITY\"] = 1] = \"VICINITY_CITY\";\n Vicinity[Vicinity[\"VICINITY_NEARME\"] = 2] = \"VICINITY_NEARME\";\n Vicinity[Vicinity[\"VICINITY_NEARME_NORTH\"] = 3] = \"VICINITY_NEARME_NORTH\";\n Vicinity[Vicinity[\"VICINITY_NEARME_NORTHEAST\"] = 4] = \"VICINITY_NEARME_NORTHEAST\";\n Vicinity[Vicinity[\"VICINITY_NEARME_EAST\"] = 5] = \"VICINITY_NEARME_EAST\";\n Vicinity[Vicinity[\"VICINITY_NEARME_SOUTHEAST\"] = 6] = \"VICINITY_NEARME_SOUTHEAST\";\n Vicinity[Vicinity[\"VICINITY_NEARME_SOUTH\"] = 7] = \"VICINITY_NEARME_SOUTH\";\n Vicinity[Vicinity[\"VICINITY_NEARME_SOUTHWEST\"] = 8] = \"VICINITY_NEARME_SOUTHWEST\";\n Vicinity[Vicinity[\"VICINITY_NEARME_WEST\"] = 9] = \"VICINITY_NEARME_WEST\";\n Vicinity[Vicinity[\"VICINITY_NEARME_NORTHWEST\"] = 10] = \"VICINITY_NEARME_NORTHWEST\";\n return Vicinity;\n}(Vicinity || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar InstagramDataInstagramDataStatus = /*#__PURE__*/function (InstagramDataInstagramDataStatus) {\n InstagramDataInstagramDataStatus[InstagramDataInstagramDataStatus[\"INSTAGRAM_DATA_INSTAGRAM_DATA_STATUS_IN_PROGRESS\"] = 0] = \"INSTAGRAM_DATA_INSTAGRAM_DATA_STATUS_IN_PROGRESS\";\n InstagramDataInstagramDataStatus[InstagramDataInstagramDataStatus[\"INSTAGRAM_DATA_INSTAGRAM_DATA_STATUS_SUCCESS\"] = 1] = \"INSTAGRAM_DATA_INSTAGRAM_DATA_STATUS_SUCCESS\";\n InstagramDataInstagramDataStatus[InstagramDataInstagramDataStatus[\"INSTAGRAM_DATA_INSTAGRAM_DATA_STATUS_INVALID_USER_ID\"] = 2] = \"INSTAGRAM_DATA_INSTAGRAM_DATA_STATUS_INVALID_USER_ID\";\n InstagramDataInstagramDataStatus[InstagramDataInstagramDataStatus[\"INSTAGRAM_DATA_INSTAGRAM_DATA_STATUS_UNKNOWN_ERROR\"] = 3] = \"INSTAGRAM_DATA_INSTAGRAM_DATA_STATUS_UNKNOWN_ERROR\";\n return InstagramDataInstagramDataStatus;\n}(InstagramDataInstagramDataStatus || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar SSLSummaryStatus = /*#__PURE__*/function (SSLSummaryStatus) {\n SSLSummaryStatus[SSLSummaryStatus[\"SSL_SUMMARY_STATUS_UNDETERMINED\"] = 0] = \"SSL_SUMMARY_STATUS_UNDETERMINED\";\n SSLSummaryStatus[SSLSummaryStatus[\"SSL_SUMMARY_STATUS_INVALID\"] = 1] = \"SSL_SUMMARY_STATUS_INVALID\";\n SSLSummaryStatus[SSLSummaryStatus[\"SSL_SUMMARY_STATUS_VALID\"] = 2] = \"SSL_SUMMARY_STATUS_VALID\";\n return SSLSummaryStatus;\n}(SSLSummaryStatus || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar Role = /*#__PURE__*/function (Role) {\n Role[Role[\"ROLE_UNSET\"] = 0] = \"ROLE_UNSET\";\n Role[Role[\"ROLE_SYSTEM\"] = 1] = \"ROLE_SYSTEM\";\n Role[Role[\"ROLE_USER\"] = 2] = \"ROLE_USER\";\n Role[Role[\"ROLE_ASSISTANT\"] = 3] = \"ROLE_ASSISTANT\";\n return Role;\n}(Role || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar AppDomain = /*#__PURE__*/function (AppDomain) {\n AppDomain[AppDomain[\"APP_DOMAIN_INVALID\"] = 0] = \"APP_DOMAIN_INVALID\";\n AppDomain[AppDomain[\"APP_DOMAIN_VBC\"] = 1] = \"APP_DOMAIN_VBC\";\n AppDomain[AppDomain[\"APP_DOMAIN_MS\"] = 2] = \"APP_DOMAIN_MS\";\n AppDomain[AppDomain[\"APP_DOMAIN_SM\"] = 3] = \"APP_DOMAIN_SM\";\n AppDomain[AppDomain[\"APP_DOMAIN_ST\"] = 4] = \"APP_DOMAIN_ST\";\n AppDomain[AppDomain[\"APP_DOMAIN_RM\"] = 5] = \"APP_DOMAIN_RM\";\n return AppDomain;\n}(AppDomain || {});\n// *********************************\n\nfunction enumStringToValue$k(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass SalesPerson {\n static fromProto(proto) {\n let m = new SalesPerson();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.salesPersonId !== 'undefined') {\n toReturn['salesPersonId'] = this.salesPersonId;\n }\n if (typeof this.firstName !== 'undefined') {\n toReturn['firstName'] = this.firstName;\n }\n if (typeof this.lastName !== 'undefined') {\n toReturn['lastName'] = this.lastName;\n }\n if (typeof this.email !== 'undefined') {\n toReturn['email'] = this.email;\n }\n if (typeof this.phoneNumbers !== 'undefined') {\n toReturn['phoneNumbers'] = this.phoneNumbers;\n }\n if (typeof this.photoUrl !== 'undefined') {\n toReturn['photoUrl'] = this.photoUrl;\n }\n if (typeof this.jobTitle !== 'undefined') {\n toReturn['jobTitle'] = this.jobTitle;\n }\n if (typeof this.coverPageTitle !== 'undefined') {\n toReturn['coverPageTitle'] = this.coverPageTitle;\n }\n if (typeof this.country !== 'undefined') {\n toReturn['country'] = this.country;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$j(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Competitor {\n static fromProto(proto) {\n let m = new Competitor();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.name !== 'undefined') {\n toReturn['name'] = this.name;\n }\n if (typeof this.website !== 'undefined') {\n toReturn['website'] = this.website;\n }\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass Contact {\n static fromProto(proto) {\n let m = new Contact();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.firstName !== 'undefined') {\n toReturn['firstName'] = this.firstName;\n }\n if (typeof this.lastName !== 'undefined') {\n toReturn['lastName'] = this.lastName;\n }\n if (typeof this.email !== 'undefined') {\n toReturn['email'] = this.email;\n }\n if (typeof this.fullName !== 'undefined') {\n toReturn['fullName'] = this.fullName;\n }\n return toReturn;\n }\n}\nclass Email {\n static fromProto(proto) {\n let m = new Email();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.body !== 'undefined') {\n toReturn['body'] = this.body;\n }\n if (typeof this.subject !== 'undefined') {\n toReturn['subject'] = this.subject;\n }\n if (typeof this.greeting !== 'undefined') {\n toReturn['greeting'] = this.greeting;\n }\n if (typeof this.closing !== 'undefined') {\n toReturn['closing'] = this.closing;\n }\n if (typeof this.buttonText !== 'undefined') {\n toReturn['buttonText'] = this.buttonText;\n }\n return toReturn;\n }\n}\nclass GlobalConfig {\n static fromProto(proto) {\n let m = new GlobalConfig();\n m = Object.assign(m, proto);\n if (proto.videoStyle) {\n m.videoStyle = enumStringToValue$j(VideoStyle, proto.videoStyle);\n }\n if (proto.enabledSections) {\n m.enabledSections = proto.enabledSections.map(v => enumStringToValue$j(GlobalConfigEnabledSection, v));\n }\n if (proto.competitors) {\n m.competitors = proto.competitors.map(Competitor.fromProto);\n }\n if (proto.competitionAnalysis) {\n m.competitionAnalysis = enumStringToValue$j(CompetitionAnalysis, proto.competitionAnalysis);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.hideGrades !== 'undefined') {\n toReturn['hideGrades'] = this.hideGrades;\n }\n if (typeof this.videoStyle !== 'undefined') {\n toReturn['videoStyle'] = this.videoStyle;\n }\n if (typeof this.hideImages !== 'undefined') {\n toReturn['hideImages'] = this.hideImages;\n }\n if (typeof this.enabledSections !== 'undefined') {\n toReturn['enabledSections'] = this.enabledSections;\n }\n if (typeof this.locale !== 'undefined') {\n toReturn['locale'] = this.locale;\n }\n if (typeof this.competitors !== 'undefined' && this.competitors !== null) {\n toReturn['competitors'] = 'toApiJson' in this.competitors ? this.competitors.toApiJson() : this.competitors;\n }\n if (typeof this.hideSubsectionGrades !== 'undefined') {\n toReturn['hideSubsectionGrades'] = this.hideSubsectionGrades;\n }\n if (typeof this.hideScheduleMeetingOption !== 'undefined') {\n toReturn['hideScheduleMeetingOption'] = this.hideScheduleMeetingOption;\n }\n if (typeof this.competitionAnalysis !== 'undefined') {\n toReturn['competitionAnalysis'] = this.competitionAnalysis;\n }\n return toReturn;\n }\n}\nclass IndustryPercentiles {\n static fromProto(proto) {\n let m = new IndustryPercentiles();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.fortieth !== 'undefined') {\n toReturn['fortieth'] = this.fortieth;\n }\n if (typeof this.fiftieth !== 'undefined') {\n toReturn['fiftieth'] = this.fiftieth;\n }\n if (typeof this.fiftyFifth !== 'undefined') {\n toReturn['fiftyFifth'] = this.fiftyFifth;\n }\n if (typeof this.seventyFifth !== 'undefined') {\n toReturn['seventyFifth'] = this.seventyFifth;\n }\n if (typeof this.ninetieth !== 'undefined') {\n toReturn['ninetieth'] = this.ninetieth;\n }\n if (typeof this.ninetyFifth !== 'undefined') {\n toReturn['ninetyFifth'] = this.ninetyFifth;\n }\n return toReturn;\n }\n}\nclass InferredFields {\n static fromProto(proto) {\n let m = new InferredFields();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.website !== 'undefined') {\n toReturn['website'] = this.website;\n }\n return toReturn;\n }\n}\nclass LanguageConfig {\n static fromProto(proto) {\n let m = new LanguageConfig();\n m = Object.assign(m, proto);\n if (proto.videoStyle) {\n m.videoStyle = enumStringToValue$j(VideoStyle, proto.videoStyle);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.locale !== 'undefined') {\n toReturn['locale'] = this.locale;\n }\n if (typeof this.videoStyle !== 'undefined') {\n toReturn['videoStyle'] = this.videoStyle;\n }\n return toReturn;\n }\n}\nclass SectionContent {\n static fromProto(proto) {\n let m = new SectionContent();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.messageId !== 'undefined') {\n toReturn['messageId'] = this.messageId;\n }\n if (typeof this.videoId !== 'undefined') {\n toReturn['videoId'] = this.videoId;\n }\n if (typeof this.footerMessageId !== 'undefined') {\n toReturn['footerMessageId'] = this.footerMessageId;\n }\n return toReturn;\n }\n}\nclass Snapshot {\n static fromProto(proto) {\n let m = new Snapshot();\n m = Object.assign(m, proto);\n if (proto.config) {\n m.config = GlobalConfig.fromProto(proto.config);\n }\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.expired) {\n m.expired = new Date(proto.expired);\n }\n if (proto.data) {\n m.data = SnapshotData.fromProto(proto.data);\n }\n if (proto.salesPerson) {\n m.salesPerson = SalesPerson.fromProto(proto.salesPerson);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.config !== 'undefined' && this.config !== null) {\n toReturn['config'] = 'toApiJson' in this.config ? this.config.toApiJson() : this.config;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.expired !== 'undefined' && this.expired !== null) {\n toReturn['expired'] = 'toApiJson' in this.expired ? this.expired.toApiJson() : this.expired;\n }\n if (typeof this.data !== 'undefined' && this.data !== null) {\n toReturn['data'] = 'toApiJson' in this.data ? this.data.toApiJson() : this.data;\n }\n if (typeof this.salesPerson !== 'undefined' && this.salesPerson !== null) {\n toReturn['salesPerson'] = 'toApiJson' in this.salesPerson ? this.salesPerson.toApiJson() : this.salesPerson;\n }\n if (typeof this.createdBy !== 'undefined') {\n toReturn['createdBy'] = this.createdBy;\n }\n if (typeof this.isPartnerConfig !== 'undefined') {\n toReturn['isPartnerConfig'] = this.isPartnerConfig;\n }\n return toReturn;\n }\n}\nclass SnapshotData {\n static fromProto(proto) {\n let m = new SnapshotData();\n m = Object.assign(m, proto);\n if (proto.inferredFields) {\n m.inferredFields = InferredFields.fromProto(proto.inferredFields);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.companyName !== 'undefined') {\n toReturn['companyName'] = this.companyName;\n }\n if (typeof this.address !== 'undefined') {\n toReturn['address'] = this.address;\n }\n if (typeof this.city !== 'undefined') {\n toReturn['city'] = this.city;\n }\n if (typeof this.state !== 'undefined') {\n toReturn['state'] = this.state;\n }\n if (typeof this.zip !== 'undefined') {\n toReturn['zip'] = this.zip;\n }\n if (typeof this.country !== 'undefined') {\n toReturn['country'] = this.country;\n }\n if (typeof this.phoneNumbers !== 'undefined') {\n toReturn['phoneNumbers'] = this.phoneNumbers;\n }\n if (typeof this.website !== 'undefined') {\n toReturn['website'] = this.website;\n }\n if (typeof this.taxonomyId !== 'undefined') {\n toReturn['taxonomyId'] = this.taxonomyId;\n }\n if (typeof this.imageUrls !== 'undefined') {\n toReturn['imageUrls'] = this.imageUrls;\n }\n if (typeof this.taxonomyName !== 'undefined') {\n toReturn['taxonomyName'] = this.taxonomyName;\n }\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n if (typeof this.marketId !== 'undefined') {\n toReturn['marketId'] = this.marketId;\n }\n if (typeof this.facebookUrl !== 'undefined') {\n toReturn['facebookUrl'] = this.facebookUrl;\n }\n if (typeof this.twitterUrl !== 'undefined') {\n toReturn['twitterUrl'] = this.twitterUrl;\n }\n if (typeof this.instagramUrl !== 'undefined') {\n toReturn['instagramUrl'] = this.instagramUrl;\n }\n if (typeof this.serviceAreaBusiness !== 'undefined') {\n toReturn['serviceAreaBusiness'] = this.serviceAreaBusiness;\n }\n if (typeof this.inferredFields !== 'undefined' && this.inferredFields !== null) {\n toReturn['inferredFields'] = 'toApiJson' in this.inferredFields ? this.inferredFields.toApiJson() : this.inferredFields;\n }\n if (typeof this.vcategoryId !== 'undefined') {\n toReturn['vcategoryId'] = this.vcategoryId;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$i(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass AdvertisingConfig {\n static fromProto(proto) {\n let m = new AdvertisingConfig();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.hideContent !== 'undefined') {\n toReturn['hideContent'] = this.hideContent;\n }\n if (typeof this.customizedMessage !== 'undefined') {\n toReturn['customizedMessage'] = this.customizedMessage;\n }\n if (typeof this.hideSemSection !== 'undefined') {\n toReturn['hideSemSection'] = this.hideSemSection;\n }\n if (typeof this.hideSemPayPerClick !== 'undefined') {\n toReturn['hideSemPayPerClick'] = this.hideSemPayPerClick;\n }\n if (typeof this.hideSemRetargeting !== 'undefined') {\n toReturn['hideSemRetargeting'] = this.hideSemRetargeting;\n }\n if (typeof this.hideSemContent !== 'undefined') {\n toReturn['hideSemContent'] = this.hideSemContent;\n }\n if (typeof this.customizedSemMessage !== 'undefined') {\n toReturn['customizedSemMessage'] = this.customizedSemMessage;\n }\n if (typeof this.hideAdwordsSection !== 'undefined') {\n toReturn['hideAdwordsSection'] = this.hideAdwordsSection;\n }\n if (typeof this.hideFooter !== 'undefined') {\n toReturn['hideFooter'] = this.hideFooter;\n }\n if (typeof this.customizedFooterMessage !== 'undefined') {\n toReturn['customizedFooterMessage'] = this.customizedFooterMessage;\n }\n if (typeof this.customizedFooterCtaLabel !== 'undefined') {\n toReturn['customizedFooterCtaLabel'] = this.customizedFooterCtaLabel;\n }\n if (typeof this.customizedFooterCtaTargetUrl !== 'undefined') {\n toReturn['customizedFooterCtaTargetUrl'] = this.customizedFooterCtaTargetUrl;\n }\n if (typeof this.customizedFooterCtaTargetProduct !== 'undefined') {\n toReturn['customizedFooterCtaTargetProduct'] = this.customizedFooterCtaTargetProduct;\n }\n return toReturn;\n }\n}\nclass AdvertisingData {\n static fromProto(proto) {\n let m = new AdvertisingData();\n m = Object.assign(m, proto);\n if (proto.adwordsData) {\n m.adwordsData = AdwordsData.fromProto(proto.adwordsData);\n }\n if (proto.payPerClickData) {\n m.payPerClickData = PayPerClickData.fromProto(proto.payPerClickData);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.adwordsData !== 'undefined' && this.adwordsData !== null) {\n toReturn['adwordsData'] = 'toApiJson' in this.adwordsData ? this.adwordsData.toApiJson() : this.adwordsData;\n }\n if (typeof this.payPerClickData !== 'undefined' && this.payPerClickData !== null) {\n toReturn['payPerClickData'] = 'toApiJson' in this.payPerClickData ? this.payPerClickData.toApiJson() : this.payPerClickData;\n }\n if (typeof this.isRetargeting !== 'undefined') {\n toReturn['isRetargeting'] = this.isRetargeting;\n }\n if (typeof this.website !== 'undefined') {\n toReturn['website'] = this.website;\n }\n if (typeof this.zip !== 'undefined') {\n toReturn['zip'] = this.zip;\n }\n return toReturn;\n }\n}\nclass AdvertisingSection {\n static fromProto(proto) {\n let m = new AdvertisingSection();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$i(Grade, proto.grade);\n }\n if (proto.content) {\n m.content = SectionContent.fromProto(proto.content);\n }\n if (proto.data) {\n m.data = AdvertisingData.fromProto(proto.data);\n }\n if (proto.config) {\n m.config = AdvertisingConfig.fromProto(proto.config);\n }\n if (proto.semContent) {\n m.semContent = SectionContent.fromProto(proto.semContent);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.content !== 'undefined' && this.content !== null) {\n toReturn['content'] = 'toApiJson' in this.content ? this.content.toApiJson() : this.content;\n }\n if (typeof this.data !== 'undefined' && this.data !== null) {\n toReturn['data'] = 'toApiJson' in this.data ? this.data.toApiJson() : this.data;\n }\n if (typeof this.config !== 'undefined' && this.config !== null) {\n toReturn['config'] = 'toApiJson' in this.config ? this.config.toApiJson() : this.config;\n }\n if (typeof this.semContent !== 'undefined' && this.semContent !== null) {\n toReturn['semContent'] = 'toApiJson' in this.semContent ? this.semContent.toApiJson() : this.semContent;\n }\n return toReturn;\n }\n}\nclass AdwordsData {\n static fromProto(proto) {\n let m = new AdwordsData();\n m = Object.assign(m, proto);\n if (proto.impressions) {\n m.impressions = proto.impressions.map(Impressions.fromProto);\n }\n if (proto.clicks) {\n m.clicks = proto.clicks.map(Clicks.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.impressions !== 'undefined' && this.impressions !== null) {\n toReturn['impressions'] = 'toApiJson' in this.impressions ? this.impressions.toApiJson() : this.impressions;\n }\n if (typeof this.clicks !== 'undefined' && this.clicks !== null) {\n toReturn['clicks'] = 'toApiJson' in this.clicks ? this.clicks.toApiJson() : this.clicks;\n }\n if (typeof this.stillWorking !== 'undefined') {\n toReturn['stillWorking'] = this.stillWorking;\n }\n return toReturn;\n }\n}\nclass Clicks {\n static fromProto(proto) {\n let m = new Clicks();\n m = Object.assign(m, proto);\n if (proto.clicksPerMonth) {\n m.clicksPerMonth = FloatRange.fromProto(proto.clicksPerMonth);\n }\n if (proto.averageCostPerClick) {\n m.averageCostPerClick = IntRange.fromProto(proto.averageCostPerClick);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.keyword !== 'undefined') {\n toReturn['keyword'] = this.keyword;\n }\n if (typeof this.clicksPerMonth !== 'undefined' && this.clicksPerMonth !== null) {\n toReturn['clicksPerMonth'] = 'toApiJson' in this.clicksPerMonth ? this.clicksPerMonth.toApiJson() : this.clicksPerMonth;\n }\n if (typeof this.averageCostPerClick !== 'undefined' && this.averageCostPerClick !== null) {\n toReturn['averageCostPerClick'] = 'toApiJson' in this.averageCostPerClick ? this.averageCostPerClick.toApiJson() : this.averageCostPerClick;\n }\n return toReturn;\n }\n}\nclass DomainMetrics {\n static fromProto(proto) {\n let m = new DomainMetrics();\n m = Object.assign(m, proto);\n if (proto.averageAdPosition) {\n m.averageAdPosition = parseInt(proto.averageAdPosition, 10);\n }\n if (proto.numberOfAdvertisers) {\n m.numberOfAdvertisers = parseInt(proto.numberOfAdvertisers, 10);\n }\n if (proto.numberOfPaidKeywords) {\n m.numberOfPaidKeywords = parseInt(proto.numberOfPaidKeywords, 10);\n }\n if (proto.paidClicksPerMonth) {\n m.paidClicksPerMonth = parseInt(proto.paidClicksPerMonth, 10);\n }\n if (proto.dailyAdwordsBudget) {\n m.dailyAdwordsBudget = parseInt(proto.dailyAdwordsBudget, 10);\n }\n if (proto.monthlyAdwordsBudget) {\n m.monthlyAdwordsBudget = parseInt(proto.monthlyAdwordsBudget, 10);\n }\n if (proto.paidDomainRanking) {\n m.paidDomainRanking = parseInt(proto.paidDomainRanking, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.domainName !== 'undefined') {\n toReturn['domainName'] = this.domainName;\n }\n if (typeof this.averageAdPosition !== 'undefined') {\n toReturn['averageAdPosition'] = this.averageAdPosition;\n }\n if (typeof this.numberOfAdvertisers !== 'undefined') {\n toReturn['numberOfAdvertisers'] = this.numberOfAdvertisers;\n }\n if (typeof this.numberOfPaidKeywords !== 'undefined') {\n toReturn['numberOfPaidKeywords'] = this.numberOfPaidKeywords;\n }\n if (typeof this.paidClicksPerMonth !== 'undefined') {\n toReturn['paidClicksPerMonth'] = this.paidClicksPerMonth;\n }\n if (typeof this.dailyAdwordsBudget !== 'undefined') {\n toReturn['dailyAdwordsBudget'] = this.dailyAdwordsBudget;\n }\n if (typeof this.monthlyAdwordsBudget !== 'undefined') {\n toReturn['monthlyAdwordsBudget'] = this.monthlyAdwordsBudget;\n }\n if (typeof this.paidDomainRanking !== 'undefined') {\n toReturn['paidDomainRanking'] = this.paidDomainRanking;\n }\n if (typeof this.overlap !== 'undefined') {\n toReturn['overlap'] = this.overlap;\n }\n return toReturn;\n }\n}\nclass FloatRange {\n static fromProto(proto) {\n let m = new FloatRange();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.minimum !== 'undefined') {\n toReturn['minimum'] = this.minimum;\n }\n if (typeof this.maximum !== 'undefined') {\n toReturn['maximum'] = this.maximum;\n }\n return toReturn;\n }\n}\nclass Impressions {\n static fromProto(proto) {\n let m = new Impressions();\n m = Object.assign(m, proto);\n if (proto.impressionsPerMonth) {\n m.impressionsPerMonth = FloatRange.fromProto(proto.impressionsPerMonth);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.keyword !== 'undefined') {\n toReturn['keyword'] = this.keyword;\n }\n if (typeof this.impressionsPerMonth !== 'undefined' && this.impressionsPerMonth !== null) {\n toReturn['impressionsPerMonth'] = 'toApiJson' in this.impressionsPerMonth ? this.impressionsPerMonth.toApiJson() : this.impressionsPerMonth;\n }\n return toReturn;\n }\n}\nclass IntRange {\n static fromProto(proto) {\n let m = new IntRange();\n m = Object.assign(m, proto);\n if (proto.minimum) {\n m.minimum = parseInt(proto.minimum, 10);\n }\n if (proto.maximum) {\n m.maximum = parseInt(proto.maximum, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.minimum !== 'undefined') {\n toReturn['minimum'] = this.minimum;\n }\n if (typeof this.maximum !== 'undefined') {\n toReturn['maximum'] = this.maximum;\n }\n return toReturn;\n }\n}\nclass PayPerClickData {\n static fromProto(proto) {\n let m = new PayPerClickData();\n m = Object.assign(m, proto);\n if (proto.business) {\n m.business = DomainMetrics.fromProto(proto.business);\n }\n if (proto.competitors) {\n m.competitors = proto.competitors.map(DomainMetrics.fromProto);\n }\n if (proto.grade) {\n m.grade = enumStringToValue$i(Grade, proto.grade);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.business !== 'undefined' && this.business !== null) {\n toReturn['business'] = 'toApiJson' in this.business ? this.business.toApiJson() : this.business;\n }\n if (typeof this.competitors !== 'undefined' && this.competitors !== null) {\n toReturn['competitors'] = 'toApiJson' in this.competitors ? this.competitors.toApiJson() : this.competitors;\n }\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$h(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Configuration {\n static fromProto(proto) {\n let m = new Configuration();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.showPpc !== 'undefined') {\n toReturn['showPpc'] = this.showPpc;\n }\n if (typeof this.showRemarketing !== 'undefined') {\n toReturn['showRemarketing'] = this.showRemarketing;\n }\n if (typeof this.useCustomSnapshotHeader !== 'undefined') {\n toReturn['useCustomSnapshotHeader'] = this.useCustomSnapshotHeader;\n }\n if (typeof this.customSnapshotHeader !== 'undefined') {\n toReturn['customSnapshotHeader'] = this.customSnapshotHeader;\n }\n if (typeof this.useCustomSnapshotFooter !== 'undefined') {\n toReturn['useCustomSnapshotFooter'] = this.useCustomSnapshotFooter;\n }\n if (typeof this.customSnapshotFooter !== 'undefined') {\n toReturn['customSnapshotFooter'] = this.customSnapshotFooter;\n }\n if (typeof this.useCustomSnapshotPopupMessage !== 'undefined') {\n toReturn['useCustomSnapshotPopupMessage'] = this.useCustomSnapshotPopupMessage;\n }\n if (typeof this.customSnapshotPopupMessage !== 'undefined') {\n toReturn['customSnapshotPopupMessage'] = this.customSnapshotPopupMessage;\n }\n if (typeof this.allowClaimUser !== 'undefined') {\n toReturn['allowClaimUser'] = this.allowClaimUser;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$g(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Current {\n static fromProto(proto) {\n let m = new Current();\n m = Object.assign(m, proto);\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.expired) {\n m.expired = new Date(proto.expired);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.expired !== 'undefined' && this.expired !== null) {\n toReturn['expired'] = 'toApiJson' in this.expired ? this.expired.toApiJson() : this.expired;\n }\n if (typeof this.path !== 'undefined') {\n toReturn['path'] = this.path;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$f(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass FieldMask {\n static fromProto(proto) {\n let m = new FieldMask();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.paths !== 'undefined') {\n toReturn['paths'] = this.paths;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$e(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass AvailableListingSource {\n static fromProto(proto) {\n let m = new AvailableListingSource();\n m = Object.assign(m, proto);\n if (proto.sourceId) {\n m.sourceId = parseInt(proto.sourceId, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.sourceId !== 'undefined') {\n toReturn['sourceId'] = this.sourceId;\n }\n if (typeof this.sourceName !== 'undefined') {\n toReturn['sourceName'] = this.sourceName;\n }\n if (typeof this.sourceIconUrl !== 'undefined') {\n toReturn['sourceIconUrl'] = this.sourceIconUrl;\n }\n if (typeof this.ignored !== 'undefined') {\n toReturn['ignored'] = this.ignored;\n }\n return toReturn;\n }\n}\nclass ListingPresenceCompetitor {\n static fromProto(proto) {\n let m = new ListingPresenceCompetitor();\n m = Object.assign(m, proto);\n if (proto.foundCount) {\n m.foundCount = parseInt(proto.foundCount, 10);\n }\n if (proto.updated) {\n m.updated = new Date(proto.updated);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.companyName !== 'undefined') {\n toReturn['companyName'] = this.companyName;\n }\n if (typeof this.foundCount !== 'undefined') {\n toReturn['foundCount'] = this.foundCount;\n }\n if (typeof this.updated !== 'undefined' && this.updated !== null) {\n toReturn['updated'] = 'toApiJson' in this.updated ? this.updated.toApiJson() : this.updated;\n }\n return toReturn;\n }\n}\nclass ListingAccuracyCompetitor {\n static fromProto(proto) {\n let m = new ListingAccuracyCompetitor();\n m = Object.assign(m, proto);\n if (proto.updated) {\n m.updated = new Date(proto.updated);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.companyName !== 'undefined') {\n toReturn['companyName'] = this.companyName;\n }\n if (typeof this.accurateListings !== 'undefined') {\n toReturn['accurateListings'] = this.accurateListings;\n }\n if (typeof this.updated !== 'undefined' && this.updated !== null) {\n toReturn['updated'] = 'toApiJson' in this.updated ? this.updated.toApiJson() : this.updated;\n }\n return toReturn;\n }\n}\nclass DataProviderAccuracy {\n static fromProto(proto) {\n let m = new DataProviderAccuracy();\n m = Object.assign(m, proto);\n if (proto.neustarAccurate) {\n m.neustarAccurate = enumStringToValue$e(DataProviderAccuracyStatus, proto.neustarAccurate);\n }\n if (proto.factualAccurate) {\n m.factualAccurate = enumStringToValue$e(DataProviderAccuracyStatus, proto.factualAccurate);\n }\n if (proto.acxiomAccurate) {\n m.acxiomAccurate = enumStringToValue$e(DataProviderAccuracyStatus, proto.acxiomAccurate);\n }\n if (proto.infogroupAccurate) {\n m.infogroupAccurate = enumStringToValue$e(DataProviderAccuracyStatus, proto.infogroupAccurate);\n }\n if (proto.neustarStatus) {\n m.neustarStatus = enumStringToValue$e(DataProviderAccuracyStatusV2, proto.neustarStatus);\n }\n if (proto.factualStatus) {\n m.factualStatus = enumStringToValue$e(DataProviderAccuracyStatusV2, proto.factualStatus);\n }\n if (proto.infogroupStatus) {\n m.infogroupStatus = enumStringToValue$e(DataProviderAccuracyStatusV2, proto.infogroupStatus);\n }\n if (proto.foursquareStatus) {\n m.foursquareStatus = enumStringToValue$e(DataProviderAccuracyStatusV2, proto.foursquareStatus);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.neustarAccurate !== 'undefined') {\n toReturn['neustarAccurate'] = this.neustarAccurate;\n }\n if (typeof this.factualAccurate !== 'undefined') {\n toReturn['factualAccurate'] = this.factualAccurate;\n }\n if (typeof this.acxiomAccurate !== 'undefined') {\n toReturn['acxiomAccurate'] = this.acxiomAccurate;\n }\n if (typeof this.infogroupAccurate !== 'undefined') {\n toReturn['infogroupAccurate'] = this.infogroupAccurate;\n }\n if (typeof this.neustarStatus !== 'undefined') {\n toReturn['neustarStatus'] = this.neustarStatus;\n }\n if (typeof this.factualStatus !== 'undefined') {\n toReturn['factualStatus'] = this.factualStatus;\n }\n if (typeof this.infogroupStatus !== 'undefined') {\n toReturn['infogroupStatus'] = this.infogroupStatus;\n }\n if (typeof this.foursquareStatus !== 'undefined') {\n toReturn['foursquareStatus'] = this.foursquareStatus;\n }\n return toReturn;\n }\n}\nclass InaccurateData {\n static fromProto(proto) {\n let m = new InaccurateData();\n m = Object.assign(m, proto);\n if (proto.inaccurateCount) {\n m.inaccurateCount = parseInt(proto.inaccurateCount, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.inaccurateCount !== 'undefined') {\n toReturn['inaccurateCount'] = this.inaccurateCount;\n }\n if (typeof this.exampleData !== 'undefined') {\n toReturn['exampleData'] = this.exampleData;\n }\n if (typeof this.sourceName !== 'undefined') {\n toReturn['sourceName'] = this.sourceName;\n }\n if (typeof this.exampleListingUrl !== 'undefined') {\n toReturn['exampleListingUrl'] = this.exampleListingUrl;\n }\n return toReturn;\n }\n}\nclass Listing {\n static fromProto(proto) {\n let m = new Listing();\n m = Object.assign(m, proto);\n if (proto.reviewCount) {\n m.reviewCount = parseInt(proto.reviewCount, 10);\n }\n if (proto.status) {\n m.status = enumStringToValue$e(ListingListingStatus, proto.status);\n }\n if (proto.sourceId) {\n m.sourceId = parseInt(proto.sourceId, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.companyName !== 'undefined') {\n toReturn['companyName'] = this.companyName;\n }\n if (typeof this.address !== 'undefined') {\n toReturn['address'] = this.address;\n }\n if (typeof this.city !== 'undefined') {\n toReturn['city'] = this.city;\n }\n if (typeof this.state !== 'undefined') {\n toReturn['state'] = this.state;\n }\n if (typeof this.country !== 'undefined') {\n toReturn['country'] = this.country;\n }\n if (typeof this.zipCode !== 'undefined') {\n toReturn['zipCode'] = this.zipCode;\n }\n if (typeof this.website !== 'undefined') {\n toReturn['website'] = this.website;\n }\n if (typeof this.phone !== 'undefined') {\n toReturn['phone'] = this.phone;\n }\n if (typeof this.url !== 'undefined') {\n toReturn['url'] = this.url;\n }\n if (typeof this.externalId !== 'undefined') {\n toReturn['externalId'] = this.externalId;\n }\n if (typeof this.reviewCount !== 'undefined') {\n toReturn['reviewCount'] = this.reviewCount;\n }\n if (typeof this.reviewRating !== 'undefined') {\n toReturn['reviewRating'] = this.reviewRating;\n }\n if (typeof this.status !== 'undefined') {\n toReturn['status'] = this.status;\n }\n if (typeof this.sourceId !== 'undefined') {\n toReturn['sourceId'] = this.sourceId;\n }\n if (typeof this.sourceName !== 'undefined') {\n toReturn['sourceName'] = this.sourceName;\n }\n if (typeof this.sourceIconUrl !== 'undefined') {\n toReturn['sourceIconUrl'] = this.sourceIconUrl;\n }\n if (typeof this.companyNameMatch !== 'undefined') {\n toReturn['companyNameMatch'] = this.companyNameMatch;\n }\n if (typeof this.addressMatch !== 'undefined') {\n toReturn['addressMatch'] = this.addressMatch;\n }\n if (typeof this.phoneMatch !== 'undefined') {\n toReturn['phoneMatch'] = this.phoneMatch;\n }\n return toReturn;\n }\n}\nclass ListingAccuracy {\n static fromProto(proto) {\n let m = new ListingAccuracy();\n m = Object.assign(m, proto);\n if (proto.incorrectPhoneNumber) {\n m.incorrectPhoneNumber = InaccurateData.fromProto(proto.incorrectPhoneNumber);\n }\n if (proto.missingPhoneNumber) {\n m.missingPhoneNumber = InaccurateData.fromProto(proto.missingPhoneNumber);\n }\n if (proto.incorrectAddress) {\n m.incorrectAddress = InaccurateData.fromProto(proto.incorrectAddress);\n }\n if (proto.missingAddress) {\n m.missingAddress = InaccurateData.fromProto(proto.missingAddress);\n }\n if (proto.incorrectWebsite) {\n m.incorrectWebsite = InaccurateData.fromProto(proto.incorrectWebsite);\n }\n if (proto.missingWebsite) {\n m.missingWebsite = InaccurateData.fromProto(proto.missingWebsite);\n }\n if (proto.competitors) {\n m.competitors = proto.competitors.map(ListingAccuracyCompetitor.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accurateListings !== 'undefined') {\n toReturn['accurateListings'] = this.accurateListings;\n }\n if (typeof this.industryAverageAccurateListings !== 'undefined') {\n toReturn['industryAverageAccurateListings'] = this.industryAverageAccurateListings;\n }\n if (typeof this.incorrectPhoneNumber !== 'undefined' && this.incorrectPhoneNumber !== null) {\n toReturn['incorrectPhoneNumber'] = 'toApiJson' in this.incorrectPhoneNumber ? this.incorrectPhoneNumber.toApiJson() : this.incorrectPhoneNumber;\n }\n if (typeof this.missingPhoneNumber !== 'undefined' && this.missingPhoneNumber !== null) {\n toReturn['missingPhoneNumber'] = 'toApiJson' in this.missingPhoneNumber ? this.missingPhoneNumber.toApiJson() : this.missingPhoneNumber;\n }\n if (typeof this.incorrectAddress !== 'undefined' && this.incorrectAddress !== null) {\n toReturn['incorrectAddress'] = 'toApiJson' in this.incorrectAddress ? this.incorrectAddress.toApiJson() : this.incorrectAddress;\n }\n if (typeof this.missingAddress !== 'undefined' && this.missingAddress !== null) {\n toReturn['missingAddress'] = 'toApiJson' in this.missingAddress ? this.missingAddress.toApiJson() : this.missingAddress;\n }\n if (typeof this.incorrectWebsite !== 'undefined' && this.incorrectWebsite !== null) {\n toReturn['incorrectWebsite'] = 'toApiJson' in this.incorrectWebsite ? this.incorrectWebsite.toApiJson() : this.incorrectWebsite;\n }\n if (typeof this.missingWebsite !== 'undefined' && this.missingWebsite !== null) {\n toReturn['missingWebsite'] = 'toApiJson' in this.missingWebsite ? this.missingWebsite.toApiJson() : this.missingWebsite;\n }\n if (typeof this.competitors !== 'undefined' && this.competitors !== null) {\n toReturn['competitors'] = 'toApiJson' in this.competitors ? this.competitors.toApiJson() : this.competitors;\n }\n return toReturn;\n }\n}\nclass ListingConfig {\n static fromProto(proto) {\n let m = new ListingConfig();\n m = Object.assign(m, proto);\n if (proto.listingPresenceVersion) {\n m.listingPresenceVersion = parseInt(proto.listingPresenceVersion, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.hideContent !== 'undefined') {\n toReturn['hideContent'] = this.hideContent;\n }\n if (typeof this.customizedMessage !== 'undefined') {\n toReturn['customizedMessage'] = this.customizedMessage;\n }\n if (typeof this.hideListingPresence !== 'undefined') {\n toReturn['hideListingPresence'] = this.hideListingPresence;\n }\n if (typeof this.hideListingPresenceFacebook !== 'undefined') {\n toReturn['hideListingPresenceFacebook'] = this.hideListingPresenceFacebook;\n }\n if (typeof this.hideListingPresenceTwitter !== 'undefined') {\n toReturn['hideListingPresenceTwitter'] = this.hideListingPresenceTwitter;\n }\n if (typeof this.hideListingPresenceGoogle !== 'undefined') {\n toReturn['hideListingPresenceGoogle'] = this.hideListingPresenceGoogle;\n }\n if (typeof this.hideListingPresenceMissing !== 'undefined') {\n toReturn['hideListingPresenceMissing'] = this.hideListingPresenceMissing;\n }\n if (typeof this.hideListingAccuracy !== 'undefined') {\n toReturn['hideListingAccuracy'] = this.hideListingAccuracy;\n }\n if (typeof this.hideListingAccuracyMissingPhone !== 'undefined') {\n toReturn['hideListingAccuracyMissingPhone'] = this.hideListingAccuracyMissingPhone;\n }\n if (typeof this.hideListingAccuracyIncorrectPhone !== 'undefined') {\n toReturn['hideListingAccuracyIncorrectPhone'] = this.hideListingAccuracyIncorrectPhone;\n }\n if (typeof this.hideListingAccuracyMissingAddress !== 'undefined') {\n toReturn['hideListingAccuracyMissingAddress'] = this.hideListingAccuracyMissingAddress;\n }\n if (typeof this.hideListingAccuracyIncorrectAddress !== 'undefined') {\n toReturn['hideListingAccuracyIncorrectAddress'] = this.hideListingAccuracyIncorrectAddress;\n }\n if (typeof this.hideListingAccuracyMissingWebsite !== 'undefined') {\n toReturn['hideListingAccuracyMissingWebsite'] = this.hideListingAccuracyMissingWebsite;\n }\n if (typeof this.hideListingAccuracyIncorrectWebsite !== 'undefined') {\n toReturn['hideListingAccuracyIncorrectWebsite'] = this.hideListingAccuracyIncorrectWebsite;\n }\n if (typeof this.hideListingDistribution !== 'undefined') {\n toReturn['hideListingDistribution'] = this.hideListingDistribution;\n }\n if (typeof this.hideListingDistributionContent !== 'undefined') {\n toReturn['hideListingDistributionContent'] = this.hideListingDistributionContent;\n }\n if (typeof this.customizedListingDistributionMessage !== 'undefined') {\n toReturn['customizedListingDistributionMessage'] = this.customizedListingDistributionMessage;\n }\n if (typeof this.hideListingPresenceFoursquare !== 'undefined') {\n toReturn['hideListingPresenceFoursquare'] = this.hideListingPresenceFoursquare;\n }\n if (typeof this.hideFooter !== 'undefined') {\n toReturn['hideFooter'] = this.hideFooter;\n }\n if (typeof this.hideListingScan !== 'undefined') {\n toReturn['hideListingScan'] = this.hideListingScan;\n }\n if (typeof this.customizedFooterMessage !== 'undefined') {\n toReturn['customizedFooterMessage'] = this.customizedFooterMessage;\n }\n if (typeof this.customizedFooterCtaLabel !== 'undefined') {\n toReturn['customizedFooterCtaLabel'] = this.customizedFooterCtaLabel;\n }\n if (typeof this.customizedFooterCtaTargetUrl !== 'undefined') {\n toReturn['customizedFooterCtaTargetUrl'] = this.customizedFooterCtaTargetUrl;\n }\n if (typeof this.customizedFooterCtaTargetProduct !== 'undefined') {\n toReturn['customizedFooterCtaTargetProduct'] = this.customizedFooterCtaTargetProduct;\n }\n if (typeof this.hideListingDetails !== 'undefined') {\n toReturn['hideListingDetails'] = this.hideListingDetails;\n }\n if (typeof this.hideListingPresenceInstagram !== 'undefined') {\n toReturn['hideListingPresenceInstagram'] = this.hideListingPresenceInstagram;\n }\n if (typeof this.listingPresenceVersion !== 'undefined') {\n toReturn['listingPresenceVersion'] = this.listingPresenceVersion;\n }\n return toReturn;\n }\n}\nclass ListingData {\n static fromProto(proto) {\n let m = new ListingData();\n m = Object.assign(m, proto);\n if (proto.listingPresence) {\n m.listingPresence = ListingPresence.fromProto(proto.listingPresence);\n }\n if (proto.listingAccuracy) {\n m.listingAccuracy = ListingAccuracy.fromProto(proto.listingAccuracy);\n }\n if (proto.dataProviderAccuracy) {\n m.dataProviderAccuracy = DataProviderAccuracy.fromProto(proto.dataProviderAccuracy);\n }\n if (proto.listingScan) {\n m.listingScan = ListingScan.fromProto(proto.listingScan);\n }\n if (proto.listings) {\n m.listings = Listings.fromProto(proto.listings);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.listingPresence !== 'undefined' && this.listingPresence !== null) {\n toReturn['listingPresence'] = 'toApiJson' in this.listingPresence ? this.listingPresence.toApiJson() : this.listingPresence;\n }\n if (typeof this.listingAccuracy !== 'undefined' && this.listingAccuracy !== null) {\n toReturn['listingAccuracy'] = 'toApiJson' in this.listingAccuracy ? this.listingAccuracy.toApiJson() : this.listingAccuracy;\n }\n if (typeof this.dataProviderAccuracy !== 'undefined' && this.dataProviderAccuracy !== null) {\n toReturn['dataProviderAccuracy'] = 'toApiJson' in this.dataProviderAccuracy ? this.dataProviderAccuracy.toApiJson() : this.dataProviderAccuracy;\n }\n if (typeof this.listingScan !== 'undefined' && this.listingScan !== null) {\n toReturn['listingScan'] = 'toApiJson' in this.listingScan ? this.listingScan.toApiJson() : this.listingScan;\n }\n if (typeof this.listings !== 'undefined' && this.listings !== null) {\n toReturn['listings'] = 'toApiJson' in this.listings ? this.listings.toApiJson() : this.listings;\n }\n return toReturn;\n }\n}\nclass ListingV2ListingField {\n static fromProto(proto) {\n let m = new ListingV2ListingField();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.value !== 'undefined') {\n toReturn['value'] = this.value;\n }\n if (typeof this.match !== 'undefined') {\n toReturn['match'] = this.match;\n }\n if (typeof this.ignore !== 'undefined') {\n toReturn['ignore'] = this.ignore;\n }\n return toReturn;\n }\n}\nclass ListingPresence {\n static fromProto(proto) {\n let m = new ListingPresence();\n m = Object.assign(m, proto);\n if (proto.foundCount) {\n m.foundCount = parseInt(proto.foundCount, 10);\n }\n if (proto.facebook) {\n m.facebook = ListingSource.fromProto(proto.facebook);\n }\n if (proto.twitter) {\n m.twitter = ListingSource.fromProto(proto.twitter);\n }\n if (proto.foursquare) {\n m.foursquare = ListingSource.fromProto(proto.foursquare);\n }\n if (proto.google) {\n m.google = ListingSource.fromProto(proto.google);\n }\n if (proto.availableSources) {\n m.availableSources = parseInt(proto.availableSources, 10);\n }\n if (proto.competitors) {\n m.competitors = proto.competitors.map(ListingPresenceCompetitor.fromProto);\n }\n if (proto.instagram) {\n m.instagram = ListingSource.fromProto(proto.instagram);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.foundCount !== 'undefined') {\n toReturn['foundCount'] = this.foundCount;\n }\n if (typeof this.industryAverageFound !== 'undefined') {\n toReturn['industryAverageFound'] = this.industryAverageFound;\n }\n if (typeof this.facebook !== 'undefined' && this.facebook !== null) {\n toReturn['facebook'] = 'toApiJson' in this.facebook ? this.facebook.toApiJson() : this.facebook;\n }\n if (typeof this.twitter !== 'undefined' && this.twitter !== null) {\n toReturn['twitter'] = 'toApiJson' in this.twitter ? this.twitter.toApiJson() : this.twitter;\n }\n if (typeof this.foursquare !== 'undefined' && this.foursquare !== null) {\n toReturn['foursquare'] = 'toApiJson' in this.foursquare ? this.foursquare.toApiJson() : this.foursquare;\n }\n if (typeof this.google !== 'undefined' && this.google !== null) {\n toReturn['google'] = 'toApiJson' in this.google ? this.google.toApiJson() : this.google;\n }\n if (typeof this.availableSources !== 'undefined') {\n toReturn['availableSources'] = this.availableSources;\n }\n if (typeof this.competitors !== 'undefined' && this.competitors !== null) {\n toReturn['competitors'] = 'toApiJson' in this.competitors ? this.competitors.toApiJson() : this.competitors;\n }\n if (typeof this.instagram !== 'undefined' && this.instagram !== null) {\n toReturn['instagram'] = 'toApiJson' in this.instagram ? this.instagram.toApiJson() : this.instagram;\n }\n return toReturn;\n }\n}\nclass ListingScan {\n static fromProto(proto) {\n let m = new ListingScan();\n m = Object.assign(m, proto);\n if (proto.listings) {\n m.listings = proto.listings.map(Listing.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.listings !== 'undefined' && this.listings !== null) {\n toReturn['listings'] = 'toApiJson' in this.listings ? this.listings.toApiJson() : this.listings;\n }\n return toReturn;\n }\n}\nclass ListingSection {\n static fromProto(proto) {\n let m = new ListingSection();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$e(Grade, proto.grade);\n }\n if (proto.content) {\n m.content = SectionContent.fromProto(proto.content);\n }\n if (proto.data) {\n m.data = ListingData.fromProto(proto.data);\n }\n if (proto.config) {\n m.config = ListingConfig.fromProto(proto.config);\n }\n if (proto.listingDistributionContent) {\n m.listingDistributionContent = SectionContent.fromProto(proto.listingDistributionContent);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.content !== 'undefined' && this.content !== null) {\n toReturn['content'] = 'toApiJson' in this.content ? this.content.toApiJson() : this.content;\n }\n if (typeof this.data !== 'undefined' && this.data !== null) {\n toReturn['data'] = 'toApiJson' in this.data ? this.data.toApiJson() : this.data;\n }\n if (typeof this.config !== 'undefined' && this.config !== null) {\n toReturn['config'] = 'toApiJson' in this.config ? this.config.toApiJson() : this.config;\n }\n if (typeof this.listingDistributionContent !== 'undefined' && this.listingDistributionContent !== null) {\n toReturn['listingDistributionContent'] = 'toApiJson' in this.listingDistributionContent ? this.listingDistributionContent.toApiJson() : this.listingDistributionContent;\n }\n return toReturn;\n }\n}\nclass ListingSource {\n static fromProto(proto) {\n let m = new ListingSource();\n m = Object.assign(m, proto);\n if (proto.foundCount) {\n m.foundCount = parseInt(proto.foundCount, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.foundCount !== 'undefined') {\n toReturn['foundCount'] = this.foundCount;\n }\n if (typeof this.exampleListingUrl !== 'undefined') {\n toReturn['exampleListingUrl'] = this.exampleListingUrl;\n }\n if (typeof this.industryAverageFound !== 'undefined') {\n toReturn['industryAverageFound'] = this.industryAverageFound;\n }\n return toReturn;\n }\n}\nclass ListingV2 {\n static fromProto(proto) {\n let m = new ListingV2();\n m = Object.assign(m, proto);\n if (proto.companyName) {\n m.companyName = ListingV2ListingField.fromProto(proto.companyName);\n }\n if (proto.address) {\n m.address = ListingV2ListingField.fromProto(proto.address);\n }\n if (proto.city) {\n m.city = ListingV2ListingField.fromProto(proto.city);\n }\n if (proto.state) {\n m.state = ListingV2ListingField.fromProto(proto.state);\n }\n if (proto.zip) {\n m.zip = ListingV2ListingField.fromProto(proto.zip);\n }\n if (proto.website) {\n m.website = ListingV2ListingField.fromProto(proto.website);\n }\n if (proto.phone) {\n m.phone = ListingV2ListingField.fromProto(proto.phone);\n }\n if (proto.status) {\n m.status = enumStringToValue$e(ListingV2ListingStatus, proto.status);\n }\n if (proto.source) {\n m.source = ListingV2Source.fromProto(proto.source);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.companyName !== 'undefined' && this.companyName !== null) {\n toReturn['companyName'] = 'toApiJson' in this.companyName ? this.companyName.toApiJson() : this.companyName;\n }\n if (typeof this.address !== 'undefined' && this.address !== null) {\n toReturn['address'] = 'toApiJson' in this.address ? this.address.toApiJson() : this.address;\n }\n if (typeof this.city !== 'undefined' && this.city !== null) {\n toReturn['city'] = 'toApiJson' in this.city ? this.city.toApiJson() : this.city;\n }\n if (typeof this.state !== 'undefined' && this.state !== null) {\n toReturn['state'] = 'toApiJson' in this.state ? this.state.toApiJson() : this.state;\n }\n if (typeof this.zip !== 'undefined' && this.zip !== null) {\n toReturn['zip'] = 'toApiJson' in this.zip ? this.zip.toApiJson() : this.zip;\n }\n if (typeof this.website !== 'undefined' && this.website !== null) {\n toReturn['website'] = 'toApiJson' in this.website ? this.website.toApiJson() : this.website;\n }\n if (typeof this.phone !== 'undefined' && this.phone !== null) {\n toReturn['phone'] = 'toApiJson' in this.phone ? this.phone.toApiJson() : this.phone;\n }\n if (typeof this.listingUrl !== 'undefined') {\n toReturn['listingUrl'] = this.listingUrl;\n }\n if (typeof this.status !== 'undefined') {\n toReturn['status'] = this.status;\n }\n if (typeof this.source !== 'undefined' && this.source !== null) {\n toReturn['source'] = 'toApiJson' in this.source ? this.source.toApiJson() : this.source;\n }\n return toReturn;\n }\n}\nclass Listings {\n static fromProto(proto) {\n let m = new Listings();\n m = Object.assign(m, proto);\n if (proto.listings) {\n m.listings = proto.listings.map(ListingV2.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.listings !== 'undefined' && this.listings !== null) {\n toReturn['listings'] = 'toApiJson' in this.listings ? this.listings.toApiJson() : this.listings;\n }\n return toReturn;\n }\n}\nclass ListingV2Source {\n static fromProto(proto) {\n let m = new ListingV2Source();\n m = Object.assign(m, proto);\n if (proto.sourceId) {\n m.sourceId = parseInt(proto.sourceId, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.sourceId !== 'undefined') {\n toReturn['sourceId'] = this.sourceId;\n }\n if (typeof this.sourceName !== 'undefined') {\n toReturn['sourceName'] = this.sourceName;\n }\n if (typeof this.sourceIconUrl !== 'undefined') {\n toReturn['sourceIconUrl'] = this.sourceIconUrl;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$d(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass ReviewDataCompetitor {\n static fromProto(proto) {\n let m = new ReviewDataCompetitor();\n m = Object.assign(m, proto);\n if (proto.updated) {\n m.updated = new Date(proto.updated);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.companyName !== 'undefined') {\n toReturn['companyName'] = this.companyName;\n }\n if (typeof this.reviewsFound !== 'undefined') {\n toReturn['reviewsFound'] = this.reviewsFound;\n }\n if (typeof this.averageReviewScore !== 'undefined') {\n toReturn['averageReviewScore'] = this.averageReviewScore;\n }\n if (typeof this.numberOfReviewSources !== 'undefined') {\n toReturn['numberOfReviewSources'] = this.numberOfReviewSources;\n }\n if (typeof this.updated !== 'undefined' && this.updated !== null) {\n toReturn['updated'] = 'toApiJson' in this.updated ? this.updated.toApiJson() : this.updated;\n }\n if (typeof this.reviewsFoundPerMonth !== 'undefined') {\n toReturn['reviewsFoundPerMonth'] = this.reviewsFoundPerMonth;\n }\n return toReturn;\n }\n}\nclass ReviewConfig {\n static fromProto(proto) {\n let m = new ReviewConfig();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.hideContent !== 'undefined') {\n toReturn['hideContent'] = this.hideContent;\n }\n if (typeof this.hideReviewsFound !== 'undefined') {\n toReturn['hideReviewsFound'] = this.hideReviewsFound;\n }\n if (typeof this.hideReviewsFoundPerMonth !== 'undefined') {\n toReturn['hideReviewsFoundPerMonth'] = this.hideReviewsFoundPerMonth;\n }\n if (typeof this.hideAverageReviewScore !== 'undefined') {\n toReturn['hideAverageReviewScore'] = this.hideAverageReviewScore;\n }\n if (typeof this.hideNumberOfReviewSources !== 'undefined') {\n toReturn['hideNumberOfReviewSources'] = this.hideNumberOfReviewSources;\n }\n if (typeof this.customizedMessage !== 'undefined') {\n toReturn['customizedMessage'] = this.customizedMessage;\n }\n if (typeof this.hideFooter !== 'undefined') {\n toReturn['hideFooter'] = this.hideFooter;\n }\n if (typeof this.customizedFooterMessage !== 'undefined') {\n toReturn['customizedFooterMessage'] = this.customizedFooterMessage;\n }\n if (typeof this.customizedFooterCtaLabel !== 'undefined') {\n toReturn['customizedFooterCtaLabel'] = this.customizedFooterCtaLabel;\n }\n if (typeof this.customizedFooterCtaTargetUrl !== 'undefined') {\n toReturn['customizedFooterCtaTargetUrl'] = this.customizedFooterCtaTargetUrl;\n }\n if (typeof this.customizedFooterCtaTargetProduct !== 'undefined') {\n toReturn['customizedFooterCtaTargetProduct'] = this.customizedFooterCtaTargetProduct;\n }\n return toReturn;\n }\n}\nclass ReviewData {\n static fromProto(proto) {\n let m = new ReviewData();\n m = Object.assign(m, proto);\n if (proto.reviewsFound) {\n m.reviewsFound = ReviewDataItem.fromProto(proto.reviewsFound);\n }\n if (proto.reviewsFoundPerMonth) {\n m.reviewsFoundPerMonth = ReviewDataItem.fromProto(proto.reviewsFoundPerMonth);\n }\n if (proto.averageReviewScore) {\n m.averageReviewScore = ReviewDataItem.fromProto(proto.averageReviewScore);\n }\n if (proto.numberOfReviewSources) {\n m.numberOfReviewSources = ReviewDataItem.fromProto(proto.numberOfReviewSources);\n }\n if (proto.sampleSourceCounts) {\n m.sampleSourceCounts = proto.sampleSourceCounts.map(SampleSourceCount.fromProto);\n }\n if (proto.competitors) {\n m.competitors = proto.competitors.map(ReviewDataCompetitor.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.reviewsFound !== 'undefined' && this.reviewsFound !== null) {\n toReturn['reviewsFound'] = 'toApiJson' in this.reviewsFound ? this.reviewsFound.toApiJson() : this.reviewsFound;\n }\n if (typeof this.reviewsFoundPerMonth !== 'undefined' && this.reviewsFoundPerMonth !== null) {\n toReturn['reviewsFoundPerMonth'] = 'toApiJson' in this.reviewsFoundPerMonth ? this.reviewsFoundPerMonth.toApiJson() : this.reviewsFoundPerMonth;\n }\n if (typeof this.averageReviewScore !== 'undefined' && this.averageReviewScore !== null) {\n toReturn['averageReviewScore'] = 'toApiJson' in this.averageReviewScore ? this.averageReviewScore.toApiJson() : this.averageReviewScore;\n }\n if (typeof this.numberOfReviewSources !== 'undefined' && this.numberOfReviewSources !== null) {\n toReturn['numberOfReviewSources'] = 'toApiJson' in this.numberOfReviewSources ? this.numberOfReviewSources.toApiJson() : this.numberOfReviewSources;\n }\n if (typeof this.sampleSourceCounts !== 'undefined' && this.sampleSourceCounts !== null) {\n toReturn['sampleSourceCounts'] = 'toApiJson' in this.sampleSourceCounts ? this.sampleSourceCounts.toApiJson() : this.sampleSourceCounts;\n }\n if (typeof this.competitors !== 'undefined' && this.competitors !== null) {\n toReturn['competitors'] = 'toApiJson' in this.competitors ? this.competitors.toApiJson() : this.competitors;\n }\n return toReturn;\n }\n}\nclass ReviewDataItem {\n static fromProto(proto) {\n let m = new ReviewDataItem();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$d(Grade, proto.grade);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.business !== 'undefined') {\n toReturn['business'] = this.business;\n }\n if (typeof this.industryAverage !== 'undefined') {\n toReturn['industryAverage'] = this.industryAverage;\n }\n if (typeof this.industryLeader !== 'undefined') {\n toReturn['industryLeader'] = this.industryLeader;\n }\n return toReturn;\n }\n}\nclass ReviewSection {\n static fromProto(proto) {\n let m = new ReviewSection();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$d(Grade, proto.grade);\n }\n if (proto.content) {\n m.content = SectionContent.fromProto(proto.content);\n }\n if (proto.data) {\n m.data = ReviewData.fromProto(proto.data);\n }\n if (proto.config) {\n m.config = ReviewConfig.fromProto(proto.config);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.content !== 'undefined' && this.content !== null) {\n toReturn['content'] = 'toApiJson' in this.content ? this.content.toApiJson() : this.content;\n }\n if (typeof this.data !== 'undefined' && this.data !== null) {\n toReturn['data'] = 'toApiJson' in this.data ? this.data.toApiJson() : this.data;\n }\n if (typeof this.config !== 'undefined' && this.config !== null) {\n toReturn['config'] = 'toApiJson' in this.config ? this.config.toApiJson() : this.config;\n }\n return toReturn;\n }\n}\nclass SampleSourceCount {\n static fromProto(proto) {\n let m = new SampleSourceCount();\n m = Object.assign(m, proto);\n if (proto.reviewCount) {\n m.reviewCount = parseInt(proto.reviewCount, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.sourceName !== 'undefined') {\n toReturn['sourceName'] = this.sourceName;\n }\n if (typeof this.reviewCount !== 'undefined') {\n toReturn['reviewCount'] = this.reviewCount;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$c(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Keyword {\n static fromProto(proto) {\n let m = new Keyword();\n m = Object.assign(m, proto);\n if (proto.position) {\n m.position = parseInt(proto.position, 10);\n }\n if (proto.difficulty) {\n m.difficulty = parseInt(proto.difficulty, 10);\n }\n if (proto.monthlySearchVolume) {\n m.monthlySearchVolume = parseInt(proto.monthlySearchVolume, 10);\n }\n if (proto.monthlyLocalSearchVolume) {\n m.monthlyLocalSearchVolume = parseInt(proto.monthlyLocalSearchVolume, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.term !== 'undefined') {\n toReturn['term'] = this.term;\n }\n if (typeof this.position !== 'undefined') {\n toReturn['position'] = this.position;\n }\n if (typeof this.difficulty !== 'undefined') {\n toReturn['difficulty'] = this.difficulty;\n }\n if (typeof this.monthlyClicks !== 'undefined') {\n toReturn['monthlyClicks'] = this.monthlyClicks;\n }\n if (typeof this.monthlySearchVolume !== 'undefined') {\n toReturn['monthlySearchVolume'] = this.monthlySearchVolume;\n }\n if (typeof this.monthlyLocalSearchVolume !== 'undefined') {\n toReturn['monthlyLocalSearchVolume'] = this.monthlyLocalSearchVolume;\n }\n return toReturn;\n }\n}\nclass KeywordMetrics {\n static fromProto(proto) {\n let m = new KeywordMetrics();\n m = Object.assign(m, proto);\n if (proto.keywords) {\n m.keywords = proto.keywords.map(Keyword.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.domainName !== 'undefined') {\n toReturn['domainName'] = this.domainName;\n }\n if (typeof this.keywords !== 'undefined' && this.keywords !== null) {\n toReturn['keywords'] = 'toApiJson' in this.keywords ? this.keywords.toApiJson() : this.keywords;\n }\n return toReturn;\n }\n}\nclass LatLng {\n static fromProto(proto) {\n let m = new LatLng();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.lat !== 'undefined') {\n toReturn['lat'] = this.lat;\n }\n if (typeof this.lng !== 'undefined') {\n toReturn['lng'] = this.lng;\n }\n if (typeof this.latitude !== 'undefined') {\n toReturn['latitude'] = this.latitude;\n }\n if (typeof this.longitude !== 'undefined') {\n toReturn['longitude'] = this.longitude;\n }\n return toReturn;\n }\n}\nclass LocalSEOData {\n static fromProto(proto) {\n let m = new LocalSEOData();\n m = Object.assign(m, proto);\n if (proto.searches) {\n m.searches = proto.searches.map(SERPMetrics.fromProto);\n }\n if (proto.grade) {\n m.grade = enumStringToValue$c(Grade, proto.grade);\n }\n if (proto.status) {\n m.status = enumStringToValue$c(Status, proto.status);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.searches !== 'undefined' && this.searches !== null) {\n toReturn['searches'] = 'toApiJson' in this.searches ? this.searches.toApiJson() : this.searches;\n }\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.status !== 'undefined') {\n toReturn['status'] = this.status;\n }\n if (typeof this.searchKeyword !== 'undefined') {\n toReturn['searchKeyword'] = this.searchKeyword;\n }\n return toReturn;\n }\n}\nclass OrganicDomainData {\n static fromProto(proto) {\n let m = new OrganicDomainData();\n m = Object.assign(m, proto);\n if (proto.business) {\n m.business = SEODomainMetrics.fromProto(proto.business);\n }\n if (proto.competitors) {\n m.competitors = proto.competitors.map(SEODomainMetrics.fromProto);\n }\n if (proto.grade) {\n m.grade = enumStringToValue$c(Grade, proto.grade);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.business !== 'undefined' && this.business !== null) {\n toReturn['business'] = 'toApiJson' in this.business ? this.business.toApiJson() : this.business;\n }\n if (typeof this.competitors !== 'undefined' && this.competitors !== null) {\n toReturn['competitors'] = 'toApiJson' in this.competitors ? this.competitors.toApiJson() : this.competitors;\n }\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n return toReturn;\n }\n}\nclass OrganicKeywordData {\n static fromProto(proto) {\n let m = new OrganicKeywordData();\n m = Object.assign(m, proto);\n if (proto.business) {\n m.business = KeywordMetrics.fromProto(proto.business);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.business !== 'undefined' && this.business !== null) {\n toReturn['business'] = 'toApiJson' in this.business ? this.business.toApiJson() : this.business;\n }\n return toReturn;\n }\n}\nclass Results {\n static fromProto(proto) {\n let m = new Results();\n m = Object.assign(m, proto);\n if (proto.rank) {\n m.rank = parseInt(proto.rank, 10);\n }\n if (proto.reviews) {\n m.reviews = ResultsReviews.fromProto(proto.reviews);\n }\n if (proto.claimStatus) {\n m.claimStatus = enumStringToValue$c(GMBClaimStatus, proto.claimStatus);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessName !== 'undefined') {\n toReturn['businessName'] = this.businessName;\n }\n if (typeof this.address !== 'undefined') {\n toReturn['address'] = this.address;\n }\n if (typeof this.url !== 'undefined') {\n toReturn['url'] = this.url;\n }\n if (typeof this.rank !== 'undefined') {\n toReturn['rank'] = this.rank;\n }\n if (typeof this.isMainBusiness !== 'undefined') {\n toReturn['isMainBusiness'] = this.isMainBusiness;\n }\n if (typeof this.reviews !== 'undefined' && this.reviews !== null) {\n toReturn['reviews'] = 'toApiJson' in this.reviews ? this.reviews.toApiJson() : this.reviews;\n }\n if (typeof this.phoneNumber !== 'undefined') {\n toReturn['phoneNumber'] = this.phoneNumber;\n }\n if (typeof this.claimStatus !== 'undefined') {\n toReturn['claimStatus'] = this.claimStatus;\n }\n return toReturn;\n }\n}\nclass ResultsReviews {\n static fromProto(proto) {\n let m = new ResultsReviews();\n m = Object.assign(m, proto);\n if (proto.count) {\n m.count = parseInt(proto.count, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.rating !== 'undefined') {\n toReturn['rating'] = this.rating;\n }\n if (typeof this.count !== 'undefined') {\n toReturn['count'] = this.count;\n }\n return toReturn;\n }\n}\nclass SEOConfig {\n static fromProto(proto) {\n let m = new SEOConfig();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.hideContent !== 'undefined') {\n toReturn['hideContent'] = this.hideContent;\n }\n if (typeof this.customizedMessage !== 'undefined') {\n toReturn['customizedMessage'] = this.customizedMessage;\n }\n if (typeof this.hideFooter !== 'undefined') {\n toReturn['hideFooter'] = this.hideFooter;\n }\n if (typeof this.hideOrganicSeoData !== 'undefined') {\n toReturn['hideOrganicSeoData'] = this.hideOrganicSeoData;\n }\n if (typeof this.hideOrganicKeywordData !== 'undefined') {\n toReturn['hideOrganicKeywordData'] = this.hideOrganicKeywordData;\n }\n if (typeof this.customizedFooterMessage !== 'undefined') {\n toReturn['customizedFooterMessage'] = this.customizedFooterMessage;\n }\n if (typeof this.customizedFooterCtaLabel !== 'undefined') {\n toReturn['customizedFooterCtaLabel'] = this.customizedFooterCtaLabel;\n }\n if (typeof this.customizedFooterCtaTargetUrl !== 'undefined') {\n toReturn['customizedFooterCtaTargetUrl'] = this.customizedFooterCtaTargetUrl;\n }\n if (typeof this.customizedFooterCtaTargetProduct !== 'undefined') {\n toReturn['customizedFooterCtaTargetProduct'] = this.customizedFooterCtaTargetProduct;\n }\n if (typeof this.hideLocalSeoData !== 'undefined') {\n toReturn['hideLocalSeoData'] = this.hideLocalSeoData;\n }\n if (typeof this.customKeyword !== 'undefined') {\n toReturn['customKeyword'] = this.customKeyword;\n }\n return toReturn;\n }\n}\nclass SEOData {\n static fromProto(proto) {\n let m = new SEOData();\n m = Object.assign(m, proto);\n if (proto.organicDomainData) {\n m.organicDomainData = OrganicDomainData.fromProto(proto.organicDomainData);\n }\n if (proto.organicKeywordData) {\n m.organicKeywordData = OrganicKeywordData.fromProto(proto.organicKeywordData);\n }\n if (proto.localSeoData) {\n m.localSeoData = LocalSEOData.fromProto(proto.localSeoData);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.organicDomainData !== 'undefined' && this.organicDomainData !== null) {\n toReturn['organicDomainData'] = 'toApiJson' in this.organicDomainData ? this.organicDomainData.toApiJson() : this.organicDomainData;\n }\n if (typeof this.organicKeywordData !== 'undefined' && this.organicKeywordData !== null) {\n toReturn['organicKeywordData'] = 'toApiJson' in this.organicKeywordData ? this.organicKeywordData.toApiJson() : this.organicKeywordData;\n }\n if (typeof this.localSeoData !== 'undefined' && this.localSeoData !== null) {\n toReturn['localSeoData'] = 'toApiJson' in this.localSeoData ? this.localSeoData.toApiJson() : this.localSeoData;\n }\n return toReturn;\n }\n}\nclass SEODomainMetrics {\n static fromProto(proto) {\n let m = new SEODomainMetrics();\n m = Object.assign(m, proto);\n if (proto.numberOfOrganicKeywords) {\n m.numberOfOrganicKeywords = parseInt(proto.numberOfOrganicKeywords, 10);\n }\n if (proto.organicClicksPerMonth) {\n m.organicClicksPerMonth = parseInt(proto.organicClicksPerMonth, 10);\n }\n if (proto.dailyOrganicTrafficValue) {\n m.dailyOrganicTrafficValue = parseInt(proto.dailyOrganicTrafficValue, 10);\n }\n if (proto.organicDomainRanking) {\n m.organicDomainRanking = parseInt(proto.organicDomainRanking, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.domainName !== 'undefined') {\n toReturn['domainName'] = this.domainName;\n }\n if (typeof this.numberOfOrganicKeywords !== 'undefined') {\n toReturn['numberOfOrganicKeywords'] = this.numberOfOrganicKeywords;\n }\n if (typeof this.organicClicksPerMonth !== 'undefined') {\n toReturn['organicClicksPerMonth'] = this.organicClicksPerMonth;\n }\n if (typeof this.dailyOrganicTrafficValue !== 'undefined') {\n toReturn['dailyOrganicTrafficValue'] = this.dailyOrganicTrafficValue;\n }\n if (typeof this.organicDomainRanking !== 'undefined') {\n toReturn['organicDomainRanking'] = this.organicDomainRanking;\n }\n if (typeof this.overlap !== 'undefined') {\n toReturn['overlap'] = this.overlap;\n }\n if (typeof this.valuePerClick !== 'undefined') {\n toReturn['valuePerClick'] = this.valuePerClick;\n }\n return toReturn;\n }\n}\nclass SEOSection {\n static fromProto(proto) {\n let m = new SEOSection();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$c(Grade, proto.grade);\n }\n if (proto.content) {\n m.content = SectionContent.fromProto(proto.content);\n }\n if (proto.data) {\n m.data = SEOData.fromProto(proto.data);\n }\n if (proto.config) {\n m.config = SEOConfig.fromProto(proto.config);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.content !== 'undefined' && this.content !== null) {\n toReturn['content'] = 'toApiJson' in this.content ? this.content.toApiJson() : this.content;\n }\n if (typeof this.data !== 'undefined' && this.data !== null) {\n toReturn['data'] = 'toApiJson' in this.data ? this.data.toApiJson() : this.data;\n }\n if (typeof this.config !== 'undefined' && this.config !== null) {\n toReturn['config'] = 'toApiJson' in this.config ? this.config.toApiJson() : this.config;\n }\n return toReturn;\n }\n}\nclass SERPMetrics {\n static fromProto(proto) {\n let m = new SERPMetrics();\n m = Object.assign(m, proto);\n if (proto.vicinity) {\n m.vicinity = enumStringToValue$c(Vicinity, proto.vicinity);\n }\n if (proto.searchLocation) {\n m.searchLocation = LatLng.fromProto(proto.searchLocation);\n }\n if (proto.results) {\n m.results = proto.results.map(Results.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.searchTerm !== 'undefined') {\n toReturn['searchTerm'] = this.searchTerm;\n }\n if (typeof this.vicinity !== 'undefined') {\n toReturn['vicinity'] = this.vicinity;\n }\n if (typeof this.searchLocation !== 'undefined' && this.searchLocation !== null) {\n toReturn['searchLocation'] = 'toApiJson' in this.searchLocation ? this.searchLocation.toApiJson() : this.searchLocation;\n }\n if (typeof this.results !== 'undefined' && this.results !== null) {\n toReturn['results'] = 'toApiJson' in this.results ? this.results.toApiJson() : this.results;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$b(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Business {\n static fromProto(proto) {\n let m = new Business();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.companyName !== 'undefined') {\n toReturn['companyName'] = this.companyName;\n }\n if (typeof this.address !== 'undefined') {\n toReturn['address'] = this.address;\n }\n if (typeof this.city !== 'undefined') {\n toReturn['city'] = this.city;\n }\n if (typeof this.state !== 'undefined') {\n toReturn['state'] = this.state;\n }\n if (typeof this.zip !== 'undefined') {\n toReturn['zip'] = this.zip;\n }\n if (typeof this.country !== 'undefined') {\n toReturn['country'] = this.country;\n }\n if (typeof this.phoneNumber !== 'undefined') {\n toReturn['phoneNumber'] = this.phoneNumber;\n }\n if (typeof this.website !== 'undefined') {\n toReturn['website'] = this.website;\n }\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n if (typeof this.marketId !== 'undefined') {\n toReturn['marketId'] = this.marketId;\n }\n return toReturn;\n }\n}\nclass SnapshotLite {\n static fromProto(proto) {\n let m = new SnapshotLite();\n m = Object.assign(m, proto);\n if (proto.business) {\n m.business = Business.fromProto(proto.business);\n }\n if (proto.salesPerson) {\n m.salesPerson = SalesPerson.fromProto(proto.salesPerson);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.business !== 'undefined' && this.business !== null) {\n toReturn['business'] = 'toApiJson' in this.business ? this.business.toApiJson() : this.business;\n }\n if (typeof this.salesPerson !== 'undefined' && this.salesPerson !== null) {\n toReturn['salesPerson'] = 'toApiJson' in this.salesPerson ? this.salesPerson.toApiJson() : this.salesPerson;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$a(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass SocialDataCompetitor {\n static fromProto(proto) {\n let m = new SocialDataCompetitor();\n m = Object.assign(m, proto);\n if (proto.facebookData) {\n m.facebookData = SocialDataCompetitorFacebookData.fromProto(proto.facebookData);\n }\n if (proto.twitterData) {\n m.twitterData = SocialDataCompetitorTwitterData.fromProto(proto.twitterData);\n }\n if (proto.instagramData) {\n m.instagramData = SocialDataCompetitorInstagramData.fromProto(proto.instagramData);\n }\n if (proto.updated) {\n m.updated = new Date(proto.updated);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.companyName !== 'undefined') {\n toReturn['companyName'] = this.companyName;\n }\n if (typeof this.facebookData !== 'undefined' && this.facebookData !== null) {\n toReturn['facebookData'] = 'toApiJson' in this.facebookData ? this.facebookData.toApiJson() : this.facebookData;\n }\n if (typeof this.twitterData !== 'undefined' && this.twitterData !== null) {\n toReturn['twitterData'] = 'toApiJson' in this.twitterData ? this.twitterData.toApiJson() : this.twitterData;\n }\n if (typeof this.instagramData !== 'undefined' && this.instagramData !== null) {\n toReturn['instagramData'] = 'toApiJson' in this.instagramData ? this.instagramData.toApiJson() : this.instagramData;\n }\n if (typeof this.updated !== 'undefined' && this.updated !== null) {\n toReturn['updated'] = 'toApiJson' in this.updated ? this.updated.toApiJson() : this.updated;\n }\n return toReturn;\n }\n}\nclass SocialDataCompetitorFacebookData {\n static fromProto(proto) {\n let m = new SocialDataCompetitorFacebookData();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.averageSharesPerPost !== 'undefined') {\n toReturn['averageSharesPerPost'] = this.averageSharesPerPost;\n }\n if (typeof this.averageLikesPerPost !== 'undefined') {\n toReturn['averageLikesPerPost'] = this.averageLikesPerPost;\n }\n if (typeof this.likes !== 'undefined') {\n toReturn['likes'] = this.likes;\n }\n if (typeof this.averagePostsPerMonth !== 'undefined') {\n toReturn['averagePostsPerMonth'] = this.averagePostsPerMonth;\n }\n return toReturn;\n }\n}\nclass FacebookData {\n static fromProto(proto) {\n let m = new FacebookData();\n m = Object.assign(m, proto);\n if (proto.averageSharesPerPost) {\n m.averageSharesPerPost = SocialDataItem.fromProto(proto.averageSharesPerPost);\n }\n if (proto.averageLikesPerPost) {\n m.averageLikesPerPost = SocialDataItem.fromProto(proto.averageLikesPerPost);\n }\n if (proto.likes) {\n m.likes = SocialDataItem.fromProto(proto.likes);\n }\n if (proto.posts) {\n m.posts = SocialDataItem.fromProto(proto.posts);\n }\n if (proto.recentPosts) {\n m.recentPosts = proto.recentPosts.map(FacebookPost.fromProto);\n }\n if (proto.averagePostsPerMonth) {\n m.averagePostsPerMonth = SocialDataItem.fromProto(proto.averagePostsPerMonth);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.averageSharesPerPost !== 'undefined' && this.averageSharesPerPost !== null) {\n toReturn['averageSharesPerPost'] = 'toApiJson' in this.averageSharesPerPost ? this.averageSharesPerPost.toApiJson() : this.averageSharesPerPost;\n }\n if (typeof this.averageLikesPerPost !== 'undefined' && this.averageLikesPerPost !== null) {\n toReturn['averageLikesPerPost'] = 'toApiJson' in this.averageLikesPerPost ? this.averageLikesPerPost.toApiJson() : this.averageLikesPerPost;\n }\n if (typeof this.likes !== 'undefined' && this.likes !== null) {\n toReturn['likes'] = 'toApiJson' in this.likes ? this.likes.toApiJson() : this.likes;\n }\n if (typeof this.posts !== 'undefined' && this.posts !== null) {\n toReturn['posts'] = 'toApiJson' in this.posts ? this.posts.toApiJson() : this.posts;\n }\n if (typeof this.recentPosts !== 'undefined' && this.recentPosts !== null) {\n toReturn['recentPosts'] = 'toApiJson' in this.recentPosts ? this.recentPosts.toApiJson() : this.recentPosts;\n }\n if (typeof this.averagePostsPerMonth !== 'undefined' && this.averagePostsPerMonth !== null) {\n toReturn['averagePostsPerMonth'] = 'toApiJson' in this.averagePostsPerMonth ? this.averagePostsPerMonth.toApiJson() : this.averagePostsPerMonth;\n }\n if (typeof this.url !== 'undefined') {\n toReturn['url'] = this.url;\n }\n return toReturn;\n }\n}\nclass FacebookPost {\n static fromProto(proto) {\n let m = new FacebookPost();\n m = Object.assign(m, proto);\n if (proto.posted) {\n m.posted = new Date(proto.posted);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.profileImageUrl !== 'undefined') {\n toReturn['profileImageUrl'] = this.profileImageUrl;\n }\n if (typeof this.profileUrl !== 'undefined') {\n toReturn['profileUrl'] = this.profileUrl;\n }\n if (typeof this.posted !== 'undefined' && this.posted !== null) {\n toReturn['posted'] = 'toApiJson' in this.posted ? this.posted.toApiJson() : this.posted;\n }\n if (typeof this.postText !== 'undefined') {\n toReturn['postText'] = this.postText;\n }\n if (typeof this.postUrl !== 'undefined') {\n toReturn['postUrl'] = this.postUrl;\n }\n if (typeof this.profileName !== 'undefined') {\n toReturn['profileName'] = this.profileName;\n }\n return toReturn;\n }\n}\nclass SocialDataCompetitorInstagramData {\n static fromProto(proto) {\n let m = new SocialDataCompetitorInstagramData();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.followers !== 'undefined') {\n toReturn['followers'] = this.followers;\n }\n if (typeof this.posts !== 'undefined') {\n toReturn['posts'] = this.posts;\n }\n return toReturn;\n }\n}\nclass InstagramData {\n static fromProto(proto) {\n let m = new InstagramData();\n m = Object.assign(m, proto);\n if (proto.followers) {\n m.followers = SocialDataItem.fromProto(proto.followers);\n }\n if (proto.posts) {\n m.posts = SocialDataItem.fromProto(proto.posts);\n }\n if (proto.status) {\n m.status = enumStringToValue$a(InstagramDataInstagramDataStatus, proto.status);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.followers !== 'undefined' && this.followers !== null) {\n toReturn['followers'] = 'toApiJson' in this.followers ? this.followers.toApiJson() : this.followers;\n }\n if (typeof this.posts !== 'undefined' && this.posts !== null) {\n toReturn['posts'] = 'toApiJson' in this.posts ? this.posts.toApiJson() : this.posts;\n }\n if (typeof this.url !== 'undefined') {\n toReturn['url'] = this.url;\n }\n if (typeof this.status !== 'undefined') {\n toReturn['status'] = this.status;\n }\n return toReturn;\n }\n}\nclass SocialConfig {\n static fromProto(proto) {\n let m = new SocialConfig();\n m = Object.assign(m, proto);\n if (proto.selectedFacebookPost) {\n m.selectedFacebookPost = FacebookPost.fromProto(proto.selectedFacebookPost);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.hideContent !== 'undefined') {\n toReturn['hideContent'] = this.hideContent;\n }\n if (typeof this.customizedMessage !== 'undefined') {\n toReturn['customizedMessage'] = this.customizedMessage;\n }\n if (typeof this.hideFacebook !== 'undefined') {\n toReturn['hideFacebook'] = this.hideFacebook;\n }\n if (typeof this.hideFacebookLikes !== 'undefined') {\n toReturn['hideFacebookLikes'] = this.hideFacebookLikes;\n }\n if (typeof this.hideFacebookPosts !== 'undefined') {\n toReturn['hideFacebookPosts'] = this.hideFacebookPosts;\n }\n if (typeof this.hideFacebookAverageLikesPerPost !== 'undefined') {\n toReturn['hideFacebookAverageLikesPerPost'] = this.hideFacebookAverageLikesPerPost;\n }\n if (typeof this.hideFacebookAverageSharesPerPost !== 'undefined') {\n toReturn['hideFacebookAverageSharesPerPost'] = this.hideFacebookAverageSharesPerPost;\n }\n if (typeof this.hideFacebookSelectedPost !== 'undefined') {\n toReturn['hideFacebookSelectedPost'] = this.hideFacebookSelectedPost;\n }\n if (typeof this.selectedFacebookPost !== 'undefined' && this.selectedFacebookPost !== null) {\n toReturn['selectedFacebookPost'] = 'toApiJson' in this.selectedFacebookPost ? this.selectedFacebookPost.toApiJson() : this.selectedFacebookPost;\n }\n if (typeof this.hideTwitter !== 'undefined') {\n toReturn['hideTwitter'] = this.hideTwitter;\n }\n if (typeof this.hideTwitterFollowers !== 'undefined') {\n toReturn['hideTwitterFollowers'] = this.hideTwitterFollowers;\n }\n if (typeof this.hideTwitterFollowing !== 'undefined') {\n toReturn['hideTwitterFollowing'] = this.hideTwitterFollowing;\n }\n if (typeof this.hideTwitterTweets !== 'undefined') {\n toReturn['hideTwitterTweets'] = this.hideTwitterTweets;\n }\n if (typeof this.hideFooter !== 'undefined') {\n toReturn['hideFooter'] = this.hideFooter;\n }\n if (typeof this.hideInstagram !== 'undefined') {\n toReturn['hideInstagram'] = this.hideInstagram;\n }\n if (typeof this.customizedFooterMessage !== 'undefined') {\n toReturn['customizedFooterMessage'] = this.customizedFooterMessage;\n }\n if (typeof this.customizedFooterCtaLabel !== 'undefined') {\n toReturn['customizedFooterCtaLabel'] = this.customizedFooterCtaLabel;\n }\n if (typeof this.customizedFooterCtaTargetUrl !== 'undefined') {\n toReturn['customizedFooterCtaTargetUrl'] = this.customizedFooterCtaTargetUrl;\n }\n if (typeof this.customizedFooterCtaTargetProduct !== 'undefined') {\n toReturn['customizedFooterCtaTargetProduct'] = this.customizedFooterCtaTargetProduct;\n }\n return toReturn;\n }\n}\nclass SocialData {\n static fromProto(proto) {\n let m = new SocialData();\n m = Object.assign(m, proto);\n if (proto.facebookData) {\n m.facebookData = FacebookData.fromProto(proto.facebookData);\n }\n if (proto.twitterData) {\n m.twitterData = TwitterData.fromProto(proto.twitterData);\n }\n if (proto.instagramData) {\n m.instagramData = InstagramData.fromProto(proto.instagramData);\n }\n if (proto.competitors) {\n m.competitors = proto.competitors.map(SocialDataCompetitor.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.facebookData !== 'undefined' && this.facebookData !== null) {\n toReturn['facebookData'] = 'toApiJson' in this.facebookData ? this.facebookData.toApiJson() : this.facebookData;\n }\n if (typeof this.twitterData !== 'undefined' && this.twitterData !== null) {\n toReturn['twitterData'] = 'toApiJson' in this.twitterData ? this.twitterData.toApiJson() : this.twitterData;\n }\n if (typeof this.instagramData !== 'undefined' && this.instagramData !== null) {\n toReturn['instagramData'] = 'toApiJson' in this.instagramData ? this.instagramData.toApiJson() : this.instagramData;\n }\n if (typeof this.competitors !== 'undefined' && this.competitors !== null) {\n toReturn['competitors'] = 'toApiJson' in this.competitors ? this.competitors.toApiJson() : this.competitors;\n }\n return toReturn;\n }\n}\nclass SocialDataItem {\n static fromProto(proto) {\n let m = new SocialDataItem();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$a(Grade, proto.grade);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.business !== 'undefined') {\n toReturn['business'] = this.business;\n }\n if (typeof this.industryAverage !== 'undefined') {\n toReturn['industryAverage'] = this.industryAverage;\n }\n if (typeof this.industryLeader !== 'undefined') {\n toReturn['industryLeader'] = this.industryLeader;\n }\n return toReturn;\n }\n}\nclass SocialSection {\n static fromProto(proto) {\n let m = new SocialSection();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$a(Grade, proto.grade);\n }\n if (proto.content) {\n m.content = SectionContent.fromProto(proto.content);\n }\n if (proto.data) {\n m.data = SocialData.fromProto(proto.data);\n }\n if (proto.config) {\n m.config = SocialConfig.fromProto(proto.config);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.content !== 'undefined' && this.content !== null) {\n toReturn['content'] = 'toApiJson' in this.content ? this.content.toApiJson() : this.content;\n }\n if (typeof this.data !== 'undefined' && this.data !== null) {\n toReturn['data'] = 'toApiJson' in this.data ? this.data.toApiJson() : this.data;\n }\n if (typeof this.config !== 'undefined' && this.config !== null) {\n toReturn['config'] = 'toApiJson' in this.config ? this.config.toApiJson() : this.config;\n }\n return toReturn;\n }\n}\nclass SocialDataCompetitorTwitterData {\n static fromProto(proto) {\n let m = new SocialDataCompetitorTwitterData();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.following !== 'undefined') {\n toReturn['following'] = this.following;\n }\n if (typeof this.followers !== 'undefined') {\n toReturn['followers'] = this.followers;\n }\n if (typeof this.tweets !== 'undefined') {\n toReturn['tweets'] = this.tweets;\n }\n return toReturn;\n }\n}\nclass TwitterData {\n static fromProto(proto) {\n let m = new TwitterData();\n m = Object.assign(m, proto);\n if (proto.following) {\n m.following = SocialDataItem.fromProto(proto.following);\n }\n if (proto.followers) {\n m.followers = SocialDataItem.fromProto(proto.followers);\n }\n if (proto.tweets) {\n m.tweets = SocialDataItem.fromProto(proto.tweets);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.following !== 'undefined' && this.following !== null) {\n toReturn['following'] = 'toApiJson' in this.following ? this.following.toApiJson() : this.following;\n }\n if (typeof this.followers !== 'undefined' && this.followers !== null) {\n toReturn['followers'] = 'toApiJson' in this.followers ? this.followers.toApiJson() : this.followers;\n }\n if (typeof this.tweets !== 'undefined' && this.tweets !== null) {\n toReturn['tweets'] = 'toApiJson' in this.tweets ? this.tweets.toApiJson() : this.tweets;\n }\n if (typeof this.url !== 'undefined') {\n toReturn['url'] = this.url;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$9(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Audit {\n static fromProto(proto) {\n let m = new Audit();\n m = Object.assign(m, proto);\n if (proto.details) {\n m.details = proto.details.map(AuditDetail.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.title !== 'undefined') {\n toReturn['title'] = this.title;\n }\n if (typeof this.description !== 'undefined') {\n toReturn['description'] = this.description;\n }\n if (typeof this.score !== 'undefined') {\n toReturn['score'] = this.score;\n }\n if (typeof this.details !== 'undefined' && this.details !== null) {\n toReturn['details'] = 'toApiJson' in this.details ? this.details.toApiJson() : this.details;\n }\n if (typeof this.id !== 'undefined') {\n toReturn['id'] = this.id;\n }\n return toReturn;\n }\n}\nclass AuditDetail {\n static fromProto(proto) {\n let m = new AuditDetail();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.title !== 'undefined') {\n toReturn['title'] = this.title;\n }\n if (typeof this.detailItems !== 'undefined') {\n toReturn['detailItems'] = this.detailItems;\n }\n return toReturn;\n }\n}\nclass AuditSummary {\n static fromProto(proto) {\n let m = new AuditSummary();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$9(Grade, proto.grade);\n }\n if (proto.audits) {\n m.audits = proto.audits.map(Audit.fromProto);\n }\n if (proto.score) {\n m.score = parseInt(proto.score, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.audits !== 'undefined' && this.audits !== null) {\n toReturn['audits'] = 'toApiJson' in this.audits ? this.audits.toApiJson() : this.audits;\n }\n if (typeof this.locale !== 'undefined') {\n toReturn['locale'] = this.locale;\n }\n if (typeof this.score !== 'undefined') {\n toReturn['score'] = this.score;\n }\n return toReturn;\n }\n}\nclass WebsiteDataCompetitor {\n static fromProto(proto) {\n let m = new WebsiteDataCompetitor();\n m = Object.assign(m, proto);\n if (proto.homepageData) {\n m.homepageData = CompetitorHomepageData.fromProto(proto.homepageData);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.website !== 'undefined') {\n toReturn['website'] = this.website;\n }\n if (typeof this.companyName !== 'undefined') {\n toReturn['companyName'] = this.companyName;\n }\n if (typeof this.homepageData !== 'undefined' && this.homepageData !== null) {\n toReturn['homepageData'] = 'toApiJson' in this.homepageData ? this.homepageData.toApiJson() : this.homepageData;\n }\n return toReturn;\n }\n}\nclass CompetitorHomepageData {\n static fromProto(proto) {\n let m = new CompetitorHomepageData();\n m = Object.assign(m, proto);\n if (proto.size) {\n m.size = parseInt(proto.size, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.size !== 'undefined') {\n toReturn['size'] = this.size;\n }\n if (typeof this.facebookPresent !== 'undefined') {\n toReturn['facebookPresent'] = this.facebookPresent;\n }\n if (typeof this.twitterPresent !== 'undefined') {\n toReturn['twitterPresent'] = this.twitterPresent;\n }\n if (typeof this.instagramPresent !== 'undefined') {\n toReturn['instagramPresent'] = this.instagramPresent;\n }\n if (typeof this.videoPresent !== 'undefined') {\n toReturn['videoPresent'] = this.videoPresent;\n }\n return toReturn;\n }\n}\nclass HomepageData {\n static fromProto(proto) {\n let m = new HomepageData();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$9(Grade, proto.grade);\n }\n if (proto.size) {\n m.size = parseInt(proto.size, 10);\n }\n if (proto.sizeIndustryAverage) {\n m.sizeIndustryAverage = parseInt(proto.sizeIndustryAverage, 10);\n }\n if (proto.score) {\n m.score = parseInt(proto.score, 10);\n }\n if (proto.sizeIndustryPercentiles) {\n m.sizeIndustryPercentiles = IndustryPercentiles.fromProto(proto.sizeIndustryPercentiles);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.size !== 'undefined') {\n toReturn['size'] = this.size;\n }\n if (typeof this.sizeIndustryAverage !== 'undefined') {\n toReturn['sizeIndustryAverage'] = this.sizeIndustryAverage;\n }\n if (typeof this.facebookPresent !== 'undefined') {\n toReturn['facebookPresent'] = this.facebookPresent;\n }\n if (typeof this.facebookPresentIndustryAverage !== 'undefined') {\n toReturn['facebookPresentIndustryAverage'] = this.facebookPresentIndustryAverage;\n }\n if (typeof this.twitterPresent !== 'undefined') {\n toReturn['twitterPresent'] = this.twitterPresent;\n }\n if (typeof this.twitterPresentIndustryAverage !== 'undefined') {\n toReturn['twitterPresentIndustryAverage'] = this.twitterPresentIndustryAverage;\n }\n if (typeof this.addressPresent !== 'undefined') {\n toReturn['addressPresent'] = this.addressPresent;\n }\n if (typeof this.addressPresentIndustryAverage !== 'undefined') {\n toReturn['addressPresentIndustryAverage'] = this.addressPresentIndustryAverage;\n }\n if (typeof this.phonePresent !== 'undefined') {\n toReturn['phonePresent'] = this.phonePresent;\n }\n if (typeof this.phonePresentIndustryAverage !== 'undefined') {\n toReturn['phonePresentIndustryAverage'] = this.phonePresentIndustryAverage;\n }\n if (typeof this.score !== 'undefined') {\n toReturn['score'] = this.score;\n }\n if (typeof this.sizeIndustryPercentiles !== 'undefined' && this.sizeIndustryPercentiles !== null) {\n toReturn['sizeIndustryPercentiles'] = 'toApiJson' in this.sizeIndustryPercentiles ? this.sizeIndustryPercentiles.toApiJson() : this.sizeIndustryPercentiles;\n }\n if (typeof this.videoPresent !== 'undefined') {\n toReturn['videoPresent'] = this.videoPresent;\n }\n if (typeof this.videoPresentIndustryAverage !== 'undefined') {\n toReturn['videoPresentIndustryAverage'] = this.videoPresentIndustryAverage;\n }\n if (typeof this.instagramPresent !== 'undefined') {\n toReturn['instagramPresent'] = this.instagramPresent;\n }\n if (typeof this.instagramPresentIndustryAverage !== 'undefined') {\n toReturn['instagramPresentIndustryAverage'] = this.instagramPresentIndustryAverage;\n }\n return toReturn;\n }\n}\nclass Rule {\n static fromProto(proto) {\n let m = new Rule();\n m = Object.assign(m, proto);\n if (proto.details) {\n m.details = proto.details.map(RuleDetail.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.name !== 'undefined') {\n toReturn['name'] = this.name;\n }\n if (typeof this.summaryHtml !== 'undefined') {\n toReturn['summaryHtml'] = this.summaryHtml;\n }\n if (typeof this.impact !== 'undefined') {\n toReturn['impact'] = this.impact;\n }\n if (typeof this.details !== 'undefined' && this.details !== null) {\n toReturn['details'] = 'toApiJson' in this.details ? this.details.toApiJson() : this.details;\n }\n return toReturn;\n }\n}\nclass RuleDetail {\n static fromProto(proto) {\n let m = new RuleDetail();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.titleHtml !== 'undefined') {\n toReturn['titleHtml'] = this.titleHtml;\n }\n if (typeof this.detailItems !== 'undefined') {\n toReturn['detailItems'] = this.detailItems;\n }\n return toReturn;\n }\n}\nclass RuleSummary {\n static fromProto(proto) {\n let m = new RuleSummary();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$9(Grade, proto.grade);\n }\n if (proto.rules) {\n m.rules = proto.rules.map(Rule.fromProto);\n }\n if (proto.score) {\n m.score = parseInt(proto.score, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.rules !== 'undefined' && this.rules !== null) {\n toReturn['rules'] = 'toApiJson' in this.rules ? this.rules.toApiJson() : this.rules;\n }\n if (typeof this.locale !== 'undefined') {\n toReturn['locale'] = this.locale;\n }\n if (typeof this.score !== 'undefined') {\n toReturn['score'] = this.score;\n }\n return toReturn;\n }\n}\nclass SSLSummary {\n static fromProto(proto) {\n let m = new SSLSummary();\n m = Object.assign(m, proto);\n if (proto.status) {\n m.status = enumStringToValue$9(SSLSummaryStatus, proto.status);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.status !== 'undefined') {\n toReturn['status'] = this.status;\n }\n return toReturn;\n }\n}\nclass WebsiteConfig {\n static fromProto(proto) {\n let m = new WebsiteConfig();\n m = Object.assign(m, proto);\n if (proto.sectionVersion) {\n m.sectionVersion = parseInt(proto.sectionVersion, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.hideContent !== 'undefined') {\n toReturn['hideContent'] = this.hideContent;\n }\n if (typeof this.customizedMessage !== 'undefined') {\n toReturn['customizedMessage'] = this.customizedMessage;\n }\n if (typeof this.hideMissingWebsiteWarning !== 'undefined') {\n toReturn['hideMissingWebsiteWarning'] = this.hideMissingWebsiteWarning;\n }\n if (typeof this.hideMobile !== 'undefined') {\n toReturn['hideMobile'] = this.hideMobile;\n }\n if (typeof this.hideMobilePreview !== 'undefined') {\n toReturn['hideMobilePreview'] = this.hideMobilePreview;\n }\n if (typeof this.hideDesktop !== 'undefined') {\n toReturn['hideDesktop'] = this.hideDesktop;\n }\n if (typeof this.hideDesktopPreview !== 'undefined') {\n toReturn['hideDesktopPreview'] = this.hideDesktopPreview;\n }\n if (typeof this.hideHomepageContent !== 'undefined') {\n toReturn['hideHomepageContent'] = this.hideHomepageContent;\n }\n if (typeof this.hideFooter !== 'undefined') {\n toReturn['hideFooter'] = this.hideFooter;\n }\n if (typeof this.hideHomepageVideo !== 'undefined') {\n toReturn['hideHomepageVideo'] = this.hideHomepageVideo;\n }\n if (typeof this.customizedFooterMessage !== 'undefined') {\n toReturn['customizedFooterMessage'] = this.customizedFooterMessage;\n }\n if (typeof this.customizedFooterCtaLabel !== 'undefined') {\n toReturn['customizedFooterCtaLabel'] = this.customizedFooterCtaLabel;\n }\n if (typeof this.customizedFooterCtaTargetUrl !== 'undefined') {\n toReturn['customizedFooterCtaTargetUrl'] = this.customizedFooterCtaTargetUrl;\n }\n if (typeof this.customizedFooterCtaTargetProduct !== 'undefined') {\n toReturn['customizedFooterCtaTargetProduct'] = this.customizedFooterCtaTargetProduct;\n }\n if (typeof this.sectionVersion !== 'undefined') {\n toReturn['sectionVersion'] = this.sectionVersion;\n }\n return toReturn;\n }\n}\nclass WebsiteData {\n static fromProto(proto) {\n let m = new WebsiteData();\n m = Object.assign(m, proto);\n if (proto.homepageData) {\n m.homepageData = HomepageData.fromProto(proto.homepageData);\n }\n if (proto.desktopSpeed) {\n m.desktopSpeed = RuleSummary.fromProto(proto.desktopSpeed);\n }\n if (proto.mobileSpeed) {\n m.mobileSpeed = RuleSummary.fromProto(proto.mobileSpeed);\n }\n if (proto.userExperience) {\n m.userExperience = RuleSummary.fromProto(proto.userExperience);\n }\n if (proto.mobileGrade) {\n m.mobileGrade = enumStringToValue$9(Grade, proto.mobileGrade);\n }\n if (proto.desktopInsights) {\n m.desktopInsights = AuditSummary.fromProto(proto.desktopInsights);\n }\n if (proto.mobileInsights) {\n m.mobileInsights = AuditSummary.fromProto(proto.mobileInsights);\n }\n if (proto.competitors) {\n m.competitors = proto.competitors.map(WebsiteDataCompetitor.fromProto);\n }\n if (proto.ssl) {\n m.ssl = SSLSummary.fromProto(proto.ssl);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.homepageData !== 'undefined' && this.homepageData !== null) {\n toReturn['homepageData'] = 'toApiJson' in this.homepageData ? this.homepageData.toApiJson() : this.homepageData;\n }\n if (typeof this.desktopSpeed !== 'undefined' && this.desktopSpeed !== null) {\n toReturn['desktopSpeed'] = 'toApiJson' in this.desktopSpeed ? this.desktopSpeed.toApiJson() : this.desktopSpeed;\n }\n if (typeof this.mobileSpeed !== 'undefined' && this.mobileSpeed !== null) {\n toReturn['mobileSpeed'] = 'toApiJson' in this.mobileSpeed ? this.mobileSpeed.toApiJson() : this.mobileSpeed;\n }\n if (typeof this.userExperience !== 'undefined' && this.userExperience !== null) {\n toReturn['userExperience'] = 'toApiJson' in this.userExperience ? this.userExperience.toApiJson() : this.userExperience;\n }\n if (typeof this.mobileScreenshot !== 'undefined') {\n toReturn['mobileScreenshot'] = this.mobileScreenshot;\n }\n if (typeof this.desktopScreenshot !== 'undefined') {\n toReturn['desktopScreenshot'] = this.desktopScreenshot;\n }\n if (typeof this.mobileGrade !== 'undefined') {\n toReturn['mobileGrade'] = this.mobileGrade;\n }\n if (typeof this.mobileFriendly !== 'undefined') {\n toReturn['mobileFriendly'] = this.mobileFriendly;\n }\n if (typeof this.desktopInsights !== 'undefined' && this.desktopInsights !== null) {\n toReturn['desktopInsights'] = 'toApiJson' in this.desktopInsights ? this.desktopInsights.toApiJson() : this.desktopInsights;\n }\n if (typeof this.mobileInsights !== 'undefined' && this.mobileInsights !== null) {\n toReturn['mobileInsights'] = 'toApiJson' in this.mobileInsights ? this.mobileInsights.toApiJson() : this.mobileInsights;\n }\n if (typeof this.competitors !== 'undefined' && this.competitors !== null) {\n toReturn['competitors'] = 'toApiJson' in this.competitors ? this.competitors.toApiJson() : this.competitors;\n }\n if (typeof this.ssl !== 'undefined' && this.ssl !== null) {\n toReturn['ssl'] = 'toApiJson' in this.ssl ? this.ssl.toApiJson() : this.ssl;\n }\n return toReturn;\n }\n}\nclass WebsiteSection {\n static fromProto(proto) {\n let m = new WebsiteSection();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$9(Grade, proto.grade);\n }\n if (proto.content) {\n m.content = SectionContent.fromProto(proto.content);\n }\n if (proto.data) {\n m.data = WebsiteData.fromProto(proto.data);\n }\n if (proto.config) {\n m.config = WebsiteConfig.fromProto(proto.config);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.content !== 'undefined' && this.content !== null) {\n toReturn['content'] = 'toApiJson' in this.content ? this.content.toApiJson() : this.content;\n }\n if (typeof this.data !== 'undefined' && this.data !== null) {\n toReturn['data'] = 'toApiJson' in this.data ? this.data.toApiJson() : this.data;\n }\n if (typeof this.config !== 'undefined' && this.config !== null) {\n toReturn['config'] = 'toApiJson' in this.config ? this.config.toApiJson() : this.config;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$8(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Branding {\n static fromProto(proto) {\n let m = new Branding();\n m = Object.assign(m, proto);\n if (proto.assets) {\n m.assets = BrandingAssets.fromProto(proto.assets);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.primaryColor !== 'undefined') {\n toReturn['primaryColor'] = this.primaryColor;\n }\n if (typeof this.assets !== 'undefined' && this.assets !== null) {\n toReturn['assets'] = 'toApiJson' in this.assets ? this.assets.toApiJson() : this.assets;\n }\n if (typeof this.businessCenterName !== 'undefined') {\n toReturn['businessCenterName'] = this.businessCenterName;\n }\n if (typeof this.name !== 'undefined') {\n toReturn['name'] = this.name;\n }\n if (typeof this.partnerName !== 'undefined') {\n toReturn['partnerName'] = this.partnerName;\n }\n if (typeof this.businessCenterHost !== 'undefined') {\n toReturn['businessCenterHost'] = this.businessCenterHost;\n }\n return toReturn;\n }\n}\nclass BrandingAssets {\n static fromProto(proto) {\n let m = new BrandingAssets();\n m = Object.assign(m, proto);\n if (proto.faviconUrl) {\n m.faviconUrl = URL.fromProto(proto.faviconUrl);\n }\n if (proto.shortcutIconUrl) {\n m.shortcutIconUrl = URL.fromProto(proto.shortcutIconUrl);\n }\n if (proto.logoUrl) {\n m.logoUrl = URL.fromProto(proto.logoUrl);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.faviconUrl !== 'undefined' && this.faviconUrl !== null) {\n toReturn['faviconUrl'] = 'toApiJson' in this.faviconUrl ? this.faviconUrl.toApiJson() : this.faviconUrl;\n }\n if (typeof this.shortcutIconUrl !== 'undefined' && this.shortcutIconUrl !== null) {\n toReturn['shortcutIconUrl'] = 'toApiJson' in this.shortcutIconUrl ? this.shortcutIconUrl.toApiJson() : this.shortcutIconUrl;\n }\n if (typeof this.logoUrl !== 'undefined' && this.logoUrl !== null) {\n toReturn['logoUrl'] = 'toApiJson' in this.logoUrl ? this.logoUrl.toApiJson() : this.logoUrl;\n }\n return toReturn;\n }\n}\nclass URL {\n static fromProto(proto) {\n let m = new URL();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.secure !== 'undefined') {\n toReturn['secure'] = this.secure;\n }\n if (typeof this.insecure !== 'undefined') {\n toReturn['insecure'] = this.insecure;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$7(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Application {\n static fromProto(proto) {\n let m = new Application();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.name !== 'undefined') {\n toReturn['name'] = this.name;\n }\n if (typeof this.version !== 'undefined') {\n toReturn['version'] = this.version;\n }\n return toReturn;\n }\n}\nclass EcommerceDataApplicationsAvailabilityEntry {\n static fromProto(proto) {\n let m = new EcommerceDataApplicationsAvailabilityEntry();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.key !== 'undefined') {\n toReturn['key'] = this.key;\n }\n if (typeof this.value !== 'undefined') {\n toReturn['value'] = this.value;\n }\n return toReturn;\n }\n}\nclass EcommerceDataCompetitor {\n static fromProto(proto) {\n let m = new EcommerceDataCompetitor();\n m = Object.assign(m, proto);\n if (proto.ecommerceSolution) {\n m.ecommerceSolution = proto.ecommerceSolution.map(Application.fromProto);\n }\n if (proto.onlinePayments) {\n m.onlinePayments = proto.onlinePayments.map(Application.fromProto);\n }\n if (proto.adRetargeting) {\n m.adRetargeting = proto.adRetargeting.map(Application.fromProto);\n }\n if (proto.appointmentScheduling) {\n m.appointmentScheduling = proto.appointmentScheduling.map(Application.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.website !== 'undefined') {\n toReturn['website'] = this.website;\n }\n if (typeof this.companyName !== 'undefined') {\n toReturn['companyName'] = this.companyName;\n }\n if (typeof this.ecommerceSolution !== 'undefined' && this.ecommerceSolution !== null) {\n toReturn['ecommerceSolution'] = 'toApiJson' in this.ecommerceSolution ? this.ecommerceSolution.toApiJson() : this.ecommerceSolution;\n }\n if (typeof this.onlinePayments !== 'undefined' && this.onlinePayments !== null) {\n toReturn['onlinePayments'] = 'toApiJson' in this.onlinePayments ? this.onlinePayments.toApiJson() : this.onlinePayments;\n }\n if (typeof this.adRetargeting !== 'undefined' && this.adRetargeting !== null) {\n toReturn['adRetargeting'] = 'toApiJson' in this.adRetargeting ? this.adRetargeting.toApiJson() : this.adRetargeting;\n }\n if (typeof this.appointmentScheduling !== 'undefined' && this.appointmentScheduling !== null) {\n toReturn['appointmentScheduling'] = 'toApiJson' in this.appointmentScheduling ? this.appointmentScheduling.toApiJson() : this.appointmentScheduling;\n }\n return toReturn;\n }\n}\nclass EcommerceConfig {\n static fromProto(proto) {\n let m = new EcommerceConfig();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.hideContent !== 'undefined') {\n toReturn['hideContent'] = this.hideContent;\n }\n if (typeof this.customizedMessage !== 'undefined') {\n toReturn['customizedMessage'] = this.customizedMessage;\n }\n if (typeof this.hideFooter !== 'undefined') {\n toReturn['hideFooter'] = this.hideFooter;\n }\n if (typeof this.hideEcommerceSolution !== 'undefined') {\n toReturn['hideEcommerceSolution'] = this.hideEcommerceSolution;\n }\n if (typeof this.hideOnlinePayments !== 'undefined') {\n toReturn['hideOnlinePayments'] = this.hideOnlinePayments;\n }\n if (typeof this.hideDigitalAdvertising !== 'undefined') {\n toReturn['hideDigitalAdvertising'] = this.hideDigitalAdvertising;\n }\n if (typeof this.hideAdRetargeting !== 'undefined') {\n toReturn['hideAdRetargeting'] = this.hideAdRetargeting;\n }\n if (typeof this.customizedFooterMessage !== 'undefined') {\n toReturn['customizedFooterMessage'] = this.customizedFooterMessage;\n }\n if (typeof this.customizedFooterCtaLabel !== 'undefined') {\n toReturn['customizedFooterCtaLabel'] = this.customizedFooterCtaLabel;\n }\n if (typeof this.customizedFooterCtaTargetUrl !== 'undefined') {\n toReturn['customizedFooterCtaTargetUrl'] = this.customizedFooterCtaTargetUrl;\n }\n if (typeof this.customizedFooterCtaTargetProduct !== 'undefined') {\n toReturn['customizedFooterCtaTargetProduct'] = this.customizedFooterCtaTargetProduct;\n }\n if (typeof this.hideAppointmentScheduling !== 'undefined') {\n toReturn['hideAppointmentScheduling'] = this.hideAppointmentScheduling;\n }\n return toReturn;\n }\n}\nclass EcommerceData {\n static fromProto(proto) {\n let m = new EcommerceData();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$7(Grade, proto.grade);\n }\n if (proto.ecommerceSolution) {\n m.ecommerceSolution = proto.ecommerceSolution.map(Application.fromProto);\n }\n if (proto.onlinePayments) {\n m.onlinePayments = proto.onlinePayments.map(Application.fromProto);\n }\n if (proto.digitalAdvertising) {\n m.digitalAdvertising = proto.digitalAdvertising.map(Application.fromProto);\n }\n if (proto.adRetargeting) {\n m.adRetargeting = proto.adRetargeting.map(Application.fromProto);\n }\n if (proto.competitors) {\n m.competitors = proto.competitors.map(EcommerceDataCompetitor.fromProto);\n }\n if (proto.appointmentScheduling) {\n m.appointmentScheduling = proto.appointmentScheduling.map(Application.fromProto);\n }\n if (proto.applicationsAvailability) {\n m.applicationsAvailability = Object.keys(proto.applicationsAvailability).reduce((obj, k) => {\n obj[k] = proto.applicationsAvailability[k];\n return obj;\n }, {});\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.ecommerceSolution !== 'undefined' && this.ecommerceSolution !== null) {\n toReturn['ecommerceSolution'] = 'toApiJson' in this.ecommerceSolution ? this.ecommerceSolution.toApiJson() : this.ecommerceSolution;\n }\n if (typeof this.onlinePayments !== 'undefined' && this.onlinePayments !== null) {\n toReturn['onlinePayments'] = 'toApiJson' in this.onlinePayments ? this.onlinePayments.toApiJson() : this.onlinePayments;\n }\n if (typeof this.digitalAdvertising !== 'undefined' && this.digitalAdvertising !== null) {\n toReturn['digitalAdvertising'] = 'toApiJson' in this.digitalAdvertising ? this.digitalAdvertising.toApiJson() : this.digitalAdvertising;\n }\n if (typeof this.adRetargeting !== 'undefined' && this.adRetargeting !== null) {\n toReturn['adRetargeting'] = 'toApiJson' in this.adRetargeting ? this.adRetargeting.toApiJson() : this.adRetargeting;\n }\n if (typeof this.competitors !== 'undefined' && this.competitors !== null) {\n toReturn['competitors'] = 'toApiJson' in this.competitors ? this.competitors.toApiJson() : this.competitors;\n }\n if (typeof this.website !== 'undefined') {\n toReturn['website'] = this.website;\n }\n if (typeof this.appointmentScheduling !== 'undefined' && this.appointmentScheduling !== null) {\n toReturn['appointmentScheduling'] = 'toApiJson' in this.appointmentScheduling ? this.appointmentScheduling.toApiJson() : this.appointmentScheduling;\n }\n if (typeof this.applicationsAvailability !== 'undefined' && this.applicationsAvailability !== null) {\n toReturn['applicationsAvailability'] = 'toApiJson' in this.applicationsAvailability ? this.applicationsAvailability.toApiJson() : this.applicationsAvailability;\n }\n return toReturn;\n }\n}\nclass EcommerceSection {\n static fromProto(proto) {\n let m = new EcommerceSection();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$7(Grade, proto.grade);\n }\n if (proto.content) {\n m.content = SectionContent.fromProto(proto.content);\n }\n if (proto.data) {\n m.data = EcommerceData.fromProto(proto.data);\n }\n if (proto.config) {\n m.config = EcommerceConfig.fromProto(proto.config);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.content !== 'undefined' && this.content !== null) {\n toReturn['content'] = 'toApiJson' in this.content ? this.content.toApiJson() : this.content;\n }\n if (typeof this.data !== 'undefined' && this.data !== null) {\n toReturn['data'] = 'toApiJson' in this.data ? this.data.toApiJson() : this.data;\n }\n if (typeof this.config !== 'undefined' && this.config !== null) {\n toReturn['config'] = 'toApiJson' in this.config ? this.config.toApiJson() : this.config;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$6(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass DirectCompetitor {\n static fromProto(proto) {\n let m = new DirectCompetitor();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.name !== 'undefined') {\n toReturn['name'] = this.name;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$5(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Record {\n static fromProto(proto) {\n let m = new Record();\n m = Object.assign(m, proto);\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.expired) {\n m.expired = new Date(proto.expired);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.expired !== 'undefined' && this.expired !== null) {\n toReturn['expired'] = 'toApiJson' in this.expired ? this.expired.toApiJson() : this.expired;\n }\n if (typeof this.origin !== 'undefined') {\n toReturn['origin'] = this.origin;\n }\n if (typeof this.createdBy !== 'undefined') {\n toReturn['createdBy'] = this.createdBy;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$4(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass PagedRequestOptions {\n static fromProto(proto) {\n let m = new PagedRequestOptions();\n m = Object.assign(m, proto);\n if (proto.pageSize) {\n m.pageSize = parseInt(proto.pageSize, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.cursor !== 'undefined') {\n toReturn['cursor'] = this.cursor;\n }\n if (typeof this.pageSize !== 'undefined') {\n toReturn['pageSize'] = this.pageSize;\n }\n return toReturn;\n }\n}\nclass PagedResponseMetadata {\n static fromProto(proto) {\n let m = new PagedResponseMetadata();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.nextCursor !== 'undefined') {\n toReturn['nextCursor'] = this.nextCursor;\n }\n if (typeof this.hasMore !== 'undefined') {\n toReturn['hasMore'] = this.hasMore;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$3(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Technology {\n static fromProto(proto) {\n let m = new Technology();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.technologyId !== 'undefined') {\n toReturn['technologyId'] = this.technologyId;\n }\n if (typeof this.name !== 'undefined') {\n toReturn['name'] = this.name;\n }\n if (typeof this.categoryIds !== 'undefined') {\n toReturn['categoryIds'] = this.categoryIds;\n }\n if (typeof this.website !== 'undefined') {\n toReturn['website'] = this.website;\n }\n if (typeof this.iconName !== 'undefined') {\n toReturn['iconName'] = this.iconName;\n }\n return toReturn;\n }\n}\nclass TechnologyCategory {\n static fromProto(proto) {\n let m = new TechnologyCategory();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.categoryId !== 'undefined') {\n toReturn['categoryId'] = this.categoryId;\n }\n if (typeof this.name !== 'undefined') {\n toReturn['name'] = this.name;\n }\n return toReturn;\n }\n}\nclass TechnologyConfig {\n static fromProto(proto) {\n let m = new TechnologyConfig();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.hideContent !== 'undefined') {\n toReturn['hideContent'] = this.hideContent;\n }\n if (typeof this.customizedMessage !== 'undefined') {\n toReturn['customizedMessage'] = this.customizedMessage;\n }\n if (typeof this.hideFooter !== 'undefined') {\n toReturn['hideFooter'] = this.hideFooter;\n }\n if (typeof this.customizedFooterMessage !== 'undefined') {\n toReturn['customizedFooterMessage'] = this.customizedFooterMessage;\n }\n if (typeof this.customizedFooterCtaLabel !== 'undefined') {\n toReturn['customizedFooterCtaLabel'] = this.customizedFooterCtaLabel;\n }\n if (typeof this.customizedFooterCtaTargetUrl !== 'undefined') {\n toReturn['customizedFooterCtaTargetUrl'] = this.customizedFooterCtaTargetUrl;\n }\n if (typeof this.customizedFooterCtaTargetProduct !== 'undefined') {\n toReturn['customizedFooterCtaTargetProduct'] = this.customizedFooterCtaTargetProduct;\n }\n return toReturn;\n }\n}\nclass TechnologyData {\n static fromProto(proto) {\n let m = new TechnologyData();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.technologyIds !== 'undefined') {\n toReturn['technologyIds'] = this.technologyIds;\n }\n return toReturn;\n }\n}\nclass TechnologySection {\n static fromProto(proto) {\n let m = new TechnologySection();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue$3(Grade, proto.grade);\n }\n if (proto.content) {\n m.content = SectionContent.fromProto(proto.content);\n }\n if (proto.data) {\n m.data = TechnologyData.fromProto(proto.data);\n }\n if (proto.config) {\n m.config = TechnologyConfig.fromProto(proto.config);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.content !== 'undefined' && this.content !== null) {\n toReturn['content'] = 'toApiJson' in this.content ? this.content.toApiJson() : this.content;\n }\n if (typeof this.data !== 'undefined' && this.data !== null) {\n toReturn['data'] = 'toApiJson' in this.data ? this.data.toApiJson() : this.data;\n }\n if (typeof this.config !== 'undefined' && this.config !== null) {\n toReturn['config'] = 'toApiJson' in this.config ? this.config.toApiJson() : this.config;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$2(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Access {\n static fromProto(proto) {\n let m = new Access();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.scope !== 'undefined') {\n toReturn['scope'] = this.scope;\n }\n if (typeof this.public !== 'undefined') {\n toReturn['public'] = this.public;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$1(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass AIPrompt {\n static fromProto(proto) {\n let m = new AIPrompt();\n m = Object.assign(m, proto);\n if (proto.role) {\n m.role = enumStringToValue$1(Role, proto.role);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.prompt !== 'undefined') {\n toReturn['prompt'] = this.prompt;\n }\n if (typeof this.role !== 'undefined') {\n toReturn['role'] = this.role;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass CreateSnapshotRequest {\n static fromProto(proto) {\n let m = new CreateSnapshotRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.createdBy !== 'undefined') {\n toReturn['createdBy'] = this.createdBy;\n }\n return toReturn;\n }\n}\nclass CreateSnapshotResponse {\n static fromProto(proto) {\n let m = new CreateSnapshotResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass CreateTechnologyRequest {\n static fromProto(proto) {\n let m = new CreateTechnologyRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.name !== 'undefined') {\n toReturn['name'] = this.name;\n }\n if (typeof this.categoryIds !== 'undefined') {\n toReturn['categoryIds'] = this.categoryIds;\n }\n if (typeof this.website !== 'undefined') {\n toReturn['website'] = this.website;\n }\n if (typeof this.iconName !== 'undefined') {\n toReturn['iconName'] = this.iconName;\n }\n return toReturn;\n }\n}\nclass CreateTechnologyResponse {\n static fromProto(proto) {\n let m = new CreateTechnologyResponse();\n m = Object.assign(m, proto);\n if (proto.technology) {\n m.technology = Technology.fromProto(proto.technology);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.technology !== 'undefined' && this.technology !== null) {\n toReturn['technology'] = 'toApiJson' in this.technology ? this.technology.toApiJson() : this.technology;\n }\n return toReturn;\n }\n}\nclass DeleteTechnologyRequest {\n static fromProto(proto) {\n let m = new DeleteTechnologyRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.technologyId !== 'undefined') {\n toReturn['technologyId'] = this.technologyId;\n }\n return toReturn;\n }\n}\nclass Domain {\n static fromProto(proto) {\n let m = new Domain();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.domain !== 'undefined') {\n toReturn['domain'] = this.domain;\n }\n if (typeof this.secure !== 'undefined') {\n toReturn['secure'] = this.secure;\n }\n return toReturn;\n }\n}\nclass ForceRefreshSectionRequest {\n static fromProto(proto) {\n let m = new ForceRefreshSectionRequest();\n m = Object.assign(m, proto);\n if (proto.sections) {\n m.sections = proto.sections.map(v => enumStringToValue(Section, v));\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.sections !== 'undefined') {\n toReturn['sections'] = this.sections;\n }\n return toReturn;\n }\n}\nclass GenerateMessageRequest {\n static fromProto(proto) {\n let m = new GenerateMessageRequest();\n m = Object.assign(m, proto);\n if (proto.prompts) {\n m.prompts = proto.prompts.map(AIPrompt.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.prompts !== 'undefined' && this.prompts !== null) {\n toReturn['prompts'] = 'toApiJson' in this.prompts ? this.prompts.toApiJson() : this.prompts;\n }\n return toReturn;\n }\n}\nclass GenerateMessageResponse {\n static fromProto(proto) {\n let m = new GenerateMessageResponse();\n m = Object.assign(m, proto);\n if (proto.role) {\n m.role = enumStringToValue(Role, proto.role);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.role !== 'undefined') {\n toReturn['role'] = this.role;\n }\n if (typeof this.content !== 'undefined') {\n toReturn['content'] = this.content;\n }\n return toReturn;\n }\n}\nclass GeneratePDFRequest {\n static fromProto(proto) {\n let m = new GeneratePDFRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GeneratePDFResponse {\n static fromProto(proto) {\n let m = new GeneratePDFResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.pdf !== 'undefined') {\n toReturn['pdf'] = this.pdf;\n }\n return toReturn;\n }\n}\nclass GetAdvertisingSectionResponse {\n static fromProto(proto) {\n let m = new GetAdvertisingSectionResponse();\n m = Object.assign(m, proto);\n if (proto.section) {\n m.section = AdvertisingSection.fromProto(proto.section);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.section !== 'undefined' && this.section !== null) {\n toReturn['section'] = 'toApiJson' in this.section ? this.section.toApiJson() : this.section;\n }\n return toReturn;\n }\n}\nclass GetAvailableListingSourcesRequest {\n static fromProto(proto) {\n let m = new GetAvailableListingSourcesRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GetAvailableListingSourcesResponse {\n static fromProto(proto) {\n let m = new GetAvailableListingSourcesResponse();\n m = Object.assign(m, proto);\n if (proto.sources) {\n m.sources = proto.sources.map(AvailableListingSource.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.sources !== 'undefined' && this.sources !== null) {\n toReturn['sources'] = 'toApiJson' in this.sources ? this.sources.toApiJson() : this.sources;\n }\n return toReturn;\n }\n}\nclass GetBusinessIDFromSalesforceIDRequest {\n static fromProto(proto) {\n let m = new GetBusinessIDFromSalesforceIDRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.salesforceId !== 'undefined') {\n toReturn['salesforceId'] = this.salesforceId;\n }\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n return toReturn;\n }\n}\nclass GetBusinessIDFromSalesforceIDResponse {\n static fromProto(proto) {\n let m = new GetBusinessIDFromSalesforceIDResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n return toReturn;\n }\n}\nclass GetConfigurationRequest {\n static fromProto(proto) {\n let m = new GetConfigurationRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GetConfigurationResponse {\n static fromProto(proto) {\n let m = new GetConfigurationResponse();\n m = Object.assign(m, proto);\n if (proto.configuration) {\n m.configuration = Configuration.fromProto(proto.configuration);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.configuration !== 'undefined' && this.configuration !== null) {\n toReturn['configuration'] = 'toApiJson' in this.configuration ? this.configuration.toApiJson() : this.configuration;\n }\n return toReturn;\n }\n}\nclass GetCurrentRequest {\n static fromProto(proto) {\n let m = new GetCurrentRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n return toReturn;\n }\n}\nclass GetCurrentResponse {\n static fromProto(proto) {\n let m = new GetCurrentResponse();\n m = Object.assign(m, proto);\n if (proto.snapshot) {\n m.snapshot = Current.fromProto(proto.snapshot);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshot !== 'undefined' && this.snapshot !== null) {\n toReturn['snapshot'] = 'toApiJson' in this.snapshot ? this.snapshot.toApiJson() : this.snapshot;\n }\n return toReturn;\n }\n}\nclass GetDirectCompetitorsRequest {\n static fromProto(proto) {\n let m = new GetDirectCompetitorsRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GetDirectCompetitorsResponse {\n static fromProto(proto) {\n let m = new GetDirectCompetitorsResponse();\n m = Object.assign(m, proto);\n if (proto.directCompetitors) {\n m.directCompetitors = proto.directCompetitors.map(DirectCompetitor.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.directCompetitors !== 'undefined' && this.directCompetitors !== null) {\n toReturn['directCompetitors'] = 'toApiJson' in this.directCompetitors ? this.directCompetitors.toApiJson() : this.directCompetitors;\n }\n return toReturn;\n }\n}\nclass GetDomainRequest {\n static fromProto(proto) {\n let m = new GetDomainRequest();\n m = Object.assign(m, proto);\n if (proto.application) {\n m.application = enumStringToValue(AppDomain, proto.application);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n if (typeof this.application !== 'undefined') {\n toReturn['application'] = this.application;\n }\n return toReturn;\n }\n}\nclass GetDomainResponse {\n static fromProto(proto) {\n let m = new GetDomainResponse();\n m = Object.assign(m, proto);\n if (proto.primary) {\n m.primary = Domain.fromProto(proto.primary);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.primary !== 'undefined' && this.primary !== null) {\n toReturn['primary'] = 'toApiJson' in this.primary ? this.primary.toApiJson() : this.primary;\n }\n return toReturn;\n }\n}\nclass GetEcommerceSectionResponse {\n static fromProto(proto) {\n let m = new GetEcommerceSectionResponse();\n m = Object.assign(m, proto);\n if (proto.section) {\n m.section = EcommerceSection.fromProto(proto.section);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.section !== 'undefined' && this.section !== null) {\n toReturn['section'] = 'toApiJson' in this.section ? this.section.toApiJson() : this.section;\n }\n return toReturn;\n }\n}\nclass GetLatestSnapshotIDRequest {\n static fromProto(proto) {\n let m = new GetLatestSnapshotIDRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n return toReturn;\n }\n}\nclass GetLatestSnapshotIDResponse {\n static fromProto(proto) {\n let m = new GetLatestSnapshotIDResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GetListingScanRequest {\n static fromProto(proto) {\n let m = new GetListingScanRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n return toReturn;\n }\n}\nclass GetListingScanResponse {\n static fromProto(proto) {\n let m = new GetListingScanResponse();\n m = Object.assign(m, proto);\n if (proto.listingScan) {\n m.listingScan = ListingScan.fromProto(proto.listingScan);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.listingScan !== 'undefined' && this.listingScan !== null) {\n toReturn['listingScan'] = 'toApiJson' in this.listingScan ? this.listingScan.toApiJson() : this.listingScan;\n }\n return toReturn;\n }\n}\nclass GetListingSectionResponse {\n static fromProto(proto) {\n let m = new GetListingSectionResponse();\n m = Object.assign(m, proto);\n if (proto.section) {\n m.section = ListingSection.fromProto(proto.section);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.section !== 'undefined' && this.section !== null) {\n toReturn['section'] = 'toApiJson' in this.section ? this.section.toApiJson() : this.section;\n }\n return toReturn;\n }\n}\nclass GetMultiTechnologyCategoryRequest {\n static fromProto(proto) {\n let m = new GetMultiTechnologyCategoryRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.categoryIds !== 'undefined') {\n toReturn['categoryIds'] = this.categoryIds;\n }\n return toReturn;\n }\n}\nclass GetMultiTechnologyCategoryResponse {\n static fromProto(proto) {\n let m = new GetMultiTechnologyCategoryResponse();\n m = Object.assign(m, proto);\n if (proto.technologyCategories) {\n m.technologyCategories = proto.technologyCategories.map(TechnologyCategory.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.technologyCategories !== 'undefined' && this.technologyCategories !== null) {\n toReturn['technologyCategories'] = 'toApiJson' in this.technologyCategories ? this.technologyCategories.toApiJson() : this.technologyCategories;\n }\n return toReturn;\n }\n}\nclass GetMultiTechnologyRequest {\n static fromProto(proto) {\n let m = new GetMultiTechnologyRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.technologyIds !== 'undefined') {\n toReturn['technologyIds'] = this.technologyIds;\n }\n return toReturn;\n }\n}\nclass GetMultiTechnologyResponse {\n static fromProto(proto) {\n let m = new GetMultiTechnologyResponse();\n m = Object.assign(m, proto);\n if (proto.technologies) {\n m.technologies = proto.technologies.map(Technology.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.technologies !== 'undefined' && this.technologies !== null) {\n toReturn['technologies'] = 'toApiJson' in this.technologies ? this.technologies.toApiJson() : this.technologies;\n }\n return toReturn;\n }\n}\nclass GetRequest {\n static fromProto(proto) {\n let m = new GetRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GetResponse {\n static fromProto(proto) {\n let m = new GetResponse();\n m = Object.assign(m, proto);\n if (proto.record) {\n m.record = Record.fromProto(proto.record);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.record !== 'undefined' && this.record !== null) {\n toReturn['record'] = 'toApiJson' in this.record ? this.record.toApiJson() : this.record;\n }\n return toReturn;\n }\n}\nclass GetReviewSectionResponse {\n static fromProto(proto) {\n let m = new GetReviewSectionResponse();\n m = Object.assign(m, proto);\n if (proto.section) {\n m.section = ReviewSection.fromProto(proto.section);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.section !== 'undefined' && this.section !== null) {\n toReturn['section'] = 'toApiJson' in this.section ? this.section.toApiJson() : this.section;\n }\n return toReturn;\n }\n}\nclass GetSEOSectionResponse {\n static fromProto(proto) {\n let m = new GetSEOSectionResponse();\n m = Object.assign(m, proto);\n if (proto.section) {\n m.section = SEOSection.fromProto(proto.section);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.section !== 'undefined' && this.section !== null) {\n toReturn['section'] = 'toApiJson' in this.section ? this.section.toApiJson() : this.section;\n }\n return toReturn;\n }\n}\nclass GetSalesPersonRequest {\n static fromProto(proto) {\n let m = new GetSalesPersonRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GetSalesPersonResponse {\n static fromProto(proto) {\n let m = new GetSalesPersonResponse();\n m = Object.assign(m, proto);\n if (proto.salesPerson) {\n m.salesPerson = SalesPerson.fromProto(proto.salesPerson);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.salesPerson !== 'undefined' && this.salesPerson !== null) {\n toReturn['salesPerson'] = 'toApiJson' in this.salesPerson ? this.salesPerson.toApiJson() : this.salesPerson;\n }\n return toReturn;\n }\n}\nclass GetSectionAvailabilityRequest {\n static fromProto(proto) {\n let m = new GetSectionAvailabilityRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GetSectionAvailabilityResponse {\n static fromProto(proto) {\n let m = new GetSectionAvailabilityResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.isAvailable !== 'undefined') {\n toReturn['isAvailable'] = this.isAvailable;\n }\n return toReturn;\n }\n}\nclass GetSectionRequest {\n static fromProto(proto) {\n let m = new GetSectionRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GetSnapshotCountCreatedBySalespersonIDRequest {\n static fromProto(proto) {\n let m = new GetSnapshotCountCreatedBySalespersonIDRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n if (typeof this.marketId !== 'undefined') {\n toReturn['marketId'] = this.marketId;\n }\n if (typeof this.salespersonId !== 'undefined') {\n toReturn['salespersonId'] = this.salespersonId;\n }\n return toReturn;\n }\n}\nclass GetSnapshotCountCreatedBySalespersonIDResponse {\n static fromProto(proto) {\n let m = new GetSnapshotCountCreatedBySalespersonIDResponse();\n m = Object.assign(m, proto);\n if (proto.count) {\n m.count = parseInt(proto.count, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.count !== 'undefined') {\n toReturn['count'] = this.count;\n }\n return toReturn;\n }\n}\nclass GetSnapshotIDRequest {\n static fromProto(proto) {\n let m = new GetSnapshotIDRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.partnerId !== 'undefined') {\n toReturn['partnerId'] = this.partnerId;\n }\n if (typeof this.marketId !== 'undefined') {\n toReturn['marketId'] = this.marketId;\n }\n return toReturn;\n }\n}\nclass GetSnapshotIDResponse {\n static fromProto(proto) {\n let m = new GetSnapshotIDResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GetSnapshotLiteRequest {\n static fromProto(proto) {\n let m = new GetSnapshotLiteRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n return toReturn;\n }\n}\nclass GetSnapshotLiteResponse {\n static fromProto(proto) {\n let m = new GetSnapshotLiteResponse();\n m = Object.assign(m, proto);\n if (proto.snapshot) {\n m.snapshot = SnapshotLite.fromProto(proto.snapshot);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshot !== 'undefined' && this.snapshot !== null) {\n toReturn['snapshot'] = 'toApiJson' in this.snapshot ? this.snapshot.toApiJson() : this.snapshot;\n }\n return toReturn;\n }\n}\nclass GetSnapshotRequest {\n static fromProto(proto) {\n let m = new GetSnapshotRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GetSnapshotResponse {\n static fromProto(proto) {\n let m = new GetSnapshotResponse();\n m = Object.assign(m, proto);\n if (proto.snapshot) {\n m.snapshot = Snapshot.fromProto(proto.snapshot);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshot !== 'undefined' && this.snapshot !== null) {\n toReturn['snapshot'] = 'toApiJson' in this.snapshot ? this.snapshot.toApiJson() : this.snapshot;\n }\n return toReturn;\n }\n}\nclass GetSocialSectionResponse {\n static fromProto(proto) {\n let m = new GetSocialSectionResponse();\n m = Object.assign(m, proto);\n if (proto.section) {\n m.section = SocialSection.fromProto(proto.section);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.section !== 'undefined' && this.section !== null) {\n toReturn['section'] = 'toApiJson' in this.section ? this.section.toApiJson() : this.section;\n }\n return toReturn;\n }\n}\nclass GetSummaryRequest {\n static fromProto(proto) {\n let m = new GetSummaryRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GetSummaryResponse {\n static fromProto(proto) {\n let m = new GetSummaryResponse();\n m = Object.assign(m, proto);\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.expired) {\n m.expired = new Date(proto.expired);\n }\n if (proto.sections) {\n m.sections = proto.sections.map(SectionSummary.fromProto);\n }\n if (proto.location) {\n m.location = Location.fromProto(proto.location);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.companyName !== 'undefined') {\n toReturn['companyName'] = this.companyName;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.expired !== 'undefined' && this.expired !== null) {\n toReturn['expired'] = 'toApiJson' in this.expired ? this.expired.toApiJson() : this.expired;\n }\n if (typeof this.score !== 'undefined') {\n toReturn['score'] = this.score;\n }\n if (typeof this.sections !== 'undefined' && this.sections !== null) {\n toReturn['sections'] = 'toApiJson' in this.sections ? this.sections.toApiJson() : this.sections;\n }\n if (typeof this.location !== 'undefined' && this.location !== null) {\n toReturn['location'] = 'toApiJson' in this.location ? this.location.toApiJson() : this.location;\n }\n return toReturn;\n }\n}\nclass GetTechnologyRequest {\n static fromProto(proto) {\n let m = new GetTechnologyRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.technologyId !== 'undefined') {\n toReturn['technologyId'] = this.technologyId;\n }\n return toReturn;\n }\n}\nclass GetTechnologyResponse {\n static fromProto(proto) {\n let m = new GetTechnologyResponse();\n m = Object.assign(m, proto);\n if (proto.technology) {\n m.technology = Technology.fromProto(proto.technology);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.technology !== 'undefined' && this.technology !== null) {\n toReturn['technology'] = 'toApiJson' in this.technology ? this.technology.toApiJson() : this.technology;\n }\n return toReturn;\n }\n}\nclass GetTechnologySectionResponse {\n static fromProto(proto) {\n let m = new GetTechnologySectionResponse();\n m = Object.assign(m, proto);\n if (proto.section) {\n m.section = TechnologySection.fromProto(proto.section);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.section !== 'undefined' && this.section !== null) {\n toReturn['section'] = 'toApiJson' in this.section ? this.section.toApiJson() : this.section;\n }\n return toReturn;\n }\n}\nclass GetWebsiteSectionResponse {\n static fromProto(proto) {\n let m = new GetWebsiteSectionResponse();\n m = Object.assign(m, proto);\n if (proto.section) {\n m.section = WebsiteSection.fromProto(proto.section);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.section !== 'undefined' && this.section !== null) {\n toReturn['section'] = 'toApiJson' in this.section ? this.section.toApiJson() : this.section;\n }\n return toReturn;\n }\n}\nclass GetWhitelabelRequest {\n static fromProto(proto) {\n let m = new GetWhitelabelRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass GetWhitelabelResponse {\n static fromProto(proto) {\n let m = new GetWhitelabelResponse();\n m = Object.assign(m, proto);\n if (proto.branding) {\n m.branding = Branding.fromProto(proto.branding);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.branding !== 'undefined' && this.branding !== null) {\n toReturn['branding'] = 'toApiJson' in this.branding ? this.branding.toApiJson() : this.branding;\n }\n return toReturn;\n }\n}\nclass IgnoreListingSourceRequest {\n static fromProto(proto) {\n let m = new IgnoreListingSourceRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.sourceId !== 'undefined') {\n toReturn['sourceId'] = this.sourceId;\n }\n return toReturn;\n }\n}\nclass Location {\n static fromProto(proto) {\n let m = new Location();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.address !== 'undefined') {\n toReturn['address'] = this.address;\n }\n if (typeof this.city !== 'undefined') {\n toReturn['city'] = this.city;\n }\n if (typeof this.state !== 'undefined') {\n toReturn['state'] = this.state;\n }\n if (typeof this.country !== 'undefined') {\n toReturn['country'] = this.country;\n }\n return toReturn;\n }\n}\nclass LookupRequest {\n static fromProto(proto) {\n let m = new LookupRequest();\n m = Object.assign(m, proto);\n if (proto.pagingOptions) {\n m.pagingOptions = PagedRequestOptions.fromProto(proto.pagingOptions);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.pagingOptions !== 'undefined' && this.pagingOptions !== null) {\n toReturn['pagingOptions'] = 'toApiJson' in this.pagingOptions ? this.pagingOptions.toApiJson() : this.pagingOptions;\n }\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n return toReturn;\n }\n}\nclass LookupResponse {\n static fromProto(proto) {\n let m = new LookupResponse();\n m = Object.assign(m, proto);\n if (proto.record) {\n m.record = proto.record.map(Record.fromProto);\n }\n if (proto.pagingMetadata) {\n m.pagingMetadata = PagedResponseMetadata.fromProto(proto.pagingMetadata);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.record !== 'undefined' && this.record !== null) {\n toReturn['record'] = 'toApiJson' in this.record ? this.record.toApiJson() : this.record;\n }\n if (typeof this.pagingMetadata !== 'undefined' && this.pagingMetadata !== null) {\n toReturn['pagingMetadata'] = 'toApiJson' in this.pagingMetadata ? this.pagingMetadata.toApiJson() : this.pagingMetadata;\n }\n return toReturn;\n }\n}\nclass PreviewEmailRequest {\n static fromProto(proto) {\n let m = new PreviewEmailRequest();\n m = Object.assign(m, proto);\n if (proto.email) {\n m.email = Email.fromProto(proto.email);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.email !== 'undefined' && this.email !== null) {\n toReturn['email'] = 'toApiJson' in this.email ? this.email.toApiJson() : this.email;\n }\n return toReturn;\n }\n}\nclass PreviewEmailResponse {\n static fromProto(proto) {\n let m = new PreviewEmailResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.renderedTemplate !== 'undefined') {\n toReturn['renderedTemplate'] = this.renderedTemplate;\n }\n return toReturn;\n }\n}\nclass PreviewRefreshSnapshotForBusinessesRequest {\n static fromProto(proto) {\n let m = new PreviewRefreshSnapshotForBusinessesRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessIds !== 'undefined') {\n toReturn['businessIds'] = this.businessIds;\n }\n return toReturn;\n }\n}\nclass PreviewRefreshSnapshotForBusinessesResponse {\n static fromProto(proto) {\n let m = new PreviewRefreshSnapshotForBusinessesResponse();\n m = Object.assign(m, proto);\n if (proto.total) {\n m.total = parseInt(proto.total, 10);\n }\n if (proto.toRefresh) {\n m.toRefresh = parseInt(proto.toRefresh, 10);\n }\n if (proto.toCreate) {\n m.toCreate = parseInt(proto.toCreate, 10);\n }\n if (proto.unaffected) {\n m.unaffected = parseInt(proto.unaffected, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.total !== 'undefined') {\n toReturn['total'] = this.total;\n }\n if (typeof this.toRefresh !== 'undefined') {\n toReturn['toRefresh'] = this.toRefresh;\n }\n if (typeof this.toCreate !== 'undefined') {\n toReturn['toCreate'] = this.toCreate;\n }\n if (typeof this.unaffected !== 'undefined') {\n toReturn['unaffected'] = this.unaffected;\n }\n return toReturn;\n }\n}\nclass ProvisionSnapshotOptions {\n static fromProto(proto) {\n let m = new ProvisionSnapshotOptions();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.inferMissingData !== 'undefined') {\n toReturn['inferMissingData'] = this.inferMissingData;\n }\n return toReturn;\n }\n}\nclass ProvisionSnapshotRequest {\n static fromProto(proto) {\n let m = new ProvisionSnapshotRequest();\n m = Object.assign(m, proto);\n if (proto.options) {\n m.options = ProvisionSnapshotOptions.fromProto(proto.options);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.origin !== 'undefined') {\n toReturn['origin'] = this.origin;\n }\n if (typeof this.userId !== 'undefined') {\n toReturn['userId'] = this.userId;\n }\n if (typeof this.options !== 'undefined' && this.options !== null) {\n toReturn['options'] = 'toApiJson' in this.options ? this.options.toApiJson() : this.options;\n }\n return toReturn;\n }\n}\nclass ProvisionSnapshotResponse {\n static fromProto(proto) {\n let m = new ProvisionSnapshotResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n return toReturn;\n }\n}\nclass SaveDirectCompetitorsRequest {\n static fromProto(proto) {\n let m = new SaveDirectCompetitorsRequest();\n m = Object.assign(m, proto);\n if (proto.directCompetitors) {\n m.directCompetitors = proto.directCompetitors.map(DirectCompetitor.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.directCompetitors !== 'undefined' && this.directCompetitors !== null) {\n toReturn['directCompetitors'] = 'toApiJson' in this.directCompetitors ? this.directCompetitors.toApiJson() : this.directCompetitors;\n }\n return toReturn;\n }\n}\nclass SectionSummary {\n static fromProto(proto) {\n let m = new SectionSummary();\n m = Object.assign(m, proto);\n if (proto.grade) {\n m.grade = enumStringToValue(Grade, proto.grade);\n }\n if (proto.sectionId) {\n m.sectionId = enumStringToValue(Section, proto.sectionId);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.sectionName !== 'undefined') {\n toReturn['sectionName'] = this.sectionName;\n }\n if (typeof this.grade !== 'undefined') {\n toReturn['grade'] = this.grade;\n }\n if (typeof this.sectionId !== 'undefined') {\n toReturn['sectionId'] = this.sectionId;\n }\n return toReturn;\n }\n}\nclass ShareSnapshotRequest {\n static fromProto(proto) {\n let m = new ShareSnapshotRequest();\n m = Object.assign(m, proto);\n if (proto.contacts) {\n m.contacts = proto.contacts.map(Contact.fromProto);\n }\n if (proto.sender) {\n m.sender = Contact.fromProto(proto.sender);\n }\n if (proto.email) {\n m.email = Email.fromProto(proto.email);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.contacts !== 'undefined' && this.contacts !== null) {\n toReturn['contacts'] = 'toApiJson' in this.contacts ? this.contacts.toApiJson() : this.contacts;\n }\n if (typeof this.sender !== 'undefined' && this.sender !== null) {\n toReturn['sender'] = 'toApiJson' in this.sender ? this.sender.toApiJson() : this.sender;\n }\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.email !== 'undefined' && this.email !== null) {\n toReturn['email'] = 'toApiJson' in this.email ? this.email.toApiJson() : this.email;\n }\n if (typeof this.domain !== 'undefined') {\n toReturn['domain'] = this.domain;\n }\n return toReturn;\n }\n}\nclass UnignoreListingSourceRequest {\n static fromProto(proto) {\n let m = new UnignoreListingSourceRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.sourceId !== 'undefined') {\n toReturn['sourceId'] = this.sourceId;\n }\n return toReturn;\n }\n}\nclass UpdateAdvertisingConfigRequest {\n static fromProto(proto) {\n let m = new UpdateAdvertisingConfigRequest();\n m = Object.assign(m, proto);\n if (proto.advertisingConfig) {\n m.advertisingConfig = AdvertisingConfig.fromProto(proto.advertisingConfig);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.advertisingConfig !== 'undefined' && this.advertisingConfig !== null) {\n toReturn['advertisingConfig'] = 'toApiJson' in this.advertisingConfig ? this.advertisingConfig.toApiJson() : this.advertisingConfig;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass UpdateCurrentRequest {\n static fromProto(proto) {\n let m = new UpdateCurrentRequest();\n m = Object.assign(m, proto);\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.expired) {\n m.expired = new Date(proto.expired);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.expired !== 'undefined' && this.expired !== null) {\n toReturn['expired'] = 'toApiJson' in this.expired ? this.expired.toApiJson() : this.expired;\n }\n return toReturn;\n }\n}\nclass UpdateEcommerceConfigRequest {\n static fromProto(proto) {\n let m = new UpdateEcommerceConfigRequest();\n m = Object.assign(m, proto);\n if (proto.ecommerceConfig) {\n m.ecommerceConfig = EcommerceConfig.fromProto(proto.ecommerceConfig);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.ecommerceConfig !== 'undefined' && this.ecommerceConfig !== null) {\n toReturn['ecommerceConfig'] = 'toApiJson' in this.ecommerceConfig ? this.ecommerceConfig.toApiJson() : this.ecommerceConfig;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass UpdateListingConfigRequest {\n static fromProto(proto) {\n let m = new UpdateListingConfigRequest();\n m = Object.assign(m, proto);\n if (proto.listingConfig) {\n m.listingConfig = ListingConfig.fromProto(proto.listingConfig);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.listingConfig !== 'undefined' && this.listingConfig !== null) {\n toReturn['listingConfig'] = 'toApiJson' in this.listingConfig ? this.listingConfig.toApiJson() : this.listingConfig;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass UpdateReviewConfigRequest {\n static fromProto(proto) {\n let m = new UpdateReviewConfigRequest();\n m = Object.assign(m, proto);\n if (proto.reviewConfig) {\n m.reviewConfig = ReviewConfig.fromProto(proto.reviewConfig);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.reviewConfig !== 'undefined' && this.reviewConfig !== null) {\n toReturn['reviewConfig'] = 'toApiJson' in this.reviewConfig ? this.reviewConfig.toApiJson() : this.reviewConfig;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass UpdateSEOConfigRequest {\n static fromProto(proto) {\n let m = new UpdateSEOConfigRequest();\n m = Object.assign(m, proto);\n if (proto.seoConfig) {\n m.seoConfig = SEOConfig.fromProto(proto.seoConfig);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.seoConfig !== 'undefined' && this.seoConfig !== null) {\n toReturn['seoConfig'] = 'toApiJson' in this.seoConfig ? this.seoConfig.toApiJson() : this.seoConfig;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass UpdateSnapshotConfigRequest {\n static fromProto(proto) {\n let m = new UpdateSnapshotConfigRequest();\n m = Object.assign(m, proto);\n if (proto.config) {\n m.config = GlobalConfig.fromProto(proto.config);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.config !== 'undefined' && this.config !== null) {\n toReturn['config'] = 'toApiJson' in this.config ? this.config.toApiJson() : this.config;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass UpdateSnapshotLanguageConfigRequest {\n static fromProto(proto) {\n let m = new UpdateSnapshotLanguageConfigRequest();\n m = Object.assign(m, proto);\n if (proto.config) {\n m.config = LanguageConfig.fromProto(proto.config);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.config !== 'undefined' && this.config !== null) {\n toReturn['config'] = 'toApiJson' in this.config ? this.config.toApiJson() : this.config;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass UpdateSnapshotLiteBusinessDataRequest {\n static fromProto(proto) {\n let m = new UpdateSnapshotLiteBusinessDataRequest();\n m = Object.assign(m, proto);\n if (proto.business) {\n m.business = Business.fromProto(proto.business);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.businessId !== 'undefined') {\n toReturn['businessId'] = this.businessId;\n }\n if (typeof this.business !== 'undefined' && this.business !== null) {\n toReturn['business'] = 'toApiJson' in this.business ? this.business.toApiJson() : this.business;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass UpdateSocialConfigRequest {\n static fromProto(proto) {\n let m = new UpdateSocialConfigRequest();\n m = Object.assign(m, proto);\n if (proto.socialConfig) {\n m.socialConfig = SocialConfig.fromProto(proto.socialConfig);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.socialConfig !== 'undefined' && this.socialConfig !== null) {\n toReturn['socialConfig'] = 'toApiJson' in this.socialConfig ? this.socialConfig.toApiJson() : this.socialConfig;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass UpdateTechnologyConfigRequest {\n static fromProto(proto) {\n let m = new UpdateTechnologyConfigRequest();\n m = Object.assign(m, proto);\n if (proto.technologyConfig) {\n m.technologyConfig = TechnologyConfig.fromProto(proto.technologyConfig);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.technologyConfig !== 'undefined' && this.technologyConfig !== null) {\n toReturn['technologyConfig'] = 'toApiJson' in this.technologyConfig ? this.technologyConfig.toApiJson() : this.technologyConfig;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass UpdateTechnologyRequest {\n static fromProto(proto) {\n let m = new UpdateTechnologyRequest();\n m = Object.assign(m, proto);\n if (proto.technology) {\n m.technology = Technology.fromProto(proto.technology);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.technologyId !== 'undefined') {\n toReturn['technologyId'] = this.technologyId;\n }\n if (typeof this.technology !== 'undefined' && this.technology !== null) {\n toReturn['technology'] = 'toApiJson' in this.technology ? this.technology.toApiJson() : this.technology;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass UpdateWebsiteConfigRequest {\n static fromProto(proto) {\n let m = new UpdateWebsiteConfigRequest();\n m = Object.assign(m, proto);\n if (proto.websiteConfig) {\n m.websiteConfig = WebsiteConfig.fromProto(proto.websiteConfig);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.snapshotId !== 'undefined') {\n toReturn['snapshotId'] = this.snapshotId;\n }\n if (typeof this.websiteConfig !== 'undefined' && this.websiteConfig !== null) {\n toReturn['websiteConfig'] = 'toApiJson' in this.websiteConfig ? this.websiteConfig.toApiJson() : this.websiteConfig;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\n\n// *********************************\n\nconst environment = (window ? window['environment'] : 'prod') ?? 'prod';\nconst hostMap = {\n 'local': 'snapshot-api.vendasta-local.com',\n 'test': '',\n 'demo': 'snapshot-api-demo.apigateway.co',\n 'prod': 'snapshot-api-prod.apigateway.co',\n 'production': 'snapshot-api-prod.apigateway.co'\n};\nlet HostService = /*#__PURE__*/(() => {\n class HostService {\n get host() {\n return hostMap[environment.toLowerCase()];\n }\n get hostWithScheme() {\n return 'https://' + this.host;\n }\n }\n HostService.ɵfac = function HostService_Factory(t) {\n return new (t || HostService)();\n };\n HostService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HostService,\n factory: HostService.ɵfac,\n providedIn: 'root'\n });\n return HostService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet AdvertisingSectionApiService = /*#__PURE__*/(() => {\n class AdvertisingSectionApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n get(r) {\n const request = r.toApiJson ? r : new GetSectionRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.AdvertisingSectionService/Get\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetAdvertisingSectionResponse.fromProto(resp)));\n }\n updateConfig(r) {\n const request = r.toApiJson ? r : new UpdateAdvertisingConfigRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.AdvertisingSectionService/UpdateConfig\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n AdvertisingSectionApiService.ɵfac = function AdvertisingSectionApiService_Factory(t) {\n return new (t || AdvertisingSectionApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n AdvertisingSectionApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AdvertisingSectionApiService,\n factory: AdvertisingSectionApiService.ɵfac,\n providedIn: 'root'\n });\n return AdvertisingSectionApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet ArtificialIntelligenceApiService = /*#__PURE__*/(() => {\n class ArtificialIntelligenceApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n generateMessage(r) {\n const request = r.toApiJson ? r : new GenerateMessageRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.ArtificialIntelligence/GenerateMessage\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GenerateMessageResponse.fromProto(resp)));\n }\n }\n ArtificialIntelligenceApiService.ɵfac = function ArtificialIntelligenceApiService_Factory(t) {\n return new (t || ArtificialIntelligenceApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n ArtificialIntelligenceApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ArtificialIntelligenceApiService,\n factory: ArtificialIntelligenceApiService.ɵfac,\n providedIn: 'root'\n });\n return ArtificialIntelligenceApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet CurrentSnapshotApiService = /*#__PURE__*/(() => {\n class CurrentSnapshotApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n updateCurrent(r) {\n const request = r.toApiJson ? r : new UpdateCurrentRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.CurrentSnapshot/UpdateCurrent\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n getCurrent(r) {\n const request = r.toApiJson ? r : new GetCurrentRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.CurrentSnapshot/GetCurrent\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetCurrentResponse.fromProto(resp)));\n }\n }\n CurrentSnapshotApiService.ɵfac = function CurrentSnapshotApiService_Factory(t) {\n return new (t || CurrentSnapshotApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n CurrentSnapshotApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: CurrentSnapshotApiService,\n factory: CurrentSnapshotApiService.ɵfac,\n providedIn: 'root'\n });\n return CurrentSnapshotApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet EcommerceSectionApiService = /*#__PURE__*/(() => {\n class EcommerceSectionApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n get(r) {\n const request = r.toApiJson ? r : new GetSectionRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.EcommerceSectionService/Get\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetEcommerceSectionResponse.fromProto(resp)));\n }\n updateConfig(r) {\n const request = r.toApiJson ? r : new UpdateEcommerceConfigRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.EcommerceSectionService/UpdateConfig\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n getSectionAvailability(r) {\n const request = r.toApiJson ? r : new GetSectionAvailabilityRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.EcommerceSectionService/GetSectionAvailability\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetSectionAvailabilityResponse.fromProto(resp)));\n }\n }\n EcommerceSectionApiService.ɵfac = function EcommerceSectionApiService_Factory(t) {\n return new (t || EcommerceSectionApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n EcommerceSectionApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: EcommerceSectionApiService,\n factory: EcommerceSectionApiService.ɵfac,\n providedIn: 'root'\n });\n return EcommerceSectionApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet ListingSectionApiService = /*#__PURE__*/(() => {\n class ListingSectionApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n get(r) {\n const request = r.toApiJson ? r : new GetSectionRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.ListingSectionService/Get\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetListingSectionResponse.fromProto(resp)));\n }\n updateConfig(r) {\n const request = r.toApiJson ? r : new UpdateListingConfigRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.ListingSectionService/UpdateConfig\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n getListingScan(r) {\n const request = r.toApiJson ? r : new GetListingScanRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.ListingSectionService/GetListingScan\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetListingScanResponse.fromProto(resp)));\n }\n getAvailableListingSources(r) {\n const request = r.toApiJson ? r : new GetAvailableListingSourcesRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.ListingSectionService/GetAvailableListingSources\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetAvailableListingSourcesResponse.fromProto(resp)));\n }\n ignoreListingSource(r) {\n const request = r.toApiJson ? r : new IgnoreListingSourceRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.ListingSectionService/IgnoreListingSource\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n unignoreListingSource(r) {\n const request = r.toApiJson ? r : new UnignoreListingSourceRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.ListingSectionService/UnignoreListingSource\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n ListingSectionApiService.ɵfac = function ListingSectionApiService_Factory(t) {\n return new (t || ListingSectionApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n ListingSectionApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ListingSectionApiService,\n factory: ListingSectionApiService.ɵfac,\n providedIn: 'root'\n });\n return ListingSectionApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet ReviewSectionApiService = /*#__PURE__*/(() => {\n class ReviewSectionApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n get(r) {\n const request = r.toApiJson ? r : new GetSectionRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.ReviewSectionService/Get\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetReviewSectionResponse.fromProto(resp)));\n }\n updateConfig(r) {\n const request = r.toApiJson ? r : new UpdateReviewConfigRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.ReviewSectionService/UpdateConfig\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n ReviewSectionApiService.ɵfac = function ReviewSectionApiService_Factory(t) {\n return new (t || ReviewSectionApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n ReviewSectionApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ReviewSectionApiService,\n factory: ReviewSectionApiService.ɵfac,\n providedIn: 'root'\n });\n return ReviewSectionApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet SEOSectionApiService = /*#__PURE__*/(() => {\n class SEOSectionApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n get(r) {\n const request = r.toApiJson ? r : new GetSectionRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SEOSectionService/Get\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetSEOSectionResponse.fromProto(resp)));\n }\n updateConfig(r) {\n const request = r.toApiJson ? r : new UpdateSEOConfigRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SEOSectionService/UpdateConfig\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n SEOSectionApiService.ɵfac = function SEOSectionApiService_Factory(t) {\n return new (t || SEOSectionApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n SEOSectionApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SEOSectionApiService,\n factory: SEOSectionApiService.ɵfac,\n providedIn: 'root'\n });\n return SEOSectionApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet SnapshotLiteApiService = /*#__PURE__*/(() => {\n class SnapshotLiteApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n get(r) {\n const request = r.toApiJson ? r : new GetSnapshotLiteRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotLiteService/Get\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetSnapshotLiteResponse.fromProto(resp)));\n }\n updateSnapshotLiteBusinessData(r) {\n const request = r.toApiJson ? r : new UpdateSnapshotLiteBusinessDataRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotLiteService/UpdateSnapshotLiteBusinessData\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n SnapshotLiteApiService.ɵfac = function SnapshotLiteApiService_Factory(t) {\n return new (t || SnapshotLiteApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n SnapshotLiteApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SnapshotLiteApiService,\n factory: SnapshotLiteApiService.ɵfac,\n providedIn: 'root'\n });\n return SnapshotLiteApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet SnapshotRecordApiService = /*#__PURE__*/(() => {\n class SnapshotRecordApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n get(r) {\n const request = r.toApiJson ? r : new GetRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotRecord/Get\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetResponse.fromProto(resp)));\n }\n lookup(r) {\n const request = r.toApiJson ? r : new LookupRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotRecord/Lookup\", request.toApiJson(), this.apiOptions()).pipe(map(resp => LookupResponse.fromProto(resp)));\n }\n }\n SnapshotRecordApiService.ɵfac = function SnapshotRecordApiService_Factory(t) {\n return new (t || SnapshotRecordApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n SnapshotRecordApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SnapshotRecordApiService,\n factory: SnapshotRecordApiService.ɵfac,\n providedIn: 'root'\n });\n return SnapshotRecordApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet SnapshotApiService = /*#__PURE__*/(() => {\n class SnapshotApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n create(r) {\n const request = r.toApiJson ? r : new CreateSnapshotRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/Create\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CreateSnapshotResponse.fromProto(resp)));\n }\n get(r) {\n const request = r.toApiJson ? r : new GetSnapshotRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/Get\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetSnapshotResponse.fromProto(resp)));\n }\n updateConfig(r) {\n const request = r.toApiJson ? r : new UpdateSnapshotConfigRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/UpdateConfig\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n updateLanguageConfig(r) {\n const request = r.toApiJson ? r : new UpdateSnapshotLanguageConfigRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/UpdateLanguageConfig\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n getSnapshotId(r) {\n const request = r.toApiJson ? r : new GetSnapshotIDRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/GetSnapshotID\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetSnapshotIDResponse.fromProto(resp)));\n }\n getWhitelabel(r) {\n const request = r.toApiJson ? r : new GetWhitelabelRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/GetWhitelabel\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetWhitelabelResponse.fromProto(resp)));\n }\n getConfiguration(r) {\n const request = r.toApiJson ? r : new GetConfigurationRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/GetConfiguration\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetConfigurationResponse.fromProto(resp)));\n }\n getSalesPerson(r) {\n const request = r.toApiJson ? r : new GetSalesPersonRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/GetSalesPerson\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetSalesPersonResponse.fromProto(resp)));\n }\n forceRefreshSection(r) {\n const request = r.toApiJson ? r : new ForceRefreshSectionRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/ForceRefreshSection\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n getLatestSnapshotId(r) {\n const request = r.toApiJson ? r : new GetLatestSnapshotIDRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/GetLatestSnapshotID\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetLatestSnapshotIDResponse.fromProto(resp)));\n }\n getBusinessIdFromSalesforceId(r) {\n const request = r.toApiJson ? r : new GetBusinessIDFromSalesforceIDRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/GetBusinessIDFromSalesforceID\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetBusinessIDFromSalesforceIDResponse.fromProto(resp)));\n }\n getSnapshotCountCreatedBySalespersonId(r) {\n const request = r.toApiJson ? r : new GetSnapshotCountCreatedBySalespersonIDRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/GetSnapshotCountCreatedBySalespersonID\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetSnapshotCountCreatedBySalespersonIDResponse.fromProto(resp)));\n }\n previewRefreshSnapshotForBusinesses(r) {\n const request = r.toApiJson ? r : new PreviewRefreshSnapshotForBusinessesRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/PreviewRefreshSnapshotForBusinesses\", request.toApiJson(), this.apiOptions()).pipe(map(resp => PreviewRefreshSnapshotForBusinessesResponse.fromProto(resp)));\n }\n shareSnapshot(r) {\n const request = r.toApiJson ? r : new ShareSnapshotRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/ShareSnapshot\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n getDomain(r) {\n const request = r.toApiJson ? r : new GetDomainRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/GetDomain\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetDomainResponse.fromProto(resp)));\n }\n previewEmail(r) {\n const request = r.toApiJson ? r : new PreviewEmailRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/PreviewEmail\", request.toApiJson(), this.apiOptions()).pipe(map(resp => PreviewEmailResponse.fromProto(resp)));\n }\n getDirectCompetitors(r) {\n const request = r.toApiJson ? r : new GetDirectCompetitorsRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/GetDirectCompetitors\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetDirectCompetitorsResponse.fromProto(resp)));\n }\n saveDirectCompetitors(r) {\n const request = r.toApiJson ? r : new SaveDirectCompetitorsRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/SaveDirectCompetitors\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n provision(r) {\n const request = r.toApiJson ? r : new ProvisionSnapshotRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/Provision\", request.toApiJson(), this.apiOptions()).pipe(map(resp => ProvisionSnapshotResponse.fromProto(resp)));\n }\n getSummary(r) {\n const request = r.toApiJson ? r : new GetSummaryRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/GetSummary\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetSummaryResponse.fromProto(resp)));\n }\n generatePdf(r) {\n const request = r.toApiJson ? r : new GeneratePDFRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SnapshotService/GeneratePDF\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GeneratePDFResponse.fromProto(resp)));\n }\n }\n SnapshotApiService.ɵfac = function SnapshotApiService_Factory(t) {\n return new (t || SnapshotApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n SnapshotApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SnapshotApiService,\n factory: SnapshotApiService.ɵfac,\n providedIn: 'root'\n });\n return SnapshotApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet SocialSectionApiService = /*#__PURE__*/(() => {\n class SocialSectionApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n get(r) {\n const request = r.toApiJson ? r : new GetSectionRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SocialSectionService/Get\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetSocialSectionResponse.fromProto(resp)));\n }\n updateConfig(r) {\n const request = r.toApiJson ? r : new UpdateSocialConfigRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.SocialSectionService/UpdateConfig\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n SocialSectionApiService.ɵfac = function SocialSectionApiService_Factory(t) {\n return new (t || SocialSectionApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n SocialSectionApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SocialSectionApiService,\n factory: SocialSectionApiService.ɵfac,\n providedIn: 'root'\n });\n return SocialSectionApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet TechnologySectionApiService = /*#__PURE__*/(() => {\n class TechnologySectionApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n get(r) {\n const request = r.toApiJson ? r : new GetSectionRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.TechnologySectionService/Get\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetTechnologySectionResponse.fromProto(resp)));\n }\n updateConfig(r) {\n const request = r.toApiJson ? r : new UpdateTechnologyConfigRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.TechnologySectionService/UpdateConfig\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n TechnologySectionApiService.ɵfac = function TechnologySectionApiService_Factory(t) {\n return new (t || TechnologySectionApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n TechnologySectionApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: TechnologySectionApiService,\n factory: TechnologySectionApiService.ɵfac,\n providedIn: 'root'\n });\n return TechnologySectionApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet TechnologyApiService = /*#__PURE__*/(() => {\n class TechnologyApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n create(r) {\n const request = r.toApiJson ? r : new CreateTechnologyRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.TechnologyService/Create\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CreateTechnologyResponse.fromProto(resp)));\n }\n get(r) {\n const request = r.toApiJson ? r : new GetTechnologyRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.TechnologyService/Get\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetTechnologyResponse.fromProto(resp)));\n }\n getMulti(r) {\n const request = r.toApiJson ? r : new GetMultiTechnologyRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.TechnologyService/GetMulti\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetMultiTechnologyResponse.fromProto(resp)));\n }\n update(r) {\n const request = r.toApiJson ? r : new UpdateTechnologyRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.TechnologyService/Update\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n delete(r) {\n const request = r.toApiJson ? r : new DeleteTechnologyRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.TechnologyService/Delete\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n getMultiCategory(r) {\n const request = r.toApiJson ? r : new GetMultiTechnologyCategoryRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.TechnologyService/GetMultiCategory\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetMultiTechnologyCategoryResponse.fromProto(resp)));\n }\n }\n TechnologyApiService.ɵfac = function TechnologyApiService_Factory(t) {\n return new (t || TechnologyApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n TechnologyApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: TechnologyApiService,\n factory: TechnologyApiService.ɵfac,\n providedIn: 'root'\n });\n return TechnologyApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet WebsiteSectionApiService = /*#__PURE__*/(() => {\n class WebsiteSectionApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n get(r) {\n const request = r.toApiJson ? r : new GetSectionRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.WebsiteSectionService/Get\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetWebsiteSectionResponse.fromProto(resp)));\n }\n updateConfig(r) {\n const request = r.toApiJson ? r : new UpdateWebsiteConfigRequest(r);\n return this.http.post(this._host + \"/snapshot.v1.WebsiteSectionService/UpdateConfig\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n WebsiteSectionApiService.ɵfac = function WebsiteSectionApiService_Factory(t) {\n return new (t || WebsiteSectionApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n WebsiteSectionApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: WebsiteSectionApiService,\n factory: WebsiteSectionApiService.ɵfac,\n providedIn: 'root'\n });\n return WebsiteSectionApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\nlet SnapshotCountSdkService = /*#__PURE__*/(() => {\n class SnapshotCountSdkService {\n constructor(service) {\n this.service = service;\n }\n getSnapshotCount(partnerId, marketId, salespersonId) {\n const req = new GetSnapshotCountCreatedBySalespersonIDRequest({\n partnerId: partnerId,\n marketId: marketId,\n salespersonId: salespersonId\n });\n return this.service.getSnapshotCountCreatedBySalespersonId(req);\n }\n }\n SnapshotCountSdkService.ɵfac = function SnapshotCountSdkService_Factory(t) {\n return new (t || SnapshotCountSdkService)(i0.ɵɵinject(SnapshotApiService));\n };\n SnapshotCountSdkService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SnapshotCountSdkService,\n factory: SnapshotCountSdkService.ɵfac,\n providedIn: 'root'\n });\n return SnapshotCountSdkService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction buildFieldMask(obj) {\n const fieldMaskPaths = [];\n for (const x in obj) {\n if (obj.hasOwnProperty(x) && obj[x] !== undefined) {\n fieldMaskPaths.push(x);\n }\n }\n return new FieldMask({\n paths: fieldMaskPaths\n });\n}\nlet AdvertisingSectionService = /*#__PURE__*/(() => {\n class AdvertisingSectionService {\n constructor(_api) {\n this._api = _api;\n }\n get(snapshotId) {\n return this._api.get({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.section));\n }\n updateConfig(snapshotId, advertisingConfig) {\n return this._api.updateConfig({\n snapshotId: snapshotId,\n advertisingConfig: new AdvertisingConfig(advertisingConfig),\n fieldMask: buildFieldMask(advertisingConfig)\n });\n }\n }\n AdvertisingSectionService.ɵfac = function AdvertisingSectionService_Factory(t) {\n return new (t || AdvertisingSectionService)(i0.ɵɵinject(AdvertisingSectionApiService));\n };\n AdvertisingSectionService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: AdvertisingSectionService,\n factory: AdvertisingSectionService.ɵfac,\n providedIn: 'root'\n });\n return AdvertisingSectionService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet CurrentSnapshotService = /*#__PURE__*/(() => {\n class CurrentSnapshotService {\n constructor(_api) {\n this._api = _api;\n }\n get(businessID) {\n const req = new GetCurrentRequest({\n businessId: businessID\n });\n return this._api.getCurrent(req);\n }\n }\n CurrentSnapshotService.ɵfac = function CurrentSnapshotService_Factory(t) {\n return new (t || CurrentSnapshotService)(i0.ɵɵinject(CurrentSnapshotApiService));\n };\n CurrentSnapshotService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: CurrentSnapshotService,\n factory: CurrentSnapshotService.ɵfac,\n providedIn: 'root'\n });\n return CurrentSnapshotService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ListingSectionService = /*#__PURE__*/(() => {\n class ListingSectionService {\n constructor(_api) {\n this._api = _api;\n }\n get(snapshotId) {\n return this._api.get({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.section));\n }\n updateConfig(snapshotId, listingConfig) {\n return this._api.updateConfig({\n snapshotId: snapshotId,\n listingConfig: new ListingConfig(listingConfig),\n fieldMask: buildFieldMask(listingConfig)\n });\n }\n getListingScan(businessId) {\n return this._api.getListingScan({\n businessId: businessId\n }).pipe(map(resp => resp.listingScan));\n }\n getAvailableListingSources(snapshotId) {\n return this._api.getAvailableListingSources({\n snapshotId\n }).pipe(map(resp => resp.sources));\n }\n ignoreListingSource(snapshotId, sourceId) {\n return this._api.ignoreListingSource({\n snapshotId,\n sourceId\n }).pipe(map(() => null));\n }\n unignoreListingSource(snapshotId, sourceId) {\n return this._api.unignoreListingSource({\n snapshotId,\n sourceId\n }).pipe(map(() => null));\n }\n }\n ListingSectionService.ɵfac = function ListingSectionService_Factory(t) {\n return new (t || ListingSectionService)(i0.ɵɵinject(ListingSectionApiService));\n };\n ListingSectionService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ListingSectionService,\n factory: ListingSectionService.ɵfac,\n providedIn: 'root'\n });\n return ListingSectionService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ReviewSectionService = /*#__PURE__*/(() => {\n class ReviewSectionService {\n constructor(_api) {\n this._api = _api;\n }\n get(snapshotId) {\n return this._api.get({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.section));\n }\n updateConfig(snapshotId, reviewConfig) {\n return this._api.updateConfig({\n snapshotId: snapshotId,\n reviewConfig: new ReviewConfig(reviewConfig),\n fieldMask: buildFieldMask(reviewConfig)\n });\n }\n }\n ReviewSectionService.ɵfac = function ReviewSectionService_Factory(t) {\n return new (t || ReviewSectionService)(i0.ɵɵinject(ReviewSectionApiService));\n };\n ReviewSectionService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: ReviewSectionService,\n factory: ReviewSectionService.ɵfac,\n providedIn: 'root'\n });\n return ReviewSectionService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet SEOSectionService = /*#__PURE__*/(() => {\n class SEOSectionService {\n constructor(_api) {\n this._api = _api;\n }\n get(snapshotId) {\n return this._api.get({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.section));\n }\n updateConfig(snapshotId, seoConfig) {\n return this._api.updateConfig({\n snapshotId: snapshotId,\n seoConfig: new SEOConfig(seoConfig),\n fieldMask: buildFieldMask(seoConfig)\n });\n }\n }\n SEOSectionService.ɵfac = function SEOSectionService_Factory(t) {\n return new (t || SEOSectionService)(i0.ɵɵinject(SEOSectionApiService));\n };\n SEOSectionService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SEOSectionService,\n factory: SEOSectionService.ɵfac,\n providedIn: 'root'\n });\n return SEOSectionService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet SnapshotLiteService = /*#__PURE__*/(() => {\n class SnapshotLiteService {\n constructor(_api) {\n this._api = _api;\n }\n get(businessId) {\n return this._api.get({\n businessId: businessId\n }).pipe(map(resp => resp.snapshot));\n }\n updateSnapshotLiteBusinessData(businessId, data) {\n return this._api.updateSnapshotLiteBusinessData({\n businessId: businessId,\n business: data,\n fieldMask: buildFieldMask(data)\n });\n }\n }\n SnapshotLiteService.ɵfac = function SnapshotLiteService_Factory(t) {\n return new (t || SnapshotLiteService)(i0.ɵɵinject(SnapshotLiteApiService));\n };\n SnapshotLiteService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SnapshotLiteService,\n factory: SnapshotLiteService.ɵfac,\n providedIn: 'root'\n });\n return SnapshotLiteService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet SocialSectionService = /*#__PURE__*/(() => {\n class SocialSectionService {\n constructor(_api) {\n this._api = _api;\n }\n get(snapshotId) {\n return this._api.get({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.section));\n }\n updateConfig(snapshotId, socialConfig) {\n // need to explicitly convert any object types\n if (socialConfig.selectedFacebookPost !== undefined) {\n socialConfig.selectedFacebookPost = new FacebookPost(socialConfig.selectedFacebookPost);\n }\n return this._api.updateConfig({\n snapshotId: snapshotId,\n socialConfig: new SocialConfig(socialConfig),\n fieldMask: buildFieldMask(socialConfig)\n });\n }\n }\n SocialSectionService.ɵfac = function SocialSectionService_Factory(t) {\n return new (t || SocialSectionService)(i0.ɵɵinject(SocialSectionApiService));\n };\n SocialSectionService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SocialSectionService,\n factory: SocialSectionService.ɵfac,\n providedIn: 'root'\n });\n return SocialSectionService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet WebsiteSectionService = /*#__PURE__*/(() => {\n class WebsiteSectionService {\n constructor(_api) {\n this._api = _api;\n }\n get(snapshotId) {\n return this._api.get({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.section));\n }\n updateConfig(snapshotId, websiteConfig) {\n return this._api.updateConfig({\n snapshotId: snapshotId,\n websiteConfig: new WebsiteConfig(websiteConfig),\n fieldMask: buildFieldMask(websiteConfig)\n });\n }\n }\n WebsiteSectionService.ɵfac = function WebsiteSectionService_Factory(t) {\n return new (t || WebsiteSectionService)(i0.ɵɵinject(WebsiteSectionApiService));\n };\n WebsiteSectionService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: WebsiteSectionService,\n factory: WebsiteSectionService.ɵfac,\n providedIn: 'root'\n });\n return WebsiteSectionService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet EcommerceSectionService = /*#__PURE__*/(() => {\n class EcommerceSectionService {\n constructor(_api) {\n this._api = _api;\n }\n get(snapshotId) {\n return this._api.get({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.section));\n }\n updateConfig(snapshotId, ecommerceConfig) {\n return this._api.updateConfig({\n snapshotId: snapshotId,\n ecommerceConfig: new EcommerceConfig(ecommerceConfig),\n fieldMask: buildFieldMask(ecommerceConfig)\n });\n }\n getSectionAvailability(snapshotId) {\n return this._api.getSectionAvailability({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.isAvailable));\n }\n }\n EcommerceSectionService.ɵfac = function EcommerceSectionService_Factory(t) {\n return new (t || EcommerceSectionService)(i0.ɵɵinject(EcommerceSectionApiService));\n };\n EcommerceSectionService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: EcommerceSectionService,\n factory: EcommerceSectionService.ɵfac,\n providedIn: 'root'\n });\n return EcommerceSectionService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nvar Origin = /*#__PURE__*/function (Origin) {\n Origin[\"UNKNOWN\"] = \"unknown\";\n Origin[\"PARTNER_CENTER\"] = \"partner-center\";\n Origin[\"SALES_SUCCESS_CENTER\"] = \"sales-success-center\";\n Origin[\"ACQUISITION_WIDGET\"] = \"acquisition-widget\";\n Origin[\"CAMPAIGN\"] = \"campaign\";\n Origin[\"LIST\"] = \"list\";\n Origin[\"SNAPSHOT\"] = \"snapshot\";\n Origin[\"OTHER\"] = \"other\";\n return Origin;\n}(Origin || {});\nclass PagedResponse {\n constructor(results, nextCursor, hasMore) {\n this.results = results;\n this.nextCursor = nextCursor;\n this.hasMore = hasMore;\n }\n}\nfunction recordFromApi(recordApi) {\n return {\n snapshotId: recordApi.snapshotId,\n businessId: recordApi.businessId,\n created: recordApi.created,\n expired: recordApi.expired,\n origin: recordApi.origin,\n createdBy: recordApi.createdBy\n };\n}\nconst CORE_WEB_VITALS_SPEED_INDEX = 'speed-index';\nconst CORE_WEB_VITALS_LARGEST_CONTENTFUL_PAINT = 'largest-contentful-paint';\nconst CORE_WEB_VITALS_MAX_POTENTIAL_FID = 'max-potential-fid';\nconst CORE_WEB_VITALS_CUMULATIVE_LAYOUT_SHIFT = 'cumulative-layout-shift';\nconst CORE_WEB_VITALS_ESTIMATED_INPUT_LATENCY = 'estimated-input-latency'; // deprecated\nconst CORE_WEB_VITALS_INTERACTIVE = 'interactive'; // not a core web vital\nlet SnapshotRecordService = /*#__PURE__*/(() => {\n class SnapshotRecordService {\n constructor(_api) {\n this._api = _api;\n }\n get(businessId, snapshotId) {\n return this._api.get({\n businessId: businessId,\n snapshotId: snapshotId\n }).pipe(map(resp => resp.record));\n }\n lookup(businessId, cursor, pageSize) {\n return this._api.lookup({\n businessId: businessId,\n pagingOptions: {\n cursor: cursor,\n pageSize: pageSize\n }\n }).pipe(map(resp => {\n const records = (resp.record || []).map(r => recordFromApi(r));\n return new PagedResponse(records, resp.pagingMetadata.nextCursor, resp.pagingMetadata.hasMore);\n }));\n }\n getLatestSnapshot(businessId) {\n return this._api.lookup({\n businessId: businessId,\n pagingOptions: {\n cursor: '',\n pageSize: 1\n }\n }).pipe(map(resp => (resp.record || []).map(r => recordFromApi(r))));\n }\n }\n SnapshotRecordService.ɵfac = function SnapshotRecordService_Factory(t) {\n return new (t || SnapshotRecordService)(i0.ɵɵinject(SnapshotRecordApiService));\n };\n SnapshotRecordService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SnapshotRecordService,\n factory: SnapshotRecordService.ɵfac,\n providedIn: 'root'\n });\n return SnapshotRecordService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet SnapshotService = /*#__PURE__*/(() => {\n class SnapshotService {\n constructor(_api) {\n this._api = _api;\n }\n get(snapshotId) {\n return this._api.get({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.snapshot));\n }\n provision(businessId, origin, originDetails, inferMissingData) {\n let source = '';\n if (!!origin) {\n source += origin;\n if (!!originDetails) {\n for (const detail of originDetails) {\n source += `:${detail}`;\n }\n }\n }\n return this._api.provision({\n businessId: businessId,\n origin: source,\n options: {\n inferMissingData: inferMissingData\n }\n }).pipe(map(resp => resp.snapshotId));\n }\n getSummary(snapshotId) {\n return this._api.getSummary({\n snapshotId: snapshotId\n });\n }\n getLatestSnapshotId(businessId) {\n return this._api.getLatestSnapshotId({\n businessId: businessId\n }).pipe(map(resp => resp.snapshotId));\n }\n updateConfig(snapshotId, snapshotConfig) {\n return this._api.updateConfig({\n snapshotId: snapshotId,\n config: new GlobalConfig(snapshotConfig),\n fieldMask: buildFieldMask(snapshotConfig)\n });\n }\n updateLanguageConfig(snapshotId, languageConfig) {\n return this._api.updateLanguageConfig({\n snapshotId: snapshotId,\n config: new LanguageConfig(languageConfig),\n fieldMask: buildFieldMask(languageConfig)\n });\n }\n getWhitelabel(snapshotId) {\n return this._api.getWhitelabel({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.branding));\n }\n getSalesPerson(snapshotId) {\n return this._api.getSalesPerson({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.salesPerson));\n }\n getConfiguration(snapshotId) {\n return this._api.getConfiguration({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.configuration));\n }\n getBusinessIdFromSalesforceId(salesforceId, partnerId) {\n return this._api.getBusinessIdFromSalesforceId({\n salesforceId: salesforceId,\n partnerId: partnerId\n }).pipe(map(resp => resp.businessId));\n }\n shareSnapshot(businessId, sender, contacts, snapshotId, email, domain) {\n return this._api.shareSnapshot({\n businessId: businessId,\n sender: sender,\n contacts: contacts,\n snapshotId: snapshotId,\n email: email,\n domain: domain\n });\n }\n previewEmail(email) {\n return this._api.previewEmail({\n email: email\n }).pipe(map(resp => {\n return this.stringToBlob(resp.renderedTemplate, 'application/html');\n }));\n }\n stringToBlob(value, type) {\n const binary = atob(value);\n const binaryLen = binary.length;\n const bytes = new Uint8Array(binaryLen);\n for (let i = 0; i < binaryLen; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return new Blob([bytes], {\n type: type\n });\n }\n getDomain(partnerId, application) {\n return this._api.getDomain({\n partnerId: partnerId,\n application: application\n }).pipe(map(res => res.primary));\n }\n getDirectCompetitors(snapshotId) {\n return this._api.getDirectCompetitors({\n snapshotId: snapshotId\n }).pipe(map(res => res.directCompetitors));\n }\n saveDirectCompetitors(snapshotId, directCompetitors) {\n return this._api.saveDirectCompetitors({\n snapshotId: snapshotId,\n directCompetitors: directCompetitors\n });\n }\n generatePdf(snapshotId) {\n return this._api.generatePdf({\n snapshotId\n }).pipe(map(res => res?.pdf));\n }\n }\n SnapshotService.ɵfac = function SnapshotService_Factory(t) {\n return new (t || SnapshotService)(i0.ɵɵinject(SnapshotApiService));\n };\n SnapshotService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: SnapshotService,\n factory: SnapshotService.ɵfac,\n providedIn: 'root'\n });\n return SnapshotService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet TechnologySectionService = /*#__PURE__*/(() => {\n class TechnologySectionService {\n constructor(_api) {\n this._api = _api;\n }\n get(snapshotId) {\n return this._api.get({\n snapshotId: snapshotId\n }).pipe(map(resp => resp.section));\n }\n updateConfig(snapshotId, technologyConfig) {\n return this._api.updateConfig({\n snapshotId,\n technologyConfig: new TechnologyConfig(technologyConfig),\n fieldMask: buildFieldMask(technologyConfig)\n });\n }\n }\n TechnologySectionService.ɵfac = function TechnologySectionService_Factory(t) {\n return new (t || TechnologySectionService)(i0.ɵɵinject(TechnologySectionApiService));\n };\n TechnologySectionService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: TechnologySectionService,\n factory: TechnologySectionService.ɵfac,\n providedIn: 'root'\n });\n return TechnologySectionService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AIPrompt, Access, AdvertisingConfig, AdvertisingData, AdvertisingSection, AdvertisingSectionApiService, AdvertisingSectionService, AdwordsData, AppDomain, Application, ArtificialIntelligenceApiService, Audit, AuditDetail, AuditSummary, AvailableListingSource, Branding, BrandingAssets, Business, CORE_WEB_VITALS_CUMULATIVE_LAYOUT_SHIFT, CORE_WEB_VITALS_ESTIMATED_INPUT_LATENCY, CORE_WEB_VITALS_INTERACTIVE, CORE_WEB_VITALS_LARGEST_CONTENTFUL_PAINT, CORE_WEB_VITALS_MAX_POTENTIAL_FID, CORE_WEB_VITALS_SPEED_INDEX, Clicks, CompetitionAnalysis, Competitor, CompetitorHomepageData, Configuration, Contact, CreateSnapshotRequest, CreateSnapshotResponse, CreateTechnologyRequest, CreateTechnologyResponse, Current, CurrentSnapshotApiService, CurrentSnapshotService, DataProviderAccuracy, DataProviderAccuracyStatus, DataProviderAccuracyStatusV2, DeleteTechnologyRequest, DirectCompetitor, Domain, DomainMetrics, EcommerceConfig, EcommerceData, EcommerceDataApplicationsAvailabilityEntry, EcommerceDataCompetitor, EcommerceSection, EcommerceSectionApiService, EcommerceSectionService, Email, FacebookData, FacebookPost, FieldMask, FloatRange, ForceRefreshSectionRequest, GMBClaimStatus, GenerateMessageRequest, GenerateMessageResponse, GeneratePDFRequest, GeneratePDFResponse, GetAdvertisingSectionResponse, GetAvailableListingSourcesRequest, GetAvailableListingSourcesResponse, GetBusinessIDFromSalesforceIDRequest, GetBusinessIDFromSalesforceIDResponse, GetConfigurationRequest, GetConfigurationResponse, GetCurrentRequest, GetCurrentResponse, GetDirectCompetitorsRequest, GetDirectCompetitorsResponse, GetDomainRequest, GetDomainResponse, GetEcommerceSectionResponse, GetLatestSnapshotIDRequest, GetLatestSnapshotIDResponse, GetListingScanRequest, GetListingScanResponse, GetListingSectionResponse, GetMultiTechnologyCategoryRequest, GetMultiTechnologyCategoryResponse, GetMultiTechnologyRequest, GetMultiTechnologyResponse, GetRequest, GetResponse, GetReviewSectionResponse, GetSEOSectionResponse, GetSalesPersonRequest, GetSalesPersonResponse, GetSectionAvailabilityRequest, GetSectionAvailabilityResponse, GetSectionRequest, GetSnapshotCountCreatedBySalespersonIDRequest, GetSnapshotCountCreatedBySalespersonIDResponse, GetSnapshotIDRequest, GetSnapshotIDResponse, GetSnapshotLiteRequest, GetSnapshotLiteResponse, GetSnapshotRequest, GetSnapshotResponse, GetSocialSectionResponse, GetSummaryRequest, GetSummaryResponse, GetTechnologyRequest, GetTechnologyResponse, GetTechnologySectionResponse, GetWebsiteSectionResponse, GetWhitelabelRequest, GetWhitelabelResponse, GlobalConfig, GlobalConfigEnabledSection, Grade, HomepageData, IgnoreListingSourceRequest, Impressions, InaccurateData, IndustryPercentiles, InferredFields, InstagramData, InstagramDataInstagramDataStatus, IntRange, Keyword, KeywordMetrics, LanguageConfig, LatLng, Listing, ListingAccuracy, ListingAccuracyCompetitor, ListingConfig, ListingData, ListingListingStatus, ListingPresence, ListingPresenceCompetitor, ListingScan, ListingSection, ListingSectionApiService, ListingSectionService, ListingSource, ListingV2, ListingV2ListingField, ListingV2ListingStatus, ListingV2Source, Listings, LocalSEOData, Location, LookupRequest, LookupResponse, OrganicDomainData, OrganicKeywordData, Origin, PagedRequestOptions, PagedResponse, PagedResponseMetadata, PayPerClickData, PreviewEmailRequest, PreviewEmailResponse, PreviewRefreshSnapshotForBusinessesRequest, PreviewRefreshSnapshotForBusinessesResponse, ProvisionSnapshotOptions, ProvisionSnapshotRequest, ProvisionSnapshotResponse, Record, Results, ResultsReviews, ReviewConfig, ReviewData, ReviewDataCompetitor, ReviewDataItem, ReviewSection, ReviewSectionApiService, ReviewSectionService, Role, Rule, RuleDetail, RuleSummary, SEOConfig, SEOData, SEODomainMetrics, SEOSection, SEOSectionApiService, SEOSectionService, SERPMetrics, SSLSummary, SSLSummaryStatus, SalesPerson, SampleSourceCount, SaveDirectCompetitorsRequest, Section, SectionContent, SectionSummary, ShareSnapshotRequest, Snapshot, SnapshotApiService, SnapshotCountSdkService, SnapshotData, SnapshotLite, SnapshotLiteApiService, SnapshotLiteService, SnapshotRecordApiService, SnapshotRecordService, SnapshotService, SocialConfig, SocialData, SocialDataCompetitor, SocialDataCompetitorFacebookData, SocialDataCompetitorInstagramData, SocialDataCompetitorTwitterData, SocialDataItem, SocialSection, SocialSectionApiService, SocialSectionService, Status, Technology, TechnologyApiService, TechnologyCategory, TechnologyConfig, TechnologyData, TechnologySection, TechnologySectionApiService, TechnologySectionService, TwitterData, URL, UnignoreListingSourceRequest, UpdateAdvertisingConfigRequest, UpdateCurrentRequest, UpdateEcommerceConfigRequest, UpdateListingConfigRequest, UpdateReviewConfigRequest, UpdateSEOConfigRequest, UpdateSnapshotConfigRequest, UpdateSnapshotLanguageConfigRequest, UpdateSnapshotLiteBusinessDataRequest, UpdateSocialConfigRequest, UpdateTechnologyConfigRequest, UpdateTechnologyRequest, UpdateWebsiteConfigRequest, Vicinity, VideoStyle, WebsiteConfig, WebsiteData, WebsiteDataCompetitor, WebsiteSection, WebsiteSectionApiService, WebsiteSectionService };\n","import { SectionSummaryInterface, LocationInterface } from '@vendasta/snapshot';\n\nexport type SnapshotResult = 'valid' | 'not-ready' | 'not-supported';\n\nexport interface TrackingProperties {\n snapshotId?: string;\n category?: string;\n}\n\nexport interface CurrentInterface {\n snapshot?: CurrentSnapshotInterface;\n}\n\nexport class Current implements CurrentInterface {\n snapshot: CurrentSnapshotInterface;\n\n constructor(data: CurrentInterface) {\n this.snapshot = new CurrentSnapshot(data.snapshot);\n }\n}\n\nexport interface CurrentSnapshotInterface {\n snapshotId?: string;\n created?: Date;\n expired?: Date;\n path?: string;\n}\n\nexport class CurrentSnapshot implements CurrentSnapshotInterface {\n snapshotId: string;\n created: Date;\n expired: Date;\n path: string;\n\n constructor(data: CurrentSnapshotInterface) {\n this.snapshotId = data.snapshotId || '';\n this.created = data.created || null;\n this.expired = data.expired || null;\n this.path = data.path || '';\n }\n}\n\nexport interface SnapshotSummaryInterface {\n snapshotId?: string;\n businessId?: string;\n companyName?: string;\n created?: Date;\n expired?: Date;\n score?: string;\n sections?: SectionSummaryInterface[];\n location?: LocationInterface;\n result?: SnapshotResult;\n}\n\nexport class Location implements LocationInterface {\n address: string;\n city: string;\n state: string;\n country: string;\n\n constructor(data: LocationInterface) {\n this.address = data.address || '';\n this.city = data.city || '';\n this.state = data.state || '';\n this.country = data.country || '';\n }\n}\n\nexport class SnapshotSummary implements SnapshotSummaryInterface {\n snapshotId: string;\n businessId: string;\n companyName: string;\n created: Date;\n expired: Date;\n score: string;\n sections: SectionSummaryInterface[];\n location: LocationInterface;\n result: SnapshotResult;\n\n constructor(data: SnapshotSummaryInterface, result: SnapshotResult) {\n this.snapshotId = data.snapshotId;\n this.businessId = data.businessId;\n this.companyName = data.companyName;\n this.created = data.created;\n this.expired = data.expired;\n this.score = data.score;\n this.sections = data.sections;\n this.location = new Location(data.location);\n this.result = result;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CurrentSnapshotService, SnapshotService } from '@vendasta/snapshot';\nimport { DomainInterface, DomainService } from '@vendasta/domain';\nimport { Observable, of as observableOf } from 'rxjs';\nimport { SnapshotSummary, CurrentSnapshot } from './scorecard';\nimport { catchError, map, publishReplay, refCount, shareReplay } from 'rxjs/operators';\n\nconst CACHE_SIZE = 1;\n\n@Injectable()\nexport class ScorecardService {\n private domainCache$: Map> = new Map>();\n\n constructor(\n private currentSnapshotService: CurrentSnapshotService,\n private snapshotService: SnapshotService,\n private domainService: DomainService,\n ) {}\n\n getCurrentSnapshot(businessId: string): Observable {\n return this.currentSnapshotService.get(businessId).pipe(\n map((current) => {\n return new CurrentSnapshot(current.snapshot);\n }),\n catchError(() => {\n return observableOf(new CurrentSnapshot({}));\n }),\n publishReplay(1),\n refCount(),\n );\n }\n\n getSummary(snapshotId: string): Observable {\n if (snapshotId.startsWith('SNAPSHOT-')) {\n return observableOf({ snapshotId: snapshotId, result: 'not-supported' });\n }\n return this.snapshotService.getSummary(snapshotId).pipe(\n map((summary) => {\n return new SnapshotSummary(summary, 'valid');\n }),\n catchError(() => {\n return observableOf({ result: 'not-ready' });\n }),\n publishReplay(1),\n refCount(),\n );\n }\n\n getDomain(partnerId: string): Observable {\n if (!this.domainCache$[partnerId]) {\n this.domainCache$[partnerId] = this.domainService\n .getDomainByIdentifier(`/application/ST/partner/${partnerId}`)\n .pipe(\n map((domainResp) => domainResp.primary),\n shareReplay(CACHE_SIZE),\n );\n }\n\n return this.domainCache$[partnerId];\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\nconst COLORS = {\n gradePositive: '#4CAF50',\n gradeNeutral: '#FFB300',\n gradeNegative: '#D32F2F',\n};\n\n@Component({\n selector: 'snap-overall-score',\n templateUrl: './overall-score.component.html',\n styleUrls: ['./overall-score.component.scss'],\n})\nexport class OverallScoreComponent implements OnInit {\n @Input() overallScore: string;\n\n score: number;\n\n ngOnInit(): void {\n this.score = parseInt(this.overallScore, 0);\n }\n\n strokeColorForScore(score: number): string {\n if (score >= 80) {\n return COLORS.gradePositive;\n }\n if (score >= 50) {\n return COLORS.gradeNeutral;\n }\n return COLORS.gradeNegative;\n }\n}\n","
\n \n \n \n {{ score + '%' }}\n \n \n \n \n
\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Grade } from '@vendasta/snapshot';\n\ntype GradeSize = 'extra-small' | 'small' | 'medium' | 'large';\n\n@Component({\n selector: 'snap-grade',\n templateUrl: './grade.component.html',\n styleUrls: ['./grade.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [CommonModule],\n})\nexport class GradeComponent {\n @Input() grade: Grade;\n @Input() size: GradeSize;\n @Input() showGrade = true;\n\n get gradeLetter(): string {\n return this.grade && this.grade > 0 ? Grade[this.grade] : '-';\n }\n\n get radius(): number {\n switch (this.size) {\n case 'large':\n return 33;\n case 'medium':\n return 25;\n case 'small':\n return 17;\n default:\n return 13;\n }\n }\n}\n","
\n \n \n \n {{ gradeLetter }}\n \n \n
\n","import { Component, Input } from '@angular/core';\nimport { SectionSummaryInterface } from '@vendasta/snapshot';\n\n@Component({\n selector: 'snap-section-grade',\n templateUrl: './section-grade.component.html',\n styleUrls: ['./section-grade.component.scss'],\n})\nexport class SectionGradeComponent {\n @Input() section: SectionSummaryInterface;\n @Input() showGrade: boolean;\n}\n","
\n \n \n {{ 'SECTIONS.' + section.sectionName | uppercase | translate }}\n \n \n \n
\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TrackingProperties } from '../scorecard';\n\n@Component({\n selector: 'snap-actions',\n templateUrl: './actions.component.html',\n styleUrls: ['./actions.component.scss'],\n})\nexport class ActionsComponent {\n @Input() snapshotURL: string;\n @Input() trackingProperties: TrackingProperties;\n @Input() enableURLCopy = false;\n @Input() showEditButton = false;\n\n @Output() viewSnapshotClicked: EventEmitter = new EventEmitter();\n @Output() editSnapshotClicked: EventEmitter = new EventEmitter();\n\n viewSnapshot(): void {\n this.viewSnapshotClicked.emit();\n }\n\n editSnapshot(): void {\n this.editSnapshotClicked.emit();\n }\n}\n","\n {{ 'CTA.VIEW_REPORT' | translate }}\n\n\n {{ 'CTA.EDIT_REPORT' | translate }}\n\n\n {{ 'CTA.COPY_URL' | translate }}\n content_copy\n\n","import { Component, EventEmitter, OnInit, Output, Input } from '@angular/core';\nimport { TrackingProperties } from '../scorecard';\nimport { formatDistance } from 'date-fns';\n\ntype SnapshotStatus = 'active' | 'expired' | 'outdated' | 'unknown';\n\n@Component({\n selector: 'snap-action-refresh',\n templateUrl: './action-refresh.component.html',\n styleUrls: ['./action-refresh.component.scss'],\n})\nexport class ActionRefreshComponent implements OnInit {\n @Input() created: Date;\n @Input() expired: Date;\n @Input() snapshotName: string;\n @Input() trackingProperties: TrackingProperties;\n\n @Output() refreshSnapshotClicked: EventEmitter = new EventEmitter();\n\n snapshotStatus: SnapshotStatus;\n snapshotCreatedDaysAgo: string;\n\n ngOnInit(): void {\n this.snapshotStatus = this.getSnapshotStatus(this.expired);\n this.snapshotCreatedDaysAgo = formatDistance(this.created, new Date(), { addSuffix: true });\n }\n\n refreshSnapshot(): void {\n this.refreshSnapshotClicked.emit();\n }\n\n getSnapshotStatus(expiry: Date): SnapshotStatus {\n if (expiry === undefined) {\n return 'unknown';\n }\n const now = new Date();\n const expiryPlus3Months = new Date(expiry).setMonth(expiry.getMonth() + 3);\n\n if (now < expiry) {\n return 'active';\n }\n if (now < new Date(expiryPlus3Months)) {\n return 'expired';\n }\n return 'outdated';\n }\n}\n","
\n
\n
\n \n \n \n {{ 'COMMON.CREATED' | translate }} {{ created | date: 'longDate' }}\n \n \n\n \n \n {{ 'COMMON.CREATED' | translate }} {{ created | date: 'longDate' }}\n \n ({{ snapshotCreatedDaysAgo }})\n
\n \n refresh\n {{ 'CTA.REFRESH_REPORT' | translate }}\n \n
\n
\n\n \n \n {{ 'COMMON.CREATED' | translate }} {{ created | date: 'longDate' }}\n \n ({{ snapshotCreatedDaysAgo }})\n
\n \n {{\n 'CTA.REFRESH_WARNING'\n | translate: { snapshotName: snapshotName }\n }}\n \n
\n
\n \n refresh\n {{ 'CTA.REFRESH_REPORT' | translate }}\n \n
\n
\n\n \n
\n \n {{\n 'CTA.REFRESH_WARNING'\n | translate: { snapshotName: snapshotName }\n }}\n \n
\n
\n \n refresh\n {{ 'CTA.REFRESH_REPORT' | translate }}\n \n
\n
\n
\n
\n
\n
\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'snap-not-ready',\n templateUrl: './not-ready.component.html',\n styleUrls: ['./not-ready.component.scss'],\n})\nexport class NotReadyComponent {\n @Input() snapshotName: string;\n}\n","
\n \n \n schedule\n \n \n {{ 'EMPTY_STATE.NOT_READY.TITLE' | translate }}\n \n

\n
\n
\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'snap-not-supported',\n templateUrl: './not-supported.component.html',\n styleUrls: ['./not-supported.component.scss'],\n})\nexport class NotSupportedComponent {\n @Input() snapshotName: string;\n}\n","
\n \n \n schedule\n \n \n {{\n 'EMPTY_STATE.NOT_SUPPORTED.TITLE'\n | translate: { snapshotName: snapshotName }\n }}\n \n \n
\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Environment, EnvironmentService } from '@galaxy/core';\nimport { LocationInterface } from '@vendasta/snapshot';\nimport { differenceInHours } from 'date-fns';\nimport { Subject, firstValueFrom } from 'rxjs';\nimport { SnapshotSummary, TrackingProperties } from './scorecard';\nimport { ScorecardService } from './scorecard.service';\n\n@Component({\n selector: 'snap-scorecard',\n templateUrl: './scorecard.component.html',\n styleUrls: ['./scorecard.component.scss'],\n})\nexport class ScorecardComponent {\n private readonly businessId$$ = new Subject();\n @Input() set businessId(businessId: string) {\n if (businessId) {\n this.businessId$$.next(businessId);\n }\n }\n\n private readonly partnerId$$ = new Subject();\n @Input() set partnerId(partnerId: string) {\n if (partnerId) {\n this.partnerId$$.next(partnerId);\n }\n }\n\n @Input() snapshotName: string;\n @Input() trackingCategory: string;\n @Input() enableURLCopy = false;\n @Input() showEditButton = false;\n @Input() openInEditMode = false;\n\n @Output() refreshReportClickedEvent: EventEmitter = new EventEmitter();\n\n readonly snapshotUrl: Promise;\n readonly snapshotSummary: Promise;\n readonly trackingProperties: Promise;\n readonly address: Promise;\n readonly isLessThan24HoursOld: Promise;\n readonly snapshotEditV2URL: Promise;\n\n constructor(\n private service: ScorecardService,\n private environmentService: EnvironmentService,\n ) {\n const currentSnapshot = firstValueFrom(this.businessId$$).then((businessId) =>\n firstValueFrom(this.service.getCurrentSnapshot(businessId)),\n );\n\n this.snapshotSummary = currentSnapshot.then((current) =>\n firstValueFrom(this.service.getSummary(current?.snapshotId)),\n );\n\n this.trackingProperties = this.snapshotSummary.then((summary) => {\n return {\n snapshotId: summary?.snapshotId || '',\n category: this.trackingCategory || '',\n };\n });\n\n this.address = this.snapshotSummary.then((summary) => buildAddress(summary?.location));\n this.isLessThan24HoursOld = this.snapshotSummary.then((s) => differenceInHours(new Date(), s.created) < 24);\n\n this.snapshotUrl = Promise.all([this.getSnapshotDomain(), currentSnapshot]).then(([domain, snapshot]) => {\n if (!snapshot.path) {\n return '';\n }\n\n // let host = window.location.hostname;\n if (window.location.hostname === 'localhost') {\n // host = 'localhost:' + window.location.port;\n }\n\n return domain + snapshot.path;\n });\n\n this.snapshotEditV2URL = Promise.all([this.getSnapshotDomain(), currentSnapshot]).then(([domain, snapshot]) => {\n if (!snapshot.snapshotId) {\n return '';\n }\n\n const snapshotID = snapshot.snapshotId;\n return `${domain}/snapshot/v2/${snapshotID}/edit`;\n });\n }\n\n private async getSnapshotDomain(): Promise {\n return firstValueFrom(this.partnerId$$)\n .then((partnerId) => firstValueFrom(this.service.getDomain(partnerId)))\n .then((d) => {\n const scheme = d.secure ? 'https' : 'http';\n if (d.domain) {\n return `${scheme}://${d.domain}`;\n }\n return this.host;\n });\n }\n\n onViewSnapshotClicked(snapshotURL: string): void {\n this.openSnapshotUrl(snapshotURL, this.openInEditMode);\n }\n\n onEditSnapshotClicked(): void {\n this.openSnapshotV2EditUrl();\n }\n\n onRefreshSnapshotClicked(): void {\n this.refreshReportClickedEvent.emit();\n }\n\n openSnapshotUrl(snapshotURL: string, isEditMode: boolean): void {\n if (isEditMode) {\n snapshotURL = snapshotURL + '/edit';\n }\n window.open(snapshotURL, '_blank', 'noopener');\n }\n\n async openSnapshotV2EditUrl(): Promise {\n await this.snapshotEditV2URL.then((url) => window.open(url, '_blank', 'noopener'));\n }\n\n private get host(): string {\n switch (this.environmentService.getEnvironment()) {\n case Environment.DEMO:\n return `https://salestool-demo.appspot.com`;\n case Environment.PROD:\n return `https://www.snapshotreport.biz`;\n default:\n return `https://www.snapshotreport.biz`;\n }\n }\n}\n\nexport function buildAddress(location: LocationInterface): string {\n if (!location) {\n return '';\n }\n let address = location.address || '';\n if (location.city) {\n address += ` ${location.city}`;\n }\n if (location.state) {\n address += `, ${location.state}`;\n }\n if (location.country) {\n address += `, ${location.country}`;\n }\n return address;\n}\n","
\n \n \n \n \n
\n
\n \n\n
\n {{ summary?.companyName }}\n {{ address | async }}\n
\n
\n
\n\n \n
\n \n \n \n
\n
\n\n \n \n \n \n \n \n \n
\n\n \n \n \n\n \n \n \n \n \n \n \n
\n
\n
\n
\n\n\n \n\n","{\n \"TITLES\": {\n \"SNAPSHOT_REPORT\": \"Snapshot Report\",\n \"SNAPSHOT_REPORTS\": \"Snapshot Reports\",\n \"BUSINESS_DETAILS\": \"Business details\",\n \"OVERALL_SCORE\": \"Overall score\",\n \"LISTINGS\": \"Listings\",\n \"REVIEWS\": \"Reviews\",\n \"WEBSITE\": \"Website\",\n \"ADVERTISING\": \"Advertising\",\n \"SOCIAL\": \"Social\",\n \"SEO\": \"SEO\",\n \"ECOMMERCE\": \"Ecommerce\",\n \"TECHNOLOGY\": \"Technology\"\n },\n \"OVERALL\": {\n \"DESKTOP_TITLE\": \"Overall score for {{name}}\",\n \"GRADE_EXPLANATION\": {\n \"TITLE\": \"Overall score\",\n \"SECONDARY_PRE_SCALE\": \"We calculate your overall score by converting each section grade into a numerical score. We follow this scoring chart:\",\n \"SECONDARY_POST_SCALE\": \"Then, we add these scores and divide by a perfect score (4 X # of section grades). The result is displayed as a percentage and rounded to the nearest whole number.\"\n }\n },\n \"SIDEBAR\": {\n \"NEED_ASSISTANCE\": \"Need assistance?\"\n },\n \"EDIT_REPORT\": {\n \"EMAIL_REPORT\": \"Email report\",\n \"VIEW_REPORT\": \"View report\",\n \"REFRESH\": \"Refresh\",\n \"CUSTOMIZE_REPORT\": \"Customize report\",\n \"SHOW_GRADES\": \"Show letter grades and overall score\",\n \"SHOW_SECONDARY_GRADES\": \"Show secondary letter grades\",\n \"SHOW_IMAGES\": \"Show images\",\n \"VIDEO_STYLE\": \"Video style\",\n \"LANGUAGE\": \"Language\",\n \"LANGUAGE_SWITCHER_NOTE\": \"Translation of the website section may take up to five minutes.\",\n \"EDIT_MESSAGE\": \"Edit message\",\n \"SAVE_MESSAGE\": \"Save message\",\n \"RESET\": \"Reset to default\",\n \"EDIT_PRIMARY_BUTTON\": \"Edit primary button\",\n \"SEND_EMAIL\": \"Send report via email\",\n \"SCREENSHARE_REPORT\": \"Screenshare report\",\n \"COMPETITORS\": \"Competitors\",\n \"UPDATE_COMPETITORS_DESCRIPTION\": \"Enter up to 3 competitors for the SEO and Advertising sections\",\n \"UPDATE_COMPETITORS\": \"Update competitors\",\n \"UPDATE_COMPETITORS_SUCCESS\": \"Successfully updated competitors, please refresh the page in a few minutes to get the new data.\",\n \"DIRECT_COMPETITORS\": \"Direct competitors\",\n \"UPDATE_DIRECT_COMPETITORS_DESCRIPTION\": \"Select up to 3 competitors for the Listing and Review sections\",\n \"SNAPSHOT_CREATED\": \"snapshot created: {{created}}\",\n \"BUTTON_PREVIEW\": \"Button preview\",\n \"CUSTOM_BUTTON_TEXT\": \"Custom button text\",\n \"CUSTOM_BUTTON_URL\": \"Custom button URL\",\n \"RADIO_GROUP_LABEL\": \"When clicked take users to...\",\n \"CONTACT_US_FORM\": \"Contact us form\",\n \"PRODUCT\": \"Product\",\n \"ERRORS\": {\n \"CUSTOM_URL_INVALID\": \"Please provide a valid URL\",\n \"PRODUCT_ID_INVALID\": \"Please select a Product\",\n \"DEACTIVATED_PRODUCT_ID\": \"The previous selected product is no longer valid\",\n \"UPDATE_CONFIG\": \"Error updating section configuration\"\n },\n \"NO_PRODUCTS_IN_STORE\": \"No products available in store\",\n \"UPDATE_CONFIG_SUCCESS\": \"Section configuration was updated\",\n \"LOCAL_SEO\": {\n \"TITLE\": \"Local SEO keyword\",\n \"SUBTITLE_GMB_CATEGORY\": \"Editing this business' keyword will refresh the results in the Local SEO section. By default, this keyword is set to the business category pulled in from Google Business Profile on account creation.\",\n \"SUBTITLE_WITH_KEYWORD\": \"Editing this business' keyword will refresh the results in the Local SEO section.\",\n \"SUBTITLE_BUSINESS_PROFILE_CATEGORY\": \"Editing this business' keyword will refresh the results in the Local SEO section. By default, this keyword is set to the category pulled in from the business category set on the business details.\",\n \"KEYWORD_LABEL\": \"Keyword\",\n \"UPDATE_BUTTON\": \"Update keyword\",\n \"UPDATE_WARNING\": \"It may take a few minutes for these results to appear. Please check back later.\",\n \"CHARACTERS_LENGTH_ERROR\": \"Keyword must not exceed 100 characters\",\n \"SNAPSHOT_EXPIRED\": \"This {{snapshotName}} is expired. In order to update this business' keyword, you'll first need to \",\n \"REFRESH_REPORT\": \"refresh this report.\",\n \"PREVIEW_NEAR_ME\": \"'{{keyword}} near me'\",\n \"PREVIEW_CITY\": \"'{{keyword}} in {{city}}'\",\n \"KEYWORD_REQUIRED\": \"Keyword is required\"\n }\n },\n \"BOOKED_MEETINGS\": {\n \"TITLE\": \"Meetings\",\n \"BOOK_A_MEETING\": \"Book a meeting\",\n \"LABEL\": \"Allow viewers to book meetings\",\n \"SET_UP_MEETING_SCHEDULER\": \"Set up Meeting Scheduler\"\n },\n \"SHARE_SNAPSHOT\": {\n \"TITLE\": \"Share {{snapshotReportName}}\",\n \"SEND_FROM_TITLE\": \"Send from\",\n \"SEND_TO_TITLE\": \"Send to\",\n \"EMAIL_CONTENT_TITLE\": \"Email content\",\n \"SUCCESS\": \"Email scheduled to be sent.\",\n \"ERROR\": \"Failed to send email. Please try again later.\",\n \"REMOVE_RECIPIENT\": \"Remove recipient\",\n \"ADD_ANOTHER_RECIPIENT\": \"+ Add another recipient\",\n \"LABELS\": {\n \"FIRST_NAME\": \"First name\",\n \"LAST_NAME\": \"Last name\",\n \"EMAIL_MESSAGE\": \"Message\",\n \"ADD_CONTACT\": \"Add a contact email\"\n },\n \"EMAIL\": {\n \"SUBJECT\": \"Take a look at this report for {{companyName}}\",\n \"MESSAGE\": \"Hi,\\n\\nYou might be interested in this report that showcases how the business is performing online.\\n\\nRegards\",\n \"DIALOG_SALES_PERSON_MESSAGE\": \"Hi,\\n\\nThe {{snapshotName}} is a peek into what your business looks like online and how customers see you. It shows you where you're listed online from directories to review sites, social networks to blogs. See if you're easily searchable, what your customers think about you and how you compare to the industry average.\\n\\nFull information will be available on the report within 30 minutes. If you have any questions please contact your sales representative {{salesPersonName}} -{{salesPersonJobPosition}} at {{salesPersonEmail}} {{salesPersonPhoneNumber}}\\n\\nRegards\",\n \"DIALOG_NO_SALES_PERSON_DATA_MESSAGE\": \"Hi,\\n\\nThe {{snapshotName}} is a peek into what your business looks like online and how customers see you. It shows you where you're listed online from directories to review sites, social networks to blogs. See if you're easily searchable, what your customers think about you and how you compare to the industry average.\\n\\nFull information will be available on the report within 30 minutes.\\n\\nRegards\",\n \"GREETING\": \"Hey there\",\n \"OR_CALL\": \"or call\",\n \"BUTTON_TEXT\": \"View {{snapshotName}}\",\n \"CLOSING\": \"Kind regards\"\n },\n \"DIALOG\": {\n \"TO\": \"To\",\n \"SUBJECT\": \"Subject\",\n \"MESSAGE\": \"Message\",\n \"SENDER_NAME\": \"Sender name\",\n \"SENDER_EMAIL\": \"Sender email\"\n },\n \"AI_ACTIONS\": {\n \"SUGGEST_CONTENT\": \"Suggest content\",\n \"SUGGEST_GENERAL_CONTENT\": \"Suggest general content\",\n \"SUGGEST_SECTION_CONTENT\": \"Suggest section-specific content\",\n \"SUGGEST_SECTION_PLACEHOLDER\": \"Suggest content focused on...\",\n \"SUGGEST_SECTION_LABEL\": \"Suggest content focused on:\",\n \"FAILED\": \"Failed to generate the message\"\n }\n },\n \"COMPETITORS\": {\n \"COMPETITOR\": \"Competitor\",\n \"COMPETITORS_SECTION_DESCRIPTION\": \"Including competitors helps personalize your {{snapshotReportsLabel}} and connect with your prospects.\",\n \"SNAPSHOT_EXPIRED\": \"This {{snapshotName}} is expired. In order to edit competitors, you'll first need to \",\n \"REFRESH_REPORT\": \"refresh this report.\",\n \"INDUSTRY_AVERAGE_ONLY\": \"Only compare to industry\",\n \"SPECIFIC\": \"Specific\",\n \"SAVE_BUTTON\": \"Save competitors\",\n \"UPDATE_COMPETITORS_DISCLAIMER\": \"The update may take a few minutes\",\n \"KEYWORD_COMPETITORS\": {\n \"RADIO_BUTTON\": \"Use competitors' websites\",\n \"DESCRIPTION\": \"'Use competitors' websites' will add competitor data for the Website, Ecommerce, SEO, and Advertising sections. To populate all sections, select 'Use competitors' {{snapshotReportsLabel}}'\",\n \"BUSINESS_NAME\": \"Business name\",\n \"WEBSITE_URL\": \"Website URL\"\n },\n \"DIRECT_COMPETITORS\": {\n \"RADIO_BUTTON\": \"Use competitors' {{snapshotReportsLabel}} in the same industry\",\n \"DESCRIPTION_1\": \"Requires existing {{snapshotReportsLabel}}\",\n \"DESCRIPTION_2\": \"'Use competitors' {{snapshotReportsLabel}} in the same industry' can be used if you've created {{snapshotReportsLabel}} for this business' competitors. This will add competitor data for all sections of the report.\"\n },\n \"ACCOUNT_GROUP\": {\n \"COMPETITOR_NAME\": \"Competitor name\",\n \"COMPETITOR_URL\": \"Competitor URL\",\n \"COMPETITOR_DELETE_MESSAGE\": \"This competitor will be removed from business competitors.\",\n \"COMPETITOR_SAVE_SUCCESS\": \"Successfully updated competitors, please refresh the page in a few minutes to get the new data.\",\n \"COMPETITOR_SAVE_ERROR\": \"Error saving competitor\",\n \"COMPETITOR_DELETE_SUCCESS\": \"Competitor deleted successfully\",\n \"COMPETITOR_DELETE_ERROR\": \"Error deleting competitor\",\n \"COMPETITOR_NAME_REQUIRED\": \"Name is required\",\n \"COMPETITOR_DELETE\": \"Delete {{name}}?\",\n \"ADD_COMPETITOR\": \"+ Add competitor\"\n },\n \"CONFIRMATION_DATA\": {\n \"TITLE\": \"Change competitors\",\n \"TEXT\": \"You will lose the existing results by changing competitors. Do you want to proceed?\"\n }\n },\n \"VIEW_REPORT\": {\n \"LAST_UPDATED\": \"Report content last updated:\",\n \"PREPARED_BY\": \"PREPARED BY\"\n },\n \"REFRESH_REPORT\": {\n \"TITLE\": \"Refresh {{ snapshotName }}\",\n \"FEES\": \"Standard {{ snapshotName }} fees apply\",\n \"POPULATE\": \"Please be aware that data will take time to populate\",\n \"REOPEN\": \"Report is being refreshed. Please re-open the report shortly.\",\n \"REDIRECTING\": \"Report is refreshing. You will be redirected shortly.\",\n \"ERROR_PROVISIONING\": \"Failed to refresh. Please try again later.\"\n },\n \"BUSINESS_DETAILS\": {\n \"NAME\": \"Name\",\n \"ADDRESS\": \"Address\",\n \"CITY\": \"City\",\n \"STATE\": \"State\",\n \"ZIP\": \"Zip\",\n \"PHONE_NUMBER\": \"Phone number\",\n \"WEBSITE\": \"Website\",\n \"INFERRED_WEBSITE\": \"Inferred website\",\n \"EDIT_ACCOUNT\": \"Edit the account\",\n \"CATEGORY\": \"Business category\",\n \"NO_CATEGORY_SELECTED\": \"Please select a category for this business\"\n },\n \"INCORRECT_WEBSITE_INFO\": {\n \"TITLE\": \"Not the right information?\",\n \"TOOLTIP_VIEW_MODE\": \"We inferred your data from Google. If it’s not correct information\",\n \"TOOLTIP_EDIT_MODE\": \"We inferred this information from Google. If it's not correct\"\n },\n \"COMMON\": {\n \"SHARE\": \"Share\",\n \"MISSING\": \"Missing\",\n \"CONTACT_US\": \"Contact us\",\n \"SPEED\": \"Speed\",\n \"SHOW_ALL\": \"Show all\",\n \"HIDE\": \"Hide\",\n \"OVERLAP\": \"Overlap\",\n \"KEYWORDS\": \"Keywords\",\n \"CLICKS\": \"Clicks\",\n \"BUDGET\": \"Budget\",\n \"VALUE\": \"Value\",\n \"YOU\": \"You\",\n \"YOUR_BUSINESS\": \"Your business\",\n \"YOUR_COMPETITORS\": \"Your competitors\",\n \"INDUSTRY_AVERAGE\": \"Industry average\",\n \"INDUSTRY_LEADER\": \"Industry leaders\",\n \"AVERAGE\": \"Average\",\n \"FIRST_NAME\": \"First name\",\n \"LAST_NAME\": \"Last name\",\n \"CANCEL\": \"Cancel\",\n \"SAVE\": \"Save\",\n \"DELETE\": \"Delete\",\n \"SEND\": \"Send\",\n \"ACCESS_NOW\": \"Access now\",\n \"NOT_FOUND\": \"Not found\",\n \"NO_MATCH\": \"No match\",\n \"VIEW_EXAMPLE\": \"View example\",\n \"TRY_AGAIN\": \"Try again\",\n \"ACCURATE\": \"Accurate\",\n \"CONTAINS_ERRORS\": \"Contains errors\",\n \"FOUND\": \"Found\",\n \"EMAIL_ADDRESS\": \"Email address\",\n \"ENTER_EMAIL_ADDRESS\": \"Enter email address\",\n \"GET_IN_TOUCH\": \"Get in touch\",\n \"ADD\": \"Add\",\n \"INVALID_URL\": \"Invalid URL\",\n \"UPDATE\": \"Update\",\n \"RANK\": \"Rank\",\n \"COMPETITIVENESS\": \"Competitiveness\",\n \"SEARCHES\": \"Searches\",\n \"FOLLOWERS\": \"Followers\",\n \"PHONE_NUMBER\": \"Phone number\",\n \"GRADE_INFO\": \"How is this grade calculated?\",\n \"PERCENTILE\": \"Percentile\",\n \"EDIT\": \"Edit\",\n \"PROCEED\": \"Proceed\",\n \"LEARN_MORE\": \"Learn more\",\n \"RECOMMENDATION\": \"Recommendation\",\n \"WHY_IT_MATTERS\": \"Why it matters\",\n \"MORE\": \"more\",\n \"NONE_FOUND\": \"None found\",\n \"PREVIEW\": \"Preview\",\n \"SUBJECT\": \"Subject\",\n \"GREETING\": \"Greeting\",\n \"CLOSING\": \"Closing\",\n \"BUTTON_TEXT\": \"Button text\",\n \"LINK\": \"Link\",\n \"SIZE\": \"Size: \",\n \"CALL\": \"Call\",\n \"SEND_MESSAGE\": \"Send message\",\n \"CREATED\": \"Created\",\n \"ACCOUNT_URL\": \"Account URL\",\n \"WATCH_VIDEO\": \"Watch video\",\n \"OTHER\": \"other\",\n \"OTHERS\": \"others\",\n \"DOWNLOAD\": \"Download\",\n \"PRINT\": \"Print\"\n },\n \"ERRORS\": {\n \"ERROR_LOADING_PAGE\": \"There was an error loading this page\",\n \"EMAIL_REQUIRED\": \"An email is required\",\n \"EMAIL_INVALID\": \"Not a valid email\",\n \"PHONE_NUMBER_REQUIRED\": \"A phone number is required\",\n \"MESSAGE_REQUIRED\": \"A message is required\",\n \"MESSAGE_TOO_LONG\": \"Message is too long\",\n \"CONTACT_SALES_REP\": \"There was an error contacting your sales representative, please try again.\",\n \"ERROR_LOADING_TITLE\": \"Something's missing here...\",\n \"ERROR_LOADING_MESSAGE\": \"We're having trouble loading this section. Let's try again.\",\n \"STILL_WORKING_TITLE\": \"We're still working on this\",\n \"STILL_WORKING_DESCRIPTION\": \"It can take up 24 hours for us to finish gathering data. Check back soon!\",\n \"ALREADY_CLAIMED\": \"This account has already been claimed.\",\n \"ERROR_CLAIMING\": \"There was an error claiming this account.\",\n \"competitor-name-required\": \"Competitor name is required\",\n \"must-be-in-form-of-http://google.com\": \"Website must be in the form of http://google.com\",\n \"GENERIC_ERROR\": \"We've encountered an error, please try again later.\",\n \"REQUIRED\": \"Required\",\n \"MISSING_SCAN_DATA\": \"Please correct your business data to view your scan\",\n \"OVER_QUOTA\": \"Listing Scan is currently over quota, please wait 30 minutes and try again. Sorry for the inconvenience\",\n \"DIRECT_COMPETITOR_INVALID\": \"Please select one business as a competitor\",\n \"DIRECT_COMPETITOR_DUPLICATED\": \"Please select another business as a competitor\",\n \"ERROR_GENERATING_PDF\": \"There was an error generating the PDF\",\n \"ERROR_LOADING_LISTINGS\": \"Could not load listings, please try again.\"\n },\n \"LISTINGS\": {\n \"TAGLINE\": \"Can consumers find your business?\",\n \"PRESENCE\": {\n \"HEADING\": \"Listing presence\",\n \"SUBHEADING\": \"Total number of online listings found on sites monitored for your business\",\n \"FOUND\": \"Total listings found for your business\",\n \"FOUND_COMPETITORS\": \"Your listings vs. the competition\",\n \"COMPARE\": \"Here’s how many listings you have compared to your competitors\",\n \"INDUSTRY_FOUND\": \"Available listing sites\",\n \"SOCIAL_SITE\": \"Social site\",\n \"SOCIAL_SITES\": \"Social sites\",\n \"NUMBER_OF_LISTINGS\": \"Number of listings\",\n \"PERCENT_SOCIAL\": \"Percent with Social Profile\",\n \"BUSINESS_FOUND\": \"Your business was found\",\n \"BUSINESS_NOT_FOUND\": \"Your business was not found\",\n \"FOUND_ONLINE\": \"{{ percentage }}% of your industry is on {{ source }}\",\n \"INCONCLUSIVE\": \"Inconclusive\",\n \"INCONCLUSIVE_TITLE\": \"No results found for your business\",\n \"INCONCLUSIVE_MESSAGE\": \"While we couldn't find any signs of your business listed on {{ social }}, it could exist under a different name or address that caused us to miss it.\"\n },\n \"ACCURACY\": {\n \"HEADING\": \"Listing accuracy\",\n \"SUBHEADING\": \"Percentage of accurate listings found for your business\",\n \"ACCURATE\": \"Your accurate listings\",\n \"ACCURATE_COMPETITORS\": \"You vs. your competitors\",\n \"INDUSTRY_ACCURATE\": \"Industry average\",\n \"INDUSTRY_ACCURATE_COMPETITORS\": \"What percentage of relevant sites are you accurate on?\",\n \"INCORRECT_PHONE\": \"Incorrect phone numbers:\",\n \"MISSING_PHONE\": \"Missing phone numbers:\",\n \"INCORRECT_ADDRESS\": \"Incorrect addresses:\",\n \"MISSING_ADDRESS\": \"Missing addresses:\",\n \"INCORRECT_WEBSITE\": \"Incorrect websites:\",\n \"MISSING_WEBSITE\": \"Missing websites:\",\n \"NUMBER_INCORRECT\": \"Number of incorrect listings\"\n },\n \"SCAN\": {\n \"HEADING\": \"Scan\",\n \"SUBHEADING\": \"How your business appears across various listing sites\",\n \"LISTING\": \"Listing\",\n \"SITE\": \"Site\",\n \"MISSING\": \"MISSING\",\n \"BANNER_TEXT\": \"{{scanScore}}% of the time customers search for you, they will see the correct information.\",\n \"VIEW_LISTING\": \"View listing\"\n },\n \"DETAILS\": {\n \"HEADING\": \"Listing details\",\n \"LISTING_SITE\": \"Listing site\",\n \"BUSINESS_NAME\": \"Business name\",\n \"ADDRESS\": \"Address\",\n \"WEBSITE\": \"Website\",\n \"PHONE\": \"Phone\",\n \"MISSING\": \"Missing\",\n \"VIEW_LISTING\": \"View listing\",\n \"VIEW_MORE\": \"View {{listingsCount}} more\",\n \"VIEW_LESS\": \"View less\",\n \"IN_PROGRESS\": \"In progress...\",\n \"ACCURATE_LISTING_FOUND\": \"Listing found\",\n \"INACCURATE_LISTING_FOUND\": \"Found with errors\",\n \"LISTING_NOT_FOUND\": \"Listing not found\",\n \"UNABLE_TO_MODIFY_LISTING\": \"Unable to modify listing. Please try again later.\",\n \"SNAPSHOT_EXPIRED\": \"This {{snapshotName}} is expired. In order to edit listing details, you'll first need to \",\n \"REFRESH_REPORT\": \"refresh this report.\",\n \"LISTING_MODIFIED\": \"Section updated. Changes may take a few moments to appear in the report.\"\n },\n \"PROVIDERS\": {\n \"HEADING\": \"Data provider accuracy\",\n \"SUBHEADING\": \"How your business appears on data provider sites\"\n },\n \"GRADE_EXPLANATION\": {\n \"TITLE\": \"How is the Listings grade calculated?\",\n \"MOBILE_TITLE\": \"Listings\",\n \"PRIMARY\": \"The Listings grade is a reflection of your business’s online listings. Each listing source is assigned a score based on how popular the site is. For example, having an accurate listing on a popular site like Google will have a greater influence on your Listing score. The Listings grade is determined by the percentile range your business falls into when compared to other businesses in the same industry.\"\n }\n },\n \"SNAPSHOT_LITE\": {\n \"LOADING\": \"Your report is loading...\",\n \"CALL_TO_ACTION\": \"Fix my score\",\n \"QUESTION_HEADER\": \"Request to fix business listings\",\n \"QUESTION_BODY\": \"Sync your business listing information on many popular online sites. Send us a message and we'll contact you to get set up.\",\n \"DEFAULT_MESSAGE\": \"Hi, I've just viewed my report and I'm interested in fixing my online business listings. Please contact me to get my business set up.\",\n \"STATUS\": \"Status\"\n },\n \"REVIEWS\": {\n \"TAGLINE\": \"Do consumers trust your business?\",\n \"FOUND\": {\n \"HEADING\": \"Online reviews found on select sites\",\n \"SUBHEADING\": \"Information about your business's online reviews\"\n },\n \"REVIEWS_FOUND\": \"Reviews found\",\n \"REVIEWS_FOUND_PER_MONTH\": \"Reviews found per month\",\n \"AVERAGE_REVIEW_SCORE\": \"Average review score\",\n \"NUMBER_OF_REVIEW_SOURCE\": \"# of review sources\",\n \"GRADE_EXPLANATION\": {\n \"TITLE\": \"How are Review grades calculated?\",\n \"MOBILE_TITLE\": \"Reviews\",\n \"PRIMARY\": \"Review grades are a reflection of your business’s online review performance. Each grade in the Reviews section is determined by the percentile range your business falls into when compared to other businesses in the same industry.\",\n \"SECONDARY_TITLE\": \"Overall Review grade\",\n \"SECONDARY_PRE_SCALE\": \"To determine your overall Review grade, the individual sections are first converted into numerical scores. This is done using the scale below:\",\n \"SECONDARY_POST_SCALE\": \"We divide the sum of these scores by the number of individual grades within the Reviews section. Finally, we convert that score back into a letter grade.\"\n }\n },\n \"SOCIAL\": {\n \"TAGLINE\": \"Do consumers like your business?\",\n \"COMMON_SUBHEADING\": \"Information about your business's\",\n \"FACEBOOK\": {\n \"LINK_TEXT\": \"Facebook page\",\n \"NO_PAGE_ERROR_TITLE\": \"Get eyes on your business with Facebook\",\n \"NO_PAGE_ERROR_DESCRIPTION\": \"Facebook is the most popular social network in the world, and consumers are using it to search for local businesses. What's more, it offers free tools to help connect with your target customers.\",\n \"LIKES\": \"Likes\",\n \"AVERAGE_POSTS_PER_MONTH\": \"Average posts / month\",\n \"AVERAGE_LIKES_PER_POST\": \"Average likes / post\",\n \"AVERAGE_SHARES_PER_POST\": \"Average shares / post\",\n \"RESTRICTED_PAGE_TITLE\": \"You may be losing out on page visits...\",\n \"RESTRICTED_PAGE_DESCRIPTION\": \"We found a page for your business, but weren’t able to access it. This is likely due to Facebook Page restrictions, which can also impact customers who are trying to find you. To reach the widest audience possible, we recommend making your page available to everyone.\",\n \"POSTS\": \"Posts\"\n },\n \"TWITTER\": {\n \"LINK_TEXT\": \"X profile\",\n \"NO_PAGE_ERROR_TITLE\": \"Interact with your customers on X\",\n \"NO_PAGE_ERROR_DESCRIPTION\": \"We didn't find a X profile for your business. It's a great, cost-effective way to reach customers. We can help you tap into this invaluable pool of customer interaction!\",\n \"FOLLOWING\": \"Following\",\n \"TWEETS\": \"Posts\",\n \"URL\": \"X URL\"\n },\n \"INSTAGRAM\": {\n \"LINK_TEXT\": \"Instagram profile\",\n \"NO_PAGE_ERROR_TITLE\": \"Build your brand's personality on Instagram\",\n \"NO_PAGE_ERROR_DESCRIPTION\": \"Put a face to your business by sharing photos and videos. You can even create shoppable posts, leading customers straight to your online store! Let us help you craft a winning strategy.\",\n \"POSTS\": \"Posts\",\n \"NOT_BUSINESS_TITLE\": \"Looks like you're using a personal account...\",\n \"NOT_BUSINESS_DESCRIPTION\": \"We found a page associated with your business, but weren't able to analyze it because you're using a personal profile rather than a business profile. A business profile gives you access to valuable features like Instagram Insights, contact information, and ads.\",\n \"URL\": \"Instagram URL\"\n },\n \"SIX_MONTHS\": \"(last 6 months)\",\n \"GRADE_EXPLANATION\": {\n \"TITLE\": \"How are Social grades calculated?\",\n \"MOBILE_TITLE\": \"Social\",\n \"PRIMARY\": \"Social grades are a reflection of your business’s social media presence. Each grade in the Social section is determined by the percentile range your business falls into when compared to other businesses in the same industry.\",\n \"SECONDARY_TITLE\": \"Overall Social grade \",\n \"SECONDARY_PRE_SCALE\": \"To determine your overall Social grade, the individual sections are first converted into numerical scores. This is done using the scale below:\",\n \"SECONDARY_POST_SCALE\": \"We divide the sum of these scores by the number of individual grades within the Social section. Finally, we convert that score back into a letter grade.\"\n }\n },\n \"WEBSITE\": {\n \"ADD_WEBSITE_URL\": \"Add website URL\",\n \"MULTI_SUBSECTION\": {\n \"MOBILE_HEADING\": \"Mobile performance\",\n \"DESKTOP_HEADING\": \"Desktop performance\",\n \"SUBHEADING\": \"Overall performance of your website\"\n },\n \"TAGLINE\": \"Can your business website convert visitors into customers?\",\n \"NO_SITE_ERROR_TITLE\": \"Earn more customers with a fast, high converting website\",\n \"NO_SITE_ERROR_DESCRIPTION\": \"We can't seem to find your website. Consumers search online before making purchase decisions. If they don't find your website, chances are they'll find your competitors.\",\n \"NO_SITE_ERROR_TAGLINE\": \"We can help!\",\n \"NO_SITE_ERROR_WEBSITE_URL\": \"Have one we didn't find?\",\n \"MOBILE\": {\n \"HEADING\": \"Mobile\",\n \"SUBHEADING\": \"Overall performance of your website on mobile\",\n \"USER_EXPERIENCE\": \"User experience\"\n },\n \"MOBILE_FRIENDLY\": \"Mobile friendly\",\n \"NOT_MOBILE_FRIENDLY\": \"Not mobile friendly\",\n \"DESKTOP\": {\n \"HEADING\": \"Desktop\",\n \"SUBHEADING\": \"Overall performance of your website on desktop\"\n },\n \"HOMEPAGE\": {\n \"HEADING\": \"Homepage content\",\n \"SUBHEADING\": \"Key business information found on your homepage\",\n \"SIZE\": \"Homepage size\",\n \"PHONE_NUMBER_FOUND\": \"Phone number\",\n \"ADDRESS_FOUND\": \"Business address\",\n \"FACEBOOK_FOUND\": \"Facebook link\",\n \"TWITTER_FOUND\": \"X link\",\n \"INSTAGRAM_FOUND\": \"Instagram link\",\n \"VIDEO\": {\n \"HEADING\": \"Video on homepage\"\n }\n },\n \"VIEW_FULL_REPORT\": \"View full report\",\n \"VIEW_FULL_REPORT_TYPE\": \"View full {{reportType}} report\",\n \"SHOW_FIX\": \"Show how to fix\",\n \"SHOW_DETAILS\": \"Show details\",\n \"HIDE_DETAILS\": \"Hide details\",\n \"SHOULD_FIX\": \"Should fix\",\n \"CONSIDER_FIX\": \"Consider fixing\",\n \"PASSED_RULES\": \"Passed rules\",\n \"BELOW_AVERAGE\": \"Below average\",\n \"ABOVE_AVERAGE\": \"Above average\",\n \"NO_WEBSITE\": \"No website\",\n \"SHOW_MOBILE_PREVIEW\": \"Show mobile preview\",\n \"SHOW_DESKTOP_PREVIEW\": \"Show desktop preview\",\n \"ERROR_FETCHING_DESKTOP_DATA\": \"Unable to determine performance on desktop\",\n \"ERROR_FETCHING_MOBILE_DATA\": \"Unable to determine performance on mobile\",\n \"ERROR_FETCHING_ALL_DATA\": \"Unable to determine performance\",\n \"FACEBOOK_AS_WEBSITE_TITLE\": \"It looks like you're using a Facebook page for your website...\",\n \"FACEBOOK_AS_WEBSITE_DESCRIPTION\": \"Facebook is great, but it doesn't replace the need for a website. A good website can help you show up in Google searches, build credibility, and get more customers. Ask us how!\",\n \"GRADE_EXPLANATION\": {\n \"TITLE\": \"How are Website grades calculated?\",\n \"MOBILE_TITLE\": \"Website\",\n \"PRIMARY\": \"Website grades are a reflection of your business’s website performance, based on Google’s PageSpeed Insights. Each grade in the Website section is determined by the percentile range your business falls into when compared to other businesses in the same industry.\",\n \"SECONDARY_TITLE\": \"Overall Website grade\",\n \"SECONDARY_PRE_SCALE\": \"To determine your overall Website grade, the individual sections are first converted into numerical scores. This is done using the scale below:\",\n \"SECONDARY_POST_SCALE\": \"We divide the sum of these scores by the number of individual grades within the Website section. Finally, we convert that score back into a letter grade.\"\n },\n \"CORE_WEB_VITALS\": {\n \"TITLE\": \"Core web vitals\",\n \"DESCRIPTION\": \"Core web vitals provide key indicators that measure your website's performance and user experience. Google Search refers to these when evaluating page experience, so it's important they're monitored and actioned upon.\",\n \"CARDS\": {\n \"PAGE_SPEED_TITLE\": \"Page speed\",\n \"PAGE_SPEED_DESCRIPTION\": \"How long it takes your page to load.\",\n \"LARGE_CONTENT_TITLE\": \"Large content\",\n \"LARGE_CONTENT_DESCRIPTION\": \"How long it takes for the largest element within view to load.\",\n \"ESTIMATED_INPUT_LATENCY_TITLE\": \"Interactivity\",\n \"ESTIMATED_INPUT_LATENCY_DESCRIPTION\": \"How long it takes your site to respond after a user clicks on something.\",\n \"MAX_POTENTIAL_FID_TITLE\": \"Interactivity\",\n \"MAX_POTENTIAL_FID_DESCRIPTION\": \"How long it takes your site to respond after a user clicks on something.\",\n \"VISUAL_STABILITY_TITLE\": \"Visual stability\",\n \"VISUAL_STABILITY_DESCRIPTION\": \"Measures unexpected shifts in your website layout, usually due to elements loading out of sync.\",\n \"SECTIONS\": {\n \"OKAY\": \"Okay\",\n \"FAST\": \"Fast\",\n \"SLOW\": \"Slow\",\n \"GOOD\": \"Good\",\n \"POOR\": \"Poor\"\n }\n }\n },\n \"SECURE\": \"Secure website (HTTPS)\"\n },\n \"ADVERTISING\": {\n \"TAGLINE\": \"Do consumers know about your business?\",\n \"NOT_FOUND\": \"Not found\",\n \"ADWORDS\": {\n \"HEADING\": \"Recommended keywords\",\n \"SUBHEADING\": \"Top 5 keywords for your business\",\n \"DESCRIPTION\": \"Advertise on Google and capture customers who are searching precisely for the products or services your business offers.\",\n \"POSSIBLE_IMPRESSIONS\": \"Possible impressions\",\n \"POSSIBLE_IMPRESSIONS_DESCRIPTION\": \"Estimated views of your ads (per month)\",\n \"POSSIBLE_CLICKS\": \"Possible clicks\",\n \"POSSIBLE_CLICKS_DESCRIPTION\": \"Estimated clicks on your ads (per month)\",\n \"FOOTNOTE\": \"Figures shown assume a maximum cost per click (CPC) of $5.00 with an unlimited budget. Keywords are generated using content gathered from your website. Actual results may vary due to specific advertising budgets, goals, and methods used.\",\n \"NOT_AVAILABLE\": \"We weren't able to recommend keywords for your business...\",\n \"NOT_US\": \"This section is available in the US only.\",\n \"NO_WEBSITE\": \"We couldn't find your website, so we weren't able to recommend keywords for your business.\",\n \"DEFAULT_MESSAGE\": \"To ensure that potential customers find your business when they search for products and services nearby, we recommend that you run Google AdWords campaigns with relevant keywords. We can help!\",\n \"TOOLTIP\": {\n \"IMPRESSIONS\": \"
Impressions
{{impressions}}
\",\n \"CLICKS\": \"
Clicks
{{clicks}}

Cost per click
{{costPerClick}}
\"\n }\n },\n \"PAY_PER_CLICK\": {\n \"HEADING\": \"Paid search traffic performance\",\n \"SUBHEADING\": \"Here's how your ad campaigns compare to those of your competitors\",\n \"PAID_KEYWORDS\": \"Paid keywords\",\n \"PAID_CLICKS\": \"Paid traffic (clicks)\",\n \"PAID_COST\": \"Paid traffic cost\",\n \"TOOLTIPS\": {\n \"OVERLAP\": \"How similar your campaigns are to your competitors, based on common keywords.\",\n \"KEYWORDS\": \"Keywords purchased on PPC ads on the search results page in the last month for you and your competitors.\",\n \"MONTHLY_PAID_CLICKS\": \"This is a monthly estimate of the number of clicks you and your competitors receive from all of your paid advertising on Google Ads.\",\n \"MONTHLY_BUDGET\": \"Estimated average monthly cost for PPC ads on the Google Ads search results page for you and your competitors.\",\n \"OVERLAP_NOT_AVAILABLE\": \"How similar your campaigns are to your competitors, based on common keywords. Overlap only appears when overlapping keywords are found.\"\n },\n \"ERROR_TITLE\": \"Promote your business where people are looking\",\n \"ERROR_MESSAGE\": \"We couldn’t find any ads for your business. Digital advertising puts your business in front of your target audience on search engines, social media, and other relevant sites across the web. Ask us how!\"\n },\n \"RETARGETING\": {\n \"HEADING\": \"Retargeting\",\n \"SUBHEADING\": \"Information about your business's retargeting\",\n \"SUCCESS_MESSAGE\": \"It looks like you're taking advantage of retargeting!\",\n \"SUCCESS_ADVICE\": \"Make sure to test your ads frequently so you know which ones work best with your customers.\",\n \"SUCCESS_TITLE\": \"Great work!\",\n \"FAIL_TITLE\": \"Start taking advantage of retargeting ads!\",\n \"FAIL_MESSAGE\": \"When visitors leave your website, they’re likely still interested; they’re just not ready to buy yet. You need to stay top-of-mind until they are. Let us show you how to continue promoting your business to interested prospects on relevant sites around the web!\"\n },\n \"GRADE_EXPLANATION\": {\n \"TITLE\": \"How is the Advertising grade calculated?\",\n \"MOBILE_TITLE\": \"Advertising\",\n \"PRIMARY\": \"The Advertising grade is a reflection of your business’s online campaign performance. The grade is determined by the percentile range your campaign’s estimated cost per click falls into when compared to other businesses in the same industry.\",\n \"CLARIFICATION\": \"Estimated cost per click = estimated monthly ad budget / estimated monthly paid clicks\",\n \"SECONDARY_PRE_SCALE\": \"Note: only Google AdWords are considered in this section.
The industry leader with the lowest cost per click is the 100th percentile.\"\n }\n },\n \"LOCAL_SEO\": {\n \"TAGLINE\": \"Can consumers find you in search?\",\n \"NOT_FOUND\": \"Not found\",\n \"LOCAL_SEO\": {\n \"HEADING\": \"Local search results\",\n \"SUBHEADING\": \"Who shows up when customers search for your business category?\",\n \"DESCRIPTION\": \"This is your average ranking on Google Maps when someone searches for '{{searchTerm}} + {{vicinity}}', depending on their location\",\n \"BUSINESS_NOT_FOUND\": \"Your business {{businessName}} wasn't found in the top 100 search results\",\n \"NO_RESULTS_TITLE\": \"No results\",\n \"NO_RESULTS_DESCRIPTION\": \"We couldn’t find any search results for {{searchTerm}} + {{vicinity}}.\",\n \"NO_RESULTS_IN_SELECTED_AREA\": \"We couldn't find any search results in the selected area of the map.\",\n \"IN_PROGRESS_TITLE\": \"Searching in progress\",\n \"IN_PROGRESS_DESCRIPTION\": \"We are currently searching your keywords. Please check back soon.\",\n \"DOES_NOT_EXIST_TITLE\": \"We couldn't find your business on Google\",\n \"DOES_NOT_EXIST_DESCRIPTION\": \"We couldn't confirm the address of your business on Google, so we can't evaluate your local search results.\",\n \"DOES_NOT_EXIST_ACTION\": \"Edit business information\",\n \"MAP_INFO_TEXT\": \"Click hotspots to see results change based on location\",\n \"TABS\": {\n \"NEAR_ME\": \"'Near me'\"\n },\n \"CLAIMED\": \"Claimed\",\n \"UNCLAIMED\": \"Unclaimed\",\n \"REVIEWS_COUNT\": \"{{count}} reviews\",\n \"PHONE_NOT_FOUND\": \"Phone not found\"\n },\n \"ORGANIC_KEYWORDS\": {\n \"PERFORMANCE\": {\n \"HEADING\": \"Organic search traffic performance\",\n \"SUBHEADING\": \"Here's how your website stacks up to competitors with the same keywords\",\n \"TOOLTIPS\": {\n \"OVERLAP\": \"How similar you are to your competitors, based on common SEO keywords.\",\n \"KEYWORDS\": \"The number of keywords your business appears in Google's top 100 search results.\",\n \"CLICKS\": \"The estimated monthly website visits from the keywords entered by users in search engines.\",\n \"VALUE\": \"An estimate of how much money it would cost to get the same amount of traffic from paid keywords (ads) each month. Good SEO reduces the need for paid keywords.\",\n \"VALUE_PER_CLICK\": \"The estimated value of each organic click. A high value indicates that the keywords driving organic clicks are driving significant traffic. We grade your business based on how your click value compares to others in your industry.\",\n \"OVERLAP_NOT_AVAILABLE\": \"How similar you are to your competitors, based on common SEO keywords. Overlap only appears when overlapping SEO keywords are found.\"\n },\n \"NOT_AVAILABLE_TITLE\": \"People can’t find your website on Google Search...\",\n \"NOT_AVAILABLE_MESSAGE\": \"We couldn’t find your site in the top 50 search results for any of the organic keywords we track—that means potential customers won’t be able to either. Let us help you optimize your website with relevant keywords!\",\n \"NOT_AVAILABLE_MESSAGE_HEADER\": \"We couldn’t find your site in the top 50 search results for any of the organic keywords we track—that means potential customers won’t be able to find your site either.\",\n \"NOT_AVAILABLE_MESSAGE_FOOTER\": \"To ensure that potential customers find your business when they search for products and services nearby, we recommend that you optimize your website with relevant keywords. We can help!\\n\\n\",\n \"ORG_RANKED_SEARCH_TERMS\": \"Organic keywords\",\n \"ESTIMATED_SEARCH_TRAFFIC\": \"Estimated search traffic\",\n \"EQUI_COST_PAID_TRAFFIC\": \"Estimated search traffic value\",\n \"SEO_VALUE_PER_CLICK\": \"Organic click value\"\n },\n \"RANKING\": {\n \"HEADING\": \"Organic keyword ranking\",\n \"SUBHEADING\": \"How your business shows up on Google Search\",\n \"NOT_AVAILABLE_TITLE\": \"People can’t find your website on Google Search...\",\n \"NOT_AVAILABLE_MESSAGE\": \"We couldn’t find your site in the top 50 search results for any of the organic keywords we track—that means potential customers won’t be able to either. Let us help you optimize your website with relevant keywords!\",\n \"TOOLTIPS\": {\n \"KEYWORDS\": \"The top 5 organic keywords that your business is ranking for on Google over the last 30 days.\",\n \"COMPETITIVENESS\": \"The difficulty of ranking in the top 10 results on Google for a specific keyword, as compared with other keywords. Higher values indicate greater difficulty.\",\n \"RANK\": \"The position of your website in Google Search results.\",\n \"MONTHLY_LOCAL_SEARCHES\": \"The average monthly organic traffic generated from the keyword.\",\n \"MONTHLY_SEARCHES\": \"The average monthly search volume for this keyword in your country over the last 12 months.\"\n },\n \"LOCAL_SEARCHES\": \"Local searches\",\n \"GLOBAL_SEARCHES\": \"Search volume\",\n \"CLICKS\": \"Clicks\",\n \"RANKED_KEYWORDS\": \"Ranked keywords\"\n },\n \"VALUE_PER_CLICK\": \"Value per click\"\n },\n \"GRADE_EXPLANATION\": {\n \"TITLE\": \"How is the SEO grade calculated?\",\n \"MOBILE_TITLE\": \"SEO\",\n \"PRIMARY\": \"The Search engine optimization (SEO) grade is a reflection of your business’s search engine visibility and performance.

The Local search results grade is calculated by adding the score of your ranking for a single keyword, based on nine local searches around your business location, and a search of the entire city.

The Organic keyword performance grade is determined by the percentile range your keywords’ estimated value per click falls into when compared to other businesses in the same industry using the following scale.\",\n \"CLARIFICATION\": \"Estimated value per click = estimated monthly value of clicks / estimated monthly clicks\",\n \"SECONDARY_PRE_SCALE\": \"Overall SEO grade
To determine your overall SEO grade, the individual sections are first converted into numerical scores. This is done using the scale below:\",\n \"SECONDARY_POST_SCALE\": \"Then we divide the sum of these scores by the number of individual grades within the SEO section. Finally, we convert that score back into a letter grade.\"\n }\n },\n \"ECOMMERCE\": {\n \"BUSINESS_HEADER\": \"Your company\",\n \"TAGLINE\": \"Can consumers instantly buy from you online?\",\n \"HEADING\": \"Checklist\",\n \"SUBHEADING\": \"Drive sales and compete online\",\n \"NO_WEBSITE\": \"No website\",\n \"NO_SITE_ERROR_TITLE\": \"People can’t find your website!\",\n \"NO_SITE_ERROR_DESCRIPTION\": \"Potential customers might need to research your business before giving you their hard-earned money, but they can’t find your website! Either you don’t have a site or the one you have needs optimization.\",\n \"NO_SITE_ERROR_TAGLINE\": \"To inform potential buyers and convert them into customers, we recommend that you get an informative, fast, and mobile-friendly website. We can help!\",\n \"ERROR_FETCHING_DATA\": \"Unable to determine performance\",\n \"ECOMMERCE_SOLUTION\": \"Online storefront\",\n \"ONLINE_PAYMENTS\": \"Online payments\",\n \"AD_RETARGETING\": \"Lead engagement\",\n \"APPOINTMENT_SCHEDULING\": \"Online scheduler\",\n \"ECOMMERCE_SOLUTION_RECOMMENDATION\": \"Online sales of products and services are up 110% year over year\",\n \"ONLINE_PAYMENTS_RECOMMENDATION\": \"As online transactions have increased by 140%, you'll want to make sure customers can pay you online\",\n \"AD_RETARGETING_RECOMMENDATION\": \"Engaging customers with relevant content can move them down the sales funnel\",\n \"APPOINTMENT_SCHEDULING_RECOMMENDATION\": \"Bring in more customer bookings in less time by automating your meeting and appointment scheduling\",\n \"GRADE_EXPLANATION\": {\n \"TITLE\": \"How is the Ecommerce grade calculated?\",\n \"MOBILE_TITLE\": \"Ecommerce\",\n \"PRIMARY\": \"The Ecommerce grade is an indication of how well your business is optimized for online transactions. This grade is weighted to match the insights of sales professionals, giving you a score that helps you focus on the areas that matter most. These areas are weighted as follows:\",\n \"CLARIFICATION\": \"Online storefront = high
Online payments = medium
Lead engagement = low
\",\n \"SECONDARY_PRE_SCALE\": \"Your business is then ranked against the industry to determine your overall grade.\"\n }\n },\n \"TECHNOLOGY\": {\n \"TAGLINE\": \"What technology do you use to manage your business online?\",\n \"VIEW_MORE\": \"View more\",\n \"VIEW_LESS\": \"View less\",\n \"NO_SITE_ERROR_TITLE\": \"We weren’t able to look up technologies used by your website\",\n \"NO_SITE_ERROR_DESCRIPTION\": \"We either couldn’t find a website, or the website we found prevented us from looking up the technologies it uses.\",\n \"NO_SITE_ERROR_TAGLINE\": \"We can help!\"\n },\n \"NOT_FOUND\": {\n \"TITLE\": \"The resource you've requested does not exist.\",\n \"MESSAGE\": \"The resource you've requested does not exist.\"\n },\n \"CONTACT_US\": {\n \"SEND_MESSAGE\": \"Send a message\",\n \"MESSAGE_PLACEHOLDER\": \"How can we help?\",\n \"MESSAGE_SUCCESS\": \"Message successfully sent.\"\n },\n \"CTA\": {\n \"TITLE\": \"Dominate your local market\",\n \"GET_STARTED\": \"Get started\",\n \"CALL\": \"Call us at\",\n \"DEFAULT_MESSAGE\": \"73% of consumers lose trust in a business with inaccurate listings and 88% of consumers look to online reviews when making buying decisions. Stop losing customers to your competitors and start winning them back. Fix your listings, improve your review scores, and hear what people are saying about you—all from one dashboard.\",\n \"DIALOG_DESCRIPTION\": \"With {{businessCenterName}}, you can access world-class solutions that will help you dominate your local market. Enter your email address and we'll send you a verification email!\",\n \"DIALOG_TITLE\": \"Access {{businessCenterName}} today!\",\n \"BUILD_YOUR_BUSINESS\": \"Build your online business presence for free!\",\n \"VIEW_REPORT\": \"View full report\",\n \"REFRESH_REPORT\": \"Refresh\",\n \"REFRESH_WARNING\": \"We recommend refreshing the {{snapshotName}} after 90 days for more relevant information.\",\n \"COPY_URL\": \"Copy report URL\",\n \"EDIT_REPORT\": \"Edit report\"\n },\n \"BANNER_MESSAGE\": {\n \"websiteLowScore\": \"We see that you have a website, but Google is telling us it might need a makeover. If you’re interested, we’re here to help!\",\n \"websiteMediumScore\": \"We see that you have a website, but Google is telling us it might need a makeover. If you’re interested, we’re here to help!\",\n \"websiteHighScore\": \"Great website! If it ain’t broke, don’t fix it. However, in the case of the first page of Google, more really is better. Let us help you own more spots on that first page!\",\n \"advertisingMessage\": \"Potential customers are within your reach, whether they’re searching Google, scrolling through Facebook, or browsing other sites around the web. With digital advertising, you can put your business in the spotlight so that those people consider you before your competitors.\",\n \"seoMessage\": \"Potential customers are searching online for the products or services that your business offers. With SEO (Search Engine Optimization), you can boost your visibility in those search results so that people find you before your competitors.\",\n \"listingDistributionAllAccurate\": \"Congrats, your information is accurate on all data providers. It's important to keep it that way! Find out more about how Listing Distribution can help with this.\",\n \"listingDistributionDefault\": \"Alert! As a business you cannot afford to have wrong information on even one of these major data providers. This incorrect information will be distributed to literally hundreds of online sources including review sites, directories, social sites, search engines, GPS services and more.\",\n \"listingFullPresenceHighAccuracy\": \"Great work! You're better than the average bear. However, there’s still work to do. That last little bit always seems the hardest. We can show you exactly what’s left, and even do it for you if you’d like.\",\n \"listingHighPresenceHighAccuracy\": \"Your listings are the virtual doorway to your business. You’re listed on some of the sites you need to be on, but there’s work to do. You don’t want customers to find your competitor's listings instead of yours, do you? Without correct listings, your business is invisible to your customers.\",\n \"listingHighPresenceLowAccuracy\": \"Yikes! Your business listings are inaccurate. 85% of consumers search for a business online, which means you’re losing revenue to your competitors because of bad listing information.\\n\\nFix your listings to turn searchers into customers.\",\n \"listingLowPresenceHighAccuracy\": \"Bad news: we can’t find many listings for your business, which means customers can’t either. On the positive side, the listings that we found are mostly accurate. With 85% of consumers searching for a business online, you’re losing revenue to your competitors.\\n\\nAdd your business to review sites, business directories, and social sites to turn online searchers into customers.\",\n \"listingLowPresenceLowAccuracy\": \"Bad news: we can’t find many listings for your business, which means customers can’t either. What’s worse is that the listings we found are mostly inaccurate. With 85% of consumers searching for a business online, you’re losing revenue to your competitors.\\n\\nAdd your business to review sites, business directories, and social sites to turn online searchers into customers.\",\n \"listingNoListings\": \"Bad news: we can’t find listings for your business, which means customers can’t either. With 85% of consumers searching for a business online, you’re losing revenue to your competitors.\\n\\nAdd your business to review sites, business directories, and social sites to turn online searchers into customers.\",\n \"socialAllActive\": \"Nice work! You’re rocking the social media world.\\n\\nAs much as you like social media, we know you have a job to do. We can help you build a strong social presence by regularly posting timely and relevant content. Give us a call!\",\n \"socialSomeActive\": \"Nice work! You’re rocking at least half the social media world, but there are other users out there that are missing out on your wisdom, humor, and sage advice.\\n\\nYou don’t have to do it all yourself. As much as you like social media, we know you have a job to do. We can help you build a strong social presence by regularly posting timely and relevant content. Give us a call!\",\n \"socialInactive\": \"Uh oh! It looks like you tried social media, but either got bored or weren’t having fun. That’s too bad—there are a lot of potential customers out there that are missing out on your wisdom, humor, and sage advice.\\n\\nWe can help you build a strong social presence by regularly posting timely and relevant content. Give us a call!\",\n \"socialLowEngagement\": \"It looks like you’re posting on a billboard in the middle of nowhere! There are potential customers out there missing out on your wisdom, humor, and sage advice.\\n\\nWe can help you build a strong social presence by regularly posting timely and relevant content. Give us a call!\",\n \"socialMissingAccounts\": \"It appears that social media is not your bag. That’s too bad—there are a lot of potential customers out there that are missing out on your wisdom, humor, and sage advice.\\n\\nWe can help you build a strong social presence by regularly posting timely and relevant content. Give us a call!\",\n \"socialAB\": \"Nice work! You’re rocking the social media world.\\n\\nAs much as you like social media, we know you have a job to do. We can help you maintain your strong social presence by regularly posting timely and relevant content. Give us a call!\",\n \"socialCD\": \"You’re rocking at least half of the social media world, but there are other users out there that are missing out on your wisdom, humor, and sage advice.\\n\\nYou don’t have to do it all yourself. As much as you like social media, we know you have a job to do. We can help you build a strong social presence by regularly posting timely and relevant content. Give us a call!\",\n \"socialF\": \"It appears that social media is not your bag. It’s too bad because there are a lot of potential customers out there that are missing out on your wisdom, humor, and sage advice.\\n\\nWe can help you build a strong social presence by regularly posting timely and relevant content. Give us a call!\",\n \"highVolumeHighScore\": \"You rock! You get lots of reviews, and customers are saying good things. You can’t afford to monitor the internet continuously, and you certainly can’t afford to miss a review. One negative review gone unanswered can ruin all your hard work! Let us alert you about new reviews so that you can address negative reviews and share positive reviews promptly.\",\n \"highVolumeLowScore\": \"You have a lot of negative reviews that thousands of online searchers will see. Nearly 90% of consumers agree that positive online reviews influence their buying decisions, which means you’re losing money to your competition.\\n\\nBoost your average review rating by uncovering areas in need of improvement and responding to negative feedback promptly. Call us; we can help!\",\n \"lowVolumeHighScore\": \"You don’t have enough reviews to maximize your local online presence. However, most people think you’re awesome. Let’s get more of that positive word out. We can help you generate new reviews!\",\n \"lowVolumeLowScore\": \"Alert! You don’t have enough reviews, and the ones you have aren’t saying good things! The recency, frequency, and quality of reviews are all significant drivers for clicks, calls, and search engine ranking.\\n\\nBoost your average review rating by asking your customers for reviews, uncovering areas in need of improvement, and responding to negative feedback promptly. Call us; we can help!\",\n \"noReviews\": \"Alert! You don’t have any reviews! Did you know that Google ranks businesses with reviews ahead of businesses with no reviews? The recency, frequency, and quality of reviews are all significant drivers for clicks, calls, and search engine ranking\\n\\nDon’t leave new business on the table. We’ll help you generate more reviews!\",\n \"ecommerceMessage\": \"More businesses than ever before are selling products and services online. Consumers see an online store as a sign of a reputable, established business.\",\n \"technologyMessage\": \"Here's an overview of the technologies you are using on your website. It is important to assess whether your business possesses all the necessary tools and capabilities to thrive in the online environment. Is your business equipped with everything it needs to succeed?\"\n },\n \"SECTION_FOOTER_MESSAGE\": {\n \"listingsPositive\": \"Do you want to protect and maintain your listings so that customers will continue to find {{companyName}}? We’d be happy to help!\",\n \"listingsNegative\": \"Do you want to fix your listings so that more customers can find {{companyName}}? We’d be happy to help!\",\n \"reviewsPositive\": \"Would you like to generate fresh reviews and further improve your average rating? We can help!\",\n \"reviewsNegative\": \"Would you like to get more reviews and boost your average rating? We can help!\",\n \"socialPositive\": \"Want to learn how to take your social media presence to the next level? We’d love to help!\",\n \"socialNegative\": \"Want to learn how to grow your social media presence? We’d love to help!\",\n \"websitePositive\": \"Ready to further enhance your website and boost online engagement? Find out how!\",\n \"websiteNegative\": \"Ready to optimize your website and boost online engagement? Find out how!\",\n \"advertisingPositive\": \"Let’s continue to build brand awareness and get more customers in the door!\",\n \"advertisingNegative\": \"Want to run more effective ad campaigns and get more customers in the door? We can help!\",\n \"seoPositive\": \"Are you ready to further improve your search engine ranking and help more customers find your business online?\",\n \"seoNegative\": \"Are you ready to improve your search engine ranking and help more customers find your business online?\",\n \"ecommerceDefault\": \"Is your online store working for you? We can help optimize.\",\n \"technologyDefault\": \"Let's talk about the technology you use to run your business!\"\n },\n \"SCREENSHARE\": {\n \"DIALOG_TITLE\": \"Screenshare this report\",\n \"SELECT_CONTACT\": \"Select a contact\",\n \"OPEN\": \"Open Crankwheel\"\n },\n \"VALIDATORS\": {\n \"REQUIRED\": \"This is required\",\n \"EMAIL\": \"Invalid email\"\n },\n \"STATUS_SUMMARY\": {\n \"ACCURATE\": \"accurate\",\n \"POSSIBLE_ERRORS\": \"possible errors\",\n \"NOT_FOUND\": \"not found\"\n },\n \"SNAPSHOT_STATUS\": {\n \"NOT_READY\": \"It can take up to 24 hours to finish gathering data. Report grades are subject to change.\",\n \"CHECK_SOON\": \"It can take up to 24 hours to finish gathering data for the report. Check back soon\",\n \"ALMOST_READY\": \"Almost ready\",\n \"NOTIFY_WHEN_IS_READY\": \"You will be notified when the Snapshot report is ready\"\n },\n \"SECTIONS\": {\n \"LISTINGS\": \"Listings\",\n \"REVIEWS\": \"Reviews\",\n \"SOCIAL\": \"Social\",\n \"WEBSITE\": \"Website\",\n \"ADVERTISING\": \"Advertising\",\n \"SEO\": \"SEO\",\n \"ECOMMERCE\": \"Ecommerce\",\n \"TECHNOLOGY\": \"Technology\"\n },\n \"SESSION_EXPIRED\": {\n \"TITLE\": \"Reload page\",\n \"CONTENT\": \"Your session has expired. Reload this page to continue editing this report.\",\n \"BUTTON\": \"Reload\",\n \"CLOSE\": \"Close\"\n },\n \"EMPTY_STATE\": {\n \"NOT_READY\": {\n \"TITLE\": \"Almost ready...\",\n \"DESCRIPTION\": \"It takes a few moments to generate the {{snapshotName}}. Check back soon.\"\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ClipboardModule } from '@angular/cdk/clipboard';\nimport { ScorecardComponent } from './scorecard.component';\nimport { OverallScoreComponent } from './overall-score/overall-score.component';\nimport { GalaxyEmptyStateModule } from '@vendasta/galaxy/empty-state';\nimport { GalaxyAlertModule } from '@vendasta/galaxy/alert';\n\nimport { SectionGradeComponent } from './section-grade/section-grade.component';\nimport { ScorecardService } from './scorecard.service';\n\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { ActionsComponent } from './actions/actions.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NotReadyComponent } from './empty-state/not-ready.component';\nimport { NotSupportedComponent } from './empty-state/not-supported.component';\n\nimport { ActionRefreshComponent } from './action-refresh/action-refresh.component';\nimport { ProductAnalyticsModule } from '@vendasta/product-analytics';\nimport { GradeComponent } from '../core/grade/grade.component';\nimport { LexiconModule } from '@galaxy/lexicon';\nimport English from '../assets/i18n/en_devel.json';\n\nconst MaterialModules = [\n MatCardModule,\n MatDividerModule,\n MatIconModule,\n MatButtonModule,\n MatListModule,\n MatProgressSpinnerModule,\n];\n\nconst SnapshotModules = [GradeComponent];\n\n@NgModule({\n declarations: [\n ScorecardComponent,\n OverallScoreComponent,\n SectionGradeComponent,\n ActionsComponent,\n ActionRefreshComponent,\n NotReadyComponent,\n NotSupportedComponent,\n ],\n imports: [\n CommonModule,\n MaterialModules,\n GalaxyEmptyStateModule,\n TranslateModule,\n\n ClipboardModule,\n GalaxyAlertModule,\n ProductAnalyticsModule,\n SnapshotModules,\n LexiconModule.forChild({\n componentName: 'common/snapshot',\n baseTranslation: English,\n }),\n ],\n exports: [ScorecardComponent, OverallScoreComponent, SectionGradeComponent],\n providers: [ScorecardService],\n})\nexport class ScorecardModule {}\n","export const MARKET_ID = 'MARKET_ID';\nexport const PARTNER_ID = 'PARTNER_ID';\n","import { Inject, Injectable } from '@angular/core';\nimport { map, shareReplay, switchMap } from 'rxjs/operators';\nimport { TranslateService } from '@ngx-translate/core';\nimport { combineLatest, Observable } from 'rxjs';\nimport { WhitelabelNameSubstitutions } from './whitelabel-translation.pipe';\nimport { WhitelabelService } from '@galaxy/partner';\nimport { PARTNER_ID, MARKET_ID } from '../tokens';\nimport { ConfigurationInterface } from '@vendasta/partner';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WhitelabelTranslationService {\n private instantParams: WhitelabelNameSubstitutions;\n private readonly cachedPartnerId$: Observable;\n private readonly whitelabelConfiguration$: Observable;\n\n constructor(\n private readonly translate: TranslateService,\n @Inject(PARTNER_ID) private readonly partnerId$: Observable,\n @Inject(MARKET_ID) private readonly marketId$: Observable,\n private readonly whitelabelService: WhitelabelService,\n ) {\n this.cachedPartnerId$ = this.partnerId$.pipe(shareReplay(1));\n this.whitelabelConfiguration$ = combineLatest([this.cachedPartnerId$, this.marketId$]).pipe(\n switchMap(([partnerId, marketId]) => this.whitelabelService.getConfiguration(partnerId, marketId)),\n shareReplay(1),\n );\n this.getWhitelabelledParams$({}).subscribe((defaultParams) => {\n this.instantParams = defaultParams;\n });\n }\n\n stream(translationString: string | string[], interpolateParams?: object): Observable {\n return this.getWhitelabelledParams$(interpolateParams).pipe(\n switchMap((params) => this.translate.stream(translationString, params)),\n );\n }\n\n instant(translationParams: string | string[], interpolateParams?: object): any {\n let translateParams;\n if (interpolateParams) {\n translateParams = Object.assign(interpolateParams, this.instantParams);\n }\n\n return this.translate.instant(translationParams, translateParams || this.instantParams);\n }\n\n private getWhitelabelledParams$(interpolateParams: object): Observable {\n return this.whitelabelConfiguration$.pipe(\n map((config) => config?.snapshotConfiguration?.snapshotReportName || 'Snapshot Report'),\n map((snapshotName) => {\n let translateParams = {\n appName: 'Sales & Success Center',\n snapshotName: snapshotName,\n };\n\n if (interpolateParams) {\n translateParams = Object.assign(interpolateParams, translateParams);\n }\n\n return translateParams;\n }),\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { AccountGroupService, ProjectionFilter } from '@galaxy/account-group';\nimport { SNAPSHOT_REPORT_REFRESH_SKU, SNAPSHOT_REPORT_SKU } from '@galaxy/billing';\nimport { Environment, EnvironmentService } from '@galaxy/core';\nimport { WhitelabelService } from '@galaxy/partner';\nimport { WhitelabelTranslationService } from '@galaxy/snapshot';\nimport { DomainService } from '@vendasta/domain';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { RetryConfig, retryer } from '@vendasta/rx-utils';\nimport { ObservableWorkStateMap } from '@vendasta/rx-utils/work-state';\nimport {\n CurrentSnapshotService,\n GetCurrentResponseInterface,\n Origin,\n SnapshotService as SnapshotApiService,\n} from '@vendasta/snapshot';\nimport { combineLatest, interval, Observable, of, throwError } from 'rxjs';\nimport { distinctUntilChanged, filter, map, retry, shareReplay, startWith, switchMap, take, tap } from 'rxjs/operators';\nimport { ApiService } from '../api-service/api.service';\nimport { CheckoutDialogComponent } from '../checkout/checkout-dialog.component';\nimport { Feature } from './access';\n\nexport interface SnapshotUrl {\n view: string;\n edit: string;\n}\n\nexport interface CurrentSnapshot {\n snapshotID: string;\n created?: Date;\n expired?: Date;\n path?: string;\n}\nexport interface SnapshotRefreshResponse {\n snapshotId?: string;\n}\n\nexport interface CreateSnapshotRequest {\n partnerId: string;\n origin: string;\n accountGroupId: string;\n}\n\nexport interface ConfirmSnapshotDialogRequest {\n accountGroupId: string;\n partnerId: string;\n action: SnapshotAction;\n accountType?: string;\n description?: string;\n}\n\ninterface ConfirmSnapshotDialogResponse {\n create: boolean;\n inferMissingData: boolean;\n accountGroupId: string;\n}\n\nexport enum SnapshotAction {\n CREATE = 'create',\n REFRESH = 'refresh',\n}\n\nexport enum SnapshotCaller {\n COMPANY = 'company',\n ACCOUNT_GROUP = 'account',\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SnapshotService {\n private readonly refreshSnapshotState = new ObservableWorkStateMap();\n private readonly currentSnapshotState = new ObservableWorkStateMap();\n private readonly createSnapshotState = new ObservableWorkStateMap();\n private readonly snapshotNameState = new ObservableWorkStateMap();\n\n constructor(\n private readonly apiService: ApiService,\n private readonly snapshotApiService: SnapshotApiService,\n private readonly currentSnapshotService: CurrentSnapshotService,\n private readonly dialog: MatDialog,\n private readonly whitelabelTranslationService: WhitelabelTranslationService,\n private readonly snackbarService: SnackbarService,\n private readonly whitelabelService: WhitelabelService,\n private readonly accountGroupService: AccountGroupService,\n @Inject('PARTNER_ID') private readonly partnerId$: Observable,\n private readonly domainService: DomainService,\n private readonly environmentService: EnvironmentService,\n ) {}\n\n private get host(): string {\n switch (this.environmentService.getEnvironment()) {\n case Environment.DEMO:\n return `https://salestool-demo.appspot.com`;\n case Environment.PROD:\n return `https://www.snapshotreport.biz`;\n default:\n return `https://www.snapshotreport.biz`;\n }\n }\n\n private getDomain(): Observable {\n return this.partnerId$.pipe(\n switchMap((id) => this.domainService.getDomainByIdentifier(`/application/ST/partner/${id}`)),\n map((domainResp) => domainResp.primary),\n map((d) => {\n const scheme = d.secure ? 'https' : 'http';\n if (d.domain) {\n return `${scheme}://${d.domain}`;\n }\n return this.host;\n }),\n );\n }\n\n getSnapshotUrl$(snapshotId: string): Observable {\n const retryConfig: RetryConfig = {\n maxAttempts: 5,\n retryDelay: 100,\n timeoutMilliseconds: 10000,\n };\n\n const domain$ = this.getDomain();\n const snapshot$ = this.snapshotApiService.get(snapshotId).pipe(retryer(retryConfig));\n\n return combineLatest([domain$, snapshot$]).pipe(\n map(([domain, snapshot]) => {\n if (!snapshot.snapshotId) {\n const url: SnapshotUrl = { view: ``, edit: `` };\n\n return url;\n }\n\n const snapshotID = snapshot.snapshotId;\n\n const url: SnapshotUrl = {\n view: `${domain}/snapshot/${snapshotID}`,\n edit: `${domain}/snapshot/v2/${snapshotID}/edit`,\n };\n\n return url;\n }),\n take(1),\n );\n }\n\n fetchSnapshotName(accountGroupId?: string): void {\n const id = accountGroupId ?? '';\n const defaultSnapshotName = this.whitelabelTranslationService.instant('SNAPSHOT_REPORT.COMMON.SNAPSHOT_NAME');\n\n const filter = new ProjectionFilter({\n accountGroupExternalIdentifiers: true,\n });\n\n let work$ = this.partnerId$.pipe(\n switchMap((partnerId) => this.whitelabelService.getConfiguration(partnerId)),\n map((config) => config?.snapshotConfiguration?.snapshotReportName || defaultSnapshotName),\n );\n\n if (id !== '') {\n work$ = this.accountGroupService.get(id, filter).pipe(\n switchMap((acc) =>\n this.whitelabelService.getConfiguration(acc.externalIdentifiers.partnerId, acc.externalIdentifiers.marketId),\n ),\n map((config) => config?.snapshotConfiguration?.snapshotReportName || defaultSnapshotName),\n );\n }\n\n this.snapshotNameState.startWork(id, work$);\n }\n\n getSnapshotName$(accountGroupId: string): Observable {\n return this.snapshotNameState.getWorkResults$(accountGroupId);\n }\n\n getCurrentSnapshotSuccess$(accountGroupID: string): Observable {\n return this.currentSnapshotState.isSuccess$(accountGroupID);\n }\n currentSnapshotLoading$(accountGroupID: string): Observable {\n return this.currentSnapshotState.isLoading$(accountGroupID).pipe(startWith(true), distinctUntilChanged());\n }\n\n createSnapshotSuccess$(accountGroupID: string): Observable {\n return this.createSnapshotState.isSuccess$(accountGroupID);\n }\n\n createSnapshotLoading$(accountGroupID: string): Observable {\n return this.createSnapshotState.isLoading$(accountGroupID);\n }\n\n createSnapshotResult$(accountGroupID: string): Observable {\n return this.currentSnapshotLoading$(accountGroupID).pipe(\n filter((loading) => !loading),\n switchMap(() => this.createSnapshotSuccess$(accountGroupID)),\n switchMap((success) => (success ? this.createSnapshotState.getWorkResults$(accountGroupID) : of(null))),\n map((resp) => resp?.snapshotId),\n );\n }\n\n getCurrentSnapshotUpdates$(accountGroupID: string): Observable {\n return this.currentSnapshotState.getWorkResults$(accountGroupID);\n }\n\n getCurrentSnapshotV2$(accountGroupID: string): Observable {\n const work$ = this.getCurrentSnapshot$(accountGroupID);\n this.currentSnapshotState.startWork(accountGroupID, work$);\n return this.currentSnapshotState.getWorkResults$(accountGroupID);\n }\n\n getCurrentSnapshot$(accountGroupID: string, refreshedSnapshotID?: string): Observable {\n return this.currentSnapshotService.get(accountGroupID).pipe(\n map((resp: GetCurrentResponseInterface) => {\n const currentSnapshot: CurrentSnapshot = {\n snapshotID: resp.snapshot?.snapshotId,\n created: resp.snapshot?.created,\n expired: resp.snapshot?.expired,\n path: resp.snapshot?.path,\n };\n\n return currentSnapshot;\n }),\n map((snapshot) => {\n if (refreshedSnapshotID && snapshot.snapshotID !== refreshedSnapshotID) {\n throw new Error('Current Snapshot does not equal the refreshed Snapshot ID');\n }\n return snapshot;\n }),\n );\n }\n\n snapshotRefreshLoading$(accountId: string): Observable {\n return this.refreshSnapshotState.isLoading$(accountId);\n }\n\n snapshotRefreshIsSuccessful$(accountId: string): Observable {\n return this.refreshSnapshotState.isSuccess$(accountId);\n }\n\n private generateSnapshot$(\n accountId: string,\n originDetails: string[],\n inferMissingData: boolean,\n ): Observable {\n const notifier$ = interval(2000);\n return this.snapshotApiService.provision(accountId, Origin.PARTNER_CENTER, originDetails, inferMissingData).pipe(\n map((id) => { snapshotId: id }),\n tap((resp) =>\n this.currentSnapshotState.startWork(\n accountId,\n this.getCurrentSnapshot$(accountId, resp.snapshotId).pipe(retry({ delay: () => notifier$, count: 30 })),\n ),\n ),\n );\n }\n\n doRefreshSnapshotWork(accountId: string, originDetails: string[], inferMissingData: boolean): void {\n const work$ = this.generateSnapshot$(accountId, originDetails, inferMissingData);\n this.refreshSnapshotState.startWork(accountId, work$);\n }\n\n doCreateSnapshotWork(accountId: string, originDetails: string[], inferMissingData: boolean): void {\n const work$ = this.generateSnapshot$(accountId, originDetails, inferMissingData);\n this.createSnapshotState.startWork(accountId, work$);\n }\n\n /** @deprecated use doRefreshSnapshotWork */\n refreshSnapshot(accountId: string, originDetails: string[], inferMissingData: boolean): Observable {\n return this.snapshotApiService.provision(accountId, Origin.PARTNER_CENTER, originDetails, inferMissingData);\n }\n\n getSnapshotReportUrl(accountId: string): Observable {\n return this.apiService.get('/_ajax/v1/st/generate-snapshot-url/', {\n params: {\n accountGroupId: accountId,\n },\n });\n }\n\n createCompanySnapshot(opts: CreateSnapshotRequest): Observable {\n const req = {\n accountGroupId: opts.accountGroupId,\n partnerId: opts.partnerId,\n action: SnapshotAction.CREATE,\n accountType: SnapshotCaller.COMPANY,\n };\n const confirm$ = this.openConfirmSnapshotCreateDialog(req);\n const startWork$ = confirm$.pipe(\n map((res) => {\n if (!res?.create) {\n return null;\n }\n this.doCreateSnapshotWork(res.accountGroupId, [opts.origin], res.inferMissingData);\n return res.accountGroupId;\n }),\n );\n const res$ = startWork$.pipe(\n take(1),\n switchMap((accountGroupId) => (accountGroupId ? this.createSnapshotResult$(accountGroupId) : of(null))),\n );\n return res$;\n }\n\n refreshCompanySnapshot(opts: CreateSnapshotRequest): Observable {\n if (!opts.accountGroupId) {\n return throwError(() => 'No account group ID');\n }\n const req = {\n accountGroupId: opts.accountGroupId,\n partnerId: opts.partnerId,\n action: SnapshotAction.REFRESH,\n };\n const confirm$ = this.openConfirmSnapshotCreateDialog(req);\n\n const startWork$ = confirm$.pipe(\n map((res) => {\n if (!res?.create) {\n return null;\n }\n this.doRefreshSnapshotWork(res.accountGroupId, [opts.origin], res.inferMissingData);\n return res.accountGroupId;\n }),\n );\n const res$ = startWork$.pipe(\n take(1),\n switchMap((accountGroupId) => {\n return this.snapshotRefreshIsSuccessful$(accountGroupId);\n }),\n );\n return res$;\n }\n\n showCreateSnapshotErrorMessage(): void {\n this.snackbarService.openErrorSnack(\n this.whitelabelTranslationService.instant('SNAPSHOT_REPORT.ERROR.UNABLE_TO_CREATE'),\n );\n }\n\n showCreateSnapshotSuccessMessage(): void {\n this.snackbarService.openSuccessSnack(\n this.whitelabelTranslationService.instant('SNAPSHOT_REPORT.MESSAGE.GENERATING'),\n );\n }\n\n showRefreshSnapshotErrorMessage(): void {\n this.snackbarService.openErrorSnack(\n this.whitelabelTranslationService.instant('SNAPSHOT_REPORT.ERROR.UNABLE_TO_REFRESH'),\n );\n }\n\n showRefreshSnapshotSuccessMessage(): void {\n this.snackbarService.openSuccessSnack(\n this.whitelabelTranslationService.instant('SNAPSHOT_REPORT.MESSAGE.SUCCESSFULLY_REFRESHED'),\n );\n }\n\n openConfirmSnapshotCreateDialog(req: ConfirmSnapshotDialogRequest): Observable {\n this.dialog.closeAll();\n let title = 'SNAPSHOT_REPORT.ACTION.CREATE';\n let successLabel = 'SNAPSHOT_REPORT.COMMON.CREATE';\n let createButtonId = 'snapshotCreateButton';\n let successId = 'snapshotCreateButton';\n let sku = SNAPSHOT_REPORT_SKU;\n\n if (req.action === SnapshotAction.REFRESH) {\n title = 'SNAPSHOT_REPORT.ACTION.REFRESH';\n successLabel = 'SNAPSHOT_REPORT.COMMON.REFRESH';\n createButtonId = 'snapshotRefreshButton';\n successId = 'snapshotRefreshButton';\n sku = SNAPSHOT_REPORT_REFRESH_SKU;\n }\n\n const dialogRef: MatDialogRef = this.dialog.open(CheckoutDialogComponent, {\n width: '480px',\n data: {\n partnerId: req.partnerId,\n title: this.whitelabelTranslationService.instant(title),\n successLabel: this.whitelabelTranslationService.instant(successLabel),\n productSKU: sku,\n createButtonId: createButtonId,\n successId: successId,\n accountGroupId: req.accountGroupId,\n accountType: req.accountType,\n description: req.description,\n },\n });\n return dialogRef.afterClosed().pipe(\n take(1),\n map(\n (result) =>\n ({\n create: result?.status === 'success',\n inferMissingData: result?.inferMissingData,\n accountGroupId: req.accountGroupId,\n }) as ConfirmSnapshotDialogResponse,\n ),\n );\n }\n\n partnerHasAccessToSnapshotEditing(): Observable {\n return this.partnerId$.pipe(\n switchMap((partnerId) => this.whitelabelService.getConfiguration(partnerId)),\n map((config) => config.enabledFeatures),\n map((features) => features.includes(Feature.snapshotReportCustomization)),\n shareReplay(1),\n );\n }\n}\n"],"mappings":"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","names":["BillingAction","CheckoutService","constructor","billingSettingsService","billingService","snackbarService","canCreateSubscriptionsRequest$$","ReplaySubject","snapshotActionEnabled$$","instantBillConsentGived$$","snapshotActionEnabled$","asObservable","next","initBillingStatus","validationResponse$","pipe","tap","merchantId","switchMap","productSKU","quantity","getSubscriptionValidation","purchaseCost$","getPurchaseCost","catchError","errorSnack","billingAction$","combineLatest","map","cost","validation","getBillingAction","billingAction","BillingAction","NO_INSTANT_PAYMENT_NEEDED","instantBillConsentChange","PAYMENT_CONFIGURED","loadMerchantCreditCards","purchaseCost","validationResponse","code","status","SubscribeValidationStatus","SUBSCRIBE_VALIDATION_STATUS_MISSING_MERCHANT_INFO","NO_MERCHANT_CONFIGURED","SUBSCRIBE_VALIDATION_STATUS_MISSING_PAYMENT_INFO","NO_PAYMENT_CONFIGURED","SUBSCRIBE_VALIDATION_STATUS_CANNOT_INSTANT_BILL","Error","SUBSCRIBE_VALIDATION_STATUS_WILL_CAUSE_FUTURE_CHARGES","isBillingStrategyInstant","billingStrategyFromAPI","strategy","totalCost","canCreateSubscriptions","validationViolations","find","violation","sku","setSnapshotActionEnabled","enabled","loadProductRequest","given","skus","response","error","message","EMPTY","ɵɵinject","BillingSettingsService","BillingService","SnackbarService","factory","ɵfac","_CheckoutService","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","openEditContactDialog","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","ɵɵpipeBind1","ɵɵtemplate","InstantBillPaymentInfoComponent_ng_container_0_p_1_span_4_Template","ɵɵproperty","editable","_r3","openEditPaymentDialog","InstantBillPaymentInfoComponent_ng_container_0_p_2_span_4_Template","_r4","InstantBillPaymentInfoComponent_ng_container_0_p_3_span_4_Template","ɵɵelementContainerStart","_r6","$event","_r5","checkboxClicked","InstantBillPaymentInfoComponent_ng_container_0_p_4_ng_container_3_Template","InstantBillPaymentInfoComponent_ng_container_0_p_4_ng_container_4_Template","ɵɵelement","InstantBillPaymentInfoComponent_ng_container_0_p_4_span_9_Template","paymentRequired","info_r7","paymentClass","ɵɵtextInterpolate1","ɵɵpipeBind2","ɵɵpureFunction1","_c1","lastFourDigits","InstantBillPaymentInfoComponent_ng_container_0_p_1_Template","InstantBillPaymentInfoComponent_ng_container_0_p_2_Template","InstantBillPaymentInfoComponent_ng_container_0_p_3_Template","InstantBillPaymentInfoComponent_ng_container_0_p_4_Template","status_r8","BillingAction","NO_MERCHANT_CONFIGURED","NO_PAYMENT_CONFIGURED","INVALID_PAYMENT","PAYMENT_CONFIGURED","paymentInfo$","InstantBillPaymentInfoComponent","constructor","snapshotCheckoutService","dialog","billingSettingsService","stripeService","subscriptions","ngOnInit","loadProductRequest","merchantId","productSKU","billingAction$","paymentDetails","pipe","map","cardId","length","getPaymentFontClass","cardType","stripeKey$","getPublicKeyByMerchant","ngOnDestroy","forEach","sub","unsubscribe","push","merchantDetailsInfo","take","subscribe","contactInfo","open","EditContactInfoDialogComponent","width","data","merchant","afterClosed","_","consentCheckbox","checked","instantBillConsentChange","withLatestFrom","paymentDetailsInfo","stripeKey","card","EditPaymentMethodDialogComponent","stripePublicKey","recaptchaKey","requireRecaptcha","paymentCard","emptyPaymentDetails","merchantUpdated","loadMerchantCreditCards","change","cardBrandToPfClass","Visa","Mastercard","Discover","JCB","Object","prototype","hasOwnProperty","call","value","ɵɵdirectiveInject","CheckoutService","MatDialog","BillingSettingsService","StripeService","selectors","viewQuery","rf","ctx","InstantBillPaymentInfoComponent_ng_container_0_Template","_InstantBillPaymentInfoComponent","ɵɵelement","ɵɵproperty","ctx_r1","description","ɵɵsanitizeHtml","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","getDiscountDescription","pricing_r3","price","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind2","subtotalCost","currency","ssr_r4","ɵɵpureFunction1","_c0","ɵɵelementContainerStart","ɵɵtemplate","CheckoutDialogComponent_ng_container_4_ng_container_1_ng_container_1_span_7_Template","CheckoutDialogComponent_ng_container_4_ng_container_1_ng_container_1_div_10_Template","ɵɵtextInterpolate","ɵɵpipeBind1","discountAmount","pricingString","freeSnapshotsRemaining$","CheckoutDialogComponent_ng_container_4_ng_container_1_ng_container_1_Template","showPricing","dontShowContractPricing_r5","billingInfoEditable","partnerId","productSKU","totalCost","_c1","accountType","isInferMissingData","upgrade","cta","ɵɵpureFunction2","_c2","nextTierId","nextTierLimit","CheckoutDialogComponent_ng_container_4_ng_container_1_Template","CheckoutDialogComponent_ng_container_4_app_instant_bill_payment_info_2_Template","CheckoutDialogComponent_ng_container_4_ng_container_3_Template","CheckoutDialogComponent_ng_container_4_glxy_alert_5_Template","CheckoutDialogComponent_ng_container_4_ng_template_6_Template","ɵɵtemplateRefExtractor","showContractPricing","shouldInferAccountData$","show","INFERABLE_FIELDS","CheckoutDialogComponent","constructor","data","dialogRef","billingApiService","snapshotCheckoutService","app","pricePipe","hidePricingGuard","manageSubscriptionsService","featureFlagService","accountGroupService","showContractPricing$$","BehaviorSubject","showContractPricing$","asObservable","successLabel","title","config","userCanAccessBilling","createButtonId","accountGroupId","ngOnInit","FormControl","get","ProjectionFilter","richData","napData","pipe","take","map","accountGroup","hasNAPFields","website","address","workNumber","some","n","alreadyInferred","every","field","inferredAttributes","includes","tap","shouldInfer","setValue","showPricing$","canActivate","hidePricing","price$","getPurchaseCost","snapshotActionEnabled$","pricingString$","purchaseCost","getPurchasePriceString","upgradeData$","cardData$","cards","card","find","c","skus","sku","undefined","showCard","index","findIndex","SNAPSHOT_REPORT_SKU","ssl","subscriptionLimits","limitMax","currentValue","pricing$","combineLatest","config$","priceString","upgradeData","appConfig","userIsAdmin","supportEnabled","upgradeCTA","startWith","ngOnDestroy","setSnapshotActionEnabled","next","formatDisplayPrice","billingFrequency","transform","Currency","merchantId","SKU","quantity","closeSuccess","__async","firstValueFrom","close","status","inferMissingData","value","ɵɵdirectiveInject","MAT_DIALOG_DATA","MatDialogRef","BillingApiService","CheckoutService","AppConfigService","PricePipe","HidePricingGuard","ManageSubscriptionsService","FeatureFlagService","AccountGroupService","selectors","decls","vars","consts","template","rf","ctx","CheckoutDialogComponent_div_3_Template","CheckoutDialogComponent_ng_container_4_Template","CheckoutDialogComponent_ng_template_6_Template","ɵɵlistener","i0","ɵɵrestoreView","_r1","ɵɵresetView","displayStencil_r6","ɵɵpropertyInterpolate","_CheckoutDialogComponent","CompetitionAnalysis","GlobalConfigEnabledSection","Grade","Section","VideoStyle","AppDomain","SalesPerson","_SalesPerson","proto","m","kwargs","toReturn","enumStringToValue$j","enumRef","value","Competitor","_Competitor","Contact","_Contact","Email","_Email","GlobalConfig","_GlobalConfig","VideoStyle","v","GlobalConfigEnabledSection","CompetitionAnalysis","InferredFields","_InferredFields","proto","m","kwargs","toReturn","LanguageConfig","_LanguageConfig","enumStringToValue$j","VideoStyle","Snapshot","_Snapshot","proto","m","GlobalConfig","SnapshotData","SalesPerson","kwargs","toReturn","_SnapshotData","InferredFields","Configuration","_Configuration","proto","m","kwargs","toReturn","Current","_Current","proto","m","kwargs","toReturn","FieldMask","_FieldMask","proto","m","kwargs","toReturn","Branding","_Branding","proto","m","BrandingAssets","kwargs","toReturn","_BrandingAssets","URL","_URL","DirectCompetitor","_DirectCompetitor","proto","m","kwargs","toReturn","enumStringToValue","enumRef","value","CreateSnapshotRequest","_CreateSnapshotRequest","proto","m","kwargs","toReturn","CreateSnapshotResponse","_CreateSnapshotResponse","Domain","_Domain","proto","m","kwargs","toReturn","ForceRefreshSectionRequest","_ForceRefreshSectionRequest","v","enumStringToValue","Section","GeneratePDFRequest","_GeneratePDFRequest","proto","m","kwargs","toReturn","GeneratePDFResponse","_GeneratePDFResponse","GetBusinessIDFromSalesforceIDRequest","_GetBusinessIDFromSalesforceIDRequest","proto","m","kwargs","toReturn","GetBusinessIDFromSalesforceIDResponse","_GetBusinessIDFromSalesforceIDResponse","GetConfigurationRequest","_GetConfigurationRequest","GetConfigurationResponse","_GetConfigurationResponse","Configuration","GetCurrentRequest","_GetCurrentRequest","GetCurrentResponse","_GetCurrentResponse","Current","GetDirectCompetitorsRequest","_GetDirectCompetitorsRequest","GetDirectCompetitorsResponse","_GetDirectCompetitorsResponse","DirectCompetitor","GetDomainRequest","_GetDomainRequest","enumStringToValue","AppDomain","GetDomainResponse","_GetDomainResponse","Domain","GetLatestSnapshotIDRequest","_GetLatestSnapshotIDRequest","proto","m","kwargs","toReturn","GetLatestSnapshotIDResponse","_GetLatestSnapshotIDResponse","GetSalesPersonRequest","_GetSalesPersonRequest","proto","m","kwargs","toReturn","GetSalesPersonResponse","_GetSalesPersonResponse","SalesPerson","GetSnapshotCountCreatedBySalespersonIDRequest","_GetSnapshotCountCreatedBySalespersonIDRequest","proto","m","kwargs","toReturn","GetSnapshotCountCreatedBySalespersonIDResponse","_GetSnapshotCountCreatedBySalespersonIDResponse","GetSnapshotIDRequest","_GetSnapshotIDRequest","GetSnapshotIDResponse","_GetSnapshotIDResponse","GetSnapshotRequest","_GetSnapshotRequest","proto","m","kwargs","toReturn","GetSnapshotResponse","_GetSnapshotResponse","Snapshot","GetSummaryRequest","_GetSummaryRequest","proto","m","kwargs","toReturn","GetSummaryResponse","_GetSummaryResponse","SectionSummary","Location","GetWhitelabelRequest","_GetWhitelabelRequest","proto","m","kwargs","toReturn","GetWhitelabelResponse","_GetWhitelabelResponse","Branding","Location","_Location","proto","m","kwargs","toReturn","PreviewEmailRequest","_PreviewEmailRequest","proto","m","Email","kwargs","toReturn","PreviewEmailResponse","_PreviewEmailResponse","PreviewRefreshSnapshotForBusinessesRequest","_PreviewRefreshSnapshotForBusinessesRequest","PreviewRefreshSnapshotForBusinessesResponse","_PreviewRefreshSnapshotForBusinessesResponse","ProvisionSnapshotOptions","_ProvisionSnapshotOptions","ProvisionSnapshotRequest","_ProvisionSnapshotRequest","ProvisionSnapshotResponse","_ProvisionSnapshotResponse","SaveDirectCompetitorsRequest","_SaveDirectCompetitorsRequest","DirectCompetitor","SectionSummary","_SectionSummary","enumStringToValue","Grade","Section","ShareSnapshotRequest","_ShareSnapshotRequest","Contact","UpdateCurrentRequest","_UpdateCurrentRequest","proto","m","kwargs","toReturn","UpdateSnapshotConfigRequest","_UpdateSnapshotConfigRequest","proto","m","GlobalConfig","FieldMask","kwargs","toReturn","UpdateSnapshotLanguageConfigRequest","_UpdateSnapshotLanguageConfigRequest","LanguageConfig","environment","hostMap","HostService","ɵɵdefineInjectable","CurrentSnapshotApiService","http","hostService","HttpHeaders","r","request","UpdateCurrentRequest","__spreadProps","__spreadValues","GetCurrentRequest","map","resp","GetCurrentResponse","ɵɵinject","HttpClient","HostService","ɵɵdefineInjectable","SnapshotApiService","http","hostService","HttpHeaders","r","request","CreateSnapshotRequest","map","resp","CreateSnapshotResponse","GetSnapshotRequest","GetSnapshotResponse","UpdateSnapshotConfigRequest","__spreadProps","__spreadValues","UpdateSnapshotLanguageConfigRequest","GetSnapshotIDRequest","GetSnapshotIDResponse","GetWhitelabelRequest","GetWhitelabelResponse","GetConfigurationRequest","GetConfigurationResponse","GetSalesPersonRequest","GetSalesPersonResponse","ForceRefreshSectionRequest","GetLatestSnapshotIDRequest","GetLatestSnapshotIDResponse","GetBusinessIDFromSalesforceIDRequest","GetBusinessIDFromSalesforceIDResponse","GetSnapshotCountCreatedBySalespersonIDRequest","GetSnapshotCountCreatedBySalespersonIDResponse","PreviewRefreshSnapshotForBusinessesRequest","PreviewRefreshSnapshotForBusinessesResponse","ShareSnapshotRequest","GetDomainRequest","GetDomainResponse","PreviewEmailRequest","PreviewEmailResponse","GetDirectCompetitorsRequest","GetDirectCompetitorsResponse","SaveDirectCompetitorsRequest","ProvisionSnapshotRequest","ProvisionSnapshotResponse","GetSummaryRequest","GetSummaryResponse","GeneratePDFRequest","GeneratePDFResponse","ɵɵinject","HttpClient","HostService","ɵɵdefineInjectable","buildFieldMask","obj","fieldMaskPaths","x","FieldMask","CurrentSnapshotService","_api","businessID","req","GetCurrentRequest","ɵɵinject","CurrentSnapshotApiService","ɵɵdefineInjectable","Origin","SnapshotService","_api","snapshotId","map","resp","businessId","origin","originDetails","inferMissingData","source","detail","snapshotConfig","GlobalConfig","buildFieldMask","languageConfig","LanguageConfig","salesforceId","partnerId","sender","contacts","email","domain","value","type","binary","binaryLen","bytes","i","application","res","directCompetitors","ɵɵinject","SnapshotApiService","ɵɵdefineInjectable","CurrentSnapshot","constructor","data","snapshotId","created","expired","path","Location","address","city","state","country","SnapshotSummary","result","businessId","companyName","score","sections","location","CACHE_SIZE","ScorecardService","constructor","currentSnapshotService","snapshotService","domainService","domainCache$","Map","getCurrentSnapshot","businessId","get","pipe","map","current","CurrentSnapshot","snapshot","catchError","observableOf","publishReplay","refCount","getSummary","snapshotId","startsWith","result","summary","SnapshotSummary","getDomain","partnerId","getDomainByIdentifier","domainResp","primary","shareReplay","ɵɵinject","CurrentSnapshotService","SnapshotService","DomainService","factory","ɵfac","_ScorecardService","ɵɵelementStart","ɵɵelement","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ctx_r0","score","COLORS","gradePositive","gradeNeutral","gradeNegative","OverallScoreComponent","ngOnInit","parseInt","overallScore","strokeColorForScore","selectors","inputs","decls","vars","consts","template","rf","ctx","ɵɵtemplate","OverallScoreComponent_div_0_Template","ɵɵproperty","_OverallScoreComponent","ɵɵelementStart","ɵɵelement","ɵɵtext","ɵɵelementEnd","ɵɵproperty","ɵɵpureFunction2","_c0","ctx_r0","radius","ɵɵadvance","_c1","size","gradeLetter","ɵɵtextInterpolate1","GradeComponent","constructor","showGrade","grade","Grade","selectors","inputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtemplate","GradeComponent_div_0_Template","CommonModule","NgClass","NgIf","NgStyle","styles","changeDetection","_GradeComponent","SectionGradeComponent","selectors","inputs","section","showGrade","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","sectionName","ɵɵproperty","grade","_SectionGradeComponent","ɵɵelementStart","ɵɵlistener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","editSnapshot","ɵɵtext","ɵɵelementEnd","ɵɵproperty","ɵɵpureFunction2","_c2","trackingProperties","category","ɵɵpureFunction1","_c0","snapshotId","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","snapshotURL","_c3","ActionsComponent","constructor","enableURLCopy","showEditButton","viewSnapshotClicked","EventEmitter","editSnapshotClicked","viewSnapshot","emit","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","ɵɵtemplate","ActionsComponent_button_3_Template","ActionsComponent_button_4_Template","_c1","_ActionsComponent","ɵɵelementContainerStart","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate2","ɵɵpipeBind1","ɵɵpipeBind2","ctx_r0","created","ɵɵlistener","ɵɵrestoreView","_r2","ɵɵnextContext","ɵɵresetView","refreshSnapshot","ɵɵtextInterpolate1","snapshotCreatedDaysAgo","ɵɵproperty","ɵɵpureFunction2","_c1","trackingProperties","category","ɵɵpureFunction1","_c0","snapshotId","_r3","_c2","snapshotName","_r4","ActionRefreshComponent","constructor","refreshSnapshotClicked","EventEmitter","ngOnInit","snapshotStatus","getSnapshotStatus","expired","formatDistance","Date","addSuffix","emit","expiry","undefined","now","expiryPlus3Months","setMonth","getMonth","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","ɵɵtemplate","ActionRefreshComponent_ng_container_4_Template","ActionRefreshComponent_ng_container_5_Template","ActionRefreshComponent_ng_container_6_Template","ActionRefreshComponent_ng_container_7_Template","_ActionRefreshComponent","NotReadyComponent","selectors","inputs","snapshotName","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵelement","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind1","ɵɵproperty","ɵɵpipeBind2","ɵɵpureFunction1","_c0","ɵɵsanitizeHtml","_NotReadyComponent","NotSupportedComponent","selectors","inputs","snapshotName","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","ɵɵpipeBind2","ɵɵpureFunction1","_c0","_NotSupportedComponent","ɵɵelementContainerStart","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ɵɵpipeBind1","ɵɵsanitizeHtml","section_r2","summary_r3","score","ɵɵlistener","snapshotURL_r6","ɵɵrestoreView","_r5","ngIf","ctx_r3","ɵɵnextContext","ɵɵresetView","onViewSnapshotClicked","onEditSnapshotClicked","trackingProperties","enableURLCopy","showEditButton","ɵɵtext","ɵɵtemplate","ScorecardComponent_ng_container_2_ng_container_2_ng_container_10_Template","ScorecardComponent_ng_container_2_ng_container_2_ng_container_12_Template","_r1","onRefreshSnapshotClicked","ScorecardComponent_ng_container_2_ng_container_2_ng_container_15_Template","ɵɵtextInterpolate","companyName","address","isLessThan24HoursOld","sections","snapshotName","created","expired","snapshotUrl","snapshotURL_r9","_r8","_r7","ScorecardComponent_ng_container_2_ng_container_4_ng_container_4_Template","ScorecardComponent_ng_container_2_ng_container_2_Template","ScorecardComponent_ng_container_2_ng_container_3_Template","ScorecardComponent_ng_container_2_ng_container_4_Template","result","ScorecardComponent","businessId","businessId$$","next","partnerId","partnerId$$","constructor","service","environmentService","Subject","openInEditMode","refreshReportClickedEvent","EventEmitter","currentSnapshot","firstValueFrom","then","getCurrentSnapshot","snapshotSummary","current","getSummary","snapshotId","summary","category","trackingCategory","buildAddress","location","s","differenceInHours","Date","Promise","all","getSnapshotDomain","domain","snapshot","path","window","hostname","snapshotEditV2URL","snapshotID","__async","getDomain","d","scheme","secure","host","snapshotURL","openSnapshotUrl","openSnapshotV2EditUrl","emit","isEditMode","open","url","getEnvironment","Environment","DEMO","PROD","ɵɵdirectiveInject","ScorecardService","EnvironmentService","selectors","inputs","outputs","decls","vars","consts","template","rf","ctx","ScorecardComponent_ng_container_2_Template","ScorecardComponent_ng_template_4_Template","ɵɵtemplateRefExtractor","loading_r10","_ScorecardComponent","city","state","country","en_devel_default","MaterialModules","MatCardModule","MatDividerModule","MatIconModule","MatButtonModule","MatListModule","MatProgressSpinnerModule","SnapshotModules","GradeComponent","ScorecardModule","ScorecardService","imports","CommonModule","GalaxyEmptyStateModule","TranslateModule","ClipboardModule","GalaxyAlertModule","ProductAnalyticsModule","LexiconModule","forChild","componentName","baseTranslation","English","_ScorecardModule","MARKET_ID","PARTNER_ID","WhitelabelTranslationService","constructor","translate","partnerId$","marketId$","whitelabelService","cachedPartnerId$","pipe","shareReplay","whitelabelConfiguration$","combineLatest","switchMap","partnerId","marketId","getConfiguration","getWhitelabelledParams$","subscribe","defaultParams","instantParams","stream","translationString","interpolateParams","params","instant","translationParams","translateParams","Object","assign","map","config","snapshotConfiguration","snapshotReportName","snapshotName","appName","ɵɵinject","TranslateService","PARTNER_ID","MARKET_ID","WhitelabelService","factory","ɵfac","providedIn","_WhitelabelTranslationService","SnapshotAction","SnapshotCaller","SnapshotService","constructor","apiService","snapshotApiService","currentSnapshotService","dialog","whitelabelTranslationService","snackbarService","whitelabelService","accountGroupService","partnerId$","domainService","environmentService","refreshSnapshotState","ObservableWorkStateMap","currentSnapshotState","createSnapshotState","snapshotNameState","host","getEnvironment","Environment","DEMO","PROD","getDomain","pipe","switchMap","id","getDomainByIdentifier","map","domainResp","primary","d","scheme","secure","domain","getSnapshotUrl$","snapshotId","retryConfig","maxAttempts","retryDelay","timeoutMilliseconds","domain$","snapshot$","get","retryer","combineLatest","snapshot","view","edit","snapshotID","take","fetchSnapshotName","accountGroupId","defaultSnapshotName","instant","filter","ProjectionFilter","accountGroupExternalIdentifiers","work$","partnerId","getConfiguration","config","snapshotConfiguration","snapshotReportName","acc","externalIdentifiers","marketId","startWork","getSnapshotName$","getWorkResults$","getCurrentSnapshotSuccess$","accountGroupID","isSuccess$","currentSnapshotLoading$","isLoading$","startWith","distinctUntilChanged","createSnapshotSuccess$","createSnapshotLoading$","createSnapshotResult$","loading","success","of","resp","getCurrentSnapshotUpdates$","getCurrentSnapshotV2$","getCurrentSnapshot$","refreshedSnapshotID","created","expired","path","Error","snapshotRefreshLoading$","accountId","snapshotRefreshIsSuccessful$","generateSnapshot$","originDetails","inferMissingData","notifier$","interval","provision","Origin","PARTNER_CENTER","tap","retry","delay","count","doRefreshSnapshotWork","doCreateSnapshotWork","refreshSnapshot","getSnapshotReportUrl","params","createCompanySnapshot","opts","req","action","CREATE","accountType","COMPANY","openConfirmSnapshotCreateDialog","res","create","origin","refreshCompanySnapshot","throwError","REFRESH","showCreateSnapshotErrorMessage","openErrorSnack","showCreateSnapshotSuccessMessage","openSuccessSnack","showRefreshSnapshotErrorMessage","showRefreshSnapshotSuccessMessage","closeAll","title","successLabel","createButtonId","successId","sku","SNAPSHOT_REPORT_SKU","SNAPSHOT_REPORT_REFRESH_SKU","open","CheckoutDialogComponent","width","data","productSKU","description","afterClosed","result","status","partnerHasAccessToSnapshotEditing","enabledFeatures","features","includes","shareReplay","ɵɵinject","ApiService","CurrentSnapshotService","MatDialog","WhitelabelTranslationService","SnackbarService","WhitelabelService","AccountGroupService","DomainService","EnvironmentService","factory","ɵfac","providedIn","_SnapshotService"],"x_google_ignoreList":[4]}