{"version":3,"sources":["libs/billing/src/lib/pricing/billing-strategy.ts","libs/billing/src/lib/pricing/frequency.ts","libs/billing/src/lib/pricing/product-pricing-rules.ts","libs/billing/src/lib/pricing/product-pricing-type.ts","libs/billing/src/lib/pricing/commitment.ts","libs/billing/src/lib/pricing/fee.ts","libs/billing/src/lib/pricing/pricing-plan-product.ts","libs/billing/src/lib/pricing/product-pricing.ts","libs/billing/src/lib/pricing/wholesale-pricing.service.ts","libs/billing/src/lib/pricing/retail-pricing.service.ts","libs/billing/src/lib/pricing/status.ts","libs/billing/src/lib/pricing/source.ts","libs/billing/src/lib/revenue/revenue.service.ts","libs/billing/src/lib/merchant-report/merchant-report.service.ts","libs/billing/src/lib/discount/discount_type.ts","libs/billing/src/lib/discount/discount.ts","libs/billing/src/lib/discount/discount_consumer.ts","libs/billing/src/lib/discount/discount.service.ts","libs/billing/src/lib/applied_discount/applied_discount.ts","libs/billing/src/lib/purchase/purchase_status.ts","libs/billing/src/lib/purchase/purchase.ts","libs/billing/src/lib/customer_summary/customer-summary.ts","libs/billing/src/lib/contract/dimension.ts","libs/billing/src/lib/contract/contract.ts","libs/billing/src/lib/contract/contract.service.ts","libs/billing/src/lib/contract/mutations.ts","libs/billing/src/lib/product/product.ts","libs/billing/src/lib/product/list-products.ts","libs/billing/src/lib/billable-item/billable-item.ts","libs/billing/src/lib/billing.service.ts","libs/billing/src/lib/recurring_invoice/collection-method.ts","libs/billing/src/lib/recurring_invoice/interval.ts","libs/billing/src/lib/recurring_invoice/payment-processor.ts","libs/billing/src/lib/recurring_invoice/status.ts","libs/billing/src/lib/recurring_invoice/recurring-invoice.ts","libs/billing/src/lib/recurring_invoice/recurring-invoice.service.ts","libs/billing/src/lib/interval-mapping.service.ts","libs/billing/src/lib/applied_bundle/applied_bundle.ts","libs/billing/src/lib/bank_account/bank_account.ts","libs/billing/src/lib/bank_account/bank-account.service.ts","libs/billing/src/lib/billing-host.service.ts","libs/billing/src/lib/stripe.service.ts","libs/billing/src/lib/bundle/bundle.ts","libs/billing/src/lib/bundle/bundle.service.ts","libs/billing/src/lib/credit/credit.ts","libs/billing/src/lib/credit/credit.service.ts","node_modules/@vendasta/url-shortener/fesm2020/vendasta-url-shortener.mjs","libs/billing/src/lib/note/note.ts","libs/billing/src/lib/invoice/invoice.ts","libs/billing/src/lib/invoice/invoice.service.ts","libs/billing/src/lib/invoice/adapters.ts","libs/billing/src/lib/payment-method/payment-method.service.ts","libs/billing/src/lib/product-summary/subscription-retention.ts","libs/billing/src/lib/product-summary/product-summary.service.ts","libs/billing/src/lib/purchase/list-purchases.ts","libs/billing/src/lib/purchase/purchase.service.ts","libs/billing/src/lib/sales-credit-note/sales-credit-note.ts","libs/billing/src/lib/sales-credit-note/sales-credit-note.service.ts","libs/billing/src/lib/sales-invoice/sales-invoice.ts","libs/billing/src/lib/sales-invoice/sales-invoice.service.ts","libs/billing/src/lib/sku.ts","libs/billing/src/lib/stripe-file/stripe-file.service.ts","libs/billing/src/lib/stripe-file/purpose.ts"],"sourcesContent":["import { BillingStrategy as PricingPlanBillingStrategy } from '@vendasta/billing';\n\nexport enum BillingStrategy {\n Invalid = 'INVALID',\n EndOfPeriod = 'END_OF_PERIOD',\n StartOfPeriod = 'START_OF_PERIOD',\n Instantly = 'INSTANTLY',\n EndOfDay = 'END_OF_DAY',\n}\n\nexport function isBillingStrategyInstant(strategy: BillingStrategy): boolean {\n return strategy === BillingStrategy.Instantly || strategy === BillingStrategy.EndOfDay;\n}\n\nexport function billingStrategyFromAPI(bsAPI: PricingPlanBillingStrategy | undefined): BillingStrategy {\n switch (bsAPI) {\n case PricingPlanBillingStrategy.BILLING_STRATEGY_END_OF_PERIOD:\n return BillingStrategy.EndOfPeriod;\n case PricingPlanBillingStrategy.BILLING_STRATEGY_START_OF_PERIOD:\n return BillingStrategy.StartOfPeriod;\n case PricingPlanBillingStrategy.BILLING_STRATEGY_INSTANTLY:\n return BillingStrategy.Instantly;\n case PricingPlanBillingStrategy.BILLING_STRATEGY_END_OF_DAY:\n return BillingStrategy.EndOfDay;\n }\n return BillingStrategy.Invalid;\n}\n\nexport function billingStrategyToAPI(strategy: BillingStrategy | undefined): PricingPlanBillingStrategy {\n switch (strategy) {\n case BillingStrategy.EndOfPeriod:\n return PricingPlanBillingStrategy.BILLING_STRATEGY_END_OF_PERIOD;\n case BillingStrategy.StartOfPeriod:\n return PricingPlanBillingStrategy.BILLING_STRATEGY_START_OF_PERIOD;\n case BillingStrategy.Instantly:\n return PricingPlanBillingStrategy.BILLING_STRATEGY_INSTANTLY;\n case BillingStrategy.EndOfDay:\n return PricingPlanBillingStrategy.BILLING_STRATEGY_END_OF_DAY;\n }\n return PricingPlanBillingStrategy.BILLING_STRATEGY_NONE;\n}\n","import { Frequency as FrequencyApi } from '@vendasta/billing';\n\nexport enum Frequency {\n Invalid = 'INVALID',\n Monthly = 'MONTHLY',\n Yearly = 'YEARLY',\n OneTime = 'ONE_TIME',\n}\n\nexport function frequencyFromLegacyApi(fApi: string): Frequency {\n switch (fApi) {\n case 'monthly':\n return Frequency.Monthly;\n case 'yearly':\n return Frequency.Yearly;\n case 'one_time':\n return Frequency.OneTime;\n }\n return Frequency.Invalid;\n}\n\nexport function frequencyFromApi(fApi: FrequencyApi | undefined): Frequency {\n switch (fApi) {\n case FrequencyApi.MONTHLY:\n return Frequency.Monthly;\n case FrequencyApi.YEARLY:\n return Frequency.Yearly;\n case FrequencyApi.ONE_TIME:\n return Frequency.OneTime;\n }\n return Frequency.Invalid;\n}\n\nexport function frequencyToApi(frequency: Frequency | undefined): FrequencyApi {\n switch (frequency) {\n case Frequency.Monthly:\n return FrequencyApi.MONTHLY;\n case Frequency.Yearly:\n return FrequencyApi.YEARLY;\n case Frequency.OneTime:\n return FrequencyApi.ONE_TIME;\n }\n return FrequencyApi.INVALID;\n}\n","import { ProductPricingRuleInterface } from '@vendasta/billing';\n\nexport interface ProductPricingRules {\n price: number;\n minUnits: number;\n maxUnits: number;\n}\n\nexport function productPricingRulesFromApi(pprApi: ProductPricingRuleInterface[] | undefined): ProductPricingRules[] {\n return (pprApi || []).map((r) => {\n return {\n price: r.price || 0,\n minUnits: r.minUnits,\n maxUnits: r.maxUnits,\n } as ProductPricingRules;\n });\n}\n","import { ProductPricingType as ProductPricingTypeApi } from '@vendasta/billing';\n\nexport enum ProductPricingType {\n Invalid = 'INVALID',\n Standard = 'STANDARD',\n Stairstep = 'STAIRSTEP',\n Tiered = 'TIERED',\n}\n\nexport function productPricingTypeFromApi(pptApi: ProductPricingTypeApi | undefined): ProductPricingType {\n switch (pptApi) {\n case ProductPricingTypeApi.PRODUCT_PRICING_TYPE_STANDARD:\n return ProductPricingType.Standard;\n case ProductPricingTypeApi.PRODUCT_PRICING_TYPE_STAIRSTEP:\n return ProductPricingType.Stairstep;\n case ProductPricingTypeApi.PRODUCT_PRICING_TYPE_TIERED:\n return ProductPricingType.Tiered;\n }\n return ProductPricingType.Invalid;\n}\n\nexport function productPricingTypeToApi(ppt: ProductPricingType): ProductPricingTypeApi {\n switch (ppt) {\n case ProductPricingType.Standard:\n return ProductPricingTypeApi.PRODUCT_PRICING_TYPE_STANDARD;\n case ProductPricingType.Stairstep:\n return ProductPricingTypeApi.PRODUCT_PRICING_TYPE_STAIRSTEP;\n case ProductPricingType.Tiered:\n return ProductPricingTypeApi.PRODUCT_PRICING_TYPE_TIERED;\n }\n return ProductPricingTypeApi.PRODUCT_PRICING_TYPE_INVALID;\n}\n","import { CommitmentInterface } from '@vendasta/billing';\n\nexport interface Commitment {\n initial: number;\n recurring: number;\n}\n\nexport function commitmentFromAPI(comAPI: CommitmentInterface | undefined): Commitment {\n return {\n initial: comAPI?.initial || 0,\n recurring: comAPI?.recurring || 0,\n };\n}\n","import { FeeInterface as FeeProto } from '@vendasta/billing';\n\nexport interface Fee {\n amount?: number;\n amountType?: FeeAmountType;\n feeType?: FeeType;\n}\n\nexport enum FeeAmountType {\n FEE_AMOUNT_TYPE_INVALID = 0,\n FEE_AMOUNT_TYPE_FIXED = 1,\n FEE_AMOUNT_TYPE_PERCENTAGE = 2,\n}\n\nexport enum FeeType {\n FEE_TYPE_INVALID = 0,\n FEE_TYPE_MANAGEMENT = 1,\n}\n\nexport function feesFromApi(protos: FeeProto[]): Fee[] {\n if (!protos || protos.length < 1) {\n return [];\n }\n return protos.map((proto) => {\n return {\n amount: proto.amount || 0,\n amountType: proto.amountType,\n feeType: proto.feeType,\n };\n });\n}\n\nexport function feesToApi(fees: Fee[]): FeeProto[] {\n if (!fees || fees.length < 1) {\n return [];\n }\n return fees.map((fee) => {\n return {\n amount: fee.amount || 0,\n amountType: fee.amountType,\n feeType: fee.feeType,\n };\n });\n}\n","import {\n PricingPlanProduct as ApiPricingPlanProduct,\n PricingPlanProductPricing as ApiPricing,\n ProductPricingRule as ApiRule,\n} from '@vendasta/billing';\nimport { BillingStrategy, billingStrategyFromAPI } from './billing-strategy';\nimport { Commitment, commitmentFromAPI } from './commitment';\nimport { Currency } from './currency';\nimport { Frequency, frequencyFromApi, frequencyToApi } from './frequency';\nimport { ProductPricingRules, productPricingRulesFromApi } from './product-pricing-rules';\nimport { ProductPricingType, productPricingTypeFromApi, productPricingTypeToApi } from './product-pricing-type';\nimport { Fee, feesFromApi, feesToApi } from './fee';\n\nexport interface CurrencyPricingMap {\n [key: string]: PricingPlanProductPricing;\n}\n\nexport interface PricingPlanProductPricing {\n type: ProductPricingType;\n rules: ProductPricingRules[];\n setupFee: number;\n fees: Fee[];\n frequency?: Frequency;\n currencyCode?: string;\n}\n\nexport interface PricingPlanProduct {\n pricingPlanId: string;\n sku: string;\n frequency?: Frequency;\n pricing: CurrencyPricingMap;\n commitment: Commitment;\n created: Date;\n modified: Date;\n strategy: BillingStrategy;\n volumeCommitment: number;\n volumeCommitmentStartsAt?: Date;\n volumeCommitmentEndsAt?: Date;\n defaultStrategy?: BillingStrategy;\n}\n\nexport function pricingPlanProductFromApi(apiProduct: ApiPricingPlanProduct): PricingPlanProduct {\n const pricingMap: CurrencyPricingMap = {};\n for (const apiCurrency in apiProduct.pricing) {\n if (!Object.prototype.hasOwnProperty.call(apiProduct.pricing, apiCurrency)) {\n continue;\n }\n\n const pricingApi = apiProduct.pricing[apiCurrency];\n pricingMap[apiCurrency] = {\n type: productPricingTypeFromApi(pricingApi.type),\n rules: productPricingRulesFromApi(pricingApi.rules),\n setupFee: pricingApi.setupFee || 0,\n fees: feesFromApi(pricingApi.fees),\n frequency: frequencyFromApi(pricingApi.frequency),\n };\n }\n\n return {\n pricingPlanId: apiProduct.pricingPlanId,\n sku: apiProduct.sku,\n frequency: frequencyFromApi(apiProduct.frequency),\n pricing: pricingMap,\n commitment: commitmentFromAPI(apiProduct.commitment),\n created: apiProduct.created,\n modified: apiProduct.modified,\n strategy: billingStrategyFromAPI(apiProduct.strategy),\n volumeCommitment: apiProduct.volumeCommitment,\n volumeCommitmentStartsAt:\n apiProduct.volumeCommitmentStartsAt?.getTime() !== 0 ? apiProduct.volumeCommitmentStartsAt : undefined,\n volumeCommitmentEndsAt:\n apiProduct.volumeCommitmentEndsAt?.getTime() !== 0 ? apiProduct.volumeCommitmentEndsAt : undefined,\n };\n}\n\nexport function currencyPricingMapToApi(currencyPricingMap: CurrencyPricingMap | undefined): {\n [key: string]: ApiPricing;\n} {\n if (!currencyPricingMap) {\n return {};\n }\n return Object.keys(currencyPricingMap)\n .filter((c) => c in Currency)\n .reduce((apiPricingMap: { [key: string]: ApiPricing }, c: string) => {\n apiPricingMap[c] = pricingPlanProductPricingToApi(currencyPricingMap[c]);\n return apiPricingMap;\n }, {});\n}\n\nexport function productPricingRulesToApi(rules: ProductPricingRules[]): ApiRule[] {\n return rules.map((rule) => new ApiRule(rule));\n}\n\nexport function pricingPlanProductPricingToApi(pricing: PricingPlanProductPricing): ApiPricing {\n return new ApiPricing({\n type: productPricingTypeToApi(pricing.type),\n rules: productPricingRulesToApi(pricing.rules),\n setupFee: pricing.setupFee,\n fees: feesToApi(pricing.fees),\n frequency: frequencyToApi(pricing.frequency),\n currencyCode: pricing.currencyCode,\n });\n}\n","import {\n GetPurchaseCostResponse,\n ProductPricesInterface,\n ProductPricingInterface,\n PricingPlanProductPricing as ApiPricingPlanProductPricing,\n} from '@vendasta/billing';\nimport { BillingStrategy, billingStrategyFromAPI } from './billing-strategy';\nimport { Commitment, commitmentFromAPI } from './commitment';\nimport { Currency, currencyFromApi } from './currency';\nimport { Frequency, frequencyFromApi, frequencyFromLegacyApi, frequencyToApi } from './frequency';\nimport { ProductPricingRules, productPricingRulesFromApi } from './product-pricing-rules';\nimport { ProductPricingType, productPricingTypeFromApi, productPricingTypeToApi } from './product-pricing-type';\nimport { Fee, feesFromApi, feesToApi } from './fee';\nimport { productPricingRulesToApi } from './pricing-plan-product';\n\nexport interface PurchaseCost {\n billingFrequency: Frequency;\n total: number;\n subtotal: number;\n currency: Currency;\n strategy: BillingStrategy;\n commitment: Commitment;\n isStartingPrice: boolean;\n discountTotal: number;\n setupFee: number;\n}\n\nexport interface ProductPricing {\n strategy: BillingStrategy;\n pricingType: ProductPricingType;\n currency: Currency;\n frequency: Frequency;\n pricingRules: ProductPricingRules[];\n commitment: Commitment;\n volumeCommitment: number;\n isStartingPrice: boolean;\n resolvedFrom?: string;\n setupFee: number;\n fees: Fee[];\n}\n\nexport interface ProductPrices {\n sku: string;\n prices: ProductPricing[];\n}\n\nexport function purchaseCostFromAPI(pcApi: GetPurchaseCostResponse): PurchaseCost {\n const subtotal = pcApi.subtotalCost || 0;\n const discountTotal = pcApi.discountAmount || 0;\n const total = pcApi.totalCost || 0;\n const setupFee = pcApi.setupFee || 0;\n\n return {\n subtotal: subtotal,\n discountTotal: discountTotal,\n total: total,\n billingFrequency: frequencyFromLegacyApi(pcApi.billingFrequency),\n currency: currencyFromApi(pcApi.currency),\n strategy: billingStrategyFromAPI(pcApi.strategy),\n commitment: commitmentFromAPI(pcApi.commitment),\n isStartingPrice: pcApi.isStartingPrice,\n setupFee: setupFee,\n };\n}\n\nexport function productPricingFromApi(pApi: ProductPricingInterface): ProductPricing {\n return {\n strategy: billingStrategyFromAPI(pApi.strategy),\n pricingType: productPricingTypeFromApi(pApi.pricingType),\n currency: currencyFromApi(pApi.currency),\n frequency: frequencyFromApi(pApi.frequency),\n pricingRules: productPricingRulesFromApi(pApi.pricingRules),\n commitment: commitmentFromAPI(pApi.commitment),\n volumeCommitment: pApi.volumeCommitment || 0,\n isStartingPrice: pApi.isStartingPrice || false,\n resolvedFrom: pApi.resolvedFrom,\n setupFee: pApi.setupFee || 0,\n fees: feesFromApi(pApi.fees || []),\n };\n}\n\nexport function pricesFromApi(pApi: ProductPricesInterface[]): ProductPrices[] {\n return pApi?.map(\n (p) =>\n p &&\n ({\n sku: p.sku,\n prices: (p.prices || []).map((price) => price && productPricingFromApi(price)),\n } as ProductPrices),\n );\n}\n\nexport function productPricingToApiCurrencyMap(productPricing: ProductPricing): {\n [currencyCode: string]: ApiPricingPlanProductPricing;\n} {\n if (!productPricing) {\n return {};\n }\n const apiPricing = productPricingToApi(productPricing);\n return { [apiPricing.currencyCode]: apiPricing };\n}\n\nexport function productPricingToApi(productPricing: ProductPricing): ApiPricingPlanProductPricing {\n return new ApiPricingPlanProductPricing({\n type: productPricingTypeToApi(productPricing.pricingType),\n rules: productPricingRulesToApi(productPricing.pricingRules),\n setupFee: productPricing.setupFee,\n fees: feesToApi(productPricing.fees),\n frequency: frequencyToApi(productPricing.frequency),\n currencyCode: productPricing.currency,\n });\n}\n","import { HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BillingApiService, Commitment, PricingApiService, UpsertWholesalePricingRequest } from '@vendasta/billing';\nimport { BillingStrategy, billingStrategyToAPI } from './billing-strategy';\nimport { PricingPlanProductPricing, pricingPlanProductPricingToApi } from './pricing-plan-product';\nimport { pricesFromApi, ProductPrices, PurchaseCost, purchaseCostFromAPI } from './product-pricing';\n\n@Injectable({ providedIn: 'root' })\nexport class WholesalePricingService {\n constructor(private pricingService: PricingApiService, private billingApi: BillingApiService) {}\n\n setProductBillingStrategy(merchantId: string, sku: string, billingStrategy: BillingStrategy): Observable {\n const strategy = billingStrategyToAPI(billingStrategy);\n return this.pricingService.setWholesaleProductStrategy({ merchantId, sku, strategy }).pipe(map(() => null));\n }\n\n setProductVolumeCommitment(\n merchantId: string,\n sku: string,\n volumeCommitment: number,\n volumeCommitmentStartsAt?: Date,\n volumeCommitmentEndsAt?: Date,\n ): Observable {\n return this.pricingService\n .setWholesaleProductVolumeCommitment({\n merchantId,\n sku,\n volumeCommitment,\n volumeCommitmentStartsAt: volumeCommitmentStartsAt,\n volumeCommitmentEndsAt: volumeCommitmentEndsAt,\n })\n .pipe(map(() => null));\n }\n\n getPurchaseCost(merchantId: string, sku: string, quantity: number): Observable {\n return this.pricingService\n .getPurchaseCost({ merchantId, sku, quantity })\n .pipe(map((resp) => purchaseCostFromAPI(resp)));\n }\n\n getMultiWholesalePrices(merchantId: string, skus: string[], pricingPlanId?: string): Observable {\n return this.billingApi\n .getMultiProductPricing({ merchantId, skus, pricingPlanId })\n .pipe(map((r) => pricesFromApi(r.prices)));\n }\n\n upsertPricing(\n pricingPlanId: string,\n sku: string,\n pricing: PricingPlanProductPricing[],\n termCommitment: Commitment,\n strategy: BillingStrategy,\n volumeCommitment: number,\n volumeCommitmentStartsAt?: Date,\n volumeCommitmentEndsAt?: Date,\n ): Observable> {\n const request = new UpsertWholesalePricingRequest({\n pricingPlanId,\n sku,\n pricing: (pricing || []).map((p) => pricingPlanProductPricingToApi(p)),\n strategy: billingStrategyToAPI(strategy),\n termCommitment,\n volumeCommitment,\n volumeCommitmentStartsAt,\n volumeCommitmentEndsAt,\n });\n return this.pricingService.upsertWholesale(request);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { pricesFromApi, ProductPrices, ProductPricing, productPricingToApiCurrencyMap } from './product-pricing';\nimport { PricingApiService, UpsertRetailPricingRequest } from '@vendasta/billing';\nimport { Frequency, frequencyToApi } from './frequency';\nimport { HttpResponse } from '@angular/common/http';\n\nexport class RetailPricingForSubscriptionId {\n subscriptionId: string;\n\n constructor(subscriptionId: string) {\n this.subscriptionId = subscriptionId;\n }\n}\n\nexport class RetailPricingForCustomerId {\n customerId: string;\n\n constructor(customerId: string) {\n this.customerId = customerId;\n }\n}\n\nexport class RetailPricingForGroupId {\n groupId: string;\n\n constructor(groupId: string) {\n this.groupId = groupId;\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class RetailPricingService {\n constructor(private pricingApi: PricingApiService) {}\n\n getMultiRetailPrices(merchantId: string, skus: string[], groupId?: string): Observable {\n const requestGroupId: string = groupId || '';\n return this.pricingApi\n .getMultiRetail({ merchantId, skus, groupId: requestGroupId })\n .pipe(map((r) => pricesFromApi(r.prices)));\n }\n\n upsertPricing(\n merchantId: string,\n sku: string,\n frequency: Frequency,\n pricing: ProductPricing,\n identifier: RetailPricingForSubscriptionId | RetailPricingForCustomerId | RetailPricingForGroupId,\n ): Observable> {\n const req = new UpsertRetailPricingRequest({\n merchantId,\n sku,\n frequency: frequencyToApi(frequency),\n pricing: productPricingToApiCurrencyMap(pricing),\n });\n if (identifier instanceof RetailPricingForSubscriptionId) {\n req.subscriptionId = identifier.subscriptionId;\n } else if (identifier instanceof RetailPricingForCustomerId) {\n req.customerId = identifier.customerId;\n } else if (identifier instanceof RetailPricingForGroupId) {\n req.groupId = identifier.groupId;\n }\n return this.pricingApi.upsertRetail(req);\n }\n}\n","import { SubscriptionStatus as SubscriptionStatusApi } from '@vendasta/billing';\n\nexport enum SubscriptionStatus {\n Unset = 'Unset',\n Active = 'Active',\n Inactive = 'Inactive',\n}\n\nexport function subscriptionStatusFromApi(sApi: SubscriptionStatusApi | undefined): SubscriptionStatus {\n switch (sApi) {\n case SubscriptionStatusApi.SUBSCRIPTION_STATUS_ACTIVE:\n return SubscriptionStatus.Active;\n case SubscriptionStatusApi.SUBSCRIPTION_STATUS_EXPIRED:\n return SubscriptionStatus.Inactive;\n default:\n return SubscriptionStatus.Unset;\n }\n}\n\nexport function subscriptionStatusToApi(subscriptionStatus: SubscriptionStatus): SubscriptionStatusApi {\n switch (subscriptionStatus) {\n case SubscriptionStatus.Active:\n return SubscriptionStatusApi.SUBSCRIPTION_STATUS_ACTIVE;\n case SubscriptionStatus.Inactive:\n return SubscriptionStatusApi.SUBSCRIPTION_STATUS_EXPIRED;\n default:\n return SubscriptionStatusApi.SUBSCRIPTION_STATUS_UNSET;\n }\n}\n\nexport function isSubscriptionStatus(str: string): str is SubscriptionStatus {\n return Object.values(SubscriptionStatus).includes(str as SubscriptionStatus);\n}\n","import { Source as SubscriptionSourceApi } from '@vendasta/billing';\n\nexport enum SubscriptionSource {\n Unset = '',\n System = 'System',\n User = 'User',\n}\n\nexport function subscriptionSourceFromApi(sApi: SubscriptionSourceApi | undefined): SubscriptionSource {\n switch (sApi) {\n case SubscriptionSourceApi.SOURCE_SYSTEM:\n return SubscriptionSource.System;\n case SubscriptionSourceApi.SOURCE_USER:\n return SubscriptionSource.User;\n default:\n return SubscriptionSource.Unset;\n }\n}\n\nexport function subscriptionSourceToApi(source: SubscriptionSource): SubscriptionSourceApi {\n switch (source) {\n case SubscriptionSource.System:\n return SubscriptionSourceApi.SOURCE_SYSTEM;\n case SubscriptionSource.User:\n return SubscriptionSourceApi.SOURCE_USER;\n default:\n return SubscriptionSourceApi.SOURCE_UNSET;\n }\n}\n","/* Api service for billing's http endpoints */\n\nimport { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { share, catchError } from 'rxjs/operators';\nimport { DownloadCsvRequestInterface } from './revenue.interfaces';\nimport { handleCsvError } from '../http-shared/error-handlers';\nimport { HostService } from '@vendasta/billing';\n\n@Injectable({ providedIn: 'root' })\nexport class RevenueApiService {\n constructor(private hostService: HostService, private http: HttpClient) {}\n\n downloadCsv(r: DownloadCsvRequestInterface): Observable {\n const queryParams = `?filename=${r.filename}`;\n return this.http\n .get(this.hostService.hostWithScheme + '/revenue-csv' + queryParams, this.apiOptions())\n .pipe(share(), catchError(handleCsvError));\n }\n\n private apiOptions(): { responseType: 'blob'; withCredentials: boolean } {\n return {\n responseType: 'blob',\n withCredentials: true,\n };\n }\n}\n","/* Api service for billing's http endpoints */\n\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { HostService } from '@vendasta/billing';\nimport { Observable } from 'rxjs';\nimport { catchError, share } from 'rxjs/operators';\nimport { handleCsvError } from '../http-shared/error-handlers';\nimport { DownloadMerchantReportCsvRequest } from './merchant-report.interfaces';\n\n@Injectable({ providedIn: 'root' })\nexport class MerchantReportApiService {\n constructor(private hostService: HostService, private http: HttpClient) {}\n\n downloadCsv(r: DownloadMerchantReportCsvRequest): Observable {\n const queryParams = `?merchantID=${r.merchantId}&year=${r.year}&month=${r.month}`;\n return this.http\n .get(this.hostService.hostWithScheme + '/billing-report/get' + queryParams, this.apiOptions())\n .pipe(share(), catchError(handleCsvError));\n }\n\n generateCsv(r: DownloadMerchantReportCsvRequest): Observable {\n const queryParams = `?merchantID=${r.merchantId}&year=${r.year}&month=${r.month}`;\n return this.http\n .get(this.hostService.hostWithScheme + '/billing-report/generate' + queryParams, this.apiOptions())\n .pipe(share(), catchError(handleCsvError));\n }\n\n private apiOptions(): { responseType: 'blob'; withCredentials: boolean } {\n return {\n responseType: 'blob',\n withCredentials: true,\n };\n }\n}\n","import { DiscountType as ApiDiscountType } from '@vendasta/billing';\n\nexport enum DiscountType {\n FIXED_AMOUNT = 'FIXED_AMOUNT',\n PERCENT_AMOUNT = 'PERCENT_AMOUNT',\n FIXED_NUMBER_OF_UNITS = 'FIXED_NUMBER_OF_UNITS',\n FIXED_AMOUNT_PER_UNIT = 'FIXED_AMOUNT_PER_UNIT',\n}\n\nexport function discountTypeFromApi(t: ApiDiscountType): DiscountType {\n switch (t) {\n case ApiDiscountType.DISCOUNT_TYPE_FIXED_AMOUNT_PER_UNIT:\n return DiscountType.FIXED_AMOUNT_PER_UNIT;\n case ApiDiscountType.DISCOUNT_TYPE_FIXED_NUMBER_OF_UNITS:\n return DiscountType.FIXED_NUMBER_OF_UNITS;\n case ApiDiscountType.DISCOUNT_TYPE_PERCENT_AMOUNT:\n return DiscountType.PERCENT_AMOUNT;\n }\n return DiscountType.FIXED_AMOUNT;\n}\n\nexport function discountTypeToApi(t: DiscountType): ApiDiscountType {\n switch (t) {\n case DiscountType.FIXED_AMOUNT_PER_UNIT:\n return ApiDiscountType.DISCOUNT_TYPE_FIXED_AMOUNT_PER_UNIT;\n case DiscountType.FIXED_NUMBER_OF_UNITS:\n return ApiDiscountType.DISCOUNT_TYPE_FIXED_NUMBER_OF_UNITS;\n case DiscountType.PERCENT_AMOUNT:\n return ApiDiscountType.DISCOUNT_TYPE_PERCENT_AMOUNT;\n }\n return ApiDiscountType.DISCOUNT_TYPE_FIXED_AMOUNT;\n}\n","import { Consumer, Discount as DiscountApi } from '@vendasta/billing';\nimport { discountTypeFromApi, DiscountType } from './discount_type';\n\nexport interface Discount {\n discountId: number;\n id: string;\n discountType: DiscountType;\n amount: number;\n start?: Date;\n end?: Date;\n resetEachPeriod: boolean;\n merchantId: string;\n created?: Date;\n updated?: Date;\n SKU: string;\n description: string;\n customerId?: string;\n consumer?: Consumer;\n subscriptionId?: string;\n numberOfBillingPeriods: number;\n}\n\nexport function discountFromApi(apiDiscount: DiscountApi): Discount {\n return {\n merchantId: apiDiscount.merchantId || '',\n discountId: apiDiscount.discountId || 0,\n id: apiDiscount.id || '',\n discountType: discountTypeFromApi(apiDiscount.discountType),\n amount: apiDiscount.amount || 0,\n start: apiDiscount.start ? new Date(apiDiscount.start) : undefined,\n end: apiDiscount.end ? new Date(apiDiscount.end) : undefined,\n resetEachPeriod: apiDiscount.resetEachPeriod || false,\n created: apiDiscount.created ? new Date(apiDiscount.created) : undefined,\n updated: apiDiscount.updated ? new Date(apiDiscount.updated) : undefined,\n SKU: apiDiscount.sku || '',\n description: apiDiscount.description || '',\n customerId: apiDiscount.customerId || '',\n consumer: apiDiscount.consumer || Consumer.CONSUMER_RETAIL,\n subscriptionId: apiDiscount.subscriptionId || '',\n numberOfBillingPeriods: apiDiscount.numberOfBillingPeriods ?? 0,\n };\n}\n","import { Consumer } from '@vendasta/billing';\n\nexport enum DiscountConsumer {\n RETAIL = 'retail',\n WHOLESALE = 'reseller',\n}\n\nexport function discountConsumerToApi(dc: DiscountConsumer): Consumer {\n switch (dc) {\n case DiscountConsumer.RETAIL:\n return Consumer.CONSUMER_RETAIL;\n case DiscountConsumer.WHOLESALE:\n return Consumer.CONSUMER_WHOLESALE;\n }\n}\n","import { HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { PagedResponse } from '../core';\nimport {\n CreateDiscountRequest,\n DiscountApiService,\n ExpireDiscountRequest,\n ListDiscountsRequest,\n PagedRequestOptions,\n UpdateDiscountRequest,\n} from '@vendasta/billing';\nimport { Discount, discountFromApi } from './discount';\nimport { DiscountType, discountTypeToApi } from './discount_type';\nimport { ListDiscountsFilter } from './list-discount';\nimport { DiscountConsumer, discountConsumerToApi } from './discount_consumer';\n\n@Injectable({ providedIn: 'root' })\nexport class DiscountService {\n constructor(private discountApi: DiscountApiService) {}\n\n list(filters: ListDiscountsFilter, cursor: string, pageSize: number): Observable> {\n const req = new ListDiscountsRequest({\n filters: filters,\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.discountApi.list(req).pipe(\n map((response) => {\n const discounts = (response.discounts || []).map((item) => discountFromApi(item));\n return new PagedResponse(discounts, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n create(\n merchantId: string,\n sku: string,\n discountType: DiscountType,\n amount: number,\n startDateTime: string,\n endDateTime?: string,\n resetEachPeriodFlag?: boolean,\n description?: string,\n customerId?: string,\n discountConsumer = DiscountConsumer.WHOLESALE,\n subscriptionId?: string,\n numberOfBillingPeriods?: number,\n ): Observable {\n const start = new Date(startDateTime);\n const dt = discountTypeToApi(discountType);\n const consumer = discountConsumerToApi(discountConsumer);\n\n const r = new CreateDiscountRequest({\n merchantId: merchantId,\n sku: sku,\n discountType: dt,\n amount: amount,\n start: start,\n resetEachPeriod: resetEachPeriodFlag,\n description: description,\n customerId: customerId,\n consumer: consumer,\n subscriptionId: subscriptionId,\n numberOfBillingPeriods: numberOfBillingPeriods ?? 0,\n });\n\n if (endDateTime && endDateTime !== '') {\n r.end = new Date(endDateTime);\n }\n\n return this.discountApi.create(r).pipe(map((resp) => resp.id));\n }\n\n update(\n merchantId: string,\n id: string,\n discountType: DiscountType,\n amount: number,\n startDateTime: string,\n endDateTime?: string,\n resetEachPeriodFlag?: boolean,\n description?: string,\n customerId?: string,\n subscriptionId?: string,\n numberOfBillingPeriods?: number,\n ): Observable> {\n const start = new Date(startDateTime);\n const dt = discountTypeToApi(discountType);\n\n const r = new UpdateDiscountRequest({\n merchantId: merchantId,\n id: id,\n discountType: dt,\n amount: amount,\n start: start,\n resetEachPeriod: resetEachPeriodFlag,\n description: description,\n customerId: customerId,\n subscriptionId: subscriptionId,\n numberOfBillingPeriods: numberOfBillingPeriods ?? 0,\n });\n\n if (endDateTime && endDateTime !== '') {\n r.end = new Date(endDateTime);\n }\n return this.discountApi.update(r);\n }\n\n expire(merchantId: string, id: string): Observable> {\n return this.discountApi.expire(\n new ExpireDiscountRequest({\n merchantId: merchantId,\n id: id,\n }),\n );\n }\n}\n","import { AppliedDiscountInterface, DiscountType as APIDiscountType } from '@vendasta/billing';\nimport { DiscountType } from '../discount';\n\nexport function appliedDiscountTypeFromAPI(adt: APIDiscountType | undefined): DiscountType {\n switch (adt) {\n case APIDiscountType.DISCOUNT_TYPE_FIXED_AMOUNT_PER_UNIT:\n return DiscountType.FIXED_AMOUNT_PER_UNIT;\n case APIDiscountType.DISCOUNT_TYPE_FIXED_NUMBER_OF_UNITS:\n return DiscountType.FIXED_NUMBER_OF_UNITS;\n case APIDiscountType.DISCOUNT_TYPE_PERCENT_AMOUNT:\n return DiscountType.PERCENT_AMOUNT;\n }\n return DiscountType.FIXED_AMOUNT;\n}\n\nexport function appliedDiscountTypeToApi(adt: DiscountType): APIDiscountType {\n switch (adt) {\n case DiscountType.FIXED_AMOUNT_PER_UNIT:\n return APIDiscountType.DISCOUNT_TYPE_FIXED_AMOUNT_PER_UNIT;\n case DiscountType.FIXED_NUMBER_OF_UNITS:\n return APIDiscountType.DISCOUNT_TYPE_FIXED_NUMBER_OF_UNITS;\n case DiscountType.PERCENT_AMOUNT:\n return APIDiscountType.DISCOUNT_TYPE_PERCENT_AMOUNT;\n }\n return APIDiscountType.DISCOUNT_TYPE_FIXED_AMOUNT;\n}\n\nexport interface AppliedDiscount {\n type: DiscountType;\n value: number;\n totalAmount: number;\n description: string;\n referenceId: string;\n}\n\nexport function appliedDiscountFromApi(ad: AppliedDiscountInterface): AppliedDiscount {\n return {\n type: appliedDiscountTypeFromAPI(ad.type),\n value: ad.value || 0,\n totalAmount: ad.totalAmount || 0,\n description: ad.description || '',\n referenceId: ad.referenceId || '',\n };\n}\n\nexport function appliedDiscountToApi(ad: AppliedDiscount): AppliedDiscountInterface {\n return {\n type: appliedDiscountTypeToApi(ad.type),\n value: ad.value || 0,\n totalAmount: ad.totalAmount || 0,\n description: ad.description || '',\n referenceId: ad.referenceId || '',\n };\n}\n\n/** @deprecated use Discount interface from billing/discount */\nexport interface Discount {\n value: number;\n type: string;\n startDate: Date;\n id?: number;\n endDate?: Date;\n total?: number;\n}\n","import { PurchaseStatus as PurchaseStatusApi } from '@vendasta/billing';\n\nexport enum PurchaseStatus {\n Unset = 'UNSET',\n Pending = 'PENDING',\n Due = 'DUE',\n Success = 'SUCCESS',\n Dunning = 'DUNNING',\n Failed = 'FAILED',\n}\n\nexport function purchaseStatusFromApi(psApi: PurchaseStatusApi | undefined): PurchaseStatus {\n switch (psApi) {\n case PurchaseStatusApi.PURCHASE_STATUS_PENDING:\n return PurchaseStatus.Pending;\n case PurchaseStatusApi.PURCHASE_STATUS_DUE:\n return PurchaseStatus.Due;\n case PurchaseStatusApi.PURCHASE_STATUS_SUCCESS:\n return PurchaseStatus.Success;\n case PurchaseStatusApi.PURCHASE_STATUS_DUNNING:\n return PurchaseStatus.Dunning;\n case PurchaseStatusApi.PURCHASE_STATUS_FAILED:\n return PurchaseStatus.Failed;\n }\n return PurchaseStatus.Unset;\n}\n","import { AppliedDiscount, appliedDiscountFromApi } from '../applied_discount';\nimport { AppliedTaxRate } from '../invoice/invoice';\nimport { BillingStrategy, billingStrategyFromAPI, Currency, currencyFromApi } from '../pricing';\nimport {\n AppliedCreditInterface,\n AppliedTaxRateInterface,\n CreditType,\n Currency as CurrencyApi,\n PurchaseInterface,\n PurchaseItemInterface,\n} from '@vendasta/billing';\nimport { PurchaseStatus, purchaseStatusFromApi } from './purchase_status';\n\nexport interface Purchase {\n merchantId: string;\n timestamp?: Date;\n purchaseId: string;\n total: number;\n currency: Currency;\n renewal: boolean;\n items: PurchaseItem[];\n billingStrategy: BillingStrategy;\n isDunning: boolean;\n dunningAttempt: number;\n pauseDunningUntil?: Date;\n voided?: Date;\n paid: boolean;\n status: PurchaseStatus;\n creditAmount: number;\n appliedCredits: AppliedCredit[];\n taxAmount: number;\n appliedTaxRates: AppliedTaxRate[];\n}\n\nexport enum AppliedCreditType {\n CREDIT_TYPE_CREDIT_NOTE = 'Credit note',\n CREDIT_TYPE_PROMOTIONAL = 'Promotional',\n CREDIT_TYPE_UNSET = '',\n}\n\nexport interface AppliedCredit {\n appliedAmount: number;\n referenceId: string;\n referenceType: AppliedCreditType;\n}\n\nexport interface PurchaseItem {\n sku: string;\n description: string;\n amount: number;\n orderId: string;\n customerId: string;\n discountAmount: number;\n total: number;\n currency?: Currency;\n appliedDiscounts: AppliedDiscount[];\n taxAmount: number;\n appliedTaxRates: AppliedTaxRate[];\n setupFee?: number;\n feeAmount?: number;\n\n merchantId: string;\n purchaseDay: string;\n purchaseId: string;\n}\n\nexport function purchaseFromApi(pApi: PurchaseInterface): Purchase {\n return {\n merchantId: pApi.merchantId || '',\n timestamp: pApi.timestamp ? new Date(pApi.timestamp) : undefined,\n purchaseId: pApi.purchaseId || '',\n total: pApi.total || 0,\n currency: pApi.currency ? currencyFromApi(pApi.currency) : Currency.USD,\n renewal: pApi.renewal || false,\n items: pApi.items ? pApi.items.map((p) => purchaseItemFromApi(p)) : [],\n billingStrategy: billingStrategyFromAPI(pApi.billingStrategy),\n isDunning: pApi.isDunning || false,\n dunningAttempt: pApi.dunningAttempt || 0,\n pauseDunningUntil: pApi.pauseDunningUntil ? new Date(pApi.pauseDunningUntil) : undefined,\n voided: pApi.voided ? new Date(pApi.voided) : undefined,\n paid: pApi.paid || false,\n status: purchaseStatusFromApi(pApi.status),\n creditAmount: pApi.creditAmount || 0,\n appliedCredits: pApi.appliedCredits ? pApi.appliedCredits.map((ac) => appliedCreditFromAPI(ac)) : [],\n taxAmount: pApi.taxAmount || 0,\n appliedTaxRates: (pApi.appliedTaxRates || []).map((at) => appliedTaxRateFromAPI(at)),\n };\n}\n\nexport function purchaseItemFromApi(pApi: PurchaseItemInterface, currencyApi?: CurrencyApi): PurchaseItem {\n let currency;\n if (currencyApi !== undefined) {\n currency = currencyFromApi(currencyApi);\n }\n return {\n sku: pApi.sku || '',\n description: pApi.description || '',\n amount: pApi.amount || 0,\n orderId: pApi.orderId || '',\n customerId: pApi.customerId || '',\n discountAmount: pApi.discountAmount || 0,\n total: pApi.total || 0,\n currency: currency || Currency.USD,\n appliedDiscounts: pApi.appliedDiscounts ? pApi.appliedDiscounts.map((p) => appliedDiscountFromApi(p)) : [],\n merchantId: pApi.merchantId || '',\n purchaseDay: pApi.day || '',\n purchaseId: pApi.purchaseId || '',\n taxAmount: pApi.taxAmount || 0,\n appliedTaxRates: (pApi.appliedTaxRates || []).map((at) => appliedTaxRateFromAPI(at)),\n setupFee: pApi.setupFee || 0,\n feeAmount: pApi.feeAmount || 0,\n };\n}\n\nexport function appliedCreditFromAPI(ac: AppliedCreditInterface): AppliedCredit {\n return {\n appliedAmount: ac.appliedAmount || 0,\n referenceId: ac.referenceId || '',\n referenceType: appliedCreditTypeFromAPI(ac.referenceType),\n };\n}\n\nexport function appliedCreditTypeFromAPI(adt: CreditType | undefined): AppliedCreditType {\n switch (adt) {\n case CreditType.CREDIT_TYPE_CREDIT_NOTE:\n return AppliedCreditType.CREDIT_TYPE_CREDIT_NOTE;\n case CreditType.CREDIT_TYPE_PROMOTIONAL:\n return AppliedCreditType.CREDIT_TYPE_PROMOTIONAL;\n }\n return AppliedCreditType.CREDIT_TYPE_UNSET;\n}\n\nexport function appliedTaxRateFromAPI(at: AppliedTaxRateInterface): AppliedTaxRate {\n return {\n amount: at.amount || 0,\n name: at.name || '',\n percentage: at.percentage || 0,\n taxRateId: at.taxRateId || '',\n };\n}\n","import { CustomerSummaryInterface } from '@vendasta/billing';\nimport { Currency, currencyFromApi } from '../pricing';\n\nexport interface CustomerSummary {\n customerId: string;\n purchaseItemQuantity: number;\n purchaseItemTotal: number;\n currency: Currency;\n}\n\nexport function customerSummaryFromApi(csApi: CustomerSummaryInterface): CustomerSummary {\n let currency;\n if (csApi.currency !== undefined) {\n currency = currencyFromApi(csApi.currency);\n }\n return {\n customerId: csApi.customerId || '',\n purchaseItemQuantity: csApi.purchaseItemQuantity || 0,\n purchaseItemTotal: csApi.purchaseItemTotal || 0,\n currency: currency || Currency.USD,\n };\n}\n","export class Dimension {\n dimensionId: string;\n name: string;\n\n constructor(id: string) {\n this.dimensionId = id;\n this.name = id;\n }\n}\n\nexport const ChannelPartnersDiamond = new Dimension('Diamond');\nexport const ChannelPartnersPlatinum = new Dimension('Platinum');\nexport const ChannelPartnersGold = new Dimension('Gold');\nexport const ChannelPartnersSilver = new Dimension('Silver');\nexport const ChannelPartnersUnassisted = new Dimension('Unassisted');\nexport const ChannelPartnersChurned = new Dimension('Churned Partners');\nexport const ChannelPartnersPreSales = new Dimension('Pre-Sales');\nexport const ChannelPartnersUnassigned = new Dimension('Unassigned');\nexport const ChannelPartnersMedia = new Dimension('Media');\nexport const ChannelPartnersBroadcast = new Dimension('Broadcast');\nexport const ChannelPartnersISV = new Dimension('ISV');\nexport const ChannelPartnersICT = new Dimension('ICT');\nexport const ChannelPartnersFranchise = new Dimension('Franchise');\nexport const ChannelPartnersBroadly = new Dimension('Broadly');\nexport const ChannelPartnersEMEA = new Dimension('EMEA');\nexport const ChannelPartnersAgency = new Dimension('Agency');\nexport const ChannelPartnersHighVelocityExpansion = new Dimension('High Velocity Expansion');\nexport const ChannelPartnersHighVelocityAcquisition = new Dimension('High Velocity Acquisition');\n\nexport const LEGACY_DIMENSIONS = [\n ChannelPartnersDiamond,\n ChannelPartnersPlatinum,\n ChannelPartnersGold,\n ChannelPartnersSilver,\n ChannelPartnersUnassisted,\n ChannelPartnersChurned,\n ChannelPartnersPreSales,\n ChannelPartnersUnassigned,\n];\n\nexport const SERVICE_TIERS = [\n ChannelPartnersMedia,\n ChannelPartnersBroadcast,\n ChannelPartnersISV,\n ChannelPartnersICT,\n ChannelPartnersFranchise,\n ChannelPartnersBroadly,\n ChannelPartnersEMEA,\n ChannelPartnersAgency,\n ChannelPartnersHighVelocityExpansion,\n ChannelPartnersHighVelocityAcquisition,\n];\n","import { ContractInterface } from '@vendasta/billing';\nimport { Currency, currencyFromApi } from '../pricing';\nimport { Dimension } from './dimension';\n\nexport interface Contract {\n merchantId: string;\n netD: number;\n created?: Date;\n subscriptionId: string;\n dimension: Dimension;\n currency: Currency;\n signed?: Date;\n end?: Date;\n activated?: Date;\n modified?: Date;\n verified?: Date;\n status: string;\n creditLimit: number;\n pricingPlanId: string;\n}\n\nexport function contractFromApi(cApi: ContractInterface): Contract {\n return {\n merchantId: cApi.merchantId || '',\n netD: cApi.netD || 0,\n created: cApi.created || undefined,\n subscriptionId: cApi.subscriptionId || '',\n dimension: new Dimension(cApi.dimension || ''),\n currency: currencyFromApi(cApi.currency),\n signed: cApi.signed || undefined,\n end: cApi.end || undefined,\n activated: cApi.activated || undefined,\n modified: cApi.modified || undefined,\n verified: cApi.verified || undefined,\n status: cApi.status || '',\n creditLimit: cApi.creditLimit || 0,\n pricingPlanId: cApi.pricingPlanId || '',\n };\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ContractApiService, UpdateContractRequestMutationInterface } from '@vendasta/billing';\nimport { Contract, contractFromApi } from './contract';\n\n@Injectable({ providedIn: 'root' })\nexport class ContractService {\n constructor(private api: ContractApiService) {}\n\n /**\n * Get a contract by its identifier.\n *\n * @param merchantId is the unique identifier of the merchant.\n * @return An contract observable.\n */\n public get(merchantId: string): Observable {\n return this.api.get({ merchantId }).pipe(map((c) => contractFromApi(c.contract)));\n }\n\n /**\n * Update a contract with a new value.\n *\n * @param merchantId is a string that identifies the contract to update.\n * @param mutations is a list of mutations to apply to the contract.\n * Each mutation object should only contain one value.\n * @return An observable of the update contract.\n */\n public update(merchantId: string, mutations: UpdateContractRequestMutationInterface[]): Observable {\n return this.api.update({ merchantId, mutations }).pipe(map((c) => contractFromApi(c.contract)));\n }\n}\n","import { UpdateContractRequestMutationInterface } from '@vendasta/billing';\n\nexport const setNetD = (netD: number): UpdateContractRequestMutationInterface => ({ netD });\nexport const setCurrencyCode = (currencyCode: string): UpdateContractRequestMutationInterface => ({ currencyCode });\nexport const setStatus = (status: string): UpdateContractRequestMutationInterface => ({ status });\nexport const setDimension = (dimension: string): UpdateContractRequestMutationInterface => ({ dimension });\nexport const setSigned = (signed: Date): UpdateContractRequestMutationInterface => ({ signed });\nexport const setActivated = (activated: Date): UpdateContractRequestMutationInterface => ({ activated });\nexport const setEnd = (end: Date): UpdateContractRequestMutationInterface => ({ end });\nexport const setModified = (modified: Date): UpdateContractRequestMutationInterface => ({ modified });\nexport const setCreditLimit = (creditLimit: number): UpdateContractRequestMutationInterface => ({ creditLimit });\nexport const setSubscriptionId = (subscriptionId: string): UpdateContractRequestMutationInterface => ({\n subscriptionId,\n});\n","import { ProductInterface } from '@vendasta/billing';\n\nexport interface Product {\n name: string;\n sku: string;\n iconUrl: string;\n hasPricingOverride: boolean;\n hasDiscount: boolean;\n}\n\nexport function productFromApi(apiProduct: ProductInterface): Product {\n return {\n name: apiProduct.name || '',\n sku: apiProduct.sku || '',\n iconUrl: apiProduct.iconUrl || '',\n hasPricingOverride: apiProduct.hasPricingOverride || false,\n hasDiscount: apiProduct.hasDiscount || false,\n };\n}\n","import { ListProductsRequestListProductsFiltersInterface, ProductType as ApiProductType } from '@vendasta/billing';\n\nexport interface ListProductsFilter {\n hasDiscount?: boolean;\n hasPricingOverride?: boolean;\n skus?: string[];\n productType?: ProductType[];\n}\n\nexport enum ProductType {\n Invalid,\n Standard,\n Vendasta,\n Subscription,\n Fee,\n PartnerSupportSales,\n}\n\nexport function listProductsFilterToApi(filter: ListProductsFilter): ListProductsRequestListProductsFiltersInterface {\n return {\n ...filter,\n productType: (filter.productType || []).map((pt) => productTypeToApi(pt)),\n };\n}\n\nfunction productTypeToApi(productType: ProductType): ApiProductType {\n switch (productType) {\n case ProductType.Standard:\n return ApiProductType.PRODUCT_TYPE_STANDARD_PRODUCT;\n case ProductType.Vendasta:\n return ApiProductType.PRODUCT_TYPE_VENDASTA_PRODUCT;\n case ProductType.Subscription:\n return ApiProductType.PRODUCT_TYPE_SUBSCRIPTION;\n case ProductType.Fee:\n return ApiProductType.PRODUCT_TYPE_FEE;\n case ProductType.PartnerSupportSales:\n return ApiProductType.PRODUCT_TYPE_PARTNER_SUPPORT_SALES;\n }\n return ApiProductType.PRODUCT_TYPE_INVALID;\n}\n","import {\n BillableItem as BillableItemApi,\n BillableItemCustomerAddressInterface,\n Frequency as FrequencyApi,\n SubscriptionStatus as SubscriptionStatusApi,\n RenewalState as RenewalStateApi,\n} from '@vendasta/billing';\nimport {\n Frequency,\n frequencyFromApi,\n ProductPricing,\n productPricingFromApi,\n SubscriptionStatus,\n subscriptionStatusFromApi,\n} from '../pricing';\nimport { SubscriptionSource, subscriptionSourceFromApi } from '../pricing/source';\n\nexport interface ListBillableItemsFilter {\n skus?: string[];\n merchantId?: string;\n customerId?: string;\n}\n\nexport interface ListSubscriptionsFilter {\n skus?: string[];\n merchantId?: string;\n customerId?: string;\n searchTerm?: string;\n status?: SubscriptionStatusApi;\n expiredDateGte?: Date;\n expiredDateLte?: Date;\n frequencies?: FrequencyApi[];\n}\n\nexport interface SubscriptionsProjectionFilter {\n price?: boolean;\n}\n\nexport interface ListSubscriptionsFilterHttp {\n skus?: string[];\n merchantId?: string;\n customerId?: string;\n}\n\nexport interface CustomerAddress {\n address?: string;\n city?: string;\n state?: string;\n zip?: string;\n country?: string;\n}\n\nexport interface BillableItem {\n subscriptionId: string;\n merchantId: string;\n sku: string;\n productName: string;\n customerId: string;\n customerName: string;\n orderId: string;\n expiry?: Date;\n billingStart?: Date;\n created?: Date;\n updated?: Date;\n frequency: Frequency;\n retailFrequency: Frequency;\n nextRenewal?: Date;\n nextRetailRenewal?: Date;\n customerAddress: CustomerAddress;\n customUnitPrice: number;\n retailUnitPrice: number;\n status?: SubscriptionStatus;\n price?: ProductPricing;\n source?: SubscriptionSource;\n autoBillable: boolean;\n description?: string;\n}\n\nexport enum RenewalState {\n Immediate = 'IMMEDIATE',\n Delayed = 'DELAYED',\n}\n\nfunction customerAddressFromApi(apiAddress: BillableItemCustomerAddressInterface | undefined): CustomerAddress {\n return {\n address: apiAddress?.address || '',\n city: apiAddress?.city || '',\n state: apiAddress?.state || '',\n zip: apiAddress?.zip || '',\n country: apiAddress?.country || '',\n };\n}\n\nexport function billableItemFromApi(apiItem: BillableItemApi): BillableItem {\n const zeroDate = new Date('0001-01-01T00:00:00Z').valueOf();\n\n return {\n subscriptionId: apiItem.subscriptionId || '',\n merchantId: apiItem.merchantId || '',\n sku: apiItem.sku || '',\n productName: apiItem.productName || '',\n customerId: apiItem.customerId || '',\n customerName: apiItem.customerName || '',\n orderId: apiItem.orderId || '',\n expiry: apiItem.expiry.valueOf() !== zeroDate ? new Date(apiItem.expiry) : undefined,\n billingStart: apiItem.billingStart.valueOf() !== zeroDate ? new Date(apiItem.billingStart) : undefined,\n created: apiItem.created.valueOf() !== zeroDate ? new Date(apiItem.created) : undefined,\n updated: apiItem.updated.valueOf() !== zeroDate ? new Date(apiItem.updated) : undefined,\n frequency: frequencyFromApi(apiItem.frequency),\n retailFrequency: frequencyFromApi(apiItem.retailFrequency),\n nextRenewal: apiItem.nextRenewal.valueOf() !== zeroDate ? new Date(apiItem.nextRenewal) : undefined,\n nextRetailRenewal:\n apiItem.nextRetailRenewal.valueOf() !== zeroDate ? new Date(apiItem.nextRetailRenewal) : undefined,\n customerAddress: customerAddressFromApi(apiItem.customerAddress),\n customUnitPrice: apiItem.customUnitPrice || 0,\n retailUnitPrice: apiItem.retailUnitPrice || 0,\n status: subscriptionStatusFromApi(apiItem.status),\n price: apiItem.price ? productPricingFromApi(apiItem.price) : undefined,\n source: subscriptionSourceFromApi(apiItem.source),\n autoBillable: apiItem.autoBillable,\n description: apiItem.description || '',\n };\n}\n\nexport function listSubscriptionsFiltersToHTTPJson(filters: ListBillableItemsFilter): ListSubscriptionsFilterHttp {\n return {\n merchantId: filters.merchantId,\n customerId: filters.customerId,\n skus: filters.skus,\n };\n}\n\nexport function renewalStateToApi(state: RenewalState): RenewalStateApi {\n if (state === RenewalState.Delayed) {\n return RenewalStateApi.RENEWAL_STATE_DELAYED;\n }\n return RenewalStateApi.RENEWAL_STATE_IMMEDIATE;\n}\n","import { Injectable } from '@angular/core';\nimport {\n BillingApiService,\n CanCreateSubscriptionsRequest,\n CanCreateSubscriptionsRequestSubscriptionItemInterface,\n CanCreateSubscriptionsResponse,\n ChangeCustomUnitPriceRequest,\n ChangeFrequencyRequest,\n ChangeRenewalDateRequest,\n Commitment as CommitmentApi,\n CreatePricingPlanProductRequest,\n Currency,\n DeletePricingPlanProductRequest,\n FieldMask,\n GenerateVendorReportRequest,\n GetBillableItemRequest,\n GetMultiCustomerSummariesRequest,\n GetMultiProductRequest,\n GetMultiProductResponse,\n GetPricingPlanProductRequest,\n GetPurchaseCostRequest,\n GetPurchaseCostResponse,\n GetRevenueStatsRequest,\n ListBillableItemsRequest,\n ListContractsRequest,\n ListMerchantBillingReportsRequest,\n ListPricingPlanProductsRequest,\n ListProductsRequest,\n ListPurchaseItemsRequestListPurchaseItemsFilters,\n ListPurchaseRequest,\n ListSubscriptionsRequest,\n MerchantReportStatus,\n PagedRequestOptions,\n PauseDunningRequest,\n PricingApiService,\n PurchaseApiService,\n ResumeDunningRequest,\n RetryPurchaseRequest,\n UpdatePricingPlanProductRequest,\n VendorApiService,\n VoidPurchaseRequest,\n ExpireBillableItemRequest,\n CreateSubscriptionRequest,\n SetAutoBillableRequest,\n UpdateSubscriptionRequest,\n UpdateSubscriptionResponse,\n CreateSubscriptionResponse,\n} from '@vendasta/billing';\nimport {\n BillingStrategy,\n billingStrategyFromAPI,\n billingStrategyToAPI,\n ListPricingPlanProductFilter,\n PricingPlanProduct,\n pricingPlanProductFromApi,\n} from './pricing';\n\nimport { Observable } from 'rxjs';\nimport { map, mapTo } from 'rxjs/operators';\nimport { RevenueApiService } from './revenue/revenue.service';\nimport { MerchantReportApiService } from './merchant-report/merchant-report.service';\nimport { MerchantReport } from './merchant-report/merchant-report';\nimport { HttpResponse } from '@angular/common/http';\nimport { ProductPricing, productPricingFromApi } from './pricing/product-pricing';\nimport { PagedResponse } from './core/paged-response';\nimport { Frequency, frequencyToApi } from './pricing/frequency';\nimport { Commitment } from './pricing/commitment';\nimport { CurrencyPricingMap, currencyPricingMapToApi } from './pricing/pricing-plan-product';\nimport { Purchase, purchaseFromApi, PurchaseItem, purchaseItemFromApi } from './purchase/purchase';\nimport { ListPurchaseFilter } from './purchase/list-purchases';\nimport { CustomerSummary, customerSummaryFromApi } from './customer_summary/customer-summary';\nimport { Contract, contractFromApi } from './contract';\nimport { Product, productFromApi } from './product/product';\nimport { ListProductsFilter, listProductsFilterToApi } from './product/list-products';\nimport {\n BillableItem,\n billableItemFromApi,\n ListBillableItemsFilter,\n ListSubscriptionsFilter,\n SubscriptionsProjectionFilter,\n} from './billable-item/billable-item';\nimport { CanCreateSubscriptionsItem } from './subscription';\n\nconst isCanCreateSubscriptionsRequestSubscriptionItem = (\n li: CanCreateSubscriptionsRequestSubscriptionItemInterface | undefined,\n): li is CanCreateSubscriptionsRequestSubscriptionItemInterface => {\n return !!li;\n};\n@Injectable({ providedIn: 'root' })\nexport class BillingService {\n constructor(\n private billingApi: BillingApiService,\n private revenueApi: RevenueApiService,\n private merchantReportApi: MerchantReportApiService,\n private pricingApi: PricingApiService,\n private purchaseApi: PurchaseApiService,\n private vendorApi: VendorApiService,\n ) {}\n\n /** deprecated */\n getPurchaseCost(merchantId: string, sku: string, quantity: number): Observable {\n const req = new GetPurchaseCostRequest({\n merchantId: merchantId,\n sku: sku,\n quantity: quantity,\n });\n return this.billingApi.getPurchaseCost(req).pipe(\n map((response) => {\n if (!response.currency) {\n response.currency = Currency.USD;\n }\n return response;\n }),\n );\n }\n\n /** deprecated: Use canCreateSubscriptionsWithFrequencies instead. */\n canCreateSubscriptions(\n merchantId: string,\n skus: { [sku: string]: number },\n ): Observable {\n const req = new CanCreateSubscriptionsRequest({\n merchantId: merchantId,\n skus: skus,\n });\n return this.billingApi.canCreateSubscriptions(req);\n }\n\n canCreateSubscriptionsWithFrequencies(\n merchantId: string,\n items: CanCreateSubscriptionsItem[],\n ): Observable {\n const req = new CanCreateSubscriptionsRequest({\n merchantId: merchantId,\n items: (items || [])\n .map((item) => {\n if (!item) {\n return undefined;\n }\n return {\n sku: item.sku,\n frequency: frequencyToApi(item.frequency),\n quantity: item.quantity || 0,\n } as CanCreateSubscriptionsRequestSubscriptionItemInterface;\n })\n .filter(isCanCreateSubscriptionsRequestSubscriptionItem),\n });\n return this.billingApi.canCreateSubscriptions(req);\n }\n\n downloadRevenueCsv(filename: string): Observable {\n return this.revenueApi.downloadCsv({ filename });\n }\n\n downloadBillingReportCsv(merchantId: string, year: number, month: number): Observable {\n return this.merchantReportApi.downloadCsv({ merchantId, year, month });\n }\n\n generateBillingReportCsv(merchantId: string, year: number, month: number): Observable {\n return this.merchantReportApi.generateCsv({ merchantId, year, month });\n }\n\n listMerchantBillingReports(\n merchantId: string,\n cursor: string,\n pageSize: number,\n ): Observable> {\n const req = new ListMerchantBillingReportsRequest({\n merchantId: merchantId,\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.billingApi.listMerchantBillingReports(req).pipe(\n map((resp) => {\n const reports = (resp.reports || []).map((r) => {\n return {\n merchantId: r.merchantId,\n year: r.year,\n month: r.month,\n created: r.created,\n status: MerchantReportStatus[r.status || 0],\n } as MerchantReport;\n });\n return new PagedResponse(reports, resp.pagingMetadata.nextCursor, resp.pagingMetadata.hasMore);\n }),\n );\n }\n\n canBillCreateSnapshot(merchantId: string): Observable> {\n return this.billingApi.canBillItem({ merchantId: merchantId, sku: 'ST' });\n }\n\n canBillRefreshSnapshot(merchantId: string): Observable> {\n return this.billingApi.canBillItem({ merchantId: merchantId, sku: 'snapshotreportrefresh' });\n }\n\n canBillItem(merchantId: string, sku: string): Observable {\n return this.billingApi.canBillItem({ merchantId: merchantId, sku: sku }).pipe(map((response) => response.ok));\n }\n\n createPricingPlanProduct(\n pricingPlanId: string,\n sku: string,\n frequency: Frequency,\n pricing: CurrencyPricingMap,\n commitment: Commitment,\n strategy: BillingStrategy,\n volumeCommitment: number,\n volumeCommitmentStartsAt?: Date,\n volumeCommitmentEndsAt?: Date,\n ): Observable {\n const request = new CreatePricingPlanProductRequest({\n pricingPlanId,\n sku,\n volumeCommitment,\n volumeCommitmentStartsAt,\n volumeCommitmentEndsAt,\n });\n request.frequency = frequencyToApi(frequency);\n request.pricing = currencyPricingMapToApi(pricing);\n request.commitment = new CommitmentApi(commitment);\n request.strategy = billingStrategyToAPI(strategy);\n return this.billingApi.createPricingPlanProduct(request).pipe(mapTo(true));\n }\n\n updatePricingPlanProduct(\n pricingPlanId: string,\n sku: string,\n {\n frequency,\n pricing,\n commitment,\n strategy,\n volumeCommitment,\n volumeCommitmentStartsAt,\n volumeCommitmentEndsAt,\n }: {\n frequency?: Frequency;\n pricing?: CurrencyPricingMap;\n commitment?: Commitment;\n strategy?: BillingStrategy;\n volumeCommitment?: number;\n volumeCommitmentStartsAt?: Date;\n volumeCommitmentEndsAt?: Date;\n },\n ): Observable {\n const fieldMask = new FieldMask({ paths: [] });\n const request = new UpdatePricingPlanProductRequest({ pricingPlanId, sku });\n\n if (frequency !== null) {\n request.frequency = frequencyToApi(frequency);\n fieldMask.paths.push('frequency');\n }\n if (pricing !== null) {\n request.pricing = currencyPricingMapToApi(pricing);\n fieldMask.paths.push('pricing');\n }\n if (commitment !== null) {\n request.commitment = new CommitmentApi(commitment);\n fieldMask.paths.push('commitment');\n }\n if (strategy !== null) {\n request.strategy = billingStrategyToAPI(strategy);\n fieldMask.paths.push('strategy');\n }\n if (volumeCommitment !== null) {\n request.volumeCommitment = volumeCommitment || 0;\n fieldMask.paths.push('volumeCommitment');\n }\n if (volumeCommitmentStartsAt) {\n request.volumeCommitmentStartsAt = volumeCommitmentStartsAt;\n fieldMask.paths.push('volumeCommitmentStartsAt');\n }\n if (volumeCommitmentEndsAt) {\n request.volumeCommitmentEndsAt = volumeCommitmentEndsAt;\n fieldMask.paths.push('volumeCommitmentEndsAt');\n }\n return this.billingApi.updatePricingPlanProduct(request).pipe(mapTo(true));\n }\n\n deletePricingPlanProduct(pricingPlanId: string, sku: string): Observable {\n const request = new DeletePricingPlanProductRequest({ pricingPlanId, sku });\n return this.billingApi.deletePricingPlanProduct(request).pipe(mapTo(true));\n }\n\n /** deprecated - Use getMultiWholesalePrices from the WholesalePricingService */\n getMultiProductPricing(\n merchantId: string,\n skus: string[],\n pricingPlanId?: string,\n ): Observable<{ [sku: string]: ProductPricing }> {\n return this.billingApi.getMultiProductPricing({ merchantId, skus, pricingPlanId }).pipe(\n map((r) => {\n const productPricesApi = r.productPrices || {};\n const productPricings: { [key: string]: ProductPricing } = {};\n for (const k of Object.keys(productPricesApi)) {\n const productPricingResponse = productPricesApi[k];\n productPricings[k] = productPricingFromApi(productPricingResponse);\n }\n return productPricings;\n }),\n );\n }\n\n /** deprecated - Use getMultiRetailPrices from the RetailPricingService */\n getMultiRetailPricing(\n merchantId: string,\n currency: Currency,\n skus: string[],\n groupId?: string,\n ): Observable<{ [sku: string]: ProductPricing }> {\n const requestGroupId: string = groupId === undefined ? '' : groupId;\n return this.pricingApi.getMultiRetail({ merchantId, currency, skus, groupId: requestGroupId }).pipe(\n map((r) => {\n const retailPricesApi = r.productPrices || {};\n const retailPricings: { [key: string]: ProductPricing } = {};\n for (const k of Object.keys(retailPricesApi)) {\n const retailPricingResponse = retailPricesApi[k];\n retailPricings[k] = productPricingFromApi(retailPricingResponse);\n }\n return retailPricings;\n }),\n );\n }\n\n listPricingPlanProducts(\n filters: ListPricingPlanProductFilter,\n cursor: string,\n pageSize: number,\n ): Observable> {\n const req = new ListPricingPlanProductsRequest({\n filters: filters,\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.billingApi.listPricingPlanProducts(req).pipe(\n map((response) => {\n const products = (response.products || []).map((p) => pricingPlanProductFromApi(p));\n return new PagedResponse(products, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n getPricingPlanProduct(pricingPlanId: string, sku: string): Observable {\n const req = new GetPricingPlanProductRequest({ pricingPlanId, sku });\n return this.billingApi.getPricingPlanProduct(req).pipe(\n map((resp) => {\n const ppp: PricingPlanProduct = pricingPlanProductFromApi(resp.pricingPlanProduct);\n ppp.defaultStrategy = billingStrategyFromAPI(resp.pricingPlanDefaultStrategy);\n return ppp;\n }),\n );\n }\n\n listPurchases(filters: ListPurchaseFilter, cursor: string, pageSize: number): Observable> {\n const req = new ListPurchaseRequest({\n filters: filters,\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.purchaseApi.list(req).pipe(\n map((response) => {\n const purchases = (response.purchases || []).map((purchase) => purchaseFromApi(purchase));\n return new PagedResponse(purchases, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n voidPurchase(merchantId: string, purchaseId: string, day: string): Observable {\n const req = new VoidPurchaseRequest({ purchaseId, merchantId, day });\n return this.purchaseApi.void(req).pipe(mapTo(true));\n }\n\n listPurchaseItems(\n filters: ListPurchaseItemsRequestListPurchaseItemsFilters,\n cursor: string,\n pageSize: number,\n ): Observable> {\n const req = new ListPurchaseRequest({\n filters: filters,\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.purchaseApi.listPurchaseItems(req).pipe(\n map((response) => {\n const purchaseItems = (response.purchaseItems || []).map((purchaseItem) =>\n purchaseItemFromApi(purchaseItem, response.currency),\n );\n return new PagedResponse(purchaseItems, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n retryPurchase(merchantId: string, day: string, purchaseId: string): Observable {\n const req = new RetryPurchaseRequest({\n merchantId: merchantId,\n day: day,\n purchaseId: purchaseId,\n });\n return this.purchaseApi.retry(req).pipe(map(() => true));\n }\n\n getMultiCustomerSummaries(\n merchantId: string,\n customerIds: string[],\n periodStart: Date,\n periodEnd: Date,\n ): Observable {\n const req = new GetMultiCustomerSummariesRequest({\n customerIds: customerIds,\n merchantId: merchantId,\n periodStart: periodStart,\n periodEnd: periodEnd,\n });\n return this.purchaseApi.getMultiCustomerSummaries(req).pipe(\n map((response) => {\n return (response.customerSummaries || []).map((customerSummary) => customerSummaryFromApi(customerSummary));\n }),\n );\n }\n\n getMultiContract(merchantIds: string[]): Observable<{ [sku: string]: Contract }> {\n return this.billingApi.getMultiContract({ merchantIds: merchantIds }).pipe(\n map((resp) => {\n const contractsAPI = resp.contracts || {};\n const contracts: { [key: string]: Contract } = {};\n for (const k of Object.keys(contractsAPI)) {\n const contractResponse = contractsAPI[k];\n contracts[k] = contractFromApi(contractResponse);\n }\n return contracts;\n }),\n );\n }\n\n getMerchantWholesaleCurrency(merchantId: string): Observable {\n return this.billingApi.getMerchantWholesaleCurrency({ merchantId: merchantId }).pipe(\n map((resp) => {\n return Currency[resp.currency] || 'USD';\n }),\n );\n }\n\n generateVendorReport(\n skus: string[],\n periodStart: Date,\n periodEnd: Date,\n vendorName: string,\n markAsApproved: boolean,\n ): Observable {\n const req = new GenerateVendorReportRequest({\n skus: skus,\n periodStart: periodStart,\n periodEnd: periodEnd,\n vendorName: vendorName,\n markAsApproved: markAsApproved,\n });\n return this.vendorApi.generateReport(req).pipe(map((response) => response.url));\n }\n\n getVendorStats(skus: string[], periodStart: Date, periodEnd: Date): Observable {\n const req = new GetRevenueStatsRequest({\n skus: skus,\n periodStart: periodStart,\n periodEnd: periodEnd,\n });\n return this.vendorApi.getRevenueStats(req).pipe(map((response) => response.totalRevenue || 0));\n }\n\n listContracts(cursor: string, pageSize: number): Observable> {\n const req = new ListContractsRequest({\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.billingApi.listContracts(req).pipe(\n map((response) => {\n const contracts = (response.contracts || []).map((c) => contractFromApi(c));\n return new PagedResponse(contracts, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n listProducts(\n merchantId: string,\n searchTerm: string,\n filters: ListProductsFilter,\n cursor: string,\n pageSize: number,\n ): Observable> {\n const apiFilters = listProductsFilterToApi(filters);\n const req = new ListProductsRequest({\n merchantId,\n searchTerm,\n filters: apiFilters,\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.billingApi.listProducts(req).pipe(\n map((response) => {\n const products = (response.products || []).map((p) => productFromApi(p));\n return new PagedResponse(products, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n getMultiProduct(skus: string[]): Observable> {\n const req = new GetMultiProductRequest({\n skus: skus,\n });\n return this.billingApi.getMultiProduct(req).pipe(\n map((response: GetMultiProductResponse) => {\n const productsMap = new Map();\n skus.forEach((sku) => {\n productsMap.set(sku, productFromApi(response.products[sku]));\n });\n return productsMap;\n }),\n );\n }\n\n getBillableItem(\n merchantId: string,\n sku: string,\n customerId: string,\n orderId: string,\n projectionFilter?: SubscriptionsProjectionFilter,\n ): Observable {\n const req = new GetBillableItemRequest({\n merchantId,\n sku,\n customerId,\n orderId,\n projectionFilter,\n });\n\n return this.billingApi.getBillableItem(req).pipe(map((response) => billableItemFromApi(response.item)));\n }\n\n expireSubscription(\n merchantId: string,\n sku: string,\n customerId: string,\n orderId: string,\n expiry: Date,\n ): Observable> {\n const req = new ExpireBillableItemRequest({\n merchantId,\n sku,\n customerId,\n orderId,\n expiry,\n });\n return this.billingApi.expireBillableItem(req);\n }\n\n unexpireSubscription(\n merchantId: string,\n sku: string,\n customerId: string,\n orderId: string,\n ): Observable> {\n const req = new ExpireBillableItemRequest({\n merchantId,\n sku,\n customerId,\n orderId,\n });\n return this.billingApi.unexpireBillableItem(req);\n }\n\n changeBillableItemFrequency(\n merchantId: string,\n sku: string,\n customerId: string,\n orderId: string,\n freq: Frequency,\n ): Observable> {\n const req = new ChangeFrequencyRequest({\n merchantId: merchantId,\n sku: sku,\n customerId: customerId,\n orderId: orderId,\n frequency: frequencyToApi(freq),\n });\n\n return this.billingApi.changeFrequency(req);\n }\n\n changeBillableItemNextRenewalDate(\n merchantId: string,\n sku: string,\n customerId: string,\n orderId: string,\n next: Date,\n ): Observable> {\n const req = new ChangeRenewalDateRequest({\n merchantId: merchantId,\n sku: sku,\n customerId: customerId,\n orderId: orderId,\n nextRenewalDate: next,\n });\n\n return this.billingApi.changeRenewalDate(req);\n }\n\n changeBillableItemCustomUnitPrice(\n merchantId: string,\n sku: string,\n customerId: string,\n orderId: string,\n amount: number,\n ): Observable> {\n const req = new ChangeCustomUnitPriceRequest({\n merchantId: merchantId,\n sku: sku,\n customerId: customerId,\n orderId: orderId,\n customUnitPrice: amount,\n });\n\n return this.billingApi.changeCustomUnitPrice(req);\n }\n\n //deprecated: use listSubscriptions\n listBillableItems(\n searchTerm: string,\n filters: ListBillableItemsFilter,\n cursor: string,\n pageSize: number,\n ): Observable> {\n const req = new ListBillableItemsRequest({\n searchTerm: searchTerm,\n filters: filters,\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.billingApi.listBillableItems(req).pipe(\n map((response) => {\n const items = (response.items || []).map((item) => billableItemFromApi(item));\n return new PagedResponse(items, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n listSubscriptions(\n filters: ListSubscriptionsFilter,\n cursor: string,\n pageSize: number,\n projectionFilter?: SubscriptionsProjectionFilter,\n ): Observable> {\n const req = new ListSubscriptionsRequest({\n filters: filters,\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n projectionFilter: projectionFilter,\n });\n return this.billingApi.listSubscriptions(req).pipe(\n map((response) => {\n const items = (response.subscriptions || []).map((item) => billableItemFromApi(item));\n return new PagedResponse(items, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n listRetailSubscriptions(\n filters: ListSubscriptionsFilter,\n cursor: string,\n pageSize: number,\n projectionFilter?: SubscriptionsProjectionFilter,\n ): Observable> {\n const req = new ListSubscriptionsRequest({\n filters: filters,\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n projectionFilter: projectionFilter,\n });\n return this.billingApi.listRetailSubscriptions(req).pipe(\n map((response) => {\n const items = (response.subscriptions || []).map((item) => billableItemFromApi(item));\n return new PagedResponse(items, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n startRevRecBackfillWorkflow(): Observable> {\n return this.billingApi.startRevRecTemplateBackfill({});\n }\n\n pauseDunning(merchantId: string, purchaseId: string, day: string, pauseDunningUntil: Date): Observable {\n const req = new PauseDunningRequest({ merchantId, purchaseId, day, pauseDunningUntil });\n return this.purchaseApi.pauseDunning(req).pipe(map((response) => response.ok));\n }\n\n resumeDunning(merchantId: string, purchaseId: string, day: string): Observable {\n const req = new ResumeDunningRequest({ merchantId, purchaseId, day });\n return this.purchaseApi.resumeDunning(req).pipe(map((response) => response.ok));\n }\n\n exportSubscriptions(filters: ListSubscriptionsFilter): Observable {\n const req = new ListSubscriptionsRequest({\n filters: filters,\n });\n return this.billingApi.exportSubscriptions(req).pipe(map(() => null));\n }\n\n createSubscription(req: CreateSubscriptionRequest): Observable {\n return this.billingApi.createSubscription(req);\n }\n\n setAutoBillable(subscriptionId: string, autoBillable: boolean): Observable> {\n const req = new SetAutoBillableRequest({\n subscriptionId: subscriptionId,\n autoBillable: autoBillable,\n });\n return this.billingApi.setAutoBillable(req);\n }\n\n updateSubscription(subscription: BillableItem, fieldMask: FieldMask): Observable {\n const req = new UpdateSubscriptionRequest({\n subscription: {\n subscriptionId: subscription.subscriptionId,\n description: subscription.description,\n },\n fieldMask: fieldMask,\n });\n return this.billingApi.updateSubscription(req);\n }\n}\n","import { CollectionMethod } from '../retail-customer-configuration';\nimport { CollectionMethod as ApiCollectionMethod } from '@vendasta/billing';\n\nexport function convertFromApiCollectionMethod(s: ApiCollectionMethod): CollectionMethod {\n switch (s) {\n case ApiCollectionMethod.COLLECTION_METHOD_INVALID:\n return CollectionMethod.UNSET;\n case ApiCollectionMethod.COLLECTION_METHOD_MANUAL:\n return CollectionMethod.MANUAL_COLLECTION;\n case ApiCollectionMethod.COLLECTION_METHOD_EMAIL:\n return CollectionMethod.SEND_EMAIL;\n case ApiCollectionMethod.COLLECTION_METHOD_CHARGE_AUTOMATICALLY:\n return CollectionMethod.CHARGE_AUTOMATICALLY;\n default:\n return CollectionMethod.UNSET;\n }\n}\n\nexport function convertToApiCollectionMethod(s: CollectionMethod): ApiCollectionMethod {\n switch (s) {\n case CollectionMethod.UNSET:\n return ApiCollectionMethod.COLLECTION_METHOD_INVALID;\n case CollectionMethod.MANUAL_COLLECTION:\n return ApiCollectionMethod.COLLECTION_METHOD_MANUAL;\n case CollectionMethod.SEND_EMAIL:\n return ApiCollectionMethod.COLLECTION_METHOD_EMAIL;\n case CollectionMethod.CHARGE_AUTOMATICALLY:\n return ApiCollectionMethod.COLLECTION_METHOD_CHARGE_AUTOMATICALLY;\n default:\n return ApiCollectionMethod.COLLECTION_METHOD_INVALID;\n }\n}\n","import { Interval as ApiInterval } from '@vendasta/billing';\n\nexport enum Interval {\n INVALID = 'Invalid',\n DAY = 'Daily',\n WEEK = 'Weekly',\n MONTH = 'Monthly',\n YEAR = 'Yearly',\n}\n\nexport function convertFromApiInterval(s: ApiInterval): Interval {\n switch (s) {\n case ApiInterval.INTERVAL_INVALID:\n return Interval.INVALID;\n case ApiInterval.INTERVAL_DAY:\n return Interval.DAY;\n case ApiInterval.INTERVAL_WEEK:\n return Interval.WEEK;\n case ApiInterval.INTERVAL_MONTH:\n return Interval.MONTH;\n case ApiInterval.INTERVAL_YEAR:\n return Interval.YEAR;\n default:\n return Interval.INVALID;\n }\n}\n\nexport function convertToApiInterval(s: Interval): ApiInterval {\n switch (s) {\n case Interval.INVALID:\n return ApiInterval.INTERVAL_INVALID;\n case Interval.DAY:\n return ApiInterval.INTERVAL_DAY;\n case Interval.WEEK:\n return ApiInterval.INTERVAL_WEEK;\n case Interval.MONTH:\n return ApiInterval.INTERVAL_MONTH;\n case Interval.YEAR:\n return ApiInterval.INTERVAL_YEAR;\n default:\n return ApiInterval.INTERVAL_INVALID;\n }\n}\n","import { PaymentProcessor as ApiPaymentProcessor } from '@vendasta/billing';\n\nexport enum PaymentProcessor {\n INVALID = 'Invalid',\n UNSET = 'Unset',\n STRIPE = 'Stripe',\n}\n\nexport function convertFromApiPaymentProcessor(s: ApiPaymentProcessor): PaymentProcessor {\n switch (s) {\n case ApiPaymentProcessor.PAYMENT_PROCESSOR_INVALID:\n return PaymentProcessor.INVALID;\n case ApiPaymentProcessor.PAYMENT_PROCESSOR_UNSET:\n return PaymentProcessor.UNSET;\n case ApiPaymentProcessor.PAYMENT_PROCESSOR_STRIPE:\n return PaymentProcessor.STRIPE;\n default:\n return PaymentProcessor.INVALID;\n }\n}\n\nexport function convertToApiPaymentProcessor(s: PaymentProcessor): ApiPaymentProcessor {\n switch (s) {\n case PaymentProcessor.INVALID:\n return ApiPaymentProcessor.PAYMENT_PROCESSOR_INVALID;\n case PaymentProcessor.UNSET:\n return ApiPaymentProcessor.PAYMENT_PROCESSOR_UNSET;\n case PaymentProcessor.STRIPE:\n return ApiPaymentProcessor.PAYMENT_PROCESSOR_STRIPE;\n default:\n return ApiPaymentProcessor.PAYMENT_PROCESSOR_INVALID;\n }\n}\n","import { RecurringInvoiceStatus as ApiRecurringInvoiceStatus } from '@vendasta/billing';\n\nexport enum RecurringInvoiceStatus {\n INVALID = 'Invalid',\n INACTIVE = 'Inactive',\n ACTIVE = 'Active',\n ARCHIVED = 'Archived',\n}\n\nexport function convertFromApiRecurringInvoiceStatus(s: ApiRecurringInvoiceStatus): RecurringInvoiceStatus {\n switch (s) {\n case ApiRecurringInvoiceStatus.RECURRING_INVOICE_STATUS_INVALID:\n return RecurringInvoiceStatus.INVALID;\n case ApiRecurringInvoiceStatus.RECURRING_INVOICE_STATUS_INACTIVE:\n return RecurringInvoiceStatus.INACTIVE;\n case ApiRecurringInvoiceStatus.RECURRING_INVOICE_STATUS_ACTIVE:\n return RecurringInvoiceStatus.ACTIVE;\n case ApiRecurringInvoiceStatus.RECURRING_INVOICE_STATUS_ARCHIVED:\n return RecurringInvoiceStatus.ARCHIVED;\n default:\n return RecurringInvoiceStatus.INVALID;\n }\n}\n\nexport function convertToApiRecurringInvoiceStatus(s: RecurringInvoiceStatus): ApiRecurringInvoiceStatus {\n switch (s) {\n case RecurringInvoiceStatus.INVALID:\n return ApiRecurringInvoiceStatus.RECURRING_INVOICE_STATUS_INVALID;\n case RecurringInvoiceStatus.INACTIVE:\n return ApiRecurringInvoiceStatus.RECURRING_INVOICE_STATUS_INACTIVE;\n case RecurringInvoiceStatus.ACTIVE:\n return ApiRecurringInvoiceStatus.RECURRING_INVOICE_STATUS_ACTIVE;\n case RecurringInvoiceStatus.ARCHIVED:\n return ApiRecurringInvoiceStatus.RECURRING_INVOICE_STATUS_ARCHIVED;\n default:\n return ApiRecurringInvoiceStatus.RECURRING_INVOICE_STATUS_INVALID;\n }\n}\n","import { CollectionMethod } from '../retail-customer-configuration';\nimport {\n RecurringInvoiceCustomerAddress as ApiRecurringInvoiceCustomerAddressApi,\n RecurringInvoice as RecurringInvoiceApi,\n RecurringInvoiceItem as RecurringInvoiceItemApi,\n RecurringInvoiceLineItem as RecurringInvoiceLineItemApi,\n RecurringInvoiceBundle as RecurringInvoiceBundleApi,\n RecurringInvoiceLineItemInterface,\n RecurringInvoiceBundleInterface,\n} from '@vendasta/billing';\nimport { convertFromApiCollectionMethod } from './collection-method';\nimport { convertFromApiInterval, Interval } from './interval';\nimport { convertFromApiPaymentProcessor, PaymentProcessor } from './payment-processor';\nimport { convertFromApiRecurringInvoiceStatus, RecurringInvoiceStatus } from './status';\n\nexport class ListRecurringInvoicesByCustomerID {\n customerId: string;\n\n constructor(customerId: string) {\n this.customerId = customerId;\n }\n}\n\nexport class ListRecurringInvoicesByMerchantID {\n merchantId: string;\n\n constructor(merchantId: string) {\n this.merchantId = merchantId;\n }\n}\n\nexport interface ListRecurringInvoicesFilters {\n statuses?: RecurringInvoiceStatus[];\n detailedInterval?: ListRecurringInvoicesDetailedInterval[];\n dateFilter?: ListRecurringInvoicesDateFilter;\n}\n\nexport interface ListRecurringInvoicesDetailedInterval {\n interval: Interval;\n intervalCount: number;\n}\nexport interface ListRecurringInvoicesDateFilter {\n dateGte?: Date;\n dateLte?: Date;\n}\n\nexport interface CreateRecurringInvoiceRequest {\n customerId: string;\n nextIssue: Date;\n intervalCount: number;\n interval: Interval;\n repeatOnDayOfMonth?: number;\n collectionMethod: CollectionMethod;\n recipientUserId: string;\n additionalRecipientIds: string[];\n paymentProcessorId: string;\n paymentProcessor: PaymentProcessor;\n items: (RecurringInvoiceLineItem | RecurringInvoiceBundle)[];\n status: RecurringInvoiceStatus;\n memo?: string;\n endsAt?: Date;\n netD?: number;\n}\nclass LineItem {\n name: string;\n\n constructor(name: string) {\n this.name = name;\n }\n}\n\nexport const isRecurringInvoiceLineItem = (\n li: RecurringInvoiceLineItem | undefined,\n): li is RecurringInvoiceLineItem => {\n return !!li;\n};\nexport class RecurringInvoiceLineItem extends LineItem implements RecurringInvoiceLineItemInterface {\n sku?: string;\n unitPrice: number;\n quantity: number;\n taxRateIds?: string[];\n\n constructor(kwargs?: RecurringInvoiceLineItemInterface) {\n super(kwargs?.name || '');\n this.sku = kwargs?.sku || '';\n this.unitPrice = kwargs?.unitPrice || 0;\n this.quantity = kwargs?.quantity || 0;\n this.taxRateIds = kwargs?.taxRateIds || [];\n }\n}\n\n// DEPRECATED: a bundle is now represented as single item on the invoice rather than it being comprised of all individual products within said bundle.\n// New recurring invoices will not be created with bundle items, however, we still need to support the class to maintain the legacy bundle view so that we do not\n// break the historical representation of past recurring invoices.\nexport class RecurringInvoiceBundle extends LineItem implements RecurringInvoiceBundleInterface {\n hideLineItems: boolean;\n lineItems: RecurringInvoiceLineItem[];\n\n constructor(kwargs?: RecurringInvoiceBundleInterface) {\n super(kwargs?.name || '');\n this.hideLineItems = kwargs?.hideLineItems || false;\n this.lineItems = (kwargs?.lineItems || []).map((li) => new RecurringInvoiceLineItem(li));\n }\n}\n\nexport interface RecurringInvoiceCustomerAddress {\n address?: string;\n address2?: string;\n city?: string;\n state?: string;\n zip?: string;\n country?: string;\n}\n\nfunction convertApiCustomerAddress(ca: ApiRecurringInvoiceCustomerAddressApi): RecurringInvoiceCustomerAddress {\n return {\n address: ca?.address || '',\n address2: ca?.address2 || '',\n city: ca?.city || '',\n state: ca?.state || '',\n zip: ca?.zip || '',\n country: ca?.country || '',\n };\n}\n\nexport interface RecurringInvoice {\n id: string;\n created?: Date;\n updated?: Date;\n customerId: string;\n customerName: string;\n status: RecurringInvoiceStatus;\n nextIssue: Date;\n intervalCount: number;\n interval: Interval;\n repeatOnDayOfMonth?: number;\n collectionMethod: CollectionMethod;\n recipientUserId: string;\n additionalRecipientIds: string[];\n paymentProcessor: PaymentProcessor;\n paymentProcessorId: string;\n items: (RecurringInvoiceLineItem | RecurringInvoiceBundle)[];\n totalAmount?: number;\n currencyCode?: string;\n memo?: string;\n endsAt?: Date;\n customerAddress: RecurringInvoiceCustomerAddress;\n netD?: number;\n}\n\nfunction convertFromApiRecurringInvoiceLineItem(li: RecurringInvoiceLineItemApi): RecurringInvoiceLineItem | undefined {\n if (!li) {\n return undefined;\n }\n return new RecurringInvoiceLineItem({\n sku: li.sku,\n unitPrice: li.unitPrice,\n quantity: li.quantity,\n name: li.name,\n taxRateIds: li.taxRateIds || [],\n });\n}\n\nfunction convertFromApiRecurringInvoiceLineItemBundle(\n li: RecurringInvoiceBundleApi,\n): RecurringInvoiceBundle | undefined {\n if (!li) {\n return undefined;\n }\n return new RecurringInvoiceBundle({\n name: li.name,\n hideLineItems: li.hideLineItems || false,\n lineItems: (li.lineItems || [])\n .map((i) => convertFromApiRecurringInvoiceLineItem(i))\n .filter(isRecurringInvoiceLineItem),\n });\n}\n\nfunction convertFromApiRecurringInvoiceItem(\n i: RecurringInvoiceItemApi,\n): RecurringInvoiceLineItem | RecurringInvoiceBundle | undefined {\n if (!!i.lineItem === true) {\n return convertFromApiRecurringInvoiceLineItem(i.lineItem);\n } else if (!!i.bundle === true) {\n return convertFromApiRecurringInvoiceLineItemBundle(i.bundle);\n }\n return undefined;\n}\n\nexport function convertFromApiRecurringInvoice(i: RecurringInvoiceApi): RecurringInvoice {\n const zeroDate = new Date('0001-01-01T00:00:00Z').valueOf();\n return {\n id: i.id,\n created: i.created.valueOf() !== zeroDate ? i.created : null,\n updated: i.updated.valueOf() !== zeroDate ? i.updated : null,\n customerId: i.customerId,\n customerName: i.customerName || '',\n status: convertFromApiRecurringInvoiceStatus(i.status),\n nextIssue: i.nextIssue.valueOf() !== zeroDate ? i.nextIssue : null,\n intervalCount: i.intervalCount,\n interval: convertFromApiInterval(i.interval),\n repeatOnDayOfMonth: i.repeatOnDayOfMonth,\n collectionMethod: convertFromApiCollectionMethod(i.collectionMethod),\n recipientUserId: i.recipientUserId,\n additionalRecipientIds: i.additionalRecipientIds || [],\n paymentProcessor: convertFromApiPaymentProcessor(i.paymentProcessor),\n paymentProcessorId: i.paymentProcessorId,\n items: (i.items || []).map((li) => convertFromApiRecurringInvoiceItem(li)),\n totalAmount: i.totalAmount || 0,\n currencyCode: i.currencyCode,\n memo: i.memo,\n endsAt: i?.endsAt?.valueOf() !== zeroDate ? i.endsAt : null,\n customerAddress: convertApiCustomerAddress(i.customerAddress),\n netD: i.netD || 7,\n } as RecurringInvoice;\n}\n\nfunction convertToApiRecurringInvoiceLineItem(li: RecurringInvoiceLineItem): RecurringInvoiceLineItemApi | undefined {\n if (!li) {\n return undefined;\n }\n return new RecurringInvoiceLineItemApi({\n sku: li.sku,\n unitPrice: li.unitPrice,\n quantity: li.quantity,\n name: li.name,\n taxRateIds: li.taxRateIds,\n });\n}\n\nconst isRecurringInvoiceLineItemApi = (\n li: RecurringInvoiceLineItemApi | undefined,\n): li is RecurringInvoiceLineItemApi => {\n return !!li;\n};\nexport function convertToApiRecurringInvoiceItem(\n li: RecurringInvoiceLineItem | RecurringInvoiceBundle,\n): RecurringInvoiceItemApi {\n let lineItem: RecurringInvoiceLineItemApi | undefined;\n let bundle: RecurringInvoiceBundleApi | undefined;\n\n if (li instanceof RecurringInvoiceLineItem) {\n lineItem = convertToApiRecurringInvoiceLineItem(li);\n } else if (li instanceof RecurringInvoiceBundle) {\n bundle = new RecurringInvoiceBundleApi({\n name: li.name,\n hideLineItems: li.hideLineItems,\n lineItems: (li.lineItems || [])\n .map((item) => convertToApiRecurringInvoiceLineItem(item))\n .filter(isRecurringInvoiceLineItemApi),\n });\n }\n\n return new RecurringInvoiceItemApi({\n lineItem,\n bundle,\n });\n}\n","import { HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {\n DeleteRecurringInvoiceRequest,\n GetRecurringInvoiceRequest,\n ListRecurringInvoicesFilters as ListRecurringInvoicesFiltersApi,\n ListRecurringInvoicesRequest,\n ListRecurringInvoicesResponse,\n RecurringInvoice as RecurringInvoiceApi,\n RecurringInvoiceApiService,\n UpdateRecurringInvoiceRequest,\n} from '@vendasta/billing';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { PagedResponse } from '../core';\nimport { convertToApiCollectionMethod } from './collection-method';\nimport { convertToApiInterval } from './interval';\nimport { convertToApiPaymentProcessor } from './payment-processor';\nimport {\n CreateRecurringInvoiceRequest,\n ListRecurringInvoicesByCustomerID,\n ListRecurringInvoicesByMerchantID,\n ListRecurringInvoicesFilters,\n RecurringInvoice,\n convertFromApiRecurringInvoice,\n convertToApiRecurringInvoiceItem,\n} from './recurring-invoice';\nimport { convertToApiRecurringInvoiceStatus } from './status';\n\n@Injectable({ providedIn: 'root' })\nexport class RecurringInvoiceService {\n constructor(private recurringInvoiceApiService: RecurringInvoiceApiService) {}\n\n create(request: CreateRecurringInvoiceRequest): Observable {\n const req = new RecurringInvoiceApi({\n ...request,\n status: convertToApiRecurringInvoiceStatus(request.status),\n interval: convertToApiInterval(request.interval),\n collectionMethod: convertToApiCollectionMethod(request.collectionMethod),\n paymentProcessor: convertToApiPaymentProcessor(request.paymentProcessor),\n items: (request.items || []).map((i) => convertToApiRecurringInvoiceItem(i)),\n });\n\n return this.recurringInvoiceApiService\n .createRecurringInvoice(req)\n .pipe(map((res: RecurringInvoiceApi) => convertFromApiRecurringInvoice(res)));\n }\n\n get(id: string): Observable {\n const req = new GetRecurringInvoiceRequest({\n id,\n });\n return this.recurringInvoiceApiService\n .getRecurringInvoice(req)\n .pipe(map((resp: RecurringInvoiceApi) => convertFromApiRecurringInvoice(resp)));\n }\n\n delete(id: string): Observable> {\n const req = new DeleteRecurringInvoiceRequest({\n id,\n });\n return this.recurringInvoiceApiService.deleteRecurringInvoice(req);\n }\n\n list(\n identifier: ListRecurringInvoicesByCustomerID | ListRecurringInvoicesByMerchantID,\n cursor: string,\n pageSize: number,\n filters?: ListRecurringInvoicesFilters,\n ): Observable> {\n const req = new ListRecurringInvoicesRequest({\n pagingOptions: {\n cursor,\n pageSize,\n },\n });\n if (identifier instanceof ListRecurringInvoicesByCustomerID) {\n req.customerId = identifier.customerId;\n } else if (identifier instanceof ListRecurringInvoicesByMerchantID) {\n req.merchantId = identifier.merchantId;\n }\n if (filters) {\n req.filters = new ListRecurringInvoicesFiltersApi({\n statuses: filters.statuses?.map((status) => convertToApiRecurringInvoiceStatus(status)),\n intervals: filters.detailedInterval?.map((i) => {\n return { interval: convertToApiInterval(i.interval), intervalCount: i.intervalCount };\n }),\n nextIssuedDate: filters.dateFilter,\n });\n }\n return this.recurringInvoiceApiService.listRecurringInvoices(req).pipe(\n map((resp: ListRecurringInvoicesResponse) => {\n const invoices = (resp.recurringInvoices || []).map((item) => convertFromApiRecurringInvoice(item));\n return new PagedResponse(invoices, resp.pagingMetadata.nextCursor, resp.pagingMetadata.hasMore);\n }),\n );\n }\n\n update(recurringInvoice: RecurringInvoice, updateMask?: string[]): Observable {\n const req = new UpdateRecurringInvoiceRequest({\n recurringInvoice: new RecurringInvoiceApi({\n ...recurringInvoice,\n status: convertToApiRecurringInvoiceStatus(recurringInvoice.status),\n interval: convertToApiInterval(recurringInvoice.interval),\n collectionMethod: convertToApiCollectionMethod(recurringInvoice.collectionMethod),\n paymentProcessor: convertToApiPaymentProcessor(recurringInvoice.paymentProcessor),\n items: (recurringInvoice.items || []).map((i) => convertToApiRecurringInvoiceItem(i)),\n }),\n updateMask: updateMask ? { paths: updateMask } : undefined,\n });\n\n return this.recurringInvoiceApiService\n .updateRecurringInvoice(req)\n .pipe(map((res: RecurringInvoiceApi) => convertFromApiRecurringInvoice(res)));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Interval } from './recurring_invoice/';\n\n@Injectable()\nexport class IntervalMappingService {\n private translatedIntervalMap: { [k: string]: string | any } = {\n [Interval.DAY]: {\n '=1': this.translateService.instant('BILLING.INVOICES_PAGE.RECURRING.INTERVAL.DAY'),\n other: this.translateService.instant('BILLING.INVOICES_PAGE.RECURRING.INTERVAL.DAYS'),\n },\n [Interval.WEEK]: {\n '=1': this.translateService.instant('BILLING.INVOICES_PAGE.RECURRING.INTERVAL.WEEK'),\n other: this.translateService.instant('BILLING.INVOICES_PAGE.RECURRING.INTERVAL.WEEKS'),\n },\n [Interval.MONTH]: {\n '=1': this.translateService.instant('BILLING.INVOICES_PAGE.RECURRING.INTERVAL.MONTH'),\n other: this.translateService.instant('BILLING.INVOICES_PAGE.RECURRING.INTERVAL.MONTHS'),\n },\n [Interval.YEAR]: {\n '=1': this.translateService.instant('BILLING.INVOICES_PAGE.RECURRING.INTERVAL.YEAR'),\n other: this.translateService.instant('BILLING.INVOICES_PAGE.RECURRING.INTERVAL.YEARS'),\n },\n };\n\n constructor(private translateService: TranslateService) {}\n\n public get intervalMapping(): { [k: string]: string } {\n return this.translatedIntervalMap;\n }\n}\n","import { AppliedBundle as ApiAppliedBundle } from '@vendasta/billing';\n\nexport const isAppliedBundle = (b: AppliedBundle | undefined): b is AppliedBundle => {\n return !!b;\n};\nexport interface AppliedBundle {\n bundleId?: string;\n bundleInstanceId?: string;\n name?: string;\n bundleItems?: AppliedBundleItem[];\n hideBundleItems?: boolean;\n}\n\nexport interface AppliedBundleItem {\n productId?: string;\n discountType?: string;\n discountAmount?: number;\n quantity?: number;\n}\n\nexport function convertApiAppliedBundle(ab: ApiAppliedBundle): AppliedBundle | undefined {\n if (!ab) {\n return undefined;\n }\n\n return {\n bundleId: ab.bundleId,\n bundleInstanceId: ab.bundleInstanceId,\n name: ab.name,\n hideBundleItems: ab.hideBundleItems || false,\n };\n}\n","import { BankAccount as ApiBankAccount } from '@vendasta/billing';\n\nexport interface BankAccount {\n id: string;\n accountHolderName: string;\n bankName: string;\n country: string;\n currency: string;\n routingNumber: string;\n last4: string;\n defaultForCurrency: boolean;\n}\n\nexport function bankAccountFromApi(r: ApiBankAccount): BankAccount {\n return {\n id: r.id,\n accountHolderName: r.accountHolderName,\n bankName: r.bankName,\n country: r.country,\n currency: r.currency,\n routingNumber: r.routingNumber,\n last4: r.last4,\n defaultForCurrency: r.defaultForCurrency,\n } as BankAccount;\n}\n","import { HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport {\n BankAccount as ApiBankAccount,\n DeleteBankAccountRequest,\n ListBankAccountsRequest,\n ListBankAccountsResponse,\n MerchantApiService,\n SetDefaultBankAccountRequest,\n} from '@vendasta/billing';\nimport { BankAccount, bankAccountFromApi } from './bank_account';\n\n@Injectable({ providedIn: 'root' })\nexport class BankAccountService {\n constructor(private merchantApi: MerchantApiService) {}\n\n listBankAccounts(merchantId: string): Observable {\n return this.merchantApi\n .listBankAccounts(\n new ListBankAccountsRequest({\n merchantId,\n }),\n )\n .pipe(\n map((res: ListBankAccountsResponse) => (res && res.bankAccount ? res.bankAccount : [])),\n map((bankAccounts: ApiBankAccount[]) => {\n return bankAccounts.map((ba: ApiBankAccount) => bankAccountFromApi(ba));\n }),\n );\n }\n\n setDefaultBankAccount(merchantId: string, bankAccountId: string): Observable> {\n const request = new SetDefaultBankAccountRequest({\n merchantId,\n bankAccountId,\n });\n return this.merchantApi.setDefaultBankAccount(request);\n }\n\n deleteBankAccount(merchantId: string, bankAccountId: string): Observable> {\n const request = new DeleteBankAccountRequest({\n merchantId,\n bankAccountId,\n });\n return this.merchantApi.deleteBankAccount(request);\n }\n}\n","import { Injectable } from '@angular/core';\n\ndeclare const window: any;\nconst environment: string = (window ? window['environment'] : 'prod') ?? 'prod';\n\nconst appEngineHostMap: { [key: string]: string } = {\n local: 'http://localhost:8088',\n test: '',\n demo: 'vbilling-demo.appspot.com',\n prod: 'vbilling-prod.appspot.com',\n production: 'vbilling-prod.appspot.com',\n};\n\n@Injectable({ providedIn: 'root' })\nexport class BillingHostService {\n get appEngineHost(): string {\n const host = appEngineHostMap[environment.toLowerCase()];\n if (!host) {\n throw new Error('Could not getting billing host');\n }\n return 'https://' + host;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Environment, EnvironmentService } from '@galaxy/core';\nimport { Observable } from 'rxjs';\nimport { CountryProviderDeterminant, MerchantProviderDeterminant, PaymentService } from './payment';\n\n// Public API Key for Live Canadian Account\nconst CA_LIVE_API_KEY = 'pk_live_Nv6bm5YyuSb2cCj1Tv2laHeV';\n// Public API Key for Test Canadian Account\nconst CA_TEST_API_KEY = 'pk_test_d7arUvYIZ2TNTwmyDQUCHqUB';\n\n@Injectable({ providedIn: 'root' })\nexport class StripeService {\n private connectPublicKey: string;\n\n constructor(private environmentService: EnvironmentService, private paymentService: PaymentService) {\n this.connectPublicKey =\n this.environmentService.getEnvironment() === Environment.PROD ? CA_LIVE_API_KEY : CA_TEST_API_KEY;\n }\n\n // returns the public API key that is to be used for Stripe Connect Account requests, which is regardless of the merchant's subsidiary and is always corresponding to Vendasta's Canadian Stripe account.\n public getConnectPublicKey(): string {\n return this.connectPublicKey;\n }\n\n // returns the public API key that is associated to the corresponding merchant's susibidiary.\n public getPublicKeyByMerchant(merchantId: string): Observable {\n return this.paymentService.getWholesaleProviderPublicKey(new MerchantProviderDeterminant(merchantId));\n }\n\n // returns the public API key that is associated to the corresponding susibidiary location.\n // this should ONLY be used in the event we do not have an existing merchant record (i.e. during platform signup)\n public getPublicKeyByCountry(countryCode: string): Observable {\n return this.paymentService.getWholesaleProviderPublicKey(new CountryProviderDeterminant(countryCode));\n }\n}\n","import { DiscountType } from '../discount';\nimport { discountTypeFromApi, discountTypeToApi } from '../discount/discount_type';\nimport { Bundle as APIBundle, BundleItem as APIBundleItem } from '@vendasta/billing';\n\nexport const isBundle = (b: Bundle | undefined): b is Bundle => {\n return !!b;\n};\nexport interface Bundle {\n merchantId: string;\n bundleId: string;\n name: string;\n hideBundleDetails: boolean;\n items: BundleItem[];\n created: Date;\n updated: Date;\n}\n\nexport interface BundleItem {\n productId: string;\n discountType: DiscountType;\n discountAmount: number;\n quantity: number;\n defaultSku: string;\n price: Price;\n}\n\nexport interface Price {\n amount: number;\n setupFee: number;\n}\n\nexport function bundleFromApi(apiBundle: APIBundle): Bundle | undefined {\n if (!apiBundle) {\n return undefined;\n }\n const items = (apiBundle.items || []).map((item) => bundleItemFromApi(item));\n return {\n merchantId: apiBundle.merchantId,\n bundleId: apiBundle.bundleId,\n name: apiBundle.name,\n hideBundleDetails: apiBundle.hideBundleDetails,\n items: items,\n created: apiBundle.created,\n updated: apiBundle.updated,\n } as Bundle;\n}\n\nexport function bundleItemFromApi(apiBundleItem: APIBundleItem): BundleItem {\n return {\n productId: apiBundleItem.productId,\n discountType: discountTypeFromApi(apiBundleItem.discountType),\n discountAmount: apiBundleItem.discountAmount,\n quantity: apiBundleItem.quantity,\n defaultSku: apiBundleItem.defaultSku,\n price: apiBundleItem.price,\n } as BundleItem;\n}\n\nexport function bundleItemToApi(bundleItem: BundleItem): APIBundleItem {\n return {\n productId: bundleItem.productId,\n discountType: discountTypeToApi(bundleItem.discountType),\n discountAmount: bundleItem.discountAmount,\n quantity: bundleItem.quantity,\n defaultSku: bundleItem.defaultSku,\n price: bundleItem.price,\n } as APIBundleItem;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map, mapTo } from 'rxjs/operators';\nimport { PagedResponse } from '../core';\nimport {\n BundleApiService,\n GetMultiBundleRequest,\n GetMultiBundleResponse,\n ListBundlesRequest,\n ListBundlesResponse,\n PagedRequestOptions,\n UpsertBundleRequest,\n} from '@vendasta/billing';\nimport { Bundle, bundleFromApi, BundleItem, bundleItemToApi, isBundle } from './bundle';\n\nexport interface ListBundleFilter {\n merchantId?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BundleService {\n constructor(private bundleApiService: BundleApiService) {}\n\n upsert(\n merchantId: string,\n bundleId: string,\n name: string,\n hideBundleDetails: boolean,\n items: BundleItem[],\n ): Observable {\n const request = new UpsertBundleRequest({\n merchantId: merchantId,\n bundleId: bundleId,\n name: name,\n hideBundleDetails: hideBundleDetails,\n items: (items || []).map((item) => bundleItemToApi(item)),\n });\n return this.bundleApiService.upsert(request).pipe(mapTo(true));\n }\n\n getMulti(merchantId: string, bundleIds: string[]): Observable> {\n const request = new GetMultiBundleRequest({\n merchantId: merchantId,\n bundleIds: bundleIds,\n });\n return this.bundleApiService.getMulti(request).pipe(\n map((resp: GetMultiBundleResponse) => {\n const bundlesMap = new Map();\n if (resp && resp.bundles) {\n bundleIds.forEach((bundleId) => {\n const bundles = bundleFromApi(resp.bundles[bundleId]);\n if (bundles) {\n bundlesMap.set(bundleId, bundles);\n }\n });\n }\n return bundlesMap;\n }),\n );\n }\n\n list(\n filters: ListBundleFilter,\n searchTerm: string,\n cursor: string,\n pageSize: number,\n ): Observable> {\n const request = new ListBundlesRequest({\n filters: filters,\n searchTerm: searchTerm,\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.bundleApiService.list(request).pipe(\n map((resp: ListBundlesResponse) => {\n const bundles = (resp.bundles || []).map((bundle) => bundleFromApi(bundle)).filter(isBundle);\n return new PagedResponse(bundles, resp.pagingMetadata.nextCursor, resp.pagingMetadata.hasMore);\n }),\n );\n }\n}\n","import { CreditBalanceInterface } from '@vendasta/billing';\n\nexport interface CreditBalance {\n merchantId: string;\n currency: string;\n amount: number;\n}\n\nexport function creditBalanceFromApi(apiCreditBalance: CreditBalanceInterface): CreditBalance {\n return {\n merchantId: apiCreditBalance.merchantId || '',\n currency: apiCreditBalance.currency || '',\n amount: apiCreditBalance.amount || 0,\n };\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AddCreditRequest, CreditApiService, GetBalanceRequest, GetBalanceResponse } from '@vendasta/billing';\nimport { CreditBalance, creditBalanceFromApi } from './credit';\n\n@Injectable({ providedIn: 'root' })\nexport class CreditService {\n constructor(private creditApi: CreditApiService) {}\n\n getBalance(merchantId: string): Observable {\n return this.creditApi\n .getBalance(\n new GetBalanceRequest({\n merchantId,\n }),\n )\n .pipe(map((res: GetBalanceResponse) => creditBalanceFromApi(res.creditBalance)));\n }\n\n add(\n merchantId: string,\n currency: string,\n amount: number,\n idempotencyKey?: string,\n reason?: string,\n ): Observable {\n return this.creditApi\n .add(\n new AddCreditRequest({\n merchantId,\n currency,\n amount,\n idempotencyKey,\n reason,\n }),\n )\n .pipe(map(() => null));\n }\n}\n","import * as i0 from '@angular/core';\nimport { Injectable } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport * as i1 from '@angular/common/http';\nimport { HttpHeaders } from '@angular/common/http';\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar Owner = /*#__PURE__*/function (Owner) {\n Owner[Owner[\"OWNER_NOT_SPECIFIED\"] = 0] = \"OWNER_NOT_SPECIFIED\";\n Owner[Owner[\"OWNER_SOCIAL_MARKETING\"] = 1] = \"OWNER_SOCIAL_MARKETING\";\n Owner[Owner[\"OWNER_CUSTOMER_VOICE\"] = 2] = \"OWNER_CUSTOMER_VOICE\";\n Owner[Owner[\"OWNER_CORE_SERVICES\"] = 3] = \"OWNER_CORE_SERVICES\";\n Owner[Owner[\"OWNER_EMAIL_VERIFICATION\"] = 4] = \"OWNER_EMAIL_VERIFICATION\";\n Owner[Owner[\"OWNER_SMB_REFERRAL\"] = 5] = \"OWNER_SMB_REFERRAL\";\n Owner[Owner[\"OWNER_UNTRACKED\"] = 6] = \"OWNER_UNTRACKED\";\n Owner[Owner[\"OWNER_INBOX_BUSINESS\"] = 7] = \"OWNER_INBOX_BUSINESS\";\n Owner[Owner[\"OWNER_REPUTATION_MANAGEMENT\"] = 8] = \"OWNER_REPUTATION_MANAGEMENT\";\n return Owner;\n}(Owner || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar SortDirection = /*#__PURE__*/function (SortDirection) {\n SortDirection[SortDirection[\"SORT_DIRECTION_DESCENDING\"] = 0] = \"SORT_DIRECTION_DESCENDING\";\n SortDirection[SortDirection[\"SORT_DIRECTION_ASCENDING\"] = 1] = \"SORT_DIRECTION_ASCENDING\";\n return SortDirection;\n}(SortDirection || {});\nvar SortField = /*#__PURE__*/function (SortField) {\n SortField[SortField[\"SORT_FIELD_CREATED\"] = 0] = \"SORT_FIELD_CREATED\";\n SortField[SortField[\"SORT_FIELD_LONGURL\"] = 1] = \"SORT_FIELD_LONGURL\";\n SortField[SortField[\"SORT_FIELD_FACEBOOK\"] = 2] = \"SORT_FIELD_FACEBOOK\";\n SortField[SortField[\"SORT_FIELD_TWITTER\"] = 3] = \"SORT_FIELD_TWITTER\";\n SortField[SortField[\"SORT_FIELD_LINKEDIN\"] = 4] = \"SORT_FIELD_LINKEDIN\";\n SortField[SortField[\"SORT_FIELD_GOOGLE\"] = 5] = \"SORT_FIELD_GOOGLE\";\n SortField[SortField[\"SORT_FIELD_OTHER\"] = 6] = \"SORT_FIELD_OTHER\";\n SortField[SortField[\"SORT_FIELD_TOTAL\"] = 7] = \"SORT_FIELD_TOTAL\";\n return SortField;\n}(SortField || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums Index.\n// *********************************\n\nfunction enumStringToValue$2(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Link {\n static fromProto(proto) {\n let m = new Link();\n m = Object.assign(m, proto);\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.owner) {\n m.owner = enumStringToValue$2(Owner, proto.owner);\n }\n if (proto.hidden) {\n m.hidden = new Date(proto.hidden);\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.shortCode !== 'undefined') {\n toReturn['shortCode'] = this.shortCode;\n }\n if (typeof this.longUrl !== 'undefined') {\n toReturn['longUrl'] = this.longUrl;\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.owner !== 'undefined') {\n toReturn['owner'] = this.owner;\n }\n if (typeof this.description !== 'undefined') {\n toReturn['description'] = this.description;\n }\n if (typeof this.hidden !== 'undefined' && this.hidden !== null) {\n toReturn['hidden'] = 'toApiJson' in this.hidden ? this.hidden.toApiJson() : this.hidden;\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 CreateLinkRequest {\n static fromProto(proto) {\n let m = new CreateLinkRequest();\n m = Object.assign(m, proto);\n if (proto.owner) {\n m.owner = enumStringToValue$1(Owner, proto.owner);\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.linkUrl !== 'undefined') {\n toReturn['linkUrl'] = this.linkUrl;\n }\n if (typeof this.owner !== 'undefined') {\n toReturn['owner'] = this.owner;\n }\n if (typeof this.description !== 'undefined') {\n toReturn['description'] = this.description;\n }\n if (typeof this.hidden !== 'undefined') {\n toReturn['hidden'] = this.hidden;\n }\n if (typeof this.sensitiveUrl !== 'undefined') {\n toReturn['sensitiveUrl'] = this.sensitiveUrl;\n }\n return toReturn;\n }\n}\nclass CreateLinkResponse {\n static fromProto(proto) {\n let m = new CreateLinkResponse();\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.shortCode !== 'undefined') {\n toReturn['shortCode'] = this.shortCode;\n }\n if (typeof this.domain !== 'undefined') {\n toReturn['domain'] = this.domain;\n }\n return toReturn;\n }\n}\nclass GetLinkRequest {\n static fromProto(proto) {\n let m = new GetLinkRequest();\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.shortCode !== 'undefined') {\n toReturn['shortCode'] = this.shortCode;\n }\n return toReturn;\n }\n}\nclass GetLinkResponse {\n static fromProto(proto) {\n let m = new GetLinkResponse();\n m = Object.assign(m, proto);\n if (proto.link) {\n m.link = Link.fromProto(proto.link);\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.link !== 'undefined' && this.link !== null) {\n toReturn['link'] = 'toApiJson' in this.link ? this.link.toApiJson() : this.link;\n }\n return toReturn;\n }\n}\nclass GetMultiLinkMetricsRequest {\n static fromProto(proto) {\n let m = new GetMultiLinkMetricsRequest();\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.shortCode !== 'undefined') {\n toReturn['shortCode'] = this.shortCode;\n }\n return toReturn;\n }\n}\nclass GetMultiLinkMetricsResponse {\n static fromProto(proto) {\n let m = new GetMultiLinkMetricsResponse();\n m = Object.assign(m, proto);\n if (proto.linkMetrics) {\n m.linkMetrics = proto.linkMetrics.map(LinkMetrics.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.linkMetrics !== 'undefined' && this.linkMetrics !== null) {\n toReturn['linkMetrics'] = 'toApiJson' in this.linkMetrics ? this.linkMetrics.toApiJson() : this.linkMetrics;\n }\n return toReturn;\n }\n}\nclass LinkMetrics {\n static fromProto(proto) {\n let m = new LinkMetrics();\n m = Object.assign(m, proto);\n if (proto.totalHits) {\n m.totalHits = parseInt(proto.totalHits, 10);\n }\n if (proto.referers) {\n m.referers = Object.keys(proto.referers).reduce((obj, k) => {\n obj[k] = parseInt(proto.referers[k], 10);\n return obj;\n }, {});\n }\n if (proto.created) {\n m.created = new Date(proto.created);\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.totalHits !== 'undefined') {\n toReturn['totalHits'] = this.totalHits;\n }\n if (typeof this.referers !== 'undefined' && this.referers !== null) {\n toReturn['referers'] = 'toApiJson' in this.referers ? this.referers.toApiJson() : this.referers;\n }\n if (typeof this.shortCode !== 'undefined') {\n toReturn['shortCode'] = this.shortCode;\n }\n if (typeof this.longUrl !== 'undefined') {\n toReturn['longUrl'] = this.longUrl;\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.description !== 'undefined') {\n toReturn['description'] = this.description;\n }\n return toReturn;\n }\n}\nclass ListAllLinkMetricsRequest {\n static fromProto(proto) {\n let m = new ListAllLinkMetricsRequest();\n m = Object.assign(m, proto);\n if (proto.sortField) {\n m.sortField = enumStringToValue$1(SortField, proto.sortField);\n }\n if (proto.sortDirection) {\n m.sortDirection = enumStringToValue$1(SortDirection, proto.sortDirection);\n }\n if (proto.owner) {\n m.owner = enumStringToValue$1(Owner, proto.owner);\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.sortField !== 'undefined') {\n toReturn['sortField'] = this.sortField;\n }\n if (typeof this.filterTerm !== 'undefined') {\n toReturn['filterTerm'] = this.filterTerm;\n }\n if (typeof this.sortDirection !== 'undefined') {\n toReturn['sortDirection'] = this.sortDirection;\n }\n if (typeof this.owner !== 'undefined') {\n toReturn['owner'] = this.owner;\n }\n return toReturn;\n }\n}\nclass ListAllLinkMetricsResponse {\n static fromProto(proto) {\n let m = new ListAllLinkMetricsResponse();\n m = Object.assign(m, proto);\n if (proto.linkMetrics) {\n m.linkMetrics = proto.linkMetrics.map(LinkMetrics.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.linkMetrics !== 'undefined' && this.linkMetrics !== null) {\n toReturn['linkMetrics'] = 'toApiJson' in this.linkMetrics ? this.linkMetrics.toApiJson() : this.linkMetrics;\n }\n return toReturn;\n }\n}\nclass ListLinksRequest {\n static fromProto(proto) {\n let m = new ListLinksRequest();\n m = Object.assign(m, proto);\n if (proto.options) {\n m.options = PagedRequestOptions.fromProto(proto.options);\n }\n if (proto.owner) {\n m.owner = enumStringToValue$1(Owner, proto.owner);\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.options !== 'undefined' && this.options !== null) {\n toReturn['options'] = 'toApiJson' in this.options ? this.options.toApiJson() : this.options;\n }\n if (typeof this.owner !== 'undefined') {\n toReturn['owner'] = this.owner;\n }\n return toReturn;\n }\n}\nclass ListLinksResponse {\n static fromProto(proto) {\n let m = new ListLinksResponse();\n m = Object.assign(m, proto);\n if (proto.link) {\n m.link = proto.link.map(Link.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.link !== 'undefined' && this.link !== null) {\n toReturn['link'] = 'toApiJson' in this.link ? this.link.toApiJson() : this.link;\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 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}\nclass LinkMetricsReferersEntry {\n static fromProto(proto) {\n let m = new LinkMetricsReferersEntry();\n m = Object.assign(m, proto);\n if (proto.value) {\n m.value = parseInt(proto.value, 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.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 SetLinkHideStatusesRequest {\n static fromProto(proto) {\n let m = new SetLinkHideStatusesRequest();\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.shortCodes !== 'undefined') {\n toReturn['shortCodes'] = this.shortCodes;\n }\n if (typeof this.hidden !== 'undefined') {\n toReturn['hidden'] = this.hidden;\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 HeaderValues {\n static fromProto(proto) {\n let m = new HeaderValues();\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.values !== 'undefined') {\n toReturn['values'] = this.values;\n }\n return toReturn;\n }\n}\nclass VisitHeadersEntry {\n static fromProto(proto) {\n let m = new VisitHeadersEntry();\n m = Object.assign(m, proto);\n if (proto.value) {\n m.value = HeaderValues.fromProto(proto.value);\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.key !== 'undefined') {\n toReturn['key'] = this.key;\n }\n if (typeof this.value !== 'undefined' && this.value !== null) {\n toReturn['value'] = 'toApiJson' in this.value ? this.value.toApiJson() : this.value;\n }\n return toReturn;\n }\n}\nclass Visit {\n static fromProto(proto) {\n let m = new Visit();\n m = Object.assign(m, proto);\n if (proto.headers) {\n m.headers = Object.keys(proto.headers).reduce((obj, k) => {\n obj[k] = HeaderValues.fromProto(proto.headers[k]);\n return obj;\n }, {});\n }\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.updated) {\n m.updated = new Date(proto.updated);\n }\n if (proto.deleted) {\n m.deleted = new Date(proto.deleted);\n }\n if (proto.link) {\n m.link = Link.fromProto(proto.link);\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.id !== 'undefined') {\n toReturn['id'] = this.id;\n }\n if (typeof this.headers !== 'undefined' && this.headers !== null) {\n toReturn['headers'] = 'toApiJson' in this.headers ? this.headers.toApiJson() : this.headers;\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.updated !== 'undefined' && this.updated !== null) {\n toReturn['updated'] = 'toApiJson' in this.updated ? this.updated.toApiJson() : this.updated;\n }\n if (typeof this.deleted !== 'undefined' && this.deleted !== null) {\n toReturn['deleted'] = 'toApiJson' in this.deleted ? this.deleted.toApiJson() : this.deleted;\n }\n if (typeof this.domain !== 'undefined') {\n toReturn['domain'] = this.domain;\n }\n if (typeof this.sessionId !== 'undefined') {\n toReturn['sessionId'] = this.sessionId;\n }\n if (typeof this.link !== 'undefined' && this.link !== null) {\n toReturn['link'] = 'toApiJson' in this.link ? this.link.toApiJson() : this.link;\n }\n return toReturn;\n }\n}\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Objects Index.\n// *********************************\n\nconst environment = (window ? window['environment'] : 'prod') ?? 'prod';\nconst hostMap = {\n 'local': 'url-shortener-api.vendasta-local.com',\n 'test': '',\n 'demo': 'url-shortener-api-demo.apigateway.co',\n 'prod': 'url-shortener-api-prod.apigateway.co',\n 'production': 'url-shortener-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// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// API Service.\n// *********************************\nlet UrlShortenerApiService = /*#__PURE__*/(() => {\n class UrlShortenerApiService {\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 createLink(r) {\n const request = r.toApiJson ? r : new CreateLinkRequest(r);\n return this.http.post(this._host + \"/url_shortener.v1.UrlShortener/CreateLink\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CreateLinkResponse.fromProto(resp)));\n }\n getLink(r) {\n const request = r.toApiJson ? r : new GetLinkRequest(r);\n return this.http.post(this._host + \"/url_shortener.v1.UrlShortener/GetLink\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetLinkResponse.fromProto(resp)));\n }\n listLinks(r) {\n const request = r.toApiJson ? r : new ListLinksRequest(r);\n return this.http.post(this._host + \"/url_shortener.v1.UrlShortener/ListLinks\", request.toApiJson(), this.apiOptions()).pipe(map(resp => ListLinksResponse.fromProto(resp)));\n }\n getMultiLinkMetrics(r) {\n const request = r.toApiJson ? r : new GetMultiLinkMetricsRequest(r);\n return this.http.post(this._host + \"/url_shortener.v1.UrlShortener/GetMultiLinkMetrics\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetMultiLinkMetricsResponse.fromProto(resp)));\n }\n listAllLinkMetrics(r) {\n const request = r.toApiJson ? r : new ListAllLinkMetricsRequest(r);\n return this.http.post(this._host + \"/url_shortener.v1.UrlShortener/ListAllLinkMetrics\", request.toApiJson(), this.apiOptions()).pipe(map(resp => ListAllLinkMetricsResponse.fromProto(resp)));\n }\n setLinkHideStatuses(r) {\n const request = r.toApiJson ? r : new SetLinkHideStatusesRequest(r);\n return this.http.post(this._host + \"/url_shortener.v1.UrlShortener/SetLinkHideStatuses\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n UrlShortenerApiService.ɵfac = function UrlShortenerApiService_Factory(t) {\n return new (t || UrlShortenerApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n UrlShortenerApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: UrlShortenerApiService,\n factory: UrlShortenerApiService.ɵfac,\n providedIn: 'root'\n });\n return UrlShortenerApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet UrlShortenerService = /*#__PURE__*/(() => {\n class UrlShortenerService {\n constructor(api) {\n this.api = api;\n }\n getLink(shortCode) {\n const req = new GetLinkRequest({\n shortCode: shortCode\n });\n return this.api.getLink(req).pipe(map(resp => resp.link));\n }\n createLink(businessId, linkUrl, owner, description, hidden) {\n const req = new CreateLinkRequest({\n businessId: businessId,\n linkUrl: linkUrl,\n owner: owner,\n description: description,\n hidden: hidden\n });\n return this.api.createLink(req);\n }\n listLinks(businessId, cursor, pageSize, owner) {\n const req = new ListLinksRequest({\n businessId: businessId,\n owner: owner,\n options: new PagedRequestOptions({\n cursor: cursor,\n pageSize: pageSize\n })\n });\n return this.api.listLinks(req).pipe(map(resp => new PagedResponse(resp.link, resp.pagingMetadata.nextCursor, resp.pagingMetadata.hasMore)));\n }\n listLinkMetrics(businessId, sortField, filterTerm, sortDirection, owner) {\n const body = {\n businessId: businessId,\n sortField: sortField,\n filterTerm: filterTerm,\n sortDirection: sortDirection,\n owner: owner\n };\n const req = new ListAllLinkMetricsRequest(body);\n return this.api.listAllLinkMetrics(req).pipe(map(resp => resp.linkMetrics));\n }\n setLinkHideStatuses(businessId, shortCodes, hidden) {\n const req = new SetLinkHideStatusesRequest({\n businessId: businessId,\n shortCodes: shortCodes,\n hidden: hidden\n });\n return this.api.setLinkHideStatuses(req).pipe(map(res => res.status === 200));\n }\n }\n UrlShortenerService.ɵfac = function UrlShortenerService_Factory(t) {\n return new (t || UrlShortenerService)(i0.ɵɵinject(UrlShortenerApiService));\n };\n UrlShortenerService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: UrlShortenerService,\n factory: UrlShortenerService.ɵfac,\n providedIn: 'root'\n });\n return UrlShortenerService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nclass PagedResponse {\n constructor(results, nextCursor, hasMore) {\n this.results = results;\n this.nextCursor = nextCursor;\n this.hasMore = hasMore;\n }\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CreateLinkResponse, Link, LinkMetrics, Owner, PagedResponse, SortDirection, SortField, UrlShortenerService };\n","import { Note as ApiNote } from '@vendasta/billing/lib/_internal/objects/invoice';\nimport { Note } from '../invoice/invoice';\n\nexport function convertAPINote(note: ApiNote): Note | undefined {\n return note ? { message: note.message } : {};\n}\n\nexport const isNote = (n: Note | undefined): n is Note => {\n return n ? !!n.message : false;\n};\n","import {\n AppliedTaxRate as ApiAppliedTaxRate,\n Invoice as ApiInvoice,\n InvoiceCustomerAddress as ApiInvoiceCustomerAddress,\n InvoiceItem as ApiInvoiceItem,\n InvoiceStatus as ApiInvoiceStatus,\n TaxRate as ApiTaxRate,\n InvoiceStatus as InternalInvoiceStatus,\n ListInvoicesRequestFilters,\n ListInvoicesRequestFiltersDateFilterDateField,\n} from '@vendasta/billing';\nimport { AppliedBundle, convertApiAppliedBundle, isAppliedBundle } from '../applied_bundle';\nimport { AppliedDiscount, appliedDiscountFromApi } from '../applied_discount';\nimport { convertAPINote, isNote } from '../note/note';\nimport { Currency, currencyFromApi } from '../pricing';\nimport {\n CollectionMethod,\n collectionMethodFromApi,\n PaymentMethodType,\n paymentTypesFromApi,\n} from '../retail-customer-configuration';\nimport { TaxRate, isTaxRate } from '../tax-rate';\nimport { ListInvoicesFilter } from './list-invoice';\n\nexport enum InvoicePDFType {\n INVOICE = 'invoice',\n RECEIPT = 'receipt',\n}\n\nexport enum InvoiceStatus {\n DRAFT = 'Draft',\n DUE = 'Due',\n PAID = 'Paid',\n VOID = 'Void',\n}\n\nexport enum InvoiceDateField {\n CREATED = 'Created',\n}\n\nexport enum InvoiceOrigin {\n MANUAL = 'Manual',\n SALES_ORDER = 'Sales Order',\n RENEWAL = 'Renewal',\n TEMPLATE = 'Template',\n UNSET = 'Unset',\n}\n\nexport enum InvoiceOriginAPI {\n MANUAL = 'manual',\n SALES_ORDER = 'sales-order',\n RENEWAL = 'renewal',\n TEMPLATE = 'template',\n}\n\nconst isInvoiceItem = (ii: InvoiceItem | undefined): ii is InvoiceItem => {\n return !!ii;\n};\n\nexport interface InvoiceItem {\n id: string;\n sku: string;\n amount: number;\n quantity: number;\n description: string;\n subtotal: number;\n total: number;\n appliedTaxes?: AppliedTaxRate[];\n appliedDiscounts?: AppliedDiscount[];\n taxRates: TaxRate[];\n // DEPRECATED: a bundle is now represented as single item on the invoice rather than it being comprised of all individual products within said bundle.\n // New invoices will not be created with a bundle ID or bundle instance ID, however, we still need to support the fields to maintain the legacy bundle view so that we do not\n // break the historical representation of past invoices.\n bundleId: string;\n // DEPRECATED\n bundleInstanceId?: string;\n}\n\nexport const isInvoice = (i: Invoice | undefined): i is Invoice => {\n return !!i;\n};\n\nexport interface Invoice {\n id: string;\n number: string;\n customerId: string;\n customerName: string;\n contactId: string;\n status: InvoiceStatus;\n subtotal: number;\n discountTotal: number;\n total: number;\n paid?: Date;\n issued?: Date;\n due?: Date;\n created?: Date;\n updated?: Date;\n voided?: Date;\n autoAdvance?: Date;\n items: InvoiceItem[];\n currency: Currency;\n orderId: string;\n appliedTaxes: AppliedTaxRate[];\n defaultTaxRates: TaxRate[];\n // DEPRECATED: a bundle is now represented as single item on the invoice rather than it being comprised of all individual products within said bundle.\n // New invoices will not have applied bundles, however, we still need to support the field to maintain the legacy bundle view so that we do not\n // break the historical representation of past invoices.\n appliedBundles: AppliedBundle[];\n origin: InvoiceOrigin;\n collectionMethod: CollectionMethod;\n memo: string;\n defaultPaymentMethod: string;\n customerAddress: InvoiceCustomerAddress;\n externalCustomerIdentifier: string;\n notes: Note[];\n additionalContactIds?: string[];\n paymentMethodTypes: PaymentMethodType[];\n}\n\nexport interface Note {\n message: string;\n}\n\nconst isAppliedTaxRate = (tr: AppliedTaxRate | undefined): tr is AppliedTaxRate => {\n return !!tr;\n};\n\nexport interface AppliedTaxRate {\n amount?: number;\n taxRateId?: string;\n percentage?: number;\n name?: string;\n description?: string;\n}\n\nfunction convertApiStatus(s: ApiInvoiceStatus): InvoiceStatus {\n switch (s) {\n case ApiInvoiceStatus.DUE:\n return InvoiceStatus.DUE;\n case ApiInvoiceStatus.PAID:\n return InvoiceStatus.PAID;\n case ApiInvoiceStatus.VOID:\n return InvoiceStatus.VOID;\n default:\n return InvoiceStatus.DRAFT;\n }\n}\n\nfunction invoiceStatusToApi(status: InvoiceStatus): InternalInvoiceStatus {\n switch (status) {\n case InvoiceStatus.DUE:\n return InternalInvoiceStatus.DUE;\n case InvoiceStatus.PAID:\n return InternalInvoiceStatus.PAID;\n case InvoiceStatus.VOID:\n return InternalInvoiceStatus.VOID;\n default:\n return InternalInvoiceStatus.DRAFT;\n }\n}\n\nfunction invoiceDateFilterFieldToApi(dateField: InvoiceDateField): ListInvoicesRequestFiltersDateFilterDateField {\n switch (dateField) {\n default:\n return ListInvoicesRequestFiltersDateFilterDateField.CREATED;\n }\n}\n\nfunction convertApiOrigin(s: string): InvoiceOrigin {\n switch (s) {\n case InvoiceOriginAPI.MANUAL:\n return InvoiceOrigin.MANUAL;\n case InvoiceOriginAPI.SALES_ORDER:\n return InvoiceOrigin.SALES_ORDER;\n case InvoiceOriginAPI.RENEWAL:\n return InvoiceOrigin.RENEWAL;\n case InvoiceOriginAPI.TEMPLATE:\n return InvoiceOrigin.TEMPLATE;\n default:\n return InvoiceOrigin.UNSET;\n }\n}\n\nexport function convertApiAppliedTaxRate(at: ApiAppliedTaxRate): AppliedTaxRate | undefined {\n if (!at) {\n return undefined;\n }\n return {\n amount: at.amount || 0,\n taxRateId: at.taxRateId || '',\n percentage: at.percentage || 0,\n name: at.name || '',\n description: at.description || '',\n };\n}\n\nexport function convertAppliedTaxRate(at: AppliedTaxRate): ApiAppliedTaxRate | undefined {\n if (!at) {\n return undefined;\n }\n return new ApiAppliedTaxRate({\n amount: at.amount || 0,\n taxRateId: at.taxRateId || '',\n });\n}\n\nexport function convertApiTaxRate(tr: ApiTaxRate): TaxRate | undefined {\n if (!tr) {\n return undefined;\n }\n return {\n id: tr.id || '',\n name: tr.name || '',\n description: tr.description || '',\n percentage: tr.percentage || 0,\n };\n}\n\nexport function convertTaxRate(tr: TaxRate): ApiTaxRate | undefined {\n if (!tr) {\n return undefined;\n }\n return new ApiTaxRate({\n id: tr.id,\n name: tr.name,\n description: tr.description,\n percentage: tr.percentage,\n });\n}\n\nexport interface InvoiceCustomerAddress {\n address?: string;\n address2?: string;\n city?: string;\n state?: string;\n zip?: string;\n country?: string;\n}\n\nfunction convertApiCustomerAddress(ca: ApiInvoiceCustomerAddress): InvoiceCustomerAddress {\n return {\n address: ca?.address || '',\n address2: ca?.address2 || '',\n city: ca?.city || '',\n state: ca?.state || '',\n zip: ca?.zip || '',\n country: ca?.country || '',\n };\n}\n\nexport function convertApiInvoiceItem(ii: ApiInvoiceItem): InvoiceItem | undefined {\n if (!ii) {\n return undefined;\n }\n\n const appliedTaxes: AppliedTaxRate[] = (ii.appliedTaxes || [])\n .map((at) => convertApiAppliedTaxRate(at))\n .filter(isAppliedTaxRate);\n const taxRates: TaxRate[] = (ii.taxRates || []).map((tr) => convertApiTaxRate(tr)).filter(isTaxRate);\n const appliedDiscounts: AppliedDiscount[] = (ii.discounts || []).map((ad) => appliedDiscountFromApi(ad));\n\n return {\n id: ii.id || '',\n sku: ii.sku || '',\n amount: ii.amount || 0,\n quantity: ii.quantity || 0,\n description: ii.description || '',\n subtotal: ii.subtotal || 0,\n total: ii.total || 0,\n appliedDiscounts: appliedDiscounts || [],\n appliedTaxes: appliedTaxes || [],\n taxRates: taxRates || [],\n bundleId: ii.bundleId || '',\n bundleInstanceId: ii.bundleInstanceId || '',\n };\n}\n\nexport function convertInvoiceItem(ii: InvoiceItem): ApiInvoiceItem | undefined {\n if (!ii) {\n return undefined;\n }\n\n return new ApiInvoiceItem({\n sku: ii.sku,\n amount: ii.amount,\n quantity: ii.quantity,\n description: ii.description,\n total: ii.total,\n });\n}\n\nexport function convertApiInvoice(i: ApiInvoice): Invoice {\n const zeroDate = new Date('0001-01-01T00:00:00Z').valueOf();\n const invoiceItems: InvoiceItem[] = (i.items || []).map((ii) => convertApiInvoiceItem(ii)).filter(isInvoiceItem);\n const appliedTaxes: AppliedTaxRate[] = (i.appliedTaxes || [])\n .map((at) => convertApiAppliedTaxRate(at))\n .filter(isAppliedTaxRate);\n const taxRates: TaxRate[] = (i.defaultTaxRates || []).map((tr) => convertApiTaxRate(tr)).filter(isTaxRate);\n const appliedBundles: AppliedBundle[] = (i.appliedBundles || [])\n .map((at) => convertApiAppliedBundle(at))\n .filter(isAppliedBundle);\n const notes: Note[] = (i.notes || []).map((n) => convertAPINote(n)).filter(isNote);\n\n return {\n id: i.id || '',\n number: i.number || '',\n customerId: i.customerId || '',\n customerName: i.customerName || '',\n contactId: i.contactId || '',\n status: convertApiStatus(i.status),\n subtotal: i.subtotal || 0,\n total: i.total || 0,\n discountTotal: i.amountDiscount || 0,\n paid: i.paid && i.paid.valueOf() !== zeroDate ? i.paid : undefined,\n issued: i.issued && i.issued.valueOf() !== zeroDate ? i.issued : undefined,\n due: i.due && i.due.valueOf() !== zeroDate ? i.due : undefined,\n voided: i.voided && i.voided.valueOf() !== zeroDate ? i.voided : undefined,\n created: i.created.valueOf() !== zeroDate ? i.created : undefined,\n updated: i.updated.valueOf() !== zeroDate ? i.updated : undefined,\n autoAdvance: i.autoAdvance.valueOf() !== zeroDate ? i.autoAdvance : undefined,\n items: invoiceItems || [],\n currency: currencyFromApi(i.currency),\n orderId: i.orderId || '',\n appliedTaxes: appliedTaxes || [],\n defaultTaxRates: taxRates || [],\n appliedBundles: appliedBundles || [],\n origin: convertApiOrigin(i.origin),\n collectionMethod: collectionMethodFromApi(i.collectionMethod),\n memo: i.memo || '',\n defaultPaymentMethod: i.defaultPaymentMethod || '',\n customerAddress: convertApiCustomerAddress(i.customerAddress),\n externalCustomerIdentifier: i.externalCustomerIdentifier || '',\n notes: notes || [],\n additionalContactIds: i.additionalContactIds || [],\n paymentMethodTypes: paymentTypesFromApi(i.paymentMethodTypes),\n };\n}\n\nexport function listInvoiceFiltersToApi(filters: ListInvoicesFilter): ListInvoicesRequestFilters {\n return new ListInvoicesRequestFilters({\n ...filters,\n statuses: (filters.statuses || []).map((s) => invoiceStatusToApi(s)),\n origins: filters.origins,\n collectionMethods: filters.collectionMethods,\n dateFilter: {\n dateGte: filters.dateFilter?.dateGte,\n dateLte: filters.dateFilter?.dateLte,\n dateField: filters.dateFilter?.dateField ? invoiceDateFilterFieldToApi(filters.dateFilter.dateField) : undefined,\n },\n });\n}\n","import { HttpClient, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {\n AddBundleRequest,\n AddBundleResponse,\n AddLineItemRequest,\n AddLineItemResponse,\n Invoice as ApiInvoice,\n ChargeInvoiceRequest,\n CreateInvoiceRequest,\n CreateInvoiceResponse,\n CreatePaymentLinkRequest,\n CreatePaymentLinkResponse,\n DeleteInvoiceRequest,\n DeleteLineItemRequest,\n DeleteLineItemResponse,\n DuplicateInvoiceRequest,\n DuplicateInvoiceResponse,\n FieldMask,\n GetInvoiceRequest,\n GetInvoiceResponse,\n GetUpcomingInvoicePreviewRequest,\n GetUpcomingInvoicePreviewResponse,\n HostService,\n InvoiceApiService,\n ListInvoicesRequest,\n PagedRequestOptions,\n PayInvoiceRequest,\n PaymentLinkItem,\n RemoveBundleRequest,\n RemoveBundleResponse,\n SendInvoiceRequest,\n UpdateBundleRequest,\n UpdateBundleResponse,\n UpdateDefaultTaxRatesRequest,\n UpdateDefaultTaxRatesResponse,\n UpdateInvoiceRequest,\n UpdateInvoiceResponse,\n UpdateLineItemRequest,\n UpdateLineItemResponse,\n VoidInvoiceRequest,\n} from '@vendasta/billing';\nimport { SSOService, newPartnerServiceContext } from '@vendasta/sso';\nimport { Owner, UrlShortenerService } from '@vendasta/url-shortener';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, share, switchMap, take } from 'rxjs/operators';\nimport { PagedResponse } from '../core';\nimport {\n CollectionMethod,\n collectionMethodToApi,\n PaymentMethodType,\n paymentMethodTypesToApi,\n} from '../retail-customer-configuration';\nimport { Invoice, InvoicePDFType, convertApiInvoice, isInvoice, listInvoiceFiltersToApi } from './invoice';\nimport { ListInvoicesFilter } from './list-invoice';\nimport { AppliedDiscount } from '../applied_discount';\nimport { appliedDiscountToApi } from '../applied_discount/applied_discount';\n\n@Injectable({ providedIn: 'root' })\nexport class InvoiceService {\n constructor(\n private hostService: HostService,\n private http: HttpClient,\n private invoiceApiService: InvoiceApiService,\n private ssoService: SSOService,\n private urlShortenerService: UrlShortenerService,\n ) {}\n\n addBundle(merchantId: string, invoiceId: string, bundleId: string): Observable {\n return this.invoiceApiService\n .addBundle(\n new AddBundleRequest({\n merchantId,\n invoiceId,\n bundleId,\n }),\n )\n .pipe(map((res: AddBundleResponse) => convertApiInvoice(res.invoice)));\n }\n\n addLineItem(\n merchantId: string,\n invoiceId: string,\n sku: string,\n amount: number,\n quantity: number,\n description: string,\n taxRates: string[],\n appliedDiscounts?: AppliedDiscount[],\n ): Observable {\n return this.invoiceApiService\n .addLineItem(\n new AddLineItemRequest({\n merchantId,\n invoiceId,\n sku,\n amount,\n quantity,\n description,\n taxRates,\n discounts: (appliedDiscounts || []).map((d) => appliedDiscountToApi(d)),\n }),\n )\n .pipe(map((res: AddLineItemResponse) => convertApiInvoice(res.invoice)));\n }\n\n charge(\n merchantId: string,\n customerId: string,\n invoiceId: string,\n paymentMethodId: string,\n ): Observable> {\n return this.invoiceApiService.charge(\n new ChargeInvoiceRequest({\n merchantId,\n customerId,\n invoiceId,\n paymentMethodId,\n }),\n );\n }\n\n create(merchantId: string, customerId: string, orderId?: string, currencyCode?: string): Observable {\n return this.invoiceApiService\n .create(\n new CreateInvoiceRequest({\n merchantId: merchantId,\n customerId: customerId,\n orderId: orderId,\n currencyCode: currencyCode,\n }),\n )\n .pipe(map((res: CreateInvoiceResponse) => (res ? res.invoiceId : '')));\n }\n\n createPaymentLink(\n merchantId: string,\n customerId: string,\n lineItems: PaymentLinkItem[],\n currencyCode = '',\n ): Observable {\n return this.invoiceApiService\n .createPaymentLink(\n new CreatePaymentLinkRequest({\n merchantId: merchantId,\n customerId: customerId,\n lineItems: lineItems,\n currencyCode: currencyCode,\n }),\n )\n .pipe(map((res: CreatePaymentLinkResponse) => (res ? res.invoiceId : '')));\n }\n\n delete(merchantId: string, invoiceId: string): Observable> {\n return this.invoiceApiService.delete(\n new DeleteInvoiceRequest({\n merchantId,\n invoiceId,\n }),\n );\n }\n\n deleteLineItem(merchantId: string, invoiceId: string, id: string): Observable {\n return this.invoiceApiService\n .deleteLineItem(\n new DeleteLineItemRequest({\n merchantId,\n invoiceId,\n id,\n }),\n )\n .pipe(map((res: DeleteLineItemResponse) => convertApiInvoice(res.invoice)));\n }\n\n exportCSV(merchantId: string, filters?: ListInvoicesFilter): Observable {\n const url = `${this.hostService.hostWithScheme}/invoice/export`;\n return this.http\n .post(\n url,\n {\n merchant_id: merchantId,\n filters: filters,\n },\n {\n observe: 'body',\n responseType: 'blob',\n withCredentials: true,\n },\n )\n .pipe(share());\n }\n\n generatePDF(merchantId: string, invoiceId: string, documentType: InvoicePDFType): Observable {\n const url = `${this.hostService.hostWithScheme}/invoice/generate-pdf`;\n return this.http\n .post(\n url,\n {\n merchant_id: merchantId,\n invoice_id: invoiceId,\n document_type: documentType,\n },\n {\n observe: 'body',\n responseType: 'blob',\n },\n )\n .pipe(share());\n }\n\n get(merchantId: string, invoiceId: string): Observable {\n return this.invoiceApiService\n .get(\n new GetInvoiceRequest({\n merchantId,\n invoiceId,\n }),\n )\n .pipe(map((res: GetInvoiceResponse) => convertApiInvoice(res.invoice)));\n }\n\n list(filters: ListInvoicesFilter, cursor: string, pageSize: number): Observable> {\n const req = new ListInvoicesRequest({\n filters: listInvoiceFiltersToApi(filters),\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.invoiceApiService.list(req).pipe(\n map((response) => {\n const invoices = (response.invoices || []).map((item) => convertApiInvoice(item)).filter(isInvoice);\n return new PagedResponse(invoices, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n pay(merchantId: string, invoiceId: string, reason: string): Observable> {\n return this.invoiceApiService.pay(\n new PayInvoiceRequest({\n merchantId,\n invoiceId,\n reason,\n }),\n );\n }\n\n preview(merchantId: string, invoiceId: string): Observable {\n const url = `${this.hostService.hostWithScheme}/retail-invoice/preview`;\n return this.http.post(\n url,\n {\n merchant_id: merchantId,\n invoice_id: invoiceId,\n },\n {\n responseType: 'text',\n withCredentials: true,\n },\n );\n }\n\n getUpcomingPreview(merchantId: string, customerId: string, invoiceDate?: Date): Observable {\n return this.invoiceApiService\n .getUpcomingInvoicePreview(\n new GetUpcomingInvoicePreviewRequest({\n merchantId,\n customerId,\n invoiceDate,\n }),\n )\n .pipe(map((res: GetUpcomingInvoicePreviewResponse) => convertApiInvoice(res.invoice)));\n }\n\n removeBundle(\n merchantId: string,\n invoiceId: string,\n bundleId: string,\n bundleInstanceId?: string,\n ): Observable {\n return this.invoiceApiService\n .removeBundle(\n new RemoveBundleRequest({\n merchantId,\n invoiceId,\n bundleId,\n bundleInstanceId,\n }),\n )\n .pipe(map((res: RemoveBundleResponse) => convertApiInvoice(res.invoice)));\n }\n\n send(merchantId: string, invoiceId: string, emailAddresses: string[]): Observable> {\n return this.invoiceApiService.send(\n new SendInvoiceRequest({\n merchantId,\n invoiceId,\n emailAddresses,\n }),\n );\n }\n\n updateBundle(\n merchantId: string,\n invoiceId: string,\n bundleId: string,\n hideBundleItems: boolean,\n bundleInstanceId?: string,\n ): Observable {\n return this.invoiceApiService\n .updateBundle(\n new UpdateBundleRequest({\n merchantId,\n invoiceId,\n bundleId,\n hideBundleItems,\n bundleInstanceId,\n }),\n )\n .pipe(map((res: UpdateBundleResponse) => convertApiInvoice(res.invoice)));\n }\n\n updateDueDate(merchantId: string, id: string, due: Date): Observable {\n const pbInvoice = new ApiInvoice({\n merchantId,\n id,\n due,\n });\n\n const fm = new FieldMask({\n paths: ['due'],\n });\n\n return this.update(pbInvoice, fm);\n }\n\n updateIssuedDate(merchantId: string, id: string, issued: Date): Observable {\n const pbInvoice = new ApiInvoice({\n merchantId,\n id,\n issued,\n });\n\n const fm = new FieldMask({\n paths: ['issued'],\n });\n return this.update(pbInvoice, fm);\n }\n\n updateContact(merchantId: string, id: string, contactId: string): Observable {\n const pbInvoice = new ApiInvoice({\n merchantId,\n id,\n contactId,\n });\n\n const fm = new FieldMask({\n paths: ['contactId'],\n });\n\n return this.update(pbInvoice, fm);\n }\n\n updateAdditionalContacts(merchantId: string, id: string, additionalContactIds: string[]): Observable {\n const pbInvoice = new ApiInvoice({\n merchantId,\n id,\n additionalContactIds,\n });\n\n const fm = new FieldMask({\n paths: ['additionalContactIds'],\n });\n\n return this.update(pbInvoice, fm);\n }\n\n updateCollectionMethod(merchantId: string, id: string, collectionMethod: CollectionMethod): Observable {\n const apiCollectionMethod = collectionMethodToApi(collectionMethod);\n const pbInvoice = new ApiInvoice({\n merchantId,\n id,\n collectionMethod: apiCollectionMethod,\n });\n\n const fm = new FieldMask({\n paths: ['collectionMethod'],\n });\n\n return this.update(pbInvoice, fm);\n }\n\n updateMemo(merchantId: string, id: string, memo: string): Observable {\n const pbInvoice = new ApiInvoice({\n merchantId,\n id,\n memo,\n });\n\n const fm = new FieldMask({\n paths: ['memo'],\n });\n\n return this.update(pbInvoice, fm);\n }\n\n updatePaymentMethodTypes(\n merchantId: string,\n id: string,\n paymentMethodTypes: PaymentMethodType[],\n ): Observable {\n const apiPaymentMethodTypes = paymentMethodTypesToApi(paymentMethodTypes);\n const pbInvoice = new ApiInvoice({\n merchantId,\n id,\n paymentMethodTypes: apiPaymentMethodTypes,\n });\n\n const fm = new FieldMask({\n paths: ['paymentMethodTypes'],\n });\n\n return this.update(pbInvoice, fm);\n }\n\n updateDefaultPaymentMethod(merchantId: string, id: string, defaultPaymentMethod: string): Observable {\n const pbInvoice = new ApiInvoice({\n merchantId,\n id,\n defaultPaymentMethod,\n });\n\n const fm = new FieldMask({\n paths: ['defaultPaymentMethod'],\n });\n\n return this.update(pbInvoice, fm);\n }\n\n updateDefaultTaxes(merchantId: string, invoiceId: string, taxRateIds: string[]): Observable {\n return this.invoiceApiService\n .updateDefaultTaxRates(\n new UpdateDefaultTaxRatesRequest({\n merchantId,\n invoiceId,\n taxRateIds,\n }),\n )\n .pipe(map((res: UpdateDefaultTaxRatesResponse) => convertApiInvoice(res.invoice)));\n }\n\n updateLineItem(\n merchantId: string,\n invoiceId: string,\n id: string,\n sku: string,\n amount: number,\n quantity: number,\n description: string,\n taxRates: string[],\n appliedDiscounts?: AppliedDiscount[],\n ): Observable {\n return this.invoiceApiService\n .updateLineItem(\n new UpdateLineItemRequest({\n merchantId,\n invoiceId,\n id,\n sku,\n amount,\n quantity,\n description,\n taxRates,\n discounts: (appliedDiscounts || []).map((d) => appliedDiscountToApi(d)),\n }),\n )\n .pipe(map((res: UpdateLineItemResponse) => convertApiInvoice(res.invoice)));\n }\n\n private update(invoice: ApiInvoice, mask: FieldMask): Observable {\n return this.invoiceApiService\n .update(\n new UpdateInvoiceRequest({\n invoice: invoice,\n fieldMask: mask,\n }),\n )\n .pipe(map((res: UpdateInvoiceResponse) => convertApiInvoice(res.invoice)));\n }\n\n void(merchantId: string, invoiceId: string, reason: string): Observable> {\n return this.invoiceApiService.void(\n new VoidInvoiceRequest({\n merchantId,\n invoiceId,\n reason,\n }),\n );\n }\n\n duplicate(merchantId: string, invoiceId: string): Observable {\n return this.invoiceApiService\n .duplicate(\n new DuplicateInvoiceRequest({\n merchantId,\n invoiceId,\n }),\n )\n .pipe(map((res: DuplicateInvoiceResponse) => (res ? res.invoiceId : '')));\n }\n\n generateShortLink(merchantId: string, invoiceId: string): Observable {\n return this.ssoService\n .getEntryUrl('VBC', newPartnerServiceContext(merchantId), {\n path: `/invoice/${merchantId}/${invoiceId}`,\n skipGatewayAuthentication: true,\n })\n .pipe(\n switchMap((url) => {\n return this.urlShortenerService.createLink('', url, Owner.OWNER_UNTRACKED, '', false).pipe(\n catchError(() => of(null)),\n map((result) => {\n if (!result) {\n return url;\n }\n return `https://${result.domain}${result.shortCode}`;\n }),\n );\n }),\n catchError(() => {\n throw new Error('failed to generate short link');\n }),\n take(1),\n );\n }\n}\n","import { AppliedBundle } from '../applied_bundle';\nimport { RecurringInvoice, RecurringInvoiceBundle, RecurringInvoiceLineItem } from '../recurring_invoice';\nimport { TaxRate } from '../tax-rate';\nimport { AppliedTaxRate, Invoice, InvoiceItem, InvoiceStatus } from './invoice';\n\nexport function taxRatesFromLineItem(item: RecurringInvoiceLineItem, allTaxRates: TaxRate[]): TaxRate[] {\n const invoiceLineItemTaxRates: TaxRate[] = [];\n item.taxRateIds?.forEach((taxId) => {\n const taxRate = allTaxRates.find((t) => t.id === taxId);\n if (taxRate) {\n invoiceLineItemTaxRates.push({\n id: taxId,\n countryCode: taxRate.countryCode,\n stateCode: taxRate.stateCode,\n name: taxRate.name,\n description: taxRate.description,\n percentage: taxRate.percentage,\n });\n }\n });\n return invoiceLineItemTaxRates;\n}\n\nexport function invoiceLineItemFromLineItem(\n item: RecurringInvoiceLineItem,\n taxRates: TaxRate[],\n bundleId: string,\n): InvoiceItem {\n const invoiceTaxRates = taxRatesFromLineItem(item, taxRates);\n const subtotal = item.quantity * item.unitPrice;\n\n const appliedRates: AppliedTaxRate[] = [];\n let taxTotal = 0;\n invoiceTaxRates.forEach((t) => {\n if (!t) {\n return;\n }\n const taxAmount = t.percentage ? subtotal * (t.percentage / 100) : 0;\n taxTotal += taxAmount;\n appliedRates.push({\n amount: taxAmount,\n taxRateId: t.id,\n percentage: t.percentage,\n name: t.description ? `${t.name} - ${t.description} (${t.percentage}%)` : `${t.name} (${t.percentage}%)`,\n });\n });\n\n return {\n sku: item.sku || '',\n amount: item.unitPrice,\n quantity: item.quantity,\n description: item.name,\n subtotal: subtotal,\n total: subtotal + taxTotal,\n appliedTaxes: appliedRates,\n taxRates: invoiceTaxRates,\n bundleId: bundleId,\n } as InvoiceItem;\n}\n\nexport function invoiceFromRecurringInvoice(recurringInvoice: RecurringInvoice, taxRates: TaxRate[]): Invoice {\n const invoiceLineItems: InvoiceItem[] = [];\n const appliedBundles: AppliedBundle[] = [];\n let subtotal = 0;\n let total = 0;\n\n let i = 0;\n recurringInvoice.items.forEach((item) => {\n if (item instanceof RecurringInvoiceLineItem) {\n invoiceLineItems.push(invoiceLineItemFromLineItem(item, taxRates, ''));\n } else if (item instanceof RecurringInvoiceBundle) {\n const tempBundleId = String(i);\n i++;\n const bundleInvoiceItems = item.lineItems.map((li) => invoiceLineItemFromLineItem(li, taxRates, tempBundleId));\n appliedBundles.push({\n name: item.name,\n hideBundleItems: item.hideLineItems,\n bundleId: tempBundleId,\n });\n invoiceLineItems.push(...bundleInvoiceItems);\n }\n });\n\n const taxTotals = new Map();\n invoiceLineItems.forEach((li) => {\n total += li.total;\n subtotal += li.subtotal;\n (li.appliedTaxes || []).forEach((t) => {\n const tax = { ...t };\n if (!tax.taxRateId) {\n return;\n }\n if (!taxTotals.has(tax.taxRateId)) {\n taxTotals.set(tax.taxRateId, tax);\n } else {\n const taxValue = taxTotals.get(tax.taxRateId) as AppliedTaxRate;\n if (taxValue.amount !== undefined) {\n taxValue.amount += tax?.amount || 0;\n } else {\n taxValue.amount = 0;\n }\n taxTotals.set(tax.taxRateId, taxValue);\n }\n });\n });\n\n const netD = recurringInvoice.netD ? recurringInvoice.netD : 7;\n const dueDate = new Date(recurringInvoice.nextIssue);\n dueDate.setDate(dueDate.getDate() + netD);\n\n return {\n customerId: recurringInvoice.customerId,\n status: InvoiceStatus.DRAFT,\n subtotal: subtotal,\n total: total,\n items: invoiceLineItems,\n appliedBundles: appliedBundles,\n appliedTaxes: [...taxTotals.values()],\n currency: recurringInvoice.currencyCode,\n issued: recurringInvoice.nextIssue,\n due: dueDate,\n contactId: recurringInvoice.recipientUserId,\n collectionMethod: recurringInvoice.collectionMethod,\n defaultPaymentMethod: recurringInvoice.paymentProcessorId,\n memo: recurringInvoice.memo,\n } as Invoice;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map, mapTo } from 'rxjs/operators';\nimport { convertApiPaymentCardDetails, PaymentCard } from '../payment-card/payment-card';\nimport {\n DeletePaymentCardRequest,\n ListPaymentCardsRequest,\n ListPaymentCardsResponse,\n PaymentMethodApiService,\n SetDefaultPaymentMethodRequest,\n} from '@vendasta/billing';\n\n@Injectable({ providedIn: 'root' })\nexport class PaymentMethodService {\n constructor(private apiService: PaymentMethodApiService) {}\n\n listPaymentCards(merchantId: string, customerId: string): Observable {\n const req = new ListPaymentCardsRequest({\n merchantId,\n customerId,\n });\n return this.apiService.listPaymentCards(req).pipe(\n map((resp: ListPaymentCardsResponse) => {\n return (resp && resp.paymentCard ? resp.paymentCard : []).map((c) => convertApiPaymentCardDetails(c));\n }),\n );\n }\n\n deletePaymentCard(merchantId: string, cardId: string): Observable {\n const req = new DeletePaymentCardRequest({\n merchantId,\n cardId,\n });\n return this.apiService.deletePaymentCard(req).pipe(mapTo(true));\n }\n\n setDefaultPaymentCard(merchantId: string, customerId: string, paymentMethodId: string): Observable {\n const req = new SetDefaultPaymentMethodRequest({\n merchantId,\n customerId,\n paymentMethodId,\n });\n return this.apiService.setDefaultPaymentMethod(req).pipe(mapTo(true));\n }\n}\n","import {\n RetentionMetrics as RetentionMetricsApi,\n ListSubscriptionRetentionByGroupResponseSubscriptionRetentionByGroup as RetentionMetricsByGroupApi,\n} from '@vendasta/billing';\n\nexport interface RetentionMetrics {\n sku: string;\n productName: string;\n startingCount: number;\n activations: number;\n deactivations: number;\n churn: number;\n retention: number;\n}\n\nexport interface RetentionMetricsByGroup {\n groupID: string;\n metrics: RetentionMetrics[];\n}\n\nexport interface ListSubscriptionRetentionFilters {\n start?: Date;\n end?: Date;\n}\n\nexport function subscriptionMetricFromAPI(mApi: RetentionMetricsApi): RetentionMetrics {\n return {\n sku: mApi.sku || '',\n productName: mApi.productName || '',\n startingCount: mApi.startingCount || 0,\n activations: mApi.activations || 0,\n deactivations: mApi.deactivations || 0,\n churn: mApi.churn || 0.0,\n retention: mApi.retention || 0.0,\n };\n}\n\nexport function subscriptionMetricByGroupFromAPI(mApi: RetentionMetricsByGroupApi): RetentionMetricsByGroup {\n const metrics = (mApi.subscriptionMetrics || []).map((metric) => subscriptionMetricFromAPI(metric));\n return {\n groupID: mApi.groupId || '',\n metrics: metrics || [],\n };\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { PagedResponse } from '../core';\nimport {\n ListSubscriptionRetentionByGroupResponse,\n ListSubscriptionRetentionBySKUResponse,\n ListSubscriptionRetentionRequest,\n ProductSummaryApiService,\n PagedRequestOptions,\n} from '@vendasta/billing';\nimport {\n ListSubscriptionRetentionFilters,\n subscriptionMetricFromAPI,\n subscriptionMetricByGroupFromAPI,\n RetentionMetrics,\n RetentionMetricsByGroup,\n} from './subscription-retention';\n\n@Injectable({ providedIn: 'root' })\nexport class ProductSummaryService {\n constructor(private productSummaryApi: ProductSummaryApiService) {}\n\n listSubscriptionRetentionBySKU(\n merchantID: string,\n filters: ListSubscriptionRetentionFilters,\n cursor: string,\n pageSize: number,\n ): Observable> {\n const req = new ListSubscriptionRetentionRequest({\n merchantId: merchantID,\n filters,\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.productSummaryApi.listSubscriptionRetentionBySku(req).pipe(\n map((response: ListSubscriptionRetentionBySKUResponse) => {\n const metrics = (response.subscriptionMetrics || []).map((metric) => subscriptionMetricFromAPI(metric));\n return new PagedResponse(metrics, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n listSubscriptionRetentionByGroup(\n merchantID: string,\n filters: ListSubscriptionRetentionFilters,\n cursor: string,\n pageSize: number,\n ): Observable> {\n const req = new ListSubscriptionRetentionRequest({\n merchantId: merchantID,\n filters,\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.productSummaryApi.listSubscriptionRetentionByGroup(req).pipe(\n map((response: ListSubscriptionRetentionByGroupResponse) => {\n const metricsByGroup = (response.metricsByGroup || []).map((m) => subscriptionMetricByGroupFromAPI(m));\n return new PagedResponse(metricsByGroup, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n}\n","import {\n ListPurchaseRequestListPurchaseBillingStrategyFilterInterface,\n ListPurchaseRequestState,\n PurchaseStatus,\n} from '@vendasta/billing';\n\nexport interface ListPurchaseFilter {\n merchantId?: string;\n purchaseId?: string;\n start?: Date;\n end?: Date;\n billingStrategyFilter?: ListPurchaseRequestListPurchaseBillingStrategyFilterInterface;\n state?: ListPurchaseRequestState;\n minPrice?: number;\n status?: PurchaseStatus;\n includeVoided?: boolean;\n dunningPauseStart?: Date;\n}\n\ninterface ListPurchaseFilterHttp {\n merchantId?: string;\n purchaseId?: string;\n start?: string;\n end?: string;\n billingStrategyFilter?: {\n billingStrategy?: number[];\n };\n state?: number;\n minPrice?: number;\n status?: number;\n includeVoided?: boolean;\n dunningPauseStart?: string;\n}\n\nexport function listPurchaseFiltersToHTTPJson(filters: ListPurchaseFilter): ListPurchaseFilterHttp {\n return {\n merchantId: filters.merchantId,\n purchaseId: filters.purchaseId,\n start: filters.start ? filters.start.toISOString() : undefined,\n end: filters.end ? filters.end.toISOString() : undefined,\n billingStrategyFilter: filters.billingStrategyFilter\n ? {\n billingStrategy: filters.billingStrategyFilter.billingStrategy\n ? filters.billingStrategyFilter.billingStrategy.map((bs) => bs.valueOf())\n : [],\n }\n : undefined,\n state: filters.state?.valueOf() || undefined,\n minPrice: filters.minPrice,\n status: filters.status,\n includeVoided: filters.includeVoided,\n dunningPauseStart: filters.dunningPauseStart ? filters.dunningPauseStart.toISOString() : undefined,\n };\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { HostService } from '@vendasta/billing';\nimport { Observable } from 'rxjs';\nimport { share } from 'rxjs/operators';\nimport { ListPurchaseFilter, listPurchaseFiltersToHTTPJson } from './list-purchases';\n\n@Injectable({ providedIn: 'root' })\nexport class PurchaseService {\n constructor(private hostService: HostService, private http: HttpClient) {}\n\n exportCSV(filters: ListPurchaseFilter): Observable {\n const jsonFilters = listPurchaseFiltersToHTTPJson(filters);\n return this.http\n .post(\n `${this.hostService.hostWithScheme}/purchase/export-csv`,\n { filters: jsonFilters },\n {\n observe: 'body',\n responseType: 'blob',\n withCredentials: true,\n },\n )\n .pipe(share());\n }\n}\n","import { Currency, currencyFromApi } from '../pricing';\nimport {\n SalesCreditNoteStatus as InternalSalesCreditNoteStatus,\n SalesCreditNoteInterface,\n ListSalesCreditNoteRequestListSalesCreditNoteFilters,\n} from '@vendasta/billing';\nexport interface SalesCreditNote {\n creditNoteId: string;\n externalId: string;\n creditNoteNumber: string;\n merchantId: string;\n creditNoteReason: string;\n creditNoteDate?: Date;\n dueDate?: Date;\n currency: Currency;\n total: number;\n outstanding?: number;\n invoiceId: string;\n invoiceNumber: string;\n status: SalesCreditNoteStatus;\n paymentStatus?: string;\n}\n\nexport enum SalesCreditNoteStatus {\n InProgress = 'IN_PROGRESS',\n ReadyToPost = 'READY_TO_POST',\n Complete = 'COMPLETE',\n Discarded = 'DISCARDED',\n}\n\nexport interface ListFilters {\n merchantId?: string;\n statuses?: SalesCreditNoteStatus[];\n}\n\nexport function salesCreditNoteFromApi(siApi: SalesCreditNoteInterface): SalesCreditNote {\n return {\n creditNoteId: siApi.creditNoteId || '',\n externalId: siApi.externalId || '',\n creditNoteNumber: siApi.creditNoteNumber || '',\n merchantId: siApi.merchantId || '',\n creditNoteReason: siApi.creditNoteReason || '',\n creditNoteDate: siApi.creditNoteDate ? new Date(siApi.creditNoteDate) : undefined,\n dueDate: siApi.dueDate ? new Date(siApi.dueDate) : undefined,\n currency: currencyFromApi(siApi.currency),\n total: siApi.total || 0,\n outstanding: siApi.outstanding || 0,\n invoiceId: siApi.invoiceId || '',\n invoiceNumber: siApi.invoiceNumber || '',\n status: salesCreditNoteStatusFromApi(siApi.status),\n paymentStatus: siApi.paymentStatus,\n };\n}\n\nexport function listSalesCreditNoteFiltersToApi(\n filters: ListFilters,\n): ListSalesCreditNoteRequestListSalesCreditNoteFilters {\n return new ListSalesCreditNoteRequestListSalesCreditNoteFilters({\n ...filters,\n statuses: (filters.statuses || []).map((s) => salesCreditNoteStatusToApi(s)),\n });\n}\n\nfunction salesCreditNoteStatusFromApi(sApi: InternalSalesCreditNoteStatus | undefined): SalesCreditNoteStatus {\n switch (sApi) {\n case InternalSalesCreditNoteStatus.SALES_CREDIT_NOTE_STATUS_READY_TO_POST:\n return SalesCreditNoteStatus.ReadyToPost;\n case InternalSalesCreditNoteStatus.SALES_CREDIT_NOTE_STATUS_COMPLETE:\n return SalesCreditNoteStatus.Complete;\n case InternalSalesCreditNoteStatus.SALES_CREDIT_NOTE_STATUS_DISCARDED:\n return SalesCreditNoteStatus.Discarded;\n }\n return SalesCreditNoteStatus.InProgress;\n}\n\nfunction salesCreditNoteStatusToApi(status: SalesCreditNoteStatus): InternalSalesCreditNoteStatus {\n switch (status) {\n case SalesCreditNoteStatus.ReadyToPost:\n return InternalSalesCreditNoteStatus.SALES_CREDIT_NOTE_STATUS_READY_TO_POST;\n case SalesCreditNoteStatus.Complete:\n return InternalSalesCreditNoteStatus.SALES_CREDIT_NOTE_STATUS_COMPLETE;\n case SalesCreditNoteStatus.Discarded:\n return InternalSalesCreditNoteStatus.SALES_CREDIT_NOTE_STATUS_DISCARDED;\n }\n return InternalSalesCreditNoteStatus.SALES_CREDIT_NOTE_STATUS_IN_PROGRESS;\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError as observableThrowError } from 'rxjs';\nimport { catchError, map, share } from 'rxjs/operators';\nimport { PagedResponse } from '../core';\nimport {\n CreateSalesCreditNoteRequest,\n HostService,\n ListSalesCreditNoteRequest,\n PagedRequestOptions,\n SalesCreditNoteApiService,\n} from '@vendasta/billing';\nimport {\n ListFilters,\n listSalesCreditNoteFiltersToApi,\n SalesCreditNote,\n salesCreditNoteFromApi,\n} from './sales-credit-note';\n\n@Injectable({ providedIn: 'root' })\nexport class SalesCreditNoteService {\n constructor(\n private hostService: HostService,\n private http: HttpClient,\n private salesCreditNoteApi: SalesCreditNoteApiService,\n ) {}\n\n downloadPdf(salesCreditNoteId: string, merchantId?: string): Observable {\n let params;\n if (merchantId) {\n params = { salesCreditNoteId, merchantId };\n } else {\n params = { salesCreditNoteId };\n }\n\n return this.http\n .get(`${this.hostService.hostWithScheme}/sales-credit-note-pdf`, {\n observe: 'body',\n params: params,\n responseType: 'blob',\n withCredentials: true,\n })\n .pipe(share(), catchError(this.handleDownloadPDFError.bind(this)));\n }\n\n createAutomatedCreditNote(\n merchantId: string,\n creditNoteReason: string,\n total: number,\n sku: string,\n ): Observable {\n const req = new CreateSalesCreditNoteRequest({\n merchantId,\n creditNoteReason,\n total,\n sku,\n });\n return this.salesCreditNoteApi.create(req).pipe(map(() => null));\n }\n\n list(filters: ListFilters, cursor: string, pageSize: number): Observable> {\n const req = new ListSalesCreditNoteRequest({\n filters: listSalesCreditNoteFiltersToApi(filters),\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n });\n return this.salesCreditNoteApi.list(req).pipe(\n map((response) => {\n const salesCreditNotes = (response.creditNote || []).map((i) => salesCreditNoteFromApi(i));\n return new PagedResponse(salesCreditNotes, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n private handleDownloadPDFError(error: HttpErrorResponse): Observable {\n if (error.error instanceof ErrorEvent) {\n console.error(`An error occurred:`, error.error.message);\n } else {\n console.error(`Server returned ${error.message}`);\n }\n return observableThrowError(`Unable to download pdf`);\n }\n}\n","import { Currency, currencyFromApi } from '../pricing';\nimport {\n SalesInvoiceInterface,\n PaymentStatuses,\n SalesInvoiceStatus as InternalSalesInvoiceStatus,\n SalesInvoiceType as InternalSalesInvoiceType,\n ListSalesInvoiceRequestListSalesInvoiceFilters,\n} from '@vendasta/billing';\n\nexport interface SalesInvoice {\n invoiceId: string;\n externalId: string;\n invoiceNumber: string;\n merchantId: string;\n invoiceDate?: Date;\n startDate?: Date;\n endDate?: Date;\n dueDate?: Date;\n currency: Currency;\n status: SalesInvoiceStatus;\n type?: SalesInvoiceType;\n total: number;\n paymentStatus?: string;\n outstanding?: number;\n}\n\nexport enum SalesInvoiceStatus {\n InProgress = 'IN_PROGRESS',\n ReadyToPost = 'READY_TO_POST',\n Complete = 'COMPLETE',\n Discarded = 'DISCARDED',\n}\n\nexport enum SalesInvoiceType {\n Instant = 'INSTANT',\n Invoiced = 'INVOICED',\n Unset = 'UNSET',\n}\n\nexport enum PaymentStatusType {\n Not_Applicable = 'Not Applicable',\n Unpaid = 'Unpaid',\n Paid = 'Paid',\n Part_Paid = 'Part Paid',\n}\n\nexport interface ListSalesInvoicesFilters {\n merchantId?: string;\n statuses?: SalesInvoiceStatus[];\n paymentStatuses?: PaymentStatusType[];\n invoiceId?: string[];\n}\n\nexport function salesInvoiceFromApi(siApi: SalesInvoiceInterface): SalesInvoice {\n return {\n invoiceId: siApi.invoiceId || '',\n externalId: siApi.externalId || '',\n invoiceNumber: siApi.invoiceNumber || '',\n merchantId: siApi.merchantId || '',\n invoiceDate: siApi.invoiceDate ? new Date(siApi.invoiceDate) : undefined,\n startDate: siApi.startDate ? new Date(siApi.startDate) : undefined,\n endDate: siApi.endDate ? new Date(siApi.endDate) : undefined,\n dueDate: siApi.dueDate ? new Date(siApi.dueDate) : undefined,\n currency: currencyFromApi(siApi.currency),\n status: salesInvoiceStatusFromApi(siApi.status),\n type: salesInvoiceTypeFromApi(siApi.type),\n total: siApi.total || 0,\n paymentStatus: siApi.paymentStatus,\n outstanding: siApi.outstanding || 0,\n };\n}\n\nexport function listSalesInvoiceFiltersToApi(\n filters: ListSalesInvoicesFilters,\n): ListSalesInvoiceRequestListSalesInvoiceFilters {\n return new ListSalesInvoiceRequestListSalesInvoiceFilters({\n ...filters,\n statuses: (filters.statuses || []).map((s) => salesInvoiceStatusToApi(s)),\n paymentStatuses: (filters.paymentStatuses || []).map((s) => salesInvoicePaymentStatusToApi(s)),\n });\n}\n\nfunction salesInvoiceStatusFromApi(sApi: InternalSalesInvoiceStatus | undefined): SalesInvoiceStatus {\n switch (sApi) {\n case InternalSalesInvoiceStatus.SALES_INVOICE_STATUS_READY_TO_POST:\n return SalesInvoiceStatus.ReadyToPost;\n case InternalSalesInvoiceStatus.SALES_INVOICE_STATUS_COMPLETE:\n return SalesInvoiceStatus.Complete;\n case InternalSalesInvoiceStatus.SALES_INVOICE_STATUS_DISCARDED:\n return SalesInvoiceStatus.Discarded;\n }\n return SalesInvoiceStatus.InProgress;\n}\n\nfunction salesInvoiceStatusToApi(status: SalesInvoiceStatus | undefined): InternalSalesInvoiceStatus {\n switch (status) {\n case SalesInvoiceStatus.ReadyToPost:\n return InternalSalesInvoiceStatus.SALES_INVOICE_STATUS_READY_TO_POST;\n case SalesInvoiceStatus.Complete:\n return InternalSalesInvoiceStatus.SALES_INVOICE_STATUS_COMPLETE;\n case SalesInvoiceStatus.Discarded:\n return InternalSalesInvoiceStatus.SALES_INVOICE_STATUS_DISCARDED;\n }\n return InternalSalesInvoiceStatus.SALES_INVOICE_STATUS_IN_PROGRESS;\n}\n\nfunction salesInvoiceTypeFromApi(type: InternalSalesInvoiceType | undefined): SalesInvoiceType | undefined {\n switch (type) {\n case InternalSalesInvoiceType.SALES_INVOICE_TYPE_INVOICED:\n return SalesInvoiceType.Invoiced;\n case InternalSalesInvoiceType.SALES_INVOICE_TYPE_INSTANT:\n return SalesInvoiceType.Instant;\n default:\n return undefined;\n }\n}\n\nfunction salesInvoicePaymentStatusToApi(status: PaymentStatusType): PaymentStatuses {\n switch (status) {\n case PaymentStatusType.Paid:\n return PaymentStatuses.PAYMENT_STATUSES_PAID;\n case PaymentStatusType.Part_Paid:\n return PaymentStatuses.PAYMENT_STATUSES_PART_PAID;\n case PaymentStatusType.Unpaid:\n return PaymentStatuses.PAYMENT_STATUSES_UNPAID;\n case PaymentStatusType.Not_Applicable:\n return PaymentStatuses.PAYMENT_STATUSES_NOT_APPLICABLE;\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError as observableThrowError } from 'rxjs';\nimport { catchError, map, mapTo, share } from 'rxjs/operators';\nimport { PagedResponse } from '../core';\nimport {\n GetSalesInvoiceRequest,\n HostService,\n ListSalesInvoiceRequest,\n PagedRequestOptions,\n PostSalesInvoiceRequest,\n SalesInvoiceApiService,\n} from '@vendasta/billing';\nimport {\n listSalesInvoiceFiltersToApi,\n ListSalesInvoicesFilters,\n SalesInvoice,\n salesInvoiceFromApi,\n} from './sales-invoice';\n\n@Injectable({ providedIn: 'root' })\nexport class SalesInvoiceService {\n constructor(\n private hostService: HostService,\n private http: HttpClient,\n private salesInvoiceApi: SalesInvoiceApiService,\n ) {}\n\n downloadPdf(salesInvoiceId: string, merchantId?: string): Observable {\n let params;\n if (merchantId) {\n params = { salesInvoiceId, merchantId };\n } else {\n params = { salesInvoiceId };\n }\n return this.http\n .get(`${this.hostService.hostWithScheme}/sales-invoice-pdf`, {\n observe: 'body',\n params: params,\n responseType: 'blob',\n withCredentials: true,\n })\n .pipe(share(), catchError(handleError));\n }\n\n listSalesInvoices(\n filters: ListSalesInvoicesFilters,\n cursor: string,\n pageSize: number,\n searchTerm?: string,\n ): Observable> {\n const req = new ListSalesInvoiceRequest({\n filters: listSalesInvoiceFiltersToApi(filters),\n pagingOptions: new PagedRequestOptions({ cursor, pageSize }),\n searchTerm: searchTerm || '',\n });\n return this.salesInvoiceApi.list(req).pipe(\n map((response) => {\n const salesInvoices = (response.invoice || []).map((i) => salesInvoiceFromApi(i));\n return new PagedResponse(salesInvoices, response.pagingMetadata.nextCursor, response.pagingMetadata.hasMore);\n }),\n );\n }\n\n postSalesInvoice(invoice_id: string): Observable {\n const req = new PostSalesInvoiceRequest({\n invoiceId: invoice_id,\n });\n return this.salesInvoiceApi.post(req).pipe(mapTo(true));\n }\n\n getSalesInvoice(invoice_id: string, merchant_id: string): Observable {\n const req = new GetSalesInvoiceRequest({\n invoiceId: invoice_id,\n merchantId: merchant_id,\n });\n return this.salesInvoiceApi.get(req).pipe(map((resp) => salesInvoiceFromApi(resp.invoice)));\n }\n}\n\nfunction handleError(error: HttpErrorResponse): Observable {\n if (error.error instanceof ErrorEvent) {\n console.error(`An error occurred:`, error.error.message);\n } else {\n console.error(`Server returned ${error.message}`);\n }\n\n return observableThrowError(`Unable to download pdf`);\n}\n","export const SNAPSHOT_REPORT_SKU = 'ST';\nexport const SNAPSHOT_REPORT_REFRESH_SKU = 'snapshotreportrefresh';\nexport const REPUTATION_MANGEMENT_SKU = 'RM';\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { HostService } from '@vendasta/billing';\nimport { Observable } from 'rxjs';\nimport { catchError, share } from 'rxjs/operators';\nimport { handleFileUploadError } from '../http-shared/error-handlers';\nimport { FileData } from './file';\nimport { FilePurpose } from './purpose';\n\n@Injectable({ providedIn: 'root' })\nexport class StripeFileService {\n constructor(private hostService: HostService, private httpClient: HttpClient) {}\n\n uploadFile(merchantId: string, purpose: FilePurpose, file: Blob): Observable {\n const formData = new FormData();\n formData.append('merchant_id', merchantId);\n formData.append('purpose', purpose);\n formData.append('file', file);\n\n return this.httpClient\n .post(`${this.hostService.hostWithScheme}/stripe/files`, formData, this.apiOptions())\n .pipe(share(), catchError(handleFileUploadError));\n }\n\n private apiOptions(): { withCredentials: boolean } {\n return {\n withCredentials: true,\n };\n }\n}\n","export enum FilePurpose {\n ACCOUNT_REQUIREMENT = 'account_requirement',\n ADDITIONAL_VERIFICATION = 'additional_verification',\n BUSINESS_ICON = 'business_icon',\n BUSINESS_LOGO = 'business_logo',\n CUSTOMER_SIGNATURE = 'customer_signature',\n DISPUTE_EVIDENCE = 'dispute_evidence',\n IDENTITY_DOCUMENT = 'identity_document',\n PCI_DOCUMENT = 'pci_document',\n TAX_DOCUMENT_USER_UPLOAD = 'tax_document_user_upload',\n}\n"],"mappings":"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","names":["BillingStrategy","isBillingStrategyInstant","strategy","Instantly","EndOfDay","billingStrategyFromAPI","bsAPI","PricingPlanBillingStrategy","BILLING_STRATEGY_END_OF_PERIOD","EndOfPeriod","BILLING_STRATEGY_START_OF_PERIOD","StartOfPeriod","BILLING_STRATEGY_INSTANTLY","BILLING_STRATEGY_END_OF_DAY","Invalid","billingStrategyToAPI","BILLING_STRATEGY_NONE","Frequency","frequencyFromLegacyApi","fApi","Monthly","Yearly","OneTime","Invalid","frequencyFromApi","FrequencyApi","MONTHLY","YEARLY","ONE_TIME","frequencyToApi","frequency","INVALID","productPricingRulesFromApi","pprApi","map","r","price","minUnits","maxUnits","ProductPricingType","productPricingTypeFromApi","pptApi","ProductPricingTypeApi","PRODUCT_PRICING_TYPE_STANDARD","Standard","PRODUCT_PRICING_TYPE_STAIRSTEP","Stairstep","PRODUCT_PRICING_TYPE_TIERED","Tiered","Invalid","productPricingTypeToApi","ppt","PRODUCT_PRICING_TYPE_INVALID","commitmentFromAPI","comAPI","initial","recurring","feesFromApi","protos","length","map","proto","amount","amountType","feeType","feesToApi","fees","fee","pricingPlanProductFromApi","apiProduct","pricingMap","apiCurrency","pricing","Object","prototype","hasOwnProperty","call","pricingApi","type","productPricingTypeFromApi","rules","productPricingRulesFromApi","setupFee","fees","feesFromApi","frequency","frequencyFromApi","pricingPlanId","sku","commitment","commitmentFromAPI","created","modified","strategy","billingStrategyFromAPI","volumeCommitment","volumeCommitmentStartsAt","getTime","undefined","volumeCommitmentEndsAt","currencyPricingMapToApi","currencyPricingMap","keys","filter","c","Currency","reduce","apiPricingMap","pricingPlanProductPricingToApi","productPricingRulesToApi","map","rule","ApiRule","ApiPricing","productPricingTypeToApi","feesToApi","frequencyToApi","currencyCode","purchaseCostFromAPI","pcApi","subtotal","subtotalCost","discountTotal","discountAmount","total","totalCost","setupFee","billingFrequency","frequencyFromLegacyApi","currency","currencyFromApi","strategy","billingStrategyFromAPI","commitment","commitmentFromAPI","isStartingPrice","productPricingFromApi","pApi","pricingType","productPricingTypeFromApi","frequency","frequencyFromApi","pricingRules","productPricingRulesFromApi","volumeCommitment","resolvedFrom","fees","feesFromApi","pricesFromApi","map","p","sku","prices","price","productPricingToApiCurrencyMap","productPricing","apiPricing","productPricingToApi","currencyCode","ApiPricingPlanProductPricing","type","productPricingTypeToApi","rules","productPricingRulesToApi","feesToApi","frequencyToApi","WholesalePricingService","constructor","pricingService","billingApi","setProductBillingStrategy","merchantId","sku","billingStrategy","strategy","billingStrategyToAPI","setWholesaleProductStrategy","pipe","map","setProductVolumeCommitment","volumeCommitment","volumeCommitmentStartsAt","volumeCommitmentEndsAt","setWholesaleProductVolumeCommitment","getPurchaseCost","quantity","resp","purchaseCostFromAPI","getMultiWholesalePrices","skus","pricingPlanId","getMultiProductPricing","r","pricesFromApi","prices","upsertPricing","pricing","termCommitment","request","UpsertWholesalePricingRequest","p","pricingPlanProductPricingToApi","upsertWholesale","ɵɵinject","PricingApiService","BillingApiService","factory","ɵfac","providedIn","_WholesalePricingService","RetailPricingForSubscriptionId","constructor","subscriptionId","RetailPricingForCustomerId","customerId","RetailPricingForGroupId","groupId","RetailPricingService","pricingApi","getMultiRetailPrices","merchantId","skus","requestGroupId","getMultiRetail","pipe","map","r","pricesFromApi","prices","upsertPricing","sku","frequency","pricing","identifier","req","UpsertRetailPricingRequest","frequencyToApi","productPricingToApiCurrencyMap","upsertRetail","ɵɵinject","PricingApiService","factory","ɵfac","providedIn","_RetailPricingService","SubscriptionStatus","subscriptionStatusFromApi","sApi","SubscriptionStatusApi","SUBSCRIPTION_STATUS_ACTIVE","Active","SUBSCRIPTION_STATUS_EXPIRED","Inactive","Unset","subscriptionStatusToApi","subscriptionStatus","SUBSCRIPTION_STATUS_UNSET","isSubscriptionStatus","str","Object","values","includes","SubscriptionSource","subscriptionSourceFromApi","sApi","SubscriptionSourceApi","SOURCE_SYSTEM","System","SOURCE_USER","User","Unset","RevenueApiService","constructor","hostService","http","downloadCsv","r","queryParams","filename","get","hostWithScheme","apiOptions","pipe","share","catchError","handleCsvError","responseType","withCredentials","ɵɵinject","HostService","HttpClient","factory","ɵfac","providedIn","_RevenueApiService","MerchantReportApiService","constructor","hostService","http","downloadCsv","r","queryParams","merchantId","year","month","get","hostWithScheme","apiOptions","pipe","share","catchError","handleCsvError","generateCsv","responseType","withCredentials","ɵɵinject","HostService","HttpClient","factory","ɵfac","providedIn","_MerchantReportApiService","DiscountType","discountTypeFromApi","t","ApiDiscountType","DISCOUNT_TYPE_FIXED_AMOUNT_PER_UNIT","FIXED_AMOUNT_PER_UNIT","DISCOUNT_TYPE_FIXED_NUMBER_OF_UNITS","FIXED_NUMBER_OF_UNITS","DISCOUNT_TYPE_PERCENT_AMOUNT","PERCENT_AMOUNT","FIXED_AMOUNT","discountTypeToApi","DISCOUNT_TYPE_FIXED_AMOUNT","discountFromApi","apiDiscount","merchantId","discountId","id","discountType","discountTypeFromApi","amount","start","Date","undefined","end","resetEachPeriod","created","updated","SKU","sku","description","customerId","consumer","Consumer","CONSUMER_RETAIL","subscriptionId","numberOfBillingPeriods","DiscountConsumer","discountConsumerToApi","dc","RETAIL","Consumer","CONSUMER_RETAIL","WHOLESALE","CONSUMER_WHOLESALE","DiscountService","constructor","discountApi","list","filters","cursor","pageSize","req","ListDiscountsRequest","pagingOptions","PagedRequestOptions","pipe","map","response","discounts","item","discountFromApi","PagedResponse","pagingMetadata","nextCursor","hasMore","create","merchantId","sku","discountType","amount","startDateTime","endDateTime","resetEachPeriodFlag","description","customerId","discountConsumer","DiscountConsumer","WHOLESALE","subscriptionId","numberOfBillingPeriods","start","Date","dt","discountTypeToApi","consumer","discountConsumerToApi","r","CreateDiscountRequest","resetEachPeriod","end","resp","id","update","UpdateDiscountRequest","expire","ExpireDiscountRequest","ɵɵinject","DiscountApiService","factory","ɵfac","providedIn","_DiscountService","appliedDiscountTypeFromAPI","adt","APIDiscountType","DISCOUNT_TYPE_FIXED_AMOUNT_PER_UNIT","DiscountType","FIXED_AMOUNT_PER_UNIT","DISCOUNT_TYPE_FIXED_NUMBER_OF_UNITS","FIXED_NUMBER_OF_UNITS","DISCOUNT_TYPE_PERCENT_AMOUNT","PERCENT_AMOUNT","FIXED_AMOUNT","appliedDiscountTypeToApi","DISCOUNT_TYPE_FIXED_AMOUNT","appliedDiscountFromApi","ad","type","value","totalAmount","description","referenceId","appliedDiscountToApi","PurchaseStatus","purchaseStatusFromApi","psApi","PurchaseStatusApi","PURCHASE_STATUS_PENDING","Pending","PURCHASE_STATUS_DUE","Due","PURCHASE_STATUS_SUCCESS","Success","PURCHASE_STATUS_DUNNING","Dunning","PURCHASE_STATUS_FAILED","Failed","Unset","AppliedCreditType","purchaseFromApi","pApi","merchantId","timestamp","Date","undefined","purchaseId","total","currency","currencyFromApi","Currency","USD","renewal","items","map","p","purchaseItemFromApi","billingStrategy","billingStrategyFromAPI","isDunning","dunningAttempt","pauseDunningUntil","voided","paid","status","purchaseStatusFromApi","creditAmount","appliedCredits","ac","appliedCreditFromAPI","taxAmount","appliedTaxRates","at","appliedTaxRateFromAPI","currencyApi","sku","description","amount","orderId","customerId","discountAmount","appliedDiscounts","appliedDiscountFromApi","purchaseDay","day","setupFee","feeAmount","appliedAmount","referenceId","referenceType","appliedCreditTypeFromAPI","adt","CreditType","CREDIT_TYPE_CREDIT_NOTE","CREDIT_TYPE_PROMOTIONAL","CREDIT_TYPE_UNSET","name","percentage","taxRateId","customerSummaryFromApi","csApi","currency","undefined","currencyFromApi","customerId","purchaseItemQuantity","purchaseItemTotal","Currency","USD","Dimension","constructor","id","dimensionId","name","ChannelPartnersDiamond","ChannelPartnersPlatinum","ChannelPartnersGold","ChannelPartnersSilver","ChannelPartnersUnassisted","ChannelPartnersChurned","ChannelPartnersPreSales","ChannelPartnersUnassigned","ChannelPartnersMedia","ChannelPartnersBroadcast","ChannelPartnersISV","ChannelPartnersICT","ChannelPartnersFranchise","ChannelPartnersBroadly","ChannelPartnersEMEA","ChannelPartnersAgency","ChannelPartnersHighVelocityExpansion","ChannelPartnersHighVelocityAcquisition","LEGACY_DIMENSIONS","SERVICE_TIERS","contractFromApi","cApi","merchantId","netD","created","undefined","subscriptionId","dimension","Dimension","currency","currencyFromApi","signed","end","activated","modified","verified","status","creditLimit","pricingPlanId","ContractService","constructor","api","get","merchantId","pipe","map","c","contractFromApi","contract","update","mutations","ɵɵinject","ContractApiService","factory","ɵfac","providedIn","_ContractService","setNetD","netD","setCurrencyCode","currencyCode","setStatus","status","setDimension","dimension","setSigned","signed","setActivated","activated","setEnd","end","setModified","modified","setCreditLimit","creditLimit","productFromApi","apiProduct","name","sku","iconUrl","hasPricingOverride","hasDiscount","ProductType","listProductsFilterToApi","filter","__spreadProps","__spreadValues","productType","map","pt","productTypeToApi","Standard","ApiProductType","PRODUCT_TYPE_STANDARD_PRODUCT","Vendasta","PRODUCT_TYPE_VENDASTA_PRODUCT","Subscription","PRODUCT_TYPE_SUBSCRIPTION","Fee","PRODUCT_TYPE_FEE","PartnerSupportSales","PRODUCT_TYPE_PARTNER_SUPPORT_SALES","PRODUCT_TYPE_INVALID","RenewalState","customerAddressFromApi","apiAddress","address","city","state","zip","country","billableItemFromApi","apiItem","zeroDate","Date","valueOf","subscriptionId","merchantId","sku","productName","customerId","customerName","orderId","expiry","undefined","billingStart","created","updated","frequency","frequencyFromApi","retailFrequency","nextRenewal","nextRetailRenewal","customerAddress","customUnitPrice","retailUnitPrice","status","subscriptionStatusFromApi","price","productPricingFromApi","source","subscriptionSourceFromApi","autoBillable","description","renewalStateToApi","state","RenewalState","Delayed","RenewalStateApi","RENEWAL_STATE_DELAYED","RENEWAL_STATE_IMMEDIATE","isCanCreateSubscriptionsRequestSubscriptionItem","li","BillingService","constructor","billingApi","revenueApi","merchantReportApi","pricingApi","purchaseApi","vendorApi","getPurchaseCost","merchantId","sku","quantity","req","GetPurchaseCostRequest","pipe","map","response","currency","Currency","USD","canCreateSubscriptions","skus","CanCreateSubscriptionsRequest","canCreateSubscriptionsWithFrequencies","items","item","frequency","frequencyToApi","filter","downloadRevenueCsv","filename","downloadCsv","downloadBillingReportCsv","year","month","generateBillingReportCsv","generateCsv","listMerchantBillingReports","cursor","pageSize","ListMerchantBillingReportsRequest","pagingOptions","PagedRequestOptions","resp","reports","r","created","status","MerchantReportStatus","PagedResponse","pagingMetadata","nextCursor","hasMore","canBillCreateSnapshot","canBillItem","canBillRefreshSnapshot","ok","createPricingPlanProduct","pricingPlanId","pricing","commitment","strategy","volumeCommitment","volumeCommitmentStartsAt","volumeCommitmentEndsAt","request","CreatePricingPlanProductRequest","currencyPricingMapToApi","CommitmentApi","billingStrategyToAPI","mapTo","updatePricingPlanProduct","fieldMask","FieldMask","paths","UpdatePricingPlanProductRequest","push","deletePricingPlanProduct","DeletePricingPlanProductRequest","getMultiProductPricing","productPricesApi","productPrices","productPricings","k","Object","keys","productPricingResponse","productPricingFromApi","getMultiRetailPricing","groupId","requestGroupId","undefined","getMultiRetail","retailPricesApi","retailPricings","retailPricingResponse","listPricingPlanProducts","filters","ListPricingPlanProductsRequest","products","p","pricingPlanProductFromApi","getPricingPlanProduct","GetPricingPlanProductRequest","ppp","pricingPlanProduct","defaultStrategy","billingStrategyFromAPI","pricingPlanDefaultStrategy","listPurchases","ListPurchaseRequest","list","purchases","purchase","purchaseFromApi","voidPurchase","purchaseId","day","VoidPurchaseRequest","void","listPurchaseItems","purchaseItems","purchaseItem","purchaseItemFromApi","retryPurchase","RetryPurchaseRequest","retry","getMultiCustomerSummaries","customerIds","periodStart","periodEnd","GetMultiCustomerSummariesRequest","customerSummaries","customerSummary","customerSummaryFromApi","getMultiContract","merchantIds","contractsAPI","contracts","contractResponse","contractFromApi","getMerchantWholesaleCurrency","generateVendorReport","vendorName","markAsApproved","GenerateVendorReportRequest","generateReport","url","getVendorStats","GetRevenueStatsRequest","getRevenueStats","totalRevenue","listContracts","ListContractsRequest","c","listProducts","searchTerm","apiFilters","listProductsFilterToApi","ListProductsRequest","productFromApi","getMultiProduct","GetMultiProductRequest","productsMap","Map","forEach","set","getBillableItem","customerId","orderId","projectionFilter","GetBillableItemRequest","billableItemFromApi","expireSubscription","expiry","ExpireBillableItemRequest","expireBillableItem","unexpireSubscription","unexpireBillableItem","changeBillableItemFrequency","freq","ChangeFrequencyRequest","changeFrequency","changeBillableItemNextRenewalDate","next","ChangeRenewalDateRequest","nextRenewalDate","changeRenewalDate","changeBillableItemCustomUnitPrice","amount","ChangeCustomUnitPriceRequest","customUnitPrice","changeCustomUnitPrice","listBillableItems","ListBillableItemsRequest","listSubscriptions","ListSubscriptionsRequest","subscriptions","listRetailSubscriptions","startRevRecBackfillWorkflow","startRevRecTemplateBackfill","pauseDunning","pauseDunningUntil","PauseDunningRequest","resumeDunning","ResumeDunningRequest","exportSubscriptions","createSubscription","setAutoBillable","subscriptionId","autoBillable","SetAutoBillableRequest","updateSubscription","subscription","UpdateSubscriptionRequest","description","ɵɵinject","BillingApiService","RevenueApiService","MerchantReportApiService","PricingApiService","PurchaseApiService","VendorApiService","factory","ɵfac","providedIn","_BillingService","convertFromApiCollectionMethod","s","ApiCollectionMethod","COLLECTION_METHOD_INVALID","CollectionMethod","UNSET","COLLECTION_METHOD_MANUAL","MANUAL_COLLECTION","COLLECTION_METHOD_EMAIL","SEND_EMAIL","COLLECTION_METHOD_CHARGE_AUTOMATICALLY","CHARGE_AUTOMATICALLY","convertToApiCollectionMethod","Interval","convertFromApiInterval","s","ApiInterval","INTERVAL_INVALID","INVALID","INTERVAL_DAY","DAY","INTERVAL_WEEK","WEEK","INTERVAL_MONTH","MONTH","INTERVAL_YEAR","YEAR","convertToApiInterval","PaymentProcessor","convertFromApiPaymentProcessor","s","ApiPaymentProcessor","PAYMENT_PROCESSOR_INVALID","INVALID","PAYMENT_PROCESSOR_UNSET","UNSET","PAYMENT_PROCESSOR_STRIPE","STRIPE","convertToApiPaymentProcessor","RecurringInvoiceStatus","convertFromApiRecurringInvoiceStatus","s","ApiRecurringInvoiceStatus","RECURRING_INVOICE_STATUS_INVALID","INVALID","RECURRING_INVOICE_STATUS_INACTIVE","INACTIVE","RECURRING_INVOICE_STATUS_ACTIVE","ACTIVE","RECURRING_INVOICE_STATUS_ARCHIVED","ARCHIVED","convertToApiRecurringInvoiceStatus","ListRecurringInvoicesByCustomerID","constructor","customerId","ListRecurringInvoicesByMerchantID","merchantId","LineItem","name","isRecurringInvoiceLineItem","li","RecurringInvoiceLineItem","kwargs","sku","unitPrice","quantity","taxRateIds","RecurringInvoiceBundle","hideLineItems","lineItems","map","convertApiCustomerAddress","ca","address","address2","city","state","zip","country","convertFromApiRecurringInvoiceLineItem","convertFromApiRecurringInvoiceLineItemBundle","i","filter","convertFromApiRecurringInvoiceItem","lineItem","bundle","convertFromApiRecurringInvoice","zeroDate","Date","valueOf","id","created","updated","customerName","status","convertFromApiRecurringInvoiceStatus","nextIssue","intervalCount","interval","convertFromApiInterval","repeatOnDayOfMonth","collectionMethod","convertFromApiCollectionMethod","recipientUserId","additionalRecipientIds","paymentProcessor","convertFromApiPaymentProcessor","paymentProcessorId","items","totalAmount","currencyCode","memo","endsAt","customerAddress","netD","convertToApiRecurringInvoiceLineItem","RecurringInvoiceLineItemApi","isRecurringInvoiceLineItemApi","convertToApiRecurringInvoiceItem","RecurringInvoiceBundleApi","item","RecurringInvoiceItemApi","RecurringInvoiceService","constructor","recurringInvoiceApiService","create","request","req","RecurringInvoiceApi","__spreadProps","__spreadValues","status","convertToApiRecurringInvoiceStatus","interval","convertToApiInterval","collectionMethod","convertToApiCollectionMethod","paymentProcessor","convertToApiPaymentProcessor","items","map","i","convertToApiRecurringInvoiceItem","createRecurringInvoice","pipe","res","convertFromApiRecurringInvoice","get","id","GetRecurringInvoiceRequest","getRecurringInvoice","resp","delete","DeleteRecurringInvoiceRequest","deleteRecurringInvoice","list","identifier","cursor","pageSize","filters","ListRecurringInvoicesRequest","pagingOptions","ListRecurringInvoicesByCustomerID","customerId","ListRecurringInvoicesByMerchantID","merchantId","ListRecurringInvoicesFiltersApi","statuses","intervals","detailedInterval","intervalCount","nextIssuedDate","dateFilter","listRecurringInvoices","invoices","recurringInvoices","item","PagedResponse","pagingMetadata","nextCursor","hasMore","update","recurringInvoice","updateMask","UpdateRecurringInvoiceRequest","paths","undefined","updateRecurringInvoice","ɵɵinject","RecurringInvoiceApiService","factory","ɵfac","providedIn","_RecurringInvoiceService","IntervalMappingService","constructor","translateService","translatedIntervalMap","Interval","DAY","instant","other","WEEK","MONTH","YEAR","intervalMapping","ɵɵinject","TranslateService","factory","ɵfac","_IntervalMappingService","isAppliedBundle","b","convertApiAppliedBundle","ab","bundleId","bundleInstanceId","name","hideBundleItems","bankAccountFromApi","r","id","accountHolderName","bankName","country","currency","routingNumber","last4","defaultForCurrency","BankAccountService","constructor","merchantApi","listBankAccounts","merchantId","ListBankAccountsRequest","pipe","map","res","bankAccount","bankAccounts","ba","bankAccountFromApi","setDefaultBankAccount","bankAccountId","request","SetDefaultBankAccountRequest","deleteBankAccount","DeleteBankAccountRequest","ɵɵinject","MerchantApiService","factory","ɵfac","providedIn","_BankAccountService","environment","window","appEngineHostMap","local","test","demo","prod","production","BillingHostService","appEngineHost","host","toLowerCase","Error","factory","ɵfac","providedIn","_BillingHostService","CA_LIVE_API_KEY","CA_TEST_API_KEY","StripeService","constructor","environmentService","paymentService","connectPublicKey","getEnvironment","Environment","PROD","getConnectPublicKey","getPublicKeyByMerchant","merchantId","getWholesaleProviderPublicKey","MerchantProviderDeterminant","getPublicKeyByCountry","countryCode","CountryProviderDeterminant","ɵɵinject","EnvironmentService","PaymentService","factory","ɵfac","providedIn","_StripeService","isBundle","b","bundleFromApi","apiBundle","items","map","item","bundleItemFromApi","merchantId","bundleId","name","hideBundleDetails","created","updated","apiBundleItem","productId","discountType","discountTypeFromApi","discountAmount","quantity","defaultSku","price","bundleItemToApi","bundleItem","discountTypeToApi","BundleService","constructor","bundleApiService","upsert","merchantId","bundleId","name","hideBundleDetails","items","request","UpsertBundleRequest","map","item","bundleItemToApi","pipe","mapTo","getMulti","bundleIds","GetMultiBundleRequest","resp","bundlesMap","Map","bundles","forEach","bundleFromApi","set","list","filters","searchTerm","cursor","pageSize","ListBundlesRequest","pagingOptions","PagedRequestOptions","bundle","filter","isBundle","PagedResponse","pagingMetadata","nextCursor","hasMore","ɵɵinject","BundleApiService","factory","ɵfac","providedIn","_BundleService","creditBalanceFromApi","apiCreditBalance","merchantId","currency","amount","CreditService","constructor","creditApi","getBalance","merchantId","GetBalanceRequest","pipe","map","res","creditBalanceFromApi","creditBalance","add","currency","amount","idempotencyKey","reason","AddCreditRequest","ɵɵinject","CreditApiService","factory","ɵfac","providedIn","_CreditService","Owner","SortDirection","SortField","enumStringToValue$2","enumRef","value","Link","_Link","proto","m","kwargs","toReturn","enumStringToValue$1","CreateLinkRequest","_CreateLinkRequest","CreateLinkResponse","_CreateLinkResponse","GetLinkRequest","_GetLinkRequest","GetLinkResponse","_GetLinkResponse","GetMultiLinkMetricsRequest","_GetMultiLinkMetricsRequest","GetMultiLinkMetricsResponse","_GetMultiLinkMetricsResponse","LinkMetrics","_LinkMetrics","obj","k","ListAllLinkMetricsRequest","_ListAllLinkMetricsRequest","ListAllLinkMetricsResponse","_ListAllLinkMetricsResponse","ListLinksRequest","_ListLinksRequest","PagedRequestOptions","ListLinksResponse","_ListLinksResponse","PagedResponseMetadata","_PagedRequestOptions","_PagedResponseMetadata","SetLinkHideStatusesRequest","_SetLinkHideStatusesRequest","proto","m","kwargs","toReturn","environment","hostMap","HostService","t","ɵɵdefineInjectable","UrlShortenerApiService","http","hostService","HttpHeaders","r","request","CreateLinkRequest","map","resp","CreateLinkResponse","GetLinkRequest","GetLinkResponse","ListLinksRequest","ListLinksResponse","GetMultiLinkMetricsRequest","GetMultiLinkMetricsResponse","ListAllLinkMetricsRequest","ListAllLinkMetricsResponse","SetLinkHideStatusesRequest","__spreadProps","__spreadValues","ɵɵinject","HttpClient","UrlShortenerService","api","shortCode","req","businessId","linkUrl","owner","description","hidden","cursor","pageSize","PagedRequestOptions","PagedResponse","sortField","filterTerm","sortDirection","body","shortCodes","res","results","nextCursor","hasMore","convertAPINote","note","message","isNote","n","InvoicePDFType","InvoiceStatus","InvoiceDateField","InvoiceOrigin","InvoiceOriginAPI","isInvoiceItem","ii","isInvoice","i","isAppliedTaxRate","tr","convertApiStatus","s","ApiInvoiceStatus","DUE","PAID","VOID","DRAFT","invoiceStatusToApi","status","InternalInvoiceStatus","invoiceDateFilterFieldToApi","dateField","ListInvoicesRequestFiltersDateFilterDateField","CREATED","convertApiOrigin","MANUAL","SALES_ORDER","RENEWAL","TEMPLATE","UNSET","convertApiAppliedTaxRate","at","amount","taxRateId","percentage","name","description","convertApiTaxRate","tr","id","name","description","percentage","convertApiCustomerAddress","ca","address","address2","city","state","zip","country","convertApiInvoiceItem","ii","appliedTaxes","map","at","convertApiAppliedTaxRate","filter","isAppliedTaxRate","taxRates","tr","convertApiTaxRate","isTaxRate","appliedDiscounts","discounts","ad","appliedDiscountFromApi","id","sku","amount","quantity","description","subtotal","total","bundleId","bundleInstanceId","convertApiInvoice","i","zeroDate","Date","valueOf","invoiceItems","items","map","ii","convertApiInvoiceItem","filter","isInvoiceItem","appliedTaxes","at","convertApiAppliedTaxRate","isAppliedTaxRate","taxRates","defaultTaxRates","tr","convertApiTaxRate","isTaxRate","appliedBundles","convertApiAppliedBundle","isAppliedBundle","notes","n","convertAPINote","isNote","id","number","customerId","customerName","contactId","status","convertApiStatus","subtotal","total","discountTotal","amountDiscount","paid","undefined","issued","due","voided","created","updated","autoAdvance","currency","currencyFromApi","orderId","origin","convertApiOrigin","collectionMethod","collectionMethodFromApi","memo","defaultPaymentMethod","customerAddress","convertApiCustomerAddress","externalCustomerIdentifier","additionalContactIds","paymentMethodTypes","paymentTypesFromApi","listInvoiceFiltersToApi","filters","ListInvoicesRequestFilters","__spreadProps","__spreadValues","statuses","s","invoiceStatusToApi","origins","collectionMethods","dateFilter","dateGte","dateLte","dateField","invoiceDateFilterFieldToApi","InvoiceService","constructor","hostService","http","invoiceApiService","ssoService","urlShortenerService","addBundle","merchantId","invoiceId","bundleId","AddBundleRequest","pipe","map","res","convertApiInvoice","invoice","addLineItem","sku","amount","quantity","description","taxRates","appliedDiscounts","AddLineItemRequest","discounts","d","appliedDiscountToApi","charge","customerId","paymentMethodId","ChargeInvoiceRequest","create","orderId","currencyCode","CreateInvoiceRequest","createPaymentLink","lineItems","CreatePaymentLinkRequest","delete","DeleteInvoiceRequest","deleteLineItem","id","DeleteLineItemRequest","exportCSV","filters","url","hostWithScheme","post","merchant_id","observe","responseType","withCredentials","share","generatePDF","documentType","invoice_id","document_type","get","GetInvoiceRequest","list","cursor","pageSize","req","ListInvoicesRequest","listInvoiceFiltersToApi","pagingOptions","PagedRequestOptions","response","invoices","item","filter","isInvoice","PagedResponse","pagingMetadata","nextCursor","hasMore","pay","reason","PayInvoiceRequest","preview","getUpcomingPreview","invoiceDate","getUpcomingInvoicePreview","GetUpcomingInvoicePreviewRequest","removeBundle","bundleInstanceId","RemoveBundleRequest","send","emailAddresses","SendInvoiceRequest","updateBundle","hideBundleItems","UpdateBundleRequest","updateDueDate","due","pbInvoice","ApiInvoice","fm","FieldMask","paths","update","updateIssuedDate","issued","updateContact","contactId","updateAdditionalContacts","additionalContactIds","updateCollectionMethod","collectionMethod","apiCollectionMethod","collectionMethodToApi","updateMemo","memo","updatePaymentMethodTypes","paymentMethodTypes","apiPaymentMethodTypes","paymentMethodTypesToApi","updateDefaultPaymentMethod","defaultPaymentMethod","updateDefaultTaxes","taxRateIds","updateDefaultTaxRates","UpdateDefaultTaxRatesRequest","updateLineItem","UpdateLineItemRequest","mask","UpdateInvoiceRequest","fieldMask","void","VoidInvoiceRequest","duplicate","DuplicateInvoiceRequest","generateShortLink","getEntryUrl","newPartnerServiceContext","path","skipGatewayAuthentication","switchMap","createLink","Owner","OWNER_UNTRACKED","catchError","of","result","domain","shortCode","Error","take","ɵɵinject","HostService","HttpClient","InvoiceApiService","SSOService","UrlShortenerService","factory","ɵfac","providedIn","_InvoiceService","taxRatesFromLineItem","item","allTaxRates","invoiceLineItemTaxRates","taxRateIds","forEach","taxId","taxRate","find","t","id","push","countryCode","stateCode","name","description","percentage","invoiceLineItemFromLineItem","taxRates","bundleId","invoiceTaxRates","subtotal","quantity","unitPrice","appliedRates","taxTotal","taxAmount","amount","taxRateId","sku","total","appliedTaxes","invoiceFromRecurringInvoice","recurringInvoice","invoiceLineItems","appliedBundles","i","items","RecurringInvoiceLineItem","RecurringInvoiceBundle","tempBundleId","String","bundleInvoiceItems","lineItems","map","li","hideBundleItems","hideLineItems","taxTotals","Map","tax","__spreadValues","has","set","taxValue","get","undefined","netD","dueDate","Date","nextIssue","setDate","getDate","customerId","status","InvoiceStatus","DRAFT","values","currency","currencyCode","issued","due","contactId","recipientUserId","collectionMethod","defaultPaymentMethod","paymentProcessorId","memo","PaymentMethodService","constructor","apiService","listPaymentCards","merchantId","customerId","req","ListPaymentCardsRequest","pipe","map","resp","paymentCard","c","convertApiPaymentCardDetails","deletePaymentCard","cardId","DeletePaymentCardRequest","mapTo","setDefaultPaymentCard","paymentMethodId","SetDefaultPaymentMethodRequest","setDefaultPaymentMethod","ɵɵinject","PaymentMethodApiService","factory","ɵfac","providedIn","_PaymentMethodService","subscriptionMetricFromAPI","mApi","sku","productName","startingCount","activations","deactivations","churn","retention","subscriptionMetricByGroupFromAPI","metrics","subscriptionMetrics","map","metric","groupID","groupId","ProductSummaryService","constructor","productSummaryApi","listSubscriptionRetentionBySKU","merchantID","filters","cursor","pageSize","req","ListSubscriptionRetentionRequest","merchantId","pagingOptions","PagedRequestOptions","listSubscriptionRetentionBySku","pipe","map","response","metrics","subscriptionMetrics","metric","subscriptionMetricFromAPI","PagedResponse","pagingMetadata","nextCursor","hasMore","listSubscriptionRetentionByGroup","metricsByGroup","m","subscriptionMetricByGroupFromAPI","ɵɵinject","ProductSummaryApiService","factory","ɵfac","providedIn","_ProductSummaryService","listPurchaseFiltersToHTTPJson","filters","merchantId","purchaseId","start","toISOString","undefined","end","billingStrategyFilter","billingStrategy","map","bs","valueOf","state","minPrice","status","includeVoided","dunningPauseStart","PurchaseService","constructor","hostService","http","exportCSV","filters","jsonFilters","listPurchaseFiltersToHTTPJson","post","hostWithScheme","observe","responseType","withCredentials","pipe","share","ɵɵinject","HostService","HttpClient","factory","ɵfac","providedIn","_PurchaseService","SalesCreditNoteStatus","salesCreditNoteFromApi","siApi","creditNoteId","externalId","creditNoteNumber","merchantId","creditNoteReason","creditNoteDate","Date","undefined","dueDate","currency","currencyFromApi","total","outstanding","invoiceId","invoiceNumber","status","salesCreditNoteStatusFromApi","paymentStatus","listSalesCreditNoteFiltersToApi","filters","ListSalesCreditNoteRequestListSalesCreditNoteFilters","__spreadProps","__spreadValues","statuses","map","s","salesCreditNoteStatusToApi","sApi","InternalSalesCreditNoteStatus","SALES_CREDIT_NOTE_STATUS_READY_TO_POST","ReadyToPost","SALES_CREDIT_NOTE_STATUS_COMPLETE","Complete","SALES_CREDIT_NOTE_STATUS_DISCARDED","Discarded","InProgress","SALES_CREDIT_NOTE_STATUS_IN_PROGRESS","SalesCreditNoteService","constructor","hostService","http","salesCreditNoteApi","downloadPdf","salesCreditNoteId","merchantId","params","get","hostWithScheme","observe","responseType","withCredentials","pipe","share","catchError","handleDownloadPDFError","bind","createAutomatedCreditNote","creditNoteReason","total","sku","req","CreateSalesCreditNoteRequest","create","map","list","filters","cursor","pageSize","ListSalesCreditNoteRequest","listSalesCreditNoteFiltersToApi","pagingOptions","PagedRequestOptions","response","salesCreditNotes","creditNote","i","salesCreditNoteFromApi","PagedResponse","pagingMetadata","nextCursor","hasMore","error","ErrorEvent","console","message","observableThrowError","ɵɵinject","HostService","HttpClient","SalesCreditNoteApiService","factory","ɵfac","providedIn","_SalesCreditNoteService","SalesInvoiceStatus","SalesInvoiceType","PaymentStatusType","salesInvoiceFromApi","siApi","invoiceId","externalId","invoiceNumber","merchantId","invoiceDate","Date","undefined","startDate","endDate","dueDate","currency","currencyFromApi","status","salesInvoiceStatusFromApi","type","salesInvoiceTypeFromApi","total","paymentStatus","outstanding","listSalesInvoiceFiltersToApi","filters","ListSalesInvoiceRequestListSalesInvoiceFilters","__spreadProps","__spreadValues","statuses","map","s","salesInvoiceStatusToApi","paymentStatuses","salesInvoicePaymentStatusToApi","sApi","InternalSalesInvoiceStatus","SALES_INVOICE_STATUS_READY_TO_POST","ReadyToPost","SALES_INVOICE_STATUS_COMPLETE","Complete","SALES_INVOICE_STATUS_DISCARDED","Discarded","InProgress","SALES_INVOICE_STATUS_IN_PROGRESS","InternalSalesInvoiceType","SALES_INVOICE_TYPE_INVOICED","Invoiced","SALES_INVOICE_TYPE_INSTANT","Instant","Paid","PaymentStatuses","PAYMENT_STATUSES_PAID","Part_Paid","PAYMENT_STATUSES_PART_PAID","Unpaid","PAYMENT_STATUSES_UNPAID","Not_Applicable","PAYMENT_STATUSES_NOT_APPLICABLE","SalesInvoiceService","constructor","hostService","http","salesInvoiceApi","downloadPdf","salesInvoiceId","merchantId","params","get","hostWithScheme","observe","responseType","withCredentials","pipe","share","catchError","handleError","listSalesInvoices","filters","cursor","pageSize","searchTerm","req","ListSalesInvoiceRequest","listSalesInvoiceFiltersToApi","pagingOptions","PagedRequestOptions","list","map","response","salesInvoices","invoice","i","salesInvoiceFromApi","PagedResponse","pagingMetadata","nextCursor","hasMore","postSalesInvoice","invoice_id","PostSalesInvoiceRequest","invoiceId","post","mapTo","getSalesInvoice","merchant_id","GetSalesInvoiceRequest","resp","ɵɵinject","HostService","HttpClient","SalesInvoiceApiService","factory","ɵfac","providedIn","_SalesInvoiceService","error","ErrorEvent","console","message","observableThrowError","SNAPSHOT_REPORT_SKU","SNAPSHOT_REPORT_REFRESH_SKU","StripeFileService","constructor","hostService","httpClient","uploadFile","merchantId","purpose","file","formData","FormData","append","post","hostWithScheme","apiOptions","pipe","share","catchError","handleFileUploadError","withCredentials","ɵɵinject","HostService","HttpClient","factory","ɵfac","providedIn","_StripeFileService","FilePurpose"],"x_google_ignoreList":[46]}