@repobit/dex-store 1.2.6 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/LICENSE +21 -0
  3. package/dist/src/adaptors/adaptor.base.js.map +1 -1
  4. package/dist/src/format-price.js.map +1 -1
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/product-options/option.base.d.ts +12 -0
  7. package/dist/src/product-options/option.base.js +20 -0
  8. package/dist/src/product-options/option.base.js.map +1 -1
  9. package/dist/src/product-options/option.init-selector.d.ts +3 -0
  10. package/dist/src/product-options/option.init-selector.js +4 -0
  11. package/dist/src/product-options/option.init-selector.js.map +1 -0
  12. package/dist/src/product-options/option.vlaicu.d.ts +4 -0
  13. package/dist/src/product-options/option.vlaicu.js +10 -0
  14. package/dist/src/product-options/option.vlaicu.js.map +1 -0
  15. package/dist/src/products/product.base.d.ts +6 -2
  16. package/dist/src/products/product.base.js +30 -4
  17. package/dist/src/products/product.base.js.map +1 -1
  18. package/dist/src/products/product.init-selector.d.ts +2 -1
  19. package/dist/src/products/product.init-selector.js +4 -0
  20. package/dist/src/products/product.init-selector.js.map +1 -1
  21. package/dist/src/products/product.vlaicu.d.ts +2 -1
  22. package/dist/src/products/product.vlaicu.js +42 -17
  23. package/dist/src/products/product.vlaicu.js.map +1 -1
  24. package/dist/src/providers/provider.base.d.ts +2 -1
  25. package/dist/src/providers/provider.base.js +4 -5
  26. package/dist/src/providers/provider.base.js.map +1 -1
  27. package/dist/src/providers/provider.init-selector.d.ts +3 -1
  28. package/dist/src/providers/provider.init-selector.js +5 -1
  29. package/dist/src/providers/provider.init-selector.js.map +1 -1
  30. package/dist/src/providers/provider.vlaicu.d.ts +10 -1
  31. package/dist/src/providers/provider.vlaicu.js +10 -1
  32. package/dist/src/providers/provider.vlaicu.js.map +1 -1
  33. package/dist/src/store.constants.d.ts +7 -0
  34. package/dist/src/store.constants.js +8 -0
  35. package/dist/src/store.constants.js.map +1 -0
  36. package/dist/src/store.d.ts +8 -12
  37. package/dist/src/store.js +2 -7
  38. package/dist/src/store.js.map +1 -1
  39. package/package.json +5 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,31 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.3.2](https://github.com/bitdefender/dex-core/compare/@repobit/dex-store@1.3.1...@repobit/dex-store@1.3.2) (2026-01-19)
7
+
8
+ **Note:** Version bump only for package @repobit/dex-store
9
+
10
+
11
+
12
+
13
+
14
+ ## [1.3.1](https://github.com/bitdefender/dex-core/compare/@repobit/dex-store@1.3.0...@repobit/dex-store@1.3.1) (2025-12-16)
15
+
16
+ **Note:** Version bump only for package @repobit/dex-store
17
+
18
+
19
+
20
+
21
+
22
+ ## [1.3.0](https://github.com/bitdefender/dex-core/compare/@repobit/dex-store@1.2.6...@repobit/dex-store@1.3.0) (2025-12-12)
23
+
24
+
25
+ ### Features
26
+
27
+ * **DEX-25763:** updated buy link bundles for Vlaicu, added test for bundle buy link +updated mocks ([7dad3e6](https://github.com/bitdefender/dex-core/commit/7dad3e68d97432ab2a245548dd97c2372d4e0e1e))
28
+
29
+
30
+
6
31
  ## [1.2.6](https://github.com/bitdefender/dex-core/compare/@repobit/dex-store@1.2.5...@repobit/dex-store@1.2.6) (2025-11-18)
7
32
 
8
33
 
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025-present Bitdefender
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -1 +1 @@
1
- {"version":3,"file":"adaptor.base.js","sourceRoot":"","sources":["../../../src/adaptors/adaptor.base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adaptor.base.js","sourceRoot":"","sources":["../../../src/adaptors/adaptor.base.ts"],"names":[],"mappings":"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","sourcesContent":["export type OptionsMapping = Record<number, Record<number, { devices: number, subscription: number }>>\n\nexport type ProductsMapping = Map<string, {\n id : string;\n options?: Promise<OptionsMapping | null>\n}>\n\nexport type Product = { id: string; devices: number; subscription: number }\n\nexport type OptionsSheet = {\n total : number;\n offset: number;\n limit : number;\n data: Array<{\n fromDevices : number;\n fromSubscription: number;\n toDevices : number;\n toSubscription : number;\n }>;\n columns: Array<\"fromDevices\" | \"fromSubscription\" | \"toDevices\" | \"toSubscription\">;\n \":type\": \"sheet\";\n};\n\nexport type ProductIdSheet = {\n total : number;\n offset: number;\n limit : number;\n data: Array<{\n from: string;\n to : string;\n }>;\n columns: Array<\"from\" | \"to\">;\n \":type\": \"sheet\";\n};\n\nexport class Adaptor {\n private mapper: ProductsMapping | null;\n\n constructor(mapper: ProductsMapping | null) {\n this.mapper = mapper;\n }\n\n static async create() {\n const productsMapping = await this.getMappings();\n return new Adaptor(productsMapping);\n }\n\n async adaptTo(param: { id: string }): Promise<{ id: string }>;\n async adaptTo(param: { id: string; devices: number; subscription: number }): Promise<{ id: string; devices: number; subscription: number }>;\n async adaptTo(param: { id: string; devices?: number; subscription?: number }): Promise<{ id: string; devices?: number; subscription?: number }> {\n const { id, devices, subscription } = param;\n const product:{ id: string; devices?: number; subscription?: number } = { id, devices, subscription };\n\n if (!this.mapper) {\n return product\n }\n\n const mappedProduct = this.mapper.get(id);\n\n if (mappedProduct) {\n product.id = mappedProduct.id;\n } else {\n return product;\n }\n\n if (mappedProduct && !mappedProduct?.options) {\n mappedProduct.options = this.getMappingForId(id);\n }\n\n if (devices && subscription) {\n const options = await mappedProduct!.options;\n if (options) {\n const option = options[devices]?.[subscription];\n if (option) {\n product.devices = option.devices;\n product.subscription = option.subscription;\n }\n }\n }\n\n return product;\n }\n\n static async getMappings() {\n try {\n const response = await fetch(\"https://www.bitdefender.com/common/store-config/init-to-vlaicu-mappings.json?sheet=id-mappings\");\n if (!response.ok) {\n console.error(`${response.status}: ${response.statusText}`);\n return null;\n }\n\n const sheet:ProductIdSheet = await response.json();\n const products:ProductsMapping = new Map();\n\n for (const product of sheet.data) {\n const { from, to } = product;\n\n products.set(from, { id: to })\n }\n\n return products;\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n private async getMappingForId(id: string) {\n try {\n const response = await fetch(`https://www.bitdefender.com/common/store-config/init-to-vlaicu-mappings.json?sheet=${id}`);\n\n if (!response.ok) {\n console.error(`${response.status}: ${response.statusText}`);\n return null;\n }\n\n const sheet:OptionsSheet = await response.json();\n\n const options: OptionsMapping = {};\n\n for (const option of sheet.data) {\n const\n fromDevices = Number(option.fromDevices),\n fromSubscription = Number(option.fromSubscription),\n toDevices = Number(option.toDevices),\n toSubscription = Number(option.toSubscription)\n\n if (!options[fromDevices]) {\n options[fromDevices] = {};\n }\n\n options[fromDevices][fromSubscription] = {\n devices : toDevices,\n subscription: toSubscription\n }\n }\n\n return options;\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"format-price.js","sourceRoot":"","sources":["../../src/format-price.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAe,EAAE,EAAE;IAChF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,IAAI;SACZ,YAAY,CAAC,MAAM,EAAE;QACpB,KAAK,EAAkB,UAAU;QACjC,QAAQ;QACR,qBAAqB,EAAE,CAAC;QACxB,qBAAqB,EAAE,CAAC;KAAE,CAAC;SAC5B,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC,CAAC"}
1
+ {"version":3,"file":"format-price.js","sourceRoot":"","sources":["../../src/format-price.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAe,EAAE,EAAE;IAChF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,IAAI;SACZ,YAAY,CAAC,MAAM,EAAE;QACpB,KAAK,EAAkB,UAAU;QACjC,QAAQ;QACR,qBAAqB,EAAE,CAAC;QACxB,qBAAqB,EAAE,CAAC;KAAE,CAAC;SAC5B,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC,CAAC","sourcesContent":["export type PriceFormat = {\n price : number;\n currency?: string;\n locale? : Intl.UnicodeBCP47LocaleIdentifier;\n};\n\nexport const formatPrice = ({ price, currency, locale = \"en-us\" }: PriceFormat) => {\n if (!price) {\n return \"\";\n }\n\n if (!currency) {\n return price;\n }\n\n return new Intl\n .NumberFormat(locale, {\n style : \"currency\",\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 2 })\n .format(price);\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EACL,OAAO,EAAE,aAAa,EAAE,KAAK,EAC9B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EACL,OAAO,EAAE,aAAa,EAAE,KAAK,EAC9B,CAAC","sourcesContent":["import { ProductBundleOption, ProductOption } from \"./product-options/option.base\";\nimport { Product } from \"./products/product.base\";\nimport { Store } from \"./store\";\n\nexport {\n Product, ProductOption, Store\n};\n\nexport type { ProductBundleOption };\n\n"]}
@@ -9,6 +9,10 @@ export type ProductOptionData = {
9
9
  subscription: number;
10
10
  buyLink: string;
11
11
  trialLink?: string;
12
+ verifoneOptionCode?: string;
13
+ verifoneProductId?: string;
14
+ coupon?: string;
15
+ checkoutPaymentPeriod?: string;
12
16
  bundle?: ProductBundleOption[];
13
17
  };
14
18
  export type ProductBundleOption = {
@@ -27,6 +31,10 @@ export declare class ProductOption {
27
31
  private trialLink?;
28
32
  private discount;
29
33
  private bundle;
34
+ private verifoneOptionCode?;
35
+ private verifoneProductId?;
36
+ private coupon?;
37
+ private checkoutPaymentPeriod?;
30
38
  constructor(option: ProductOptionData);
31
39
  getProduct(): Product;
32
40
  getVariation(): string;
@@ -64,6 +72,10 @@ export declare class ProductOption {
64
72
  getSubscription(): number;
65
73
  getBundle(): ProductBundleOption[];
66
74
  getTrialLink(): string | undefined;
75
+ getCheckoutPaymentPeriod(): string | undefined;
76
+ getCoupon(): string | undefined;
77
+ getVerifoneOptionCode(): string | undefined;
78
+ getVerifoneProductId(): string | undefined;
67
79
  getOption(option: {
68
80
  devices?: number;
69
81
  subscription?: number;
@@ -9,6 +9,10 @@ export class ProductOption {
9
9
  trialLink;
10
10
  discount;
11
11
  bundle;
12
+ verifoneOptionCode;
13
+ verifoneProductId;
14
+ coupon;
15
+ checkoutPaymentPeriod;
12
16
  constructor(option) {
13
17
  this.product = option.product;
14
18
  this.price = {
@@ -33,6 +37,10 @@ export class ProductOption {
33
37
  }
34
38
  };
35
39
  this.bundle = option.bundle || [];
40
+ this.verifoneOptionCode = option.verifoneOptionCode;
41
+ this.verifoneProductId = option.verifoneProductId;
42
+ this.checkoutPaymentPeriod = option.checkoutPaymentPeriod;
43
+ this.coupon = option.coupon;
36
44
  }
37
45
  getProduct() {
38
46
  return this.product;
@@ -82,6 +90,18 @@ export class ProductOption {
82
90
  getTrialLink() {
83
91
  return this.trialLink;
84
92
  }
93
+ getCheckoutPaymentPeriod() {
94
+ return this.checkoutPaymentPeriod;
95
+ }
96
+ getCoupon() {
97
+ return this.coupon;
98
+ }
99
+ getVerifoneOptionCode() {
100
+ return this.verifoneOptionCode;
101
+ }
102
+ getVerifoneProductId() {
103
+ return this.verifoneProductId;
104
+ }
85
105
  async getOption(option) {
86
106
  if (!option) {
87
107
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"option.base.js","sourceRoot":"","sources":["../../../src/product-options/option.base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"option.base.js","sourceRoot":"","sources":["../../../src/product-options/option.base.ts"],"names":[],"mappings":"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","sourcesContent":["import { Product } from \"@/products/product.base\";\nimport { ProductSelector } from \"@/store\";\n\ntype PriceType = {\n value : number;\n monthly: number;\n};\n\ntype DiscountType = {\n value : number;\n percentage: number;\n monthly: {\n value : number;\n percentage: number;\n }\n};\n\ntype GetOption = number | \"prev\" | \"next\";\n\nexport type ProductOptionData = {\n product : Product;\n price : number;\n discountedPrice : number;\n devices : number;\n subscription : number;\n buyLink : string;\n trialLink? : string;\n verifoneOptionCode? : string;\n verifoneProductId? : string;\n coupon? : string;\n checkoutPaymentPeriod?: string;\n bundle? : ProductBundleOption[];\n};\n\nexport type ProductBundleOption = {\n option : ProductOption;\n devicesFixed ?: boolean;\n subscriptionFixed?: boolean;\n}\n\nexport class ProductOption {\n private product : Product;\n private price : PriceType;\n private discountedPrice : PriceType;\n private devices : number;\n private subscription : number;\n private currency? : string;\n private buyLink : string;\n private trialLink? : string;\n private discount : DiscountType;\n private bundle : ProductBundleOption[];\n private verifoneOptionCode? : string;\n private verifoneProductId? : string;\n private coupon? : string;\n private checkoutPaymentPeriod?: string;\n\n constructor(option: ProductOptionData) {\n this.product = option.product;\n this.price = {\n value : option.price,\n monthly: Number(Number(option.price / option.subscription).toFixed(2))\n };\n this.discountedPrice = {\n value : option.discountedPrice,\n monthly: Number(Number(option.discountedPrice / option.subscription).toFixed(2))\n };\n this.devices = option.devices;\n this.subscription = option.subscription;\n this.currency = option.product.getCurrency();\n this.buyLink = option.buyLink;\n this.trialLink = option.trialLink;\n this.discount = {\n value : Math.round((option.price - option.discountedPrice + Number.EPSILON) * 100) / 100,\n percentage: Math.round(((option.price - option.discountedPrice) / option.price * 100)),\n monthly : {\n value : Math.round((option.price - option.discountedPrice + Number.EPSILON) * 100 / option.subscription) / 100,\n percentage: Math.round(((option.price - option.discountedPrice) / option.price * 100 / option.subscription))\n }\n };\n this.bundle = option.bundle || [];\n this.verifoneOptionCode = option.verifoneOptionCode;\n this.verifoneProductId = option.verifoneProductId;\n this.checkoutPaymentPeriod = option.checkoutPaymentPeriod;\n this.coupon = option.coupon;\n }\n\n getProduct() {\n return this.product;\n }\n\n getVariation() {\n return `${this.devices}-${this.subscription}`;\n }\n\n getPrice(): string;\n getPrice(param: { monthly?: boolean; currency?: true; }): string;\n getPrice(param: { monthly?: boolean; currency: false; }): number;\n getPrice(param?: { monthly?: boolean; currency?: boolean; }) {\n const { monthly = false, currency = true } = param ?? {};\n\n const rawPrice = monthly ? this.price.monthly : this.price.value;\n\n if (currency) {\n return this.product.getStore().formatPrice({ price: rawPrice, currency: this.currency });\n }\n\n return rawPrice;\n }\n\n getDiscountedPrice(): string;\n getDiscountedPrice(param: { monthly?: boolean; currency?: true; }): string;\n getDiscountedPrice(param: { monthly?: boolean; currency: false; }): number;\n getDiscountedPrice(param?: { monthly?: boolean; currency?: boolean; }) {\n const { monthly = false, currency = true } = param ?? {};\n\n const rawPrice = monthly ? this.discountedPrice.monthly : this.discountedPrice.value;\n\n if (currency) {\n return this.product.getStore().formatPrice({ price: rawPrice, currency: this.currency });\n }\n\n return rawPrice;\n }\n\n getDiscount(): string;\n getDiscount(param: { percentage?: boolean; symbol?: true; monthly?: boolean }): string;\n getDiscount(param: { percentage?: boolean; symbol: false; monthly?: boolean }): number;\n getDiscount(param?: { percentage?: boolean; symbol?: boolean; monthly?: boolean }) {\n const { percentage = false, symbol = true, monthly = false } = param ?? {};\n\n const discount = monthly ? this.discount.monthly : this.discount;\n const rawValue = percentage ? discount.percentage : discount.value;\n\n if (symbol) {\n return percentage\n ? (rawValue ? `${rawValue}%` : '')\n : this.product.getStore().formatPrice({ price: rawValue, currency: this.currency });\n }\n\n return rawValue;\n }\n\n getBuyLink() {\n return this.buyLink;\n }\n\n getDevices() {\n return this.devices;\n }\n\n getSubscription() {\n return this.subscription;\n }\n\n getBundle() {\n return this.bundle;\n }\n\n getTrialLink() {\n return this.trialLink;\n }\n\n getCheckoutPaymentPeriod() {\n return this.checkoutPaymentPeriod;\n }\n\n getCoupon() {\n return this.coupon;\n }\n\n getVerifoneOptionCode() {\n return this.verifoneOptionCode;\n }\n\n getVerifoneProductId() {\n return this.verifoneProductId;\n }\n\n async getOption(option: { devices?: number; subscription?: number }): Promise<ProductOption | undefined> {\n if (!option) {\n return undefined;\n }\n\n const devices = option.devices ?? this.devices;\n const subscription = option.subscription ?? this.subscription;\n\n // Build new bundle, mapping fixed options and fetching new ones\n const newBundle = await Promise.all(\n this.bundle.map(async b => {\n const nextOption = await b.option.getOption({\n devices : b.devicesFixed ? b.option.getDevices() : devices,\n subscription: b.subscriptionFixed ? b.option.getSubscription() : subscription\n });\n return { ...b, option: nextOption } as ProductBundleOption;\n })\n );\n\n // Ensure all bundle options are defined\n const isDefinedBundle = (b: ProductBundleOption): boolean => b.option != null;\n if (!newBundle.every(isDefinedBundle)) {\n return undefined;\n }\n\n // Return the new ProductOption\n return this.product.getOption({\n devices : devices,\n subscription: subscription,\n bundle : newBundle\n });\n }\n\n async nextOption(option:\n | { devices: GetOption; subscription?: GetOption; }\n | { devices?: GetOption, subscription: GetOption; }\n | { devices: GetOption; subscription: GetOption; }\n ) {\n if (!option) {\n return undefined;\n }\n\n const devices = this.product.getDevices();\n const subscriptions = this.product.getSubscriptions();\n // Determine target indices for devices and subscriptions\n const computeIndex = (\n currentIndex: number,\n values: number[],\n opt?: GetOption\n ): number => {\n if (opt === undefined) {\n // no change requested\n return currentIndex;\n } else if (opt === 'next') {\n return currentIndex + 1;\n } else if (opt === 'prev') {\n return currentIndex - 1;\n } else {\n const numeric = currentIndex + Number(opt);\n return values.findIndex(v => v === numeric);\n }\n };\n\n // Current indices\n const idxDevice = devices.values.findIndex(v => v === this.devices);\n const idxSubscription = subscriptions.values.findIndex(v => v === this.subscription);\n\n // Next indices\n const targetDeviceIdx = computeIndex(idxDevice, devices.values, option.devices);\n const targetSubscriptionIdx = computeIndex(idxSubscription, subscriptions.values, option.subscription);\n\n // Calculate new values\n const newDevice = devices.values[targetDeviceIdx];\n const newSubscription = subscriptions.values[targetSubscriptionIdx];\n\n // Bail out if out of range\n if (\n targetDeviceIdx < 0 ||\n targetSubscriptionIdx < 0 ||\n newDevice > devices.max ||\n newSubscription > subscriptions.max ||\n newDevice < devices.min ||\n newSubscription < subscriptions.min\n ) {\n return undefined;\n }\n\n return this.getOption({ devices: newDevice, subscription: newSubscription })\n }\n\n async toogleBundle(bundle: ProductBundleOption) {\n const getKey = (option: ProductOption) => {\n return `${option.getProduct().getId()}${option.getProduct().getCampaign()}${option.getDevices()}${option.getSubscription()}`;\n }\n const idx = this.bundle.findIndex(b => getKey(b.option) === getKey(bundle.option));\n let newBundle;\n if (idx !== -1) {\n newBundle = this.bundle.toSpliced(idx, 1);\n } else {\n newBundle = this.bundle.toSpliced(0, 0, bundle);\n }\n\n return this.product.getOption({\n devices : this.devices,\n subscription: this.subscription,\n bundle : newBundle\n });\n }\n\n async switchProduct(productSelector: ProductSelector) {\n const product = await this.product.getStore().getProduct(productSelector);\n\n return product?.getOption({\n devices : this.devices,\n subscription: this.subscription,\n bundle : this.bundle\n });\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { ProductOption } from "./option.base.js";
2
+ export declare class InitSelectorOption extends ProductOption {
3
+ }
@@ -0,0 +1,4 @@
1
+ import { ProductOption } from "./option.base.js";
2
+ export class InitSelectorOption extends ProductOption {
3
+ }
4
+ //# sourceMappingURL=option.init-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option.init-selector.js","sourceRoot":"","sources":["../../../src/product-options/option.init-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,OAAO,kBAAmB,SAAQ,aAAa;CAEpD","sourcesContent":["import { ProductOption } from \"./option.base\";\n\nexport class InitSelectorOption extends ProductOption {\n\n}"]}
@@ -0,0 +1,4 @@
1
+ import { ProductOption } from "./option.base.js";
2
+ export declare class VlaicuOption extends ProductOption {
3
+ getBuyLink(): string;
4
+ }
@@ -0,0 +1,10 @@
1
+ import { ProductOption } from "./option.base.js";
2
+ export class VlaicuOption extends ProductOption {
3
+ getBuyLink() {
4
+ const buyLinkUrl = new URL(super.getBuyLink());
5
+ buyLinkUrl.searchParams.set("SHOPURL", `${window.location.origin}/${window.location.pathname.split('/')[1]}/`);
6
+ buyLinkUrl.searchParams.set("SRC", `${window.location.origin}${window.location.pathname}`);
7
+ return buyLinkUrl.href;
8
+ }
9
+ }
10
+ //# sourceMappingURL=option.vlaicu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option.vlaicu.js","sourceRoot":"","sources":["../../../src/product-options/option.vlaicu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,OAAO,YAAa,SAAQ,aAAa;IAC7C,UAAU;QACR,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/C,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/G,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE3F,OAAO,UAAU,CAAC,IAAI,CAAC;IACzB,CAAC;CACF","sourcesContent":["import { ProductOption } from \"./option.base\";\n\nexport class VlaicuOption extends ProductOption {\n getBuyLink(): string {\n const buyLinkUrl = new URL(super.getBuyLink());\n buyLinkUrl.searchParams.set(\"SHOPURL\", `${window.location.origin}/${window.location.pathname.split('/')[1]}/`);\n buyLinkUrl.searchParams.set(\"SRC\", `${window.location.origin}${window.location.pathname}`);\n\n return buyLinkUrl.href;\n }\n}"]}
@@ -1,5 +1,5 @@
1
1
  import { ProductBundleOption, ProductOption, ProductOptionData } from "../product-options/option.base.js";
2
- import { Store } from "../store.js";
2
+ import type { Store } from "../store.js";
3
3
  export type UnboundProductOptionData = Omit<ProductOptionData, "product">;
4
4
  export type ProductData = {
5
5
  store: Store;
@@ -10,6 +10,7 @@ export type ProductData = {
10
10
  alias: string;
11
11
  currency: string;
12
12
  options: Map<string, UnboundProductOptionData>;
13
+ buyLinkBaseUrl?: string;
13
14
  platformId: string;
14
15
  };
15
16
  export type UnboundProductData = Omit<ProductData, "store">;
@@ -24,7 +25,7 @@ type DevicesType = MinMaxType & {
24
25
  type SubscriptionType = MinMaxType & {
25
26
  values: number[];
26
27
  };
27
- export declare class Product {
28
+ export declare abstract class Product {
28
29
  private store;
29
30
  private name;
30
31
  private campaign?;
@@ -39,7 +40,9 @@ export declare class Product {
39
40
  private discount;
40
41
  private price;
41
42
  private discountedPrice;
43
+ private buyLinkBaseUrl?;
42
44
  constructor(product: ProductData);
45
+ protected abstract _createOption(product: ProductOptionData): ProductOption;
43
46
  getStore(): Store;
44
47
  getId(): string;
45
48
  getAlias(): string;
@@ -48,6 +51,7 @@ export declare class Product {
48
51
  getCampaign(): string | undefined;
49
52
  getCampaignType(): string | undefined;
50
53
  getCurrency(): string;
54
+ getBuyLinkBaseUrl(): string | undefined;
51
55
  getOption(): Promise<ProductOption[]>;
52
56
  getOption(param: {
53
57
  devices: undefined;
@@ -1,5 +1,4 @@
1
- import { ProductOption } from "../product-options/option.base.js";
2
- import { STORE_ADAPTER } from "../store.js";
1
+ import { STORE_ADAPTER, STORE_TRANSFORMERS } from "../store.constants.js";
3
2
  export const SET_OPTION = Symbol("setOption");
4
3
  export class Product {
5
4
  store;
@@ -16,6 +15,7 @@ export class Product {
16
15
  discount;
17
16
  price;
18
17
  discountedPrice;
18
+ buyLinkBaseUrl;
19
19
  constructor(product) {
20
20
  this.store = product.store;
21
21
  this.name = product.name;
@@ -60,10 +60,11 @@ export class Product {
60
60
  }
61
61
  };
62
62
  this.options = new Map();
63
+ this.buyLinkBaseUrl = product.buyLinkBaseUrl;
63
64
  const devices = new Set();
64
65
  const subscriptions = new Set();
65
66
  for (const [key, option] of product.options.entries()) {
66
- const productOption = new ProductOption({ ...option, product: this });
67
+ const productOption = this._createOption({ ...option, product: this });
67
68
  this.options.set(key, productOption);
68
69
  this.price.min = Math.min(productOption.getPrice({ currency: false }), this.price.min);
69
70
  this.price.max = Math.max(productOption.getPrice({ currency: false }), this.price.max);
@@ -111,6 +112,9 @@ export class Product {
111
112
  getCurrency() {
112
113
  return this.currency;
113
114
  }
115
+ getBuyLinkBaseUrl() {
116
+ return this.buyLinkBaseUrl;
117
+ }
114
118
  async getOption(param) {
115
119
  const adaptor = await this.store[STORE_ADAPTER];
116
120
  const { devices, subscription } = await adaptor.adaptTo({
@@ -119,7 +123,29 @@ export class Product {
119
123
  devices: Number(param?.devices)
120
124
  });
121
125
  const bundle = param?.bundle?.filter((option) => Boolean(option));
122
- const makeBundle = async (option, bundle) => new ProductOption({ ...(await this.bundle(option, bundle)), product: this });
126
+ const makeBundle = async (option, bundle) => {
127
+ const bundledOption = await this.bundle(option, bundle);
128
+ const transformer = this.store[STORE_TRANSFORMERS]?.buyLink;
129
+ if (transformer) {
130
+ const productData = {
131
+ name: this.name,
132
+ campaign: this.campaign,
133
+ campaignType: this.campaignType,
134
+ id: this.id,
135
+ alias: this.alias,
136
+ currency: this.currency,
137
+ options: new Map(),
138
+ buyLinkBaseUrl: this.buyLinkBaseUrl,
139
+ platformId: this.platformId
140
+ };
141
+ bundledOption.buyLink = await transformer({
142
+ buyLink: bundledOption.buyLink,
143
+ product: productData,
144
+ option: bundledOption
145
+ });
146
+ }
147
+ return this._createOption({ ...bundledOption, product: this });
148
+ };
123
149
  if (Number(devices) && Number(subscription)) {
124
150
  const option = this.options.get(`${devices}-${subscription}`);
125
151
  if (!option)
@@ -1 +1 @@
1
- {"version":3,"file":"product.base.js","sourceRoot":"","sources":["../../../src/products/product.base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"product.base.js","sourceRoot":"","sources":["../../../src/products/product.base.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProductBundleOption, ProductOption, ProductOptionData } from \"@/product-options/option.base\";\nimport type { Store } from \"@/store\";\nimport { STORE_ADAPTER, STORE_TRANSFORMERS } from \"@/store.constants\";\n\nexport type UnboundProductOptionData = Omit<ProductOptionData, \"product\">\n\nexport type ProductData = {\n store : Store;\n name : string;\n campaign? : string;\n campaignType? : string;\n id : string;\n alias : string;\n currency : string;\n options : Map<string, UnboundProductOptionData>;\n buyLinkBaseUrl?: string;\n platformId : string;\n}\n\nexport type UnboundProductData = Omit<ProductData, \"store\">\n\nexport const SET_OPTION = Symbol(\"setOption\");\n\ntype MinMaxType = {\n min: number,\n max: number\n}\n\ntype PriceType = MinMaxType & {\n monthly: MinMaxType\n}\n\ntype DiscountType = MinMaxType & {\n percentage: MinMaxType\n}\n\ntype DevicesType = MinMaxType & {\n values: number[]\n}\n\ntype SubscriptionType = MinMaxType & {\n values: number[]\n}\n\nexport abstract class Product {\n private store : Store;\n private name : string;\n private campaign? : string;\n private campaignType? : string;\n private id : string;\n private alias : string;\n private currency : string;\n private options : Map<string, ProductOption>;\n private platformId : string;\n private devices : DevicesType;\n private subscriptions : SubscriptionType;\n private discount : DiscountType;\n private price : PriceType;\n private discountedPrice : PriceType;\n private buyLinkBaseUrl ?: string;\n\n constructor(product: ProductData) {\n this.store = product.store;\n this.name = product.name;\n this.campaign = product.campaign;\n this.campaignType = product.campaignType;\n this.id = product.id;\n this.alias = product.alias;\n this.platformId = product.platformId;\n this.currency = product.currency;\n this.devices = {\n min : Number.MAX_SAFE_INTEGER,\n max : Number.MIN_SAFE_INTEGER,\n values: []\n };\n this.subscriptions = {\n min : Number.MAX_SAFE_INTEGER,\n max : Number.MIN_SAFE_INTEGER,\n values: []\n };\n this.discount = {\n min : Number.MAX_SAFE_INTEGER,\n max : Number.MIN_SAFE_INTEGER,\n percentage: {\n min: Number.MAX_SAFE_INTEGER,\n max: Number.MIN_SAFE_INTEGER\n }\n };\n this.price = {\n min : Number.MAX_SAFE_INTEGER,\n max : Number.MIN_SAFE_INTEGER,\n monthly: {\n min: Number.MAX_SAFE_INTEGER,\n max: Number.MIN_SAFE_INTEGER\n }\n };\n this.discountedPrice = {\n min : Number.MAX_SAFE_INTEGER,\n max : Number.MIN_SAFE_INTEGER,\n monthly: {\n min: Number.MAX_SAFE_INTEGER,\n max: Number.MIN_SAFE_INTEGER\n }\n };\n this.options = new Map();\n this.buyLinkBaseUrl = product.buyLinkBaseUrl;\n\n const devices = new Set<number>();\n const subscriptions = new Set<number>();\n\n for (const [key, option] of product.options.entries()) {\n const productOption = this._createOption({ ...option, product: this })\n this.options.set(key, productOption)\n\n this.price.min = Math.min(\n productOption.getPrice({ currency: false }),\n this.price.min\n );\n this.price.max = Math.max(\n productOption.getPrice({ currency: false }),\n this.price.max\n );\n\n this.price.monthly.min = Math.min(\n productOption.getPrice({ monthly: true, currency: false }),\n this.price.monthly.min\n );\n this.price.monthly.max = Math.max(\n productOption.getPrice({ monthly: true, currency: false }),\n this.price.monthly.max\n );\n\n this.discountedPrice.min = Math.min(\n productOption.getDiscountedPrice({ currency: false }),\n this.discountedPrice.min\n );\n this.discountedPrice.max = Math.max(\n productOption.getDiscountedPrice({ currency: false }),\n this.discountedPrice.max\n );\n\n this.discountedPrice.monthly.min = Math.min(\n productOption.getDiscountedPrice({ monthly: true, currency: false }),\n this.discountedPrice.monthly.min\n );\n this.discountedPrice.monthly.max = Math.max(\n productOption.getDiscountedPrice({ monthly: true, currency: false }),\n this.discountedPrice.monthly.max\n );\n\n this.devices.min = Math.min(productOption.getDevices(), this.devices.min);\n this.devices.max = Math.max(productOption.getDevices(), this.devices.max);\n devices.add(productOption.getDevices());\n\n this.subscriptions.min = Math.min(productOption.getSubscription(), this.subscriptions.min);\n this.subscriptions.max = Math.max(productOption.getSubscription(), this.subscriptions.max);\n subscriptions.add(productOption.getSubscription());\n\n this.discount.min = Math.min(productOption.getDiscount({ symbol: false }), this.discount.min);\n this.discount.max = Math.max(productOption.getDiscount({ symbol: false }), this.discount.max);\n\n this.discount.percentage.min = Math.min(productOption.getDiscount({ percentage: true, symbol: false }), this.discount.percentage.min);\n this.discount.percentage.max = Math.max(productOption.getDiscount({ percentage: true, symbol: false }), this.discount.percentage.max);\n }\n\n this.devices.values = [...devices];\n this.subscriptions.values = [...subscriptions];\n }\n\n protected abstract _createOption(product: ProductOptionData): ProductOption;\n\n getStore() {\n return this.store;\n }\n\n getId() {\n return this.id;\n }\n\n getAlias() {\n return this.alias;\n }\n\n getPlatformId() {\n return this.platformId;\n }\n\n getName() {\n return this.name;\n }\n\n getCampaign() {\n return this.campaign;\n }\n\n getCampaignType() {\n return this.campaignType;\n }\n\n getCurrency() {\n return this.currency;\n }\n\n getBuyLinkBaseUrl() {\n return this.buyLinkBaseUrl;\n }\n\n async getOption(): Promise<ProductOption[]>\n async getOption(param: { devices: undefined, subscription: undefined, bundle: ProductBundleOption[] }): Promise<(ProductOption | undefined)[]>\n async getOption(param: { devices: number, subscription: number, bundle?: (ProductBundleOption | undefined)[] }): Promise<ProductOption | undefined>\n async getOption(param?: { devices?: number, subscription?: number, bundle?: (ProductBundleOption | undefined)[] }): Promise<ProductOption | (ProductOption | undefined)[] | undefined> {\n const adaptor = await this.store[STORE_ADAPTER];\n const { devices, subscription } = await adaptor.adaptTo({\n id : this.alias,\n subscription: Number(param?.subscription),\n devices : Number(param?.devices)\n });\n const bundle = param?.bundle?.filter((option): option is ProductBundleOption => Boolean(option));\n\n const makeBundle = async (option: ProductOption, bundle: ProductBundleOption[]) => {\n const bundledOption = await this.bundle(option, bundle);\n\n const transformer = this.store[STORE_TRANSFORMERS]?.buyLink;\n if (transformer) {\n const productData: UnboundProductData = {\n name : this.name,\n campaign : this.campaign,\n campaignType : this.campaignType,\n id : this.id,\n alias : this.alias,\n currency : this.currency,\n options : new Map(),\n buyLinkBaseUrl: this.buyLinkBaseUrl,\n platformId : this.platformId\n };\n\n bundledOption.buyLink = await transformer({\n buyLink: bundledOption.buyLink,\n product: productData,\n option : bundledOption\n });\n }\n\n return this._createOption({ ...bundledOption, product: this });\n }\n\n if (Number(devices) && Number(subscription)) {\n const option = this.options.get(`${devices}-${subscription}`);\n if (!option) return undefined;\n\n //bundle with the option\n if (bundle && bundle.length > 0) {\n return await makeBundle(option, bundle);\n } else {\n return option;\n }\n }\n\n if (bundle && bundle.length > 0) {\n const optionsWithBundle = [...this.options.values()].map(option => makeBundle(option, bundle));\n const settled = await Promise.allSettled(optionsWithBundle);\n return settled\n .map((result) => result.status === \"fulfilled\" ? result.value : undefined)\n }\n\n //return all options\n return [...this.options.values()];\n }\n\n [SET_OPTION](param: { options: ProductOption | ProductOption[] }) {\n const options = Array.isArray(param.options) ? param.options : [param.options];\n for (const option of options) {\n const devices = option.getDevices();\n const subscription = option.getSubscription();\n\n this.options.set(`${devices}-${subscription}`, option)\n }\n }\n\n getPrice(): { min: string, max: string };\n getPrice(param: { monthly?: boolean, currency: true }): { min: string, max: string };\n getPrice(param: { monthly?: boolean, currency?: false }): { min: number, max: number };\n getPrice(param?: { monthly?: boolean, currency?: boolean }) {\n const { monthly = false, currency = true } = param ?? {};\n\n const price = monthly\n ? this.price.monthly\n : this.price;\n\n if (currency) {\n return {\n min: this.store.formatPrice({ price: price.min, currency: this.currency }),\n max: this.store.formatPrice({ price: price.max, currency: this.currency })\n };\n }\n\n return {\n min: price.min,\n max: price.max\n };\n }\n\n getDiscountedPrice(): { min: string, max: string };\n getDiscountedPrice(param: { monthly?: boolean, currency: true }): { min: string, max: string };\n getDiscountedPrice(param: { monthly?: boolean, currency?: false }): { min: number, max: number };\n getDiscountedPrice(param?: { monthly?: boolean, currency?: boolean }) {\n const { monthly = false, currency = true } = param ?? {};\n\n const discountedPrice = monthly\n ? this.discountedPrice.monthly\n : this.discountedPrice;\n\n if (currency) {\n return {\n min: this.store.formatPrice({ price: discountedPrice.min, currency: this.currency }),\n max: this.store.formatPrice({ price: discountedPrice.max, currency: this.currency })\n };\n }\n\n return {\n min: discountedPrice.min,\n max: discountedPrice.max\n };\n }\n\n getDiscount(): { min: number, max: number };\n getDiscount(param: { percentage?: boolean; symbol: true }): { min: string, max: string };\n getDiscount(param: { percentage?: boolean; symbol?: false }): { min: number, max: number };\n getDiscount(param?: { percentage?: boolean, symbol?: boolean }) {\n const { percentage = false, symbol = true } = param ?? {};\n\n const discountValue = percentage\n ? this.discount.percentage\n : this.discount;\n\n if (percentage) {\n return symbol\n ? { min: `${discountValue.min}%`, max: `${discountValue.max}%` }\n : { min: discountValue.min, max: discountValue.max }\n }\n\n return symbol\n ? {\n min: this.store.formatPrice({ price: discountValue.min, currency: this.currency }),\n max: this.store.formatPrice({ price: discountValue.max, currency: this.currency })\n }\n : {\n min: discountValue.min,\n max: discountValue.max\n };\n }\n\n getDevices() {\n return this.devices;\n }\n\n getSubscriptions() {\n return this.subscriptions;\n }\n\n protected async bundle(base: ProductOption, options: ProductBundleOption[]): Promise<UnboundProductOptionData> {\n const round = (n: number): number => Number(n.toFixed(2));\n\n // Start with the first option as the base\n const bundledOption: UnboundProductOptionData = {\n price : base.getPrice({ currency: false }),\n discountedPrice: base.getDiscountedPrice({ currency: false }),\n buyLink : base.getBuyLink(),\n subscription : base.getSubscription(),\n devices : base.getDevices(),\n bundle : options\n };\n\n // Process the remaining options\n for (const { option } of options) {\n const optionPrice = option.getPrice({ currency: false });\n const optionDiscountedPrice = option.getDiscountedPrice({ currency: false });\n\n // Always add the option's price to the bundled price\n bundledOption.price = round(bundledOption.price + optionPrice);\n\n if (optionDiscountedPrice) {\n if (bundledOption.discountedPrice) {\n // Both exist: add them together\n bundledOption.discountedPrice = round(bundledOption.discountedPrice + optionDiscountedPrice);\n } else {\n // If no current discountedPrice, base it on the updated price\n bundledOption.discountedPrice = round(bundledOption.price + optionDiscountedPrice);\n }\n } else if (bundledOption.discountedPrice) {\n // If option lacks a discountedPrice but bundledOption already has one,\n // update the bundled price using the existing discounted value.\n bundledOption.price = round(bundledOption.discountedPrice + optionPrice);\n }\n }\n\n return bundledOption;\n }\n}\n"]}
@@ -1,7 +1,8 @@
1
- import { ProductBundleOption, ProductOption } from "../product-options/option.base.js";
1
+ import { ProductBundleOption, ProductOption, ProductOptionData } from "../product-options/option.base.js";
2
2
  import { Product, ProductData, UnboundProductOptionData } from "../products/product.base.js";
3
3
  export declare class InitSelectorProduct extends Product {
4
4
  constructor(product: ProductData);
5
+ protected _createOption(product: ProductOptionData): ProductOption;
5
6
  protected bundle(base: ProductOption, options: ProductBundleOption[]): Promise<UnboundProductOptionData>;
6
7
  private hasVpnOption;
7
8
  private applyVpnBundle;
@@ -1,3 +1,4 @@
1
+ import { InitSelectorOption } from "../product-options/option.init-selector.js";
1
2
  import { Product } from "../products/product.base.js";
2
3
  const bundleIds = {
3
4
  "smallbs.bs_nadrm.bs_wadc": {
@@ -21,6 +22,9 @@ export class InitSelectorProduct extends Product {
21
22
  constructor(product) {
22
23
  super(product);
23
24
  }
25
+ _createOption(product) {
26
+ return new InitSelectorOption(product);
27
+ }
24
28
  async bundle(base, options) {
25
29
  // Get the base bundle from common logic.
26
30
  const bundleOption = await super.bundle(base, options);
@@ -1 +1 @@
1
- {"version":3,"file":"product.init-selector.js","sourceRoot":"","sources":["../../../src/products/product.init-selector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"product.init-selector.js","sourceRoot":"","sources":["../../../src/products/product.init-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProductBundleOption, ProductOption, ProductOptionData } from \"@/product-options/option.base\";\nimport { InitSelectorOption } from \"@/product-options/option.init-selector\";\nimport { Product, ProductData, UnboundProductOptionData } from \"@/products/product.base\";\n\nconst bundleIds = {\n \"smallbs.bs_nadrm.bs_wadc\": {\n id : \"b_wa_na\",\n coupon: \"COUPON.GravityZone-30OFF\"\n },\n \"smallbs.bs_wadc.bs_nadrm\": {\n id : \"b_wa_na\",\n coupon: \"COUPON.GravityZone-30OFF\"\n },\n \"smallbs.bs_wadc\": {\n id : \"b_wa\",\n coupon: \"COUPON.GravityZone-30OFF\"\n },\n \"smallbs.bs_nadrm\": {\n id : \"b_na\",\n coupon: \"COUPON.GravityZone-30OFF\"\n }\n} as const;\n\nexport class InitSelectorProduct extends Product {\n constructor(product: ProductData) {\n super(product);\n }\n\n protected _createOption(product: ProductOptionData): ProductOption {\n return new InitSelectorOption(product);\n }\n\n protected async bundle(\n base: ProductOption,\n options: ProductBundleOption[]\n ): Promise<UnboundProductOptionData> {\n // Get the base bundle from common logic.\n const bundleOption = await super.bundle(base, options);\n\n // First, check for a VPN bundle override.\n if (this.hasVpnOption(base, options.map(o => o.option))) {\n bundleOption.buyLink = this.applyVpnBundle(bundleOption.buyLink);\n return bundleOption;\n }\n\n // Otherwise, check if there's a small business bundle mapping.\n const mapping = this.getSmallBusinessBundleMapping(base, options.map(o => o.option));\n if (mapping) {\n bundleOption.buyLink = this.applySmallBusinessBundle(\n bundleOption.buyLink,\n mapping\n );\n }\n\n return bundleOption;\n }\n\n // Returns true if any option is for the VPN product.\n private hasVpnOption(base: ProductOption, options: ProductOption[]): boolean {\n const isVpnInOptions = options.some(\n option => option.getProduct().getId() === \"com.bitdefender.vpn\"\n )\n\n const isBaseVpn = base.getProduct().getId() === \"com.bitdefender.vpn\";\n\n return isVpnInOptions || isBaseVpn;\n }\n\n // For VPN bundles, we adjust the buyLink by replacing \"buy\" with \"buybundle\".\n private applyVpnBundle(buyLink: string): string {\n return buyLink.replace(\"buy\", \"buybundle\");\n }\n\n // Build the key and lookup a small business bundle mapping, if any.\n private getSmallBusinessBundleMapping(\n base: ProductOption,\n options: ProductOption[]\n ) {\n const baseId = base.getProduct().getId();\n const optionsBundleId = options\n .map(option => option.getProduct().getId())\n .join(\".\");\n const key = `${baseId}.${optionsBundleId}` as keyof typeof bundleIds;\n return bundleIds[key];\n }\n\n // Adjust the buyLink using the small business bundle mapping.\n private applySmallBusinessBundle(\n originalBuyLink: string,\n mapping: { id: string; coupon: string }\n ): string {\n // Create a URL from the original buyLink.\n const url = new URL(originalBuyLink, globalThis?.location?.origin);\n\n // Split the pathname and filter out empty parts.\n const pathParts = url.pathname.split(\"/\").filter(Boolean);\n\n // Expecting a pathname structure like: [site, store, method, _, devices, subscription, pid?]\n if (pathParts.length < 6) {\n // If the structure is unexpected, return the original link.\n return originalBuyLink;\n }\n\n // Destructure expected parts.\n const [site, store, method, , devices, subscription, pid] = pathParts;\n // Build the new path with the bundle mapping's id.\n const newPath = `/${[site, store, method, mapping.id, devices, subscription, pid || mapping.coupon].join(\"/\")}`;\n url.pathname = newPath;\n return url.href;\n }\n}"]}
@@ -1,6 +1,7 @@
1
- import { ProductBundleOption, ProductOption } from "../product-options/option.base.js";
1
+ import { ProductBundleOption, ProductOption, ProductOptionData } from "../product-options/option.base.js";
2
2
  import { Product, ProductData, UnboundProductOptionData } from "../products/product.base.js";
3
3
  export declare class VlaicuProduct extends Product {
4
4
  constructor(product: ProductData);
5
+ protected _createOption(product: ProductOptionData): ProductOption;
5
6
  protected bundle(base: ProductOption, options: ProductBundleOption[]): Promise<UnboundProductOptionData>;
6
7
  }
@@ -1,28 +1,53 @@
1
+ import { VlaicuOption } from "../product-options/option.vlaicu.js";
1
2
  import { Product } from "../products/product.base.js";
2
- import { STORE_LOCALE } from "../store.js";
3
+ import { Constants } from "@repobit/dex-constants";
3
4
  export class VlaicuProduct extends Product {
4
5
  constructor(product) {
5
6
  super(product);
6
7
  }
8
+ _createOption(product) {
9
+ return new VlaicuOption(product);
10
+ }
7
11
  async bundle(base, options) {
8
12
  // Get the base bundle from common logic.
9
13
  const bundleOption = await super.bundle(base, options);
10
- const locale = this.getStore()[STORE_LOCALE];
11
- const campaign = this.getCampaign();
12
- const url = new URL(`https://www.bitdefender.com/p-api/v1/buy-links/locale/${locale}`);
13
- if (campaign) {
14
- url.searchParams.set("campaign", campaign);
15
- }
16
- const bundles = [base, ...options.map(o => o.option)]
17
- .map(option => `${option.getProduct().getId()}|${option.getDevices()}|${option.getSubscription()}`)
18
- .join(",");
19
- if (bundles) {
20
- url.searchParams.set("bundles", bundles);
21
- }
22
- const res = await fetch(url);
23
- if (res.ok) {
24
- const data = await res.json();
25
- bundleOption.buyLink = data.buyLink;
14
+ const baseUrl = this.getBuyLinkBaseUrl();
15
+ if (baseUrl) {
16
+ const provider = baseUrl.includes(Constants.CHECKOUT_LINK_PATH)
17
+ ? Constants.CHECKOUT_PROVIDER
18
+ : Constants.ZUORA_PROVIDER;
19
+ const bundleURL = new URL(baseUrl);
20
+ const allOptionsInBundle = [base, ...options.map(bundleOption => bundleOption.option)];
21
+ switch (provider) {
22
+ case Constants.CHECKOUT_PROVIDER: {
23
+ const bundlesData = allOptionsInBundle
24
+ .reduce((acc, bundle) => {
25
+ acc['COUPON'] = (acc['COUPON'] || []).concat([bundle.getCoupon() || ''].filter(Boolean));
26
+ acc['PRODS'] = (acc['PRODS'] || []).concat([bundle.getVerifoneProductId() || '']);
27
+ acc['QTY'] = (acc['QTY'] || []).concat([1]);
28
+ acc[`OPTIONS${bundle.getVerifoneProductId()}`] = [bundle.getVerifoneOptionCode() || ''];
29
+ return acc;
30
+ }, {});
31
+ Object.entries(bundlesData).forEach(([key, value]) => {
32
+ if (value.length) {
33
+ bundleURL.searchParams.set(key, value.join(','));
34
+ }
35
+ });
36
+ break;
37
+ }
38
+ default: {
39
+ const [baseOption, ...bundleOptions] = allOptionsInBundle;
40
+ bundleURL.searchParams.append('campaign', baseOption.getProduct().getCampaign() || '');
41
+ bundleURL.searchParams.append('product_id', baseOption.getProduct().getId());
42
+ bundleURL.searchParams.append('payment_period', baseOption.getCheckoutPaymentPeriod() || '');
43
+ bundleOptions.forEach(bundleOption => {
44
+ bundleURL.searchParams.append('bundle_id', bundleOption.getProduct().getId());
45
+ bundleURL.searchParams.append('bundle_payment_period', bundleOption.getCheckoutPaymentPeriod() || '');
46
+ });
47
+ break;
48
+ }
49
+ }
50
+ bundleOption.buyLink = bundleURL.href;
26
51
  }
27
52
  return bundleOption;
28
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"product.vlaicu.js","sourceRoot":"","sources":["../../../src/products/product.vlaicu.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAyC,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,OAAO,aAAc,SAAQ,OAAO;IACxC,YAAY,OAAoB;QAC9B,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAES,KAAK,CAAC,MAAM,CACpB,IAAmB,EACnB,OAA8B;QAE9B,yCAAyC;QACzC,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,yDAAyD,MAAM,EAAE,CAAC,CAAA;QAEtF,IAAI,QAAQ,EAAE,CAAC;YACb,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;aAClD,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,IAAI,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;aAClG,IAAI,CAAC,GAAG,CAAC,CAAA;QAEZ,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACtC,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;CACF"}
1
+ {"version":3,"file":"product.vlaicu.js","sourceRoot":"","sources":["../../../src/products/product.vlaicu.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProductBundleOption, ProductOption, ProductOptionData } from \"@/product-options/option.base\";\nimport { VlaicuOption } from \"@/product-options/option.vlaicu\";\nimport { Product, ProductData, UnboundProductOptionData } from \"@/products/product.base\";\nimport { Constants } from \"@repobit/dex-constants\";\n\nexport class VlaicuProduct extends Product {\n constructor(product: ProductData) {\n super(product);\n }\n\n protected _createOption(product: ProductOptionData): ProductOption {\n return new VlaicuOption(product);\n }\n\n protected async bundle(\n base: ProductOption,\n options: ProductBundleOption[]\n ): Promise<UnboundProductOptionData> {\n // Get the base bundle from common logic.\n const bundleOption = await super.bundle(base, options);\n\n const baseUrl = this.getBuyLinkBaseUrl();\n if (baseUrl) {\n const provider = baseUrl.includes(Constants.CHECKOUT_LINK_PATH)\n ? Constants.CHECKOUT_PROVIDER\n : Constants.ZUORA_PROVIDER;\n const bundleURL = new URL(baseUrl);\n const allOptionsInBundle = [base, ...options.map(bundleOption => bundleOption.option)];\n switch (provider) {\n case Constants.CHECKOUT_PROVIDER: {\n const bundlesData = allOptionsInBundle\n .reduce((acc: { [key: string]: (string | number)[] }, bundle) => {\n acc['COUPON'] = (acc['COUPON'] || []).concat([bundle.getCoupon() || ''].filter(Boolean));\n acc['PRODS'] = (acc['PRODS'] || []).concat([bundle.getVerifoneProductId() || '']);\n acc['QTY'] = (acc['QTY'] || []).concat([1]);\n acc[`OPTIONS${bundle.getVerifoneProductId()}`] = [bundle.getVerifoneOptionCode() || ''];\n return acc;\n }, {});\n\n Object.entries(bundlesData).forEach(([key, value]) => {\n if (value.length) {\n bundleURL.searchParams.set(key, value.join(','))\n }\n });\n break;\n }\n default: {\n const [baseOption, ...bundleOptions] = allOptionsInBundle;\n bundleURL.searchParams.append('campaign', baseOption.getProduct().getCampaign() || '');\n bundleURL.searchParams.append('product_id', baseOption.getProduct().getId());\n bundleURL.searchParams.append('payment_period', baseOption.getCheckoutPaymentPeriod() || '');\n\n bundleOptions.forEach(bundleOption => {\n bundleURL.searchParams.append('bundle_id', bundleOption.getProduct().getId());\n bundleURL.searchParams.append('bundle_payment_period', bundleOption.getCheckoutPaymentPeriod() || '');\n });\n break;\n }\n }\n\n bundleOption.buyLink = bundleURL.href;\n }\n\n return bundleOption;\n }\n}"]}
@@ -1,5 +1,5 @@
1
1
  import { Product, UnboundProductData } from "../products/product.base.js";
2
- import { ProductSelector, Store } from "../store.js";
2
+ import type { ProductSelector, Store } from "../store.js";
3
3
  export type ProviderData = {
4
4
  store: Store;
5
5
  };
@@ -15,6 +15,7 @@ export declare abstract class Provider {
15
15
  protected store: Store;
16
16
  constructor({ store }: ProviderData);
17
17
  getProduct(param: ProductSelector): Promise<Product | undefined>;
18
+ protected abstract _getProduct(product: UnboundProductData | undefined): Product | undefined;
18
19
  private applyOverrides;
19
20
  private applyTransformers;
20
21
  private applyTrialLinks;
@@ -1,5 +1,4 @@
1
- import { Product } from "../products/product.base.js";
2
- import { STORE_ADAPTER, STORE_CAMPAIGN, STORE_OVERRIDES, STORE_TRANSFORMERS, STORE_TRIAL_LINKS } from "../store.js";
1
+ import { STORE_ADAPTER, STORE_CAMPAIGN, STORE_OVERRIDES, STORE_TRANSFORMERS, STORE_TRIAL_LINKS } from "../store.constants.js";
3
2
  export const INGNORE_CAMPAIGN = ["ignore", "none", "0"];
4
3
  export class Provider {
5
4
  store;
@@ -14,7 +13,7 @@ export class Provider {
14
13
  data = await this.applyOverrides(data);
15
14
  data = await this.applyTrialLinks(data);
16
15
  data = await this.applyTransformers(data);
17
- return data.product ? new Product({ ...data.product, store: this.store }) : data.product;
16
+ return this._getProduct(data.product);
18
17
  }
19
18
  async applyOverrides(data) {
20
19
  const { overrides, product } = data;
@@ -49,8 +48,8 @@ export class Provider {
49
48
  return data;
50
49
  }
51
50
  for (const option of product.options.values()) {
52
- if (this.store[STORE_TRANSFORMERS]?.option?.buyLink) {
53
- option.buyLink = await this.store[STORE_TRANSFORMERS]?.option?.buyLink(option.buyLink);
51
+ if (this.store[STORE_TRANSFORMERS]?.buyLink) {
52
+ option.buyLink = await this.store[STORE_TRANSFORMERS]?.buyLink({ buyLink: option.buyLink, product, option });
54
53
  }
55
54
  }
56
55
  return data;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.base.js","sourceRoot":"","sources":["../../../src/providers/provider.base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.base.js","sourceRoot":"","sources":["../../../src/providers/provider.base.ts"],"names":[],"mappings":"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","sourcesContent":["import { Product, UnboundProductData, UnboundProductOptionData } from \"@/products/product.base\";\nimport type { ProductSelector, Store } from \"@/store\";\nimport { STORE_ADAPTER, STORE_CAMPAIGN, STORE_OVERRIDES, STORE_TRANSFORMERS, STORE_TRIAL_LINKS } from \"@/store.constants\";\n\nexport type ProviderData = { store: Store };\nexport const INGNORE_CAMPAIGN = [\"ignore\", \"none\", \"0\"];\nexport type FetchedProduct = {\n overrides: {\n oldCampaign?: string,\n newCampaign?: string\n },\n product: UnboundProductData | undefined\n};\n\nexport abstract class Provider {\n protected store: Store;\n\n constructor({ store }: ProviderData) {\n this.store = store;\n }\n\n async getProduct(param: ProductSelector): Promise<Product | undefined> {\n let data = await this.fetch(param);\n\n if (!data) {\n return undefined;\n }\n data = await this.applyOverrides(data);\n data = await this.applyTrialLinks(data);\n data = await this.applyTransformers(data);\n\n return this._getProduct(data.product);\n }\n\n protected abstract _getProduct(product: UnboundProductData | undefined): Product | undefined;\n\n private async applyOverrides(data: FetchedProduct) {\n const { overrides, product } = data;\n\n if (!product) {\n return data;\n }\n\n const ovProduct = this.store[STORE_OVERRIDES]?.[product.id];\n\n if (!ovProduct) {\n return data;\n }\n\n if (!overrides.oldCampaign) {\n return data\n }\n\n const ovOptions = ovProduct[overrides.oldCampaign]?.options;\n\n if (!ovOptions) {\n return data;\n }\n\n for (const [variation, ovOption] of Object.entries(ovOptions)) {\n const option = product.options.get(variation);\n if (!ovOption) {\n product.options.delete(variation);\n } else {\n product.options.set(variation, { ...option, ...ovOption } as UnboundProductOptionData);\n }\n }\n\n return data;\n }\n\n private async applyTransformers(data: FetchedProduct) {\n const { product } = data;\n if (!product) {\n return data;\n }\n\n for (const option of product.options.values()) {\n if (this.store[STORE_TRANSFORMERS]?.buyLink) {\n option.buyLink = await this.store[STORE_TRANSFORMERS]?.buyLink(\n { buyLink: option.buyLink, product, option }\n );\n }\n }\n\n return data;\n }\n\n private async applyTrialLinks(data: FetchedProduct) {\n const { overrides, product } = data;\n\n if (!product) return data;\n\n const trProduct = this.store[STORE_TRIAL_LINKS]?.[product.id];\n if (!trProduct) return data;\n\n const trOption = trProduct[overrides.newCampaign || \"\"] || trProduct.default;\n if (!trOption) return data;\n\n for (const [key, link] of Object.entries(trOption)) {\n const option = product.options.get(key);\n if (option) {\n option.trialLink = link;\n }\n }\n return data;\n }\n\n async getCampaign(id: string, campaign?: string): Promise<string | undefined> {\n if (!campaign && this.store[STORE_OVERRIDES]?.[id]?.default?.campaign) {\n return this.store[STORE_OVERRIDES]?.[id].default.campaign\n }\n\n if (campaign && this.store[STORE_OVERRIDES]?.[id]?.[campaign]?.campaign) {\n return this.store[STORE_OVERRIDES]?.[id]?.[campaign].campaign\n }\n\n return await this.store[STORE_CAMPAIGN]({ id, campaign })\n }\n\n async adaptTo(param: { id: string }): Promise<{ id: string }>;\n async adaptTo(param: { id: string; devices: number; subscription: number }): Promise<{ id: string; devices: number; subscription: number }>;\n async adaptTo(param: { id: string; devices?: number; subscription?: number }): Promise<{ id: string; devices?: number; subscription?: number }> {\n const adaptor = await this.store[STORE_ADAPTER];\n return await adaptor.adaptTo(param);\n }\n\n protected abstract fetch(product: ProductSelector): Promise<FetchedProduct | undefined>;\n}\n"]}
@@ -1,4 +1,5 @@
1
- import { ProductSelector } from "../store.js";
1
+ import { Product, UnboundProductData } from "../products/product.base.js";
2
+ import type { ProductSelector } from "../store.js";
2
3
  import { FetchedProduct, Provider, ProviderData } from "./provider.base.js";
3
4
  export interface FetchResponse {
4
5
  code: number;
@@ -58,6 +59,7 @@ export declare class InitSelectorProvider extends Provider {
58
59
  private country;
59
60
  private language;
60
61
  constructor(config: ProviderData);
62
+ protected _getProduct(product: UnboundProductData | undefined): Product | undefined;
61
63
  fetch({ id, campaign }: ProductSelector): Promise<FetchedProduct | undefined>;
62
64
  private buildPayload;
63
65
  private buildApiURL;
@@ -1,4 +1,5 @@
1
- import { STORE_LOCALE } from "../store.js";
1
+ import { InitSelectorProduct } from "../products/product.init-selector.js";
2
+ import { STORE_LOCALE } from "../store.constants.js";
2
3
  import { INGNORE_CAMPAIGN, Provider } from "./provider.base.js";
3
4
  const countriesMapping = new Map([
4
5
  ["gb", "uk"],
@@ -18,6 +19,9 @@ export class InitSelectorProvider extends Provider {
18
19
  this.language = language;
19
20
  this.country = getCountry(country);
20
21
  }
22
+ _getProduct(product) {
23
+ return product ? new InitSelectorProduct({ ...product, store: this.store }) : product;
24
+ }
21
25
  async fetch({ id, campaign }) {
22
26
  const adaptedId = (await this.adaptTo({ id })).id;
23
27
  const computedCampaign = await this.getCampaign(adaptedId, campaign);
@@ -1 +1 @@
1
- {"version":3,"file":"provider.init-selector.js","sourceRoot":"","sources":["../../../src/providers/provider.init-selector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.init-selector.js","sourceRoot":"","sources":["../../../src/providers/provider.init-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import { Product, UnboundProductData, UnboundProductOptionData } from \"@/products/product.base.js\";\nimport { InitSelectorProduct } from \"@/products/product.init-selector.js\";\nimport { STORE_LOCALE } from \"@/store.constants\";\nimport type { ProductSelector } from \"@/store.js\";\nimport { FetchedProduct, INGNORE_CAMPAIGN, Provider, ProviderData } from \"./provider.base.js\";\n\nexport interface FetchResponse {\n code: number;\n data: {\n product: ProductData;\n config : ConfigData;\n };\n}\n\nexport interface ProductData {\n product_id : string;\n product_name : string;\n product_type : string;\n product_alias : string;\n product_active: string;\n base_uri : string;\n variations : VariationsData;\n}\n\nexport type VariationsData = Record<string, Record<string, VariationData>>;\n\nexport interface VariationData {\n product_id : string;\n region_id : string;\n variation_id : string;\n platform_id : string;\n platform_product_id : string;\n price : string;\n currency_id : string;\n in_selector : string;\n active_platform : string;\n variation_active : string;\n avangate_variation_prefix: string;\n variation : VariationDetail;\n currency_label : string;\n currency_iso : string;\n discount? : DiscountData;\n promotion? : string;\n promotion_functions? : string;\n}\n\nexport interface VariationDetail {\n variation_id : string;\n variation_name : string;\n dimension_id : string;\n dimension_value: string;\n years : string;\n}\n\nexport interface DiscountData {\n discounted_price: string;\n discount_value : string;\n discount_type : number;\n}\n\nexport interface ConfigData {\n country_code: string;\n extra_params: {\n pid: string | null;\n };\n}\n\nconst countriesMapping = new Map([\n [\"gb\", \"uk\"],\n [\"ch\", \"de\"],\n [\"at\", \"de\"],\n [\"us\", \"us\"],\n [\"mx\", \"en\"],\n [\"nz\", \"au\"]\n]);\n\nconst getCountry = (country: string) => countriesMapping.get(country) ?? country;\n\nexport class InitSelectorProvider extends Provider {\n private country : string;\n private language: string;\n\n constructor(config: ProviderData) {\n super(config)\n const [language, country] = this.store[STORE_LOCALE].split(\"-\");\n this.language = language;\n this.country = getCountry(country);\n }\n\n protected _getProduct(product: UnboundProductData | undefined): Product | undefined {\n return product ? new InitSelectorProduct({ ...product, store: this.store }) : product;\n }\n\n async fetch({ id, campaign }: ProductSelector): Promise<FetchedProduct | undefined> {\n const adaptedId = (await this.adaptTo({ id })).id;\n const computedCampaign = await this.getCampaign(adaptedId, campaign);\n const payload = this.buildPayload(id, computedCampaign);\n const apiURL = this.buildApiURL();\n\n let fetchResponse: FetchResponse;\n try {\n const formData = new FormData();\n formData.append(\"data\", payload);\n const response = await fetch(apiURL.href, {\n method: \"post\",\n body : formData\n });\n if (!response.ok) return undefined;\n\n fetchResponse = await response.json();\n\n // Ensure variations exist.\n if (!fetchResponse.data.product.variations ||\n Object.keys(fetchResponse.data.product.variations).length === 0) {\n return undefined;\n }\n } catch (error) {\n console.error(\"Failed to fetch product:\", error);\n return undefined;\n }\n\n // Process variations into option data.\n const { options, platformId, currency } = await this.processVariations(\n id,\n fetchResponse.data.product.variations,\n computedCampaign\n );\n\n // Return an UnboundProductData.\n return {\n overrides: {\n oldCampaign: campaign,\n newCampaign: computedCampaign\n },\n product: {\n id : adaptedId,\n alias : id,\n name : fetchResponse.data.product.product_name,\n campaign: computedCampaign,\n currency,\n platformId,\n options\n }\n }\n }\n\n private buildPayload(id: string, campaign?: string): string {\n const config: {\n country_code : string,\n ignore_promotions?: boolean\n extra_params?: {\n pid: string | null\n }\n } = { country_code: this.country };\n\n if (INGNORE_CAMPAIGN.includes(String(campaign))) {\n config.ignore_promotions = true;\n } else {\n config.extra_params = { pid: campaign || null };\n }\n\n return JSON.stringify({\n ev : 1,\n product_id: id,\n config\n });\n }\n\n private buildApiURL(): URL {\n const url = new URL(\"https://www.bitdefender.com/site/Store/ajax\");\n url.searchParams.set(\"force_country\", this.country);\n return url;\n }\n\n private async processVariations(\n id: string,\n variations: Record<string, Record<string, VariationData>>,\n campaign?: string\n ): Promise<{ options: Map<string, UnboundProductOptionData>; platformId: string; currency: string }> {\n const options = new Map<string, UnboundProductOptionData>();\n let platformId = \"\";\n let currency = \"\";\n\n // Loop through devices and subscriptions.\n for (const [devices, devicesValue] of Object.entries(variations)) {\n for (const [subscription, subscriptionsValue] of Object.entries(devicesValue)) {\n const adaptedVariation = await this.adaptTo({\n id,\n subscription: Number(subscription),\n devices : Number(devices)\n });\n const variationData: UnboundProductOptionData = {\n devices : adaptedVariation.devices,\n subscription : adaptedVariation.subscription,\n price : Number(subscriptionsValue.price),\n discountedPrice: Number(subscriptionsValue.price === subscriptionsValue.discount?.discounted_price ? NaN : subscriptionsValue.discount?.discounted_price),\n buyLink : \"\", // To be computed below.,\n bundle : []\n };\n\n // Capture common info.\n platformId = subscriptionsValue.platform_product_id;\n currency = subscriptionsValue.currency_iso;\n campaign = campaign || subscriptionsValue.promotion;\n\n //compute buy link\n variationData.buyLink = this.buildBuyLink(id, variationData, subscriptionsValue, campaign);\n\n options.set(`${adaptedVariation.devices}-${adaptedVariation.subscription}`, variationData);\n }\n }\n return { options, platformId, currency };\n }\n\n private buildBuyLink(id: string, variation: { devices: number; subscription: number }, subscriptionsValue: VariationData, campaign?: string): string {\n const buyLinkRouteParams = [\"buy\", id, variation.devices, variation.subscription].join(\"/\");\n // Build base URL; include campaign pid if available.\n const pathSuffix = campaign ? `pid.${campaign}` : \"\";\n const url = new URL(`https://www.bitdefender.com/site/Store/${buyLinkRouteParams}/${pathSuffix}`);\n url.searchParams.set(\"CURRENCY\", subscriptionsValue.currency_iso);\n url.searchParams.set(\"DCURRENCY\", subscriptionsValue.currency_iso);\n url.searchParams.set(\"CART\", \"1\");\n url.searchParams.set(\"CARD\", \"2\");\n url.searchParams.set(\"SHORT_FORM\", \"1\");\n url.searchParams.set(\"LANG\", this.language);\n url.searchParams.set(\"force_country\", this.country);\n return url.href;\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
- import { ProductSelector } from "../store.js";
1
+ import { Product, UnboundProductData } from "../products/product.base.js";
2
+ import type { ProductSelector } from "../store.js";
2
3
  import { FetchedProduct, Provider, ProviderData } from "./provider.base.js";
3
4
  export interface FetchResponse {
4
5
  code: number;
@@ -6,12 +7,14 @@ export interface FetchResponse {
6
7
  campaign: string;
7
8
  campaignType: string;
8
9
  platformProductId: string;
10
+ buyLinkBaseUrl?: string;
9
11
  verifoneProductCode: string;
10
12
  product: ProductData;
11
13
  }
12
14
  export interface ProductData {
13
15
  productId: string;
14
16
  productName: string;
17
+ buyLinkBaseUrl?: string;
15
18
  options: OptionData[];
16
19
  }
17
20
  export interface OptionData {
@@ -23,9 +26,15 @@ export interface OptionData {
23
26
  discountAmount: number;
24
27
  discountPercentage: number;
25
28
  buyLink: string;
29
+ verifoneOptionCode?: string;
30
+ verifoneProductId?: string;
31
+ coupon?: string;
32
+ checkoutPaymentPeriod?: string;
33
+ optionCode?: string;
26
34
  }
27
35
  export declare class VlaicuProvider extends Provider {
28
36
  constructor(param: ProviderData);
37
+ protected _getProduct(product: UnboundProductData | undefined): Product | undefined;
29
38
  fetch({ id, campaign }: ProductSelector): Promise<FetchedProduct | undefined>;
30
39
  private buildApiURL;
31
40
  private processVariations;
@@ -1,9 +1,13 @@
1
- import { STORE_LOCALE } from "../store.js";
1
+ import { VlaicuProduct } from "../products/product.vlaicu.js";
2
+ import { STORE_LOCALE } from "../store.constants.js";
2
3
  import { INGNORE_CAMPAIGN, Provider } from "./provider.base.js";
3
4
  export class VlaicuProvider extends Provider {
4
5
  constructor(param) {
5
6
  super(param);
6
7
  }
8
+ _getProduct(product) {
9
+ return product ? new VlaicuProduct({ ...product, store: this.store }) : product;
10
+ }
7
11
  async fetch({ id, campaign }) {
8
12
  const adaptedId = (await this.adaptTo({ id })).id;
9
13
  const computedCampaign = await this.getCampaign(adaptedId, campaign);
@@ -38,6 +42,7 @@ export class VlaicuProvider extends Provider {
38
42
  name: fetchResponse.product.productName,
39
43
  campaign: computedCampaign || fetchResponse.campaign,
40
44
  campaignType: fetchResponse.campaignType || '',
45
+ buyLinkBaseUrl: fetchResponse.buyLinkBaseUrl,
41
46
  currency,
42
47
  platformId: fetchResponse.platformProductId,
43
48
  options
@@ -63,6 +68,10 @@ export class VlaicuProvider extends Provider {
63
68
  price: Number(variation.price),
64
69
  discountedPrice: Number(variation.price === variation.discountedPrice ? NaN : variation.discountedPrice),
65
70
  buyLink: variation.buyLink,
71
+ verifoneOptionCode: variation.verifoneOptionCode,
72
+ verifoneProductId: variation.verifoneProductId,
73
+ coupon: variation.coupon,
74
+ checkoutPaymentPeriod: variation.checkoutPaymentPeriod,
66
75
  bundle: []
67
76
  };
68
77
  // Capture common info.
@@ -1 +1 @@
1
- {"version":3,"file":"provider.vlaicu.js","sourceRoot":"","sources":["../../../src/providers/provider.vlaicu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.vlaicu.js","sourceRoot":"","sources":["../../../src/providers/provider.vlaicu.ts"],"names":[],"mappings":"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","sourcesContent":["import { Product, UnboundProductData, UnboundProductOptionData } from \"@/products/product.base.js\";\nimport { VlaicuProduct } from \"@/products/product.vlaicu.js\";\nimport { STORE_LOCALE } from \"@/store.constants\";\nimport type { Locale, ProductSelector } from \"@/store.js\";\nimport { FetchedProduct, INGNORE_CAMPAIGN, Provider, ProviderData } from \"./provider.base.js\";\n\nexport interface FetchResponse {\n code : number;\n message : string;\n campaign : string;\n campaignType : string;\n platformProductId : string;\n buyLinkBaseUrl? : string;\n verifoneProductCode: string;\n product : ProductData;\n}\n\nexport interface ProductData {\n productId : string;\n productName : string;\n buyLinkBaseUrl?: string;\n options : OptionData[];\n}\n\nexport interface OptionData {\n slots : number;\n months : number;\n currency : string;\n price : number;\n discountedPrice : number;\n discountAmount : number;\n discountPercentage : number;\n buyLink : string;\n verifoneOptionCode? : string;\n verifoneProductId? : string;\n coupon? : string;\n checkoutPaymentPeriod?: string;\n optionCode? : string\n}\nexport class VlaicuProvider extends Provider {\n constructor(param: ProviderData) {\n super(param)\n }\n\n protected _getProduct(product: UnboundProductData | undefined): Product | undefined {\n return product ? new VlaicuProduct({ ...product, store: this.store }) : product;\n }\n\n async fetch({ id, campaign }: ProductSelector): Promise<FetchedProduct | undefined> {\n const adaptedId = (await this.adaptTo({ id })).id;\n const computedCampaign = await this.getCampaign(adaptedId, campaign)\n const apiURL = this.buildApiURL(adaptedId, this.store[STORE_LOCALE], computedCampaign);\n\n let fetchResponse: FetchResponse;\n try {\n const response = await fetch(apiURL.href, {\n method : \"get\",\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n\n if (!response.ok) return undefined;\n\n fetchResponse = await response.json();\n } catch (error) {\n console.error(\"Failed to fetch product:\", error);\n return undefined;\n }\n\n // Process variations into option data.\n const { options, currency } = await this.processVariations(\n adaptedId,\n fetchResponse.product.options\n );\n\n // Return an UnboundProductData.\n return {\n overrides: {\n oldCampaign: campaign,\n newCampaign: computedCampaign\n },\n product: {\n id : adaptedId,\n alias : id,\n name : fetchResponse.product.productName,\n campaign : computedCampaign || fetchResponse.campaign,\n campaignType : fetchResponse.campaignType || '',\n buyLinkBaseUrl: fetchResponse.buyLinkBaseUrl,\n currency,\n platformId : fetchResponse.platformProductId,\n options\n }\n }\n }\n\n private buildApiURL(id: string, locale: Locale, campaign?: string): URL {\n const apiParams = [\"products\", id, \"locale\", locale];\n if (campaign) {\n apiParams.push(\"campaign\", INGNORE_CAMPAIGN.includes(String(campaign)) ? \"null\" : campaign);\n }\n const url = new URL(`https://www.bitdefender.com/p-api/v1/${apiParams.join(\"/\")}`);\n return url;\n }\n\n private async processVariations(\n id: string,\n variations: OptionData[]\n ): Promise<{ options: Map<string, UnboundProductOptionData>; currency: string }> {\n const options = new Map<string, UnboundProductOptionData>();\n let currency = \"\";\n\n // Loop through devices and subscriptions.\n for (const variation of variations) {\n const variationData: UnboundProductOptionData = {\n devices : variation.slots,\n subscription : variation.months,\n price : Number(variation.price),\n discountedPrice : Number(variation.price === variation.discountedPrice ? NaN : variation.discountedPrice),\n buyLink : variation.buyLink,\n verifoneOptionCode : variation.verifoneOptionCode,\n verifoneProductId : variation.verifoneProductId,\n coupon : variation.coupon,\n checkoutPaymentPeriod: variation.checkoutPaymentPeriod,\n bundle : []\n };\n\n // Capture common info.\n currency = variation.currency;\n\n options.set(`${variation.slots}-${variation.months}`, variationData);\n }\n return { options, currency };\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export declare const STORE_LOCALE: unique symbol;
2
+ export declare const STORE_ADAPTER: unique symbol;
3
+ export declare const STORE_CAMPAIGN: unique symbol;
4
+ export declare const STORE_TRANSFORMERS: unique symbol;
5
+ export declare const STORE_OVERRIDES: unique symbol;
6
+ export declare const STORE_TRIAL_LINKS: unique symbol;
7
+ export declare const STORE_FORMATTER: unique symbol;
@@ -0,0 +1,8 @@
1
+ export const STORE_LOCALE = Symbol("locale");
2
+ export const STORE_ADAPTER = Symbol("adapter");
3
+ export const STORE_CAMPAIGN = Symbol("campaign");
4
+ export const STORE_TRANSFORMERS = Symbol("transformers");
5
+ export const STORE_OVERRIDES = Symbol("overrides");
6
+ export const STORE_TRIAL_LINKS = Symbol("trialLinks");
7
+ export const STORE_FORMATTER = Symbol("formatter");
8
+ //# sourceMappingURL=store.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.constants.js","sourceRoot":"","sources":["../../src/store.constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC","sourcesContent":["export const STORE_LOCALE = Symbol(\"locale\");\nexport const STORE_ADAPTER = Symbol(\"adapter\");\nexport const STORE_CAMPAIGN = Symbol(\"campaign\");\nexport const STORE_TRANSFORMERS = Symbol(\"transformers\");\nexport const STORE_OVERRIDES = Symbol(\"overrides\");\nexport const STORE_TRIAL_LINKS = Symbol(\"trialLinks\");\nexport const STORE_FORMATTER = Symbol(\"formatter\");\n"]}
@@ -1,8 +1,10 @@
1
1
  import { PriceFormat } from "./format-price.js";
2
- import { Product, UnboundProductOptionData } from "./products/product.base.js";
2
+ import type { Product, UnboundProductData, UnboundProductOptionData } from "./products/product.base.js";
3
3
  import { Provider, ProviderData } from "./providers/provider.base.js";
4
4
  import { InitSelectorProvider } from "./providers/provider.init-selector.js";
5
5
  import { VlaicuProvider } from "./providers/provider.vlaicu.js";
6
+ import { STORE_ADAPTER, STORE_CAMPAIGN, STORE_FORMATTER, STORE_LOCALE, STORE_OVERRIDES, STORE_TRANSFORMERS, STORE_TRIAL_LINKS } from "./store.constants.js";
7
+ export { STORE_ADAPTER, STORE_CAMPAIGN, STORE_FORMATTER, STORE_LOCALE, STORE_OVERRIDES, STORE_TRANSFORMERS, STORE_TRIAL_LINKS };
6
8
  export type ProductSelector = {
7
9
  id: string;
8
10
  campaign?: string;
@@ -47,19 +49,14 @@ type StoreConfig = {
47
49
  };
48
50
  };
49
51
  transformers?: {
50
- option?: {
51
- buyLink: (buyLink: string) => Promise<string>;
52
- };
52
+ buyLink: (param: {
53
+ buyLink: string;
54
+ product: UnboundProductData;
55
+ option: UnboundProductOptionData;
56
+ }) => Promise<string>;
53
57
  };
54
58
  formatter?: (opt: PriceFormat) => string | number;
55
59
  };
56
- export declare const STORE_LOCALE: unique symbol;
57
- export declare const STORE_ADAPTER: unique symbol;
58
- export declare const STORE_CAMPAIGN: unique symbol;
59
- export declare const STORE_TRANSFORMERS: unique symbol;
60
- export declare const STORE_OVERRIDES: unique symbol;
61
- export declare const STORE_TRIAL_LINKS: unique symbol;
62
- export declare const STORE_FORMATTER: unique symbol;
63
60
  export declare class Store {
64
61
  private cache;
65
62
  private [STORE_LOCALE];
@@ -75,4 +72,3 @@ export declare class Store {
75
72
  private getProvider;
76
73
  formatPrice(opt: PriceFormat): string | number;
77
74
  }
78
- export {};
package/dist/src/store.js CHANGED
@@ -2,17 +2,12 @@ import { Adaptor } from "./adaptors/adaptor.base.js";
2
2
  import { formatPrice } from "./format-price.js";
3
3
  import { InitSelectorProvider } from "./providers/provider.init-selector.js";
4
4
  import { VlaicuProvider } from "./providers/provider.vlaicu.js";
5
+ import { STORE_ADAPTER, STORE_CAMPAIGN, STORE_FORMATTER, STORE_LOCALE, STORE_OVERRIDES, STORE_TRANSFORMERS, STORE_TRIAL_LINKS } from "./store.constants.js";
6
+ export { STORE_ADAPTER, STORE_CAMPAIGN, STORE_FORMATTER, STORE_LOCALE, STORE_OVERRIDES, STORE_TRANSFORMERS, STORE_TRIAL_LINKS };
5
7
  const BuiltInProviders = {
6
8
  init: InitSelectorProvider,
7
9
  vlaicu: VlaicuProvider
8
10
  };
9
- export const STORE_LOCALE = Symbol("locale");
10
- export const STORE_ADAPTER = Symbol("adapter");
11
- export const STORE_CAMPAIGN = Symbol("campaign");
12
- export const STORE_TRANSFORMERS = Symbol("transformers");
13
- export const STORE_OVERRIDES = Symbol("overrides");
14
- export const STORE_TRIAL_LINKS = Symbol("trialLinks");
15
- export const STORE_FORMATTER = Symbol("formatter");
16
11
  class Cache {
17
12
  products;
18
13
  provider;
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAe,MAAM,gBAAgB,CAAC;AAG1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEzJ,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EAClB,CAAC;AAWF,MAAM,gBAAgB,GAAG;IACvB,IAAI,EAAI,oBAAoB;IAC5B,MAAM,EAAE,cAAc;CACd,CAAC;AA8CX,MAAM,KAAK;IACD,QAAQ,CAA6C;IACrD,QAAQ,CAAW;IAE3B,YAAY,KAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAmB;QACzC,MAAM,UAAU,GAAG,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;QAEvC,2CAA2C;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,oEAAoE;QACpE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC9C,OAAO,MAAM,cAAc,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,KAAK;IACR,KAAK,CAAuB;IAC5B,CAAC,YAAY,CAAC,CAAe;IAC7B,CAAC,aAAa,CAAC,CAAwB;IACvC,CAAC,cAAc,CAAC,CAA2C;IAC3D,CAAC,kBAAkB,CAAC,CAA8B;IAClD,CAAC,eAAe,CAAC,CAA8B;IAC/C,CAAC,iBAAiB,CAAC,CAA6B;IAChD,CAAC,eAAe,CAAC,CAA2C;IAEpE,YAAY,MAAmB;QAC7B,MAAM,eAAe,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAmB,EAAE,EAAE,CAAC,QAAQ,CAAC;QAC1E,IAAI,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,eAAe,CAAC;QAC1D,IAAI,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC;YACrB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,WAAW,CAAC;IAC1D,CAAC;IAID,KAAK,CAAC,UAAU,CAAC,KAA0C;QACzD,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAClE,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAEvF,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;aAC7D,MAAM,CAAC,CAAC,OAAO,EAA+C,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;aACnH,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEjC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,KAAuB;QACzC,uEAAuE;QACvE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;QAEvC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACnC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,oEAAoE;QACpE,6DAA6D;QAC7D,OAAO,IAAI,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACtC,CAAC;IAED,WAAW,CAAC,GAAgB;QAC1B,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;CACF","sourcesContent":["import { Adaptor } from \"./adaptors/adaptor.base\";\nimport { formatPrice, PriceFormat } from \"./format-price\";\nimport type { Product, UnboundProductData, UnboundProductOptionData } from \"./products/product.base\";\nimport { Provider, ProviderData } from \"./providers/provider.base\";\nimport { InitSelectorProvider } from \"./providers/provider.init-selector\";\nimport { VlaicuProvider } from \"./providers/provider.vlaicu\";\nimport { STORE_ADAPTER, STORE_CAMPAIGN, STORE_FORMATTER, STORE_LOCALE, STORE_OVERRIDES, STORE_TRANSFORMERS, STORE_TRIAL_LINKS } from \"./store.constants\";\n\nexport {\n STORE_ADAPTER,\n STORE_CAMPAIGN,\n STORE_FORMATTER,\n STORE_LOCALE,\n STORE_OVERRIDES,\n STORE_TRANSFORMERS,\n STORE_TRIAL_LINKS\n};\n\nexport type ProductSelector = {\n id : string,\n campaign?: string\n}\n\nexport type Locale = `${string}-${string}`\n\ntype ProviderCtor = new (param: ProviderData) => Provider;\n\nconst BuiltInProviders = {\n init : InitSelectorProvider,\n vlaicu: VlaicuProvider\n} as const;\n\ntype ProviderSelector = {\n name: keyof typeof BuiltInProviders | ProviderCtor\n};\n\ntype StoreConfig = {\n provider : ProviderSelector,\n locale : Locale,\n campaign ?: (param: ProductSelector) => Promise<string | undefined>,\n trialLinks ?: {\n [key: string]: { //id product\n default?: { //campaign\n [key: `${string}-${string}`]: string //option\n },\n [key: string]: { //campaign\n [key: `${string}-${string}`]: string //option\n } | undefined\n }\n },\n overrides ?: {\n [key: string]: { //id in page\n default?: { //campaign in page\n campaign?: string;\n options? : {\n [key: `${string}-${string}`]: Partial<UnboundProductOptionData> | undefined | null\n }\n },\n [key: string]: {\n campaign?: string;\n options? : {\n [key: `${string}-${string}`]: Partial<UnboundProductOptionData> | undefined | null\n }\n } | undefined\n }\n },\n transformers ?: {\n buyLink: (param: { buyLink: string, product: UnboundProductData, option: UnboundProductOptionData }) => Promise<string>\n },\n formatter ?: (opt: PriceFormat) => string | number\n}\n\ntype CacheData = {\n provider: Provider\n};\n\nclass Cache {\n private products: Map<string, Promise<Product | undefined> >;\n private provider: Provider;\n\n constructor(param: CacheData) {\n this.products = new Map();\n this.provider = param.provider;\n }\n\n async get({ id, campaign }: ProductSelector): Promise<Product | undefined> {\n const productKey = `${id}-${campaign}`;\n\n // Check if we already have a cached entry.\n const cacheEntry = this.products.get(productKey);\n if (cacheEntry) {\n return cacheEntry;\n }\n\n // If no cache entry exists, call the provider and cache the result.\n const productPromise = this.provider.getProduct({ id, campaign });\n this.products.set(productKey, productPromise);\n return await productPromise;\n }\n}\n\nexport class Store {\n private cache : Cache;\n private [STORE_LOCALE] : Locale;\n private [STORE_ADAPTER] : Promise<Adaptor>;\n private [STORE_CAMPAIGN] : NonNullable<StoreConfig[\"campaign\"]>;\n private [STORE_TRANSFORMERS]: StoreConfig[\"transformers\"];\n private [STORE_OVERRIDES] : StoreConfig[\"overrides\"];\n private [STORE_TRIAL_LINKS] : StoreConfig[\"trialLinks\"];\n private [STORE_FORMATTER] : NonNullable<StoreConfig[\"formatter\"]>;\n\n constructor(config: StoreConfig) {\n const defaultCampaign = async ({ campaign }: ProductSelector) => campaign;\n this[STORE_LOCALE] = config.locale;\n this[STORE_ADAPTER] = Adaptor.create();\n this[STORE_CAMPAIGN] = config.campaign ?? defaultCampaign;\n this[STORE_TRANSFORMERS] = config.transformers;\n this[STORE_OVERRIDES] = config.overrides;\n this[STORE_TRIAL_LINKS] = config.trialLinks;\n this.cache = new Cache({\n provider: this.getProvider(config.provider)\n });\n this[STORE_FORMATTER] = config.formatter || formatPrice;\n }\n\n async getProduct(param: ProductSelector): Promise<Product | undefined>;\n async getProduct(param: ProductSelector[]): Promise<(Product | undefined)[]>;\n async getProduct(param: ProductSelector | ProductSelector[]): Promise<undefined | Product | (Product | undefined)[]> {\n const productListToFetch = Array.isArray(param) ? param : [param];\n const productListToReturn = productListToFetch.map(product => this.cache.get(product));\n\n const products = (await Promise.allSettled(productListToReturn))\n .filter((promise) : promise is PromiseFulfilledResult<Product> => promise.status === \"fulfilled\" && !!promise.value)\n .map(promise => promise.value);\n\n if (Array.isArray(param)) {\n return products;\n } else {\n return products.pop();\n }\n }\n\n private getProvider(param: ProviderSelector): Provider {\n // If provider is a string, use the corresponding built‑in constructor.\n const { name: provider } = param ?? {};\n\n if (typeof provider === \"string\") {\n const ctor = BuiltInProviders[provider];\n if (ctor) {\n return new ctor({ store: this });\n }\n throw new Error(`Unknown provider string: ${provider}`);\n }\n\n // Otherwise, assume provider is a constructor (a class definition).\n // This must be a concrete subclass of the abstract Provider.\n return new provider({ store: this })\n }\n\n formatPrice(opt: PriceFormat): string | number {\n return this[STORE_FORMATTER](opt);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@repobit/dex-store",
3
- "version": "1.2.6",
3
+ "version": "1.3.2",
4
4
  "description": "Client for pricing API",
5
5
  "author": "Buga Adrian Alexandru <abuga@bitdefender.com>",
6
6
  "homepage": "https://github.com/bitdefender/dex-core#readme",
@@ -38,5 +38,8 @@
38
38
  "volta": {
39
39
  "node": "22.14.0"
40
40
  },
41
- "gitHead": "bb2a0edfc0dabeb3ea6b572cb2c25d623a24fc2b"
41
+ "dependencies": {
42
+ "@repobit/dex-constants": "^1.3.0"
43
+ },
44
+ "gitHead": "6fcaf5133ff6a150fd7d2d3e8a261f9b88b35bc1"
42
45
  }