{"version":3,"sources":["webpack://casperEventHub/./src/standingOrders.ts","webpack://casperEventHub/./src/eCapi.ts"],"names":["StandingOrders","getState","then","body","result","Promise","isValid","standingOrders","Rule","value","recover","args","i","arguments","f","getUserDetails","userDetails","window","JSON","status","hasCookie","getProductsDetails","napiCatalog","productsDetails","productsProperties","productProperties","fields","categories","technologies","cupSizes","range","isStandingOrders","category","indexOf","processCategories","getProductsProperties","basketProducts","basketProduct","unitPrice","merged","getStandingOrders","getSubscriptions","subs","sub","product","subsDetails","marketSub","invoiceProduct","console","name"],"mappings":"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","file":"StandingOrders.js","sourcesContent":["import { Possibilities } from './types'\nimport Rule from './rule'\nimport { getStandingOrders } from './eCapi'\n\nexport default class StandingOrders extends Rule {\n  public async getState(): Promise<StandingOrdersState> {\n    const standingOrders = await getStandingOrders()\n    return {\n      isValid: this.validate((standingOrders as unknown) as Possibilities),\n      standingOrders,\n    }\n  }\n}\n\ninterface RecurringOrderStatus {\n  type: string\n}\n\nexport interface Line {\n  item: string\n  quantity: number\n  unitPrice: number\n}\n\ninterface Cart {\n  lines: Line[]\n}\n\ninterface Gift {\n  item: string\n  actionCodeId: string\n}\n\ninterface TaxLine {\n  label: string\n  amount: number\n  amountWithCurrency: string\n  amountType: string\n  isTotal: boolean\n}\n\ninterface WithShippingCost {\n  subTotal: number\n  grandTotal: number\n  taxTotal: number\n  shippingCost: number\n  totalOthers: number\n  totalDue: number\n  taxLines: TaxLine[]\n}\n\ninterface TaxLine2 {\n  label: string\n  amount: number\n  amountWithCurrency: string\n  amountType: string\n  isTotal: boolean\n}\n\ninterface WithoutShippingCost {\n  subTotal: number\n  grandTotal: number\n  taxTotal: number\n  shippingCost: number\n  totalOthers: number\n  totalDue: number\n  taxLines: TaxLine2[]\n}\n\ninterface Credit {\n  used: number\n  remaining: number\n}\n\ninterface Totals {\n  taxIncluded: boolean\n  withShippingCost: WithShippingCost\n  withoutShippingCost: WithoutShippingCost\n  others: string[] //IDK what is the content of this prop\n  credit: Credit\n  giftCards: number\n}\n\ninterface DeliveryMethod {\n  id: string\n  services: string[] //IDK what is the content of this prop\n}\n\ninterface Delivery {\n  deliveryMethod: DeliveryMethod\n  deliveryAddress: string\n}\n\ninterface PaymentMethod {\n  id: string\n  alias: string\n}\n\ninterface Payment {\n  paymentMethod: PaymentMethod\n  billingAddress: string\n}\n\ninterface Frequency {\n  quantity: number\n  timeUnit: string\n}\n\ninterface FrequencyOption {\n  id: string\n  label: string\n  frequency: Frequency\n}\n\ninterface ScheduleInfo {\n  frequencyOption: FrequencyOption\n  nextShipmentDate: string\n  nextShipmentStatus: string\n}\n\nexport interface IStandingOrder {\n  recurringOrderId: number\n  nickname: string\n  recurringOrderStatus: RecurringOrderStatus\n  currency: string\n  recurringOrderType: string\n  recurringOrderContracts: string[] //IDK what is the content of this prop\n  cart: Cart\n  gift: Gift\n  totals: Totals\n  delivery: Delivery\n  payment: Payment\n  scheduleInfo: ScheduleInfo\n  purchaseNumber: string\n  readOnly: boolean\n  termsAndConditionsAccepted: boolean\n}\n\ninterface StandingOrdersState {\n  isValid: boolean\n  standingOrders: IStandingOrder[]\n}\n","import {\n  Catalog,\n  CartProducts,\n  ICategory,\n  ProductDetails,\n  CustomerDetails,\n} from './types'\nimport { IStandingOrder } from './standingOrders'\nimport { CustomerSubscription, MergedSubscriptions } from './subscriptions'\n\nlet userDetails: CustomerDetails | null\n\nexport function clearCustomerDetails(): void {\n  userDetails = null\n}\n\nexport async function getSubscriptions(): Promise<MergedSubscriptions[]> {\n  try {\n    const subs: CustomerSubscription[] = await window.napi\n      .subscription()\n      .getSubscriptions()\n    const subsDetails = await window.napi.market().getSubscriptions()\n    return (await Promise.all(\n      subs.map(async (sub) => {\n        let product\n        if (sub.promotionalProductId) {\n          product = await window.napi\n            .catalog()\n            .getProduct(sub.promotionalProductId)\n        }\n        const subDetails = subsDetails.subscriptionProfiles.find(\n          (marketSub) => marketSub.id === sub.profileId\n        )\n        return { ...subDetails, ...sub, invoiceProduct: product }\n      })\n    )) as MergedSubscriptions[]\n  } catch (e) {\n    console.log('error with experience', e)\n    return [] as MergedSubscriptions[]\n  }\n}\n\nexport async function getStandingOrders(): Promise<IStandingOrder[]> {\n  try {\n    return await window.napi.standingOrders().getOrders('Responsive')\n  } catch (e) {\n    return [] as IStandingOrder[]\n  }\n}\n\nfunction processCategories(categories: ICategory[]): IProductFields {\n  const technologies = []\n  const cupSizes = []\n  let range: IProductFields['range'] = null\n  let isStandingOrders = false\n  for (const category of categories) {\n    if (['original', 'vertuo'].indexOf(category.code) > -1) {\n      technologies.push(category.code)\n    } else if (\n      category.code.indexOf('capsule-range') > -1 &&\n      category.code.indexOf('-Mobile') === -1\n    ) {\n      range = category.code.replace('capsule-range-', '')\n    } else if (category.code.indexOf('capsule-cupSize') > -1) {\n      cupSizes.push(category.code.replace('capsule-cupSize-', ''))\n    } else if (category.code === 'standing-orders') {\n      isStandingOrders = true\n    }\n  }\n  return {\n    cupSizes,\n    isStandingOrders,\n    range,\n    technologies,\n  }\n}\n\nexport async function getProductsProperties(): Promise<IProductProps[]> {\n  const napiCatalog: Catalog = window.napi.catalog()\n  const basketProducts: CartProducts[] = await window.napi.cart().read()\n  const productsDetails: IProductProps[] = []\n  await Promise.all(\n    basketProducts.map(async (basketProduct) => {\n      try {\n        const productDetail = await napiCatalog.getProduct(\n          basketProduct.productId\n        )\n        const { unitPrice } = basketProduct\n        const merged = {\n          ...basketProduct,\n          ...productDetail,\n        }\n        if (unitPrice !== 0 && merged.price === 0) {\n          merged.price = unitPrice\n        }\n        productsDetails.push(merged)\n      } catch (e) {\n        return\n      }\n    })\n  )\n  return productsDetails\n}\n\nexport async function getProductsDetails(): Promise<IProduct[]> {\n  const napiCatalog: Catalog = window.napi.catalog()\n  const productsProperties: IProductProps[] = await getProductsProperties()\n  const productsDetails: IProduct[] = []\n  await Promise.all(\n    productsProperties.map(async (productProperties) => {\n      try {\n        const categories: ICategory[] = await Promise.all(\n          productProperties.supercategories.map(napiCatalog.getCategory)\n        )\n        const fields: IProductFields = processCategories(categories)\n        productsDetails.push({\n          ...productProperties,\n          ...fields,\n        })\n      } catch (e) {\n        return\n      }\n    })\n  )\n  return productsDetails\n}\n\nexport async function getUserDetails(): Promise<CustomerDetails> {\n  if (userDetails == null) {\n    try {\n      userDetails = JSON.parse(\n        JSON.stringify(await window.napi.customer().read())\n      ) as CustomerDetails\n      if (userDetails.preferredTechnology !== undefined) {\n        userDetails.preferredTechnology = userDetails.preferredTechnology.slice(\n          30\n        )\n      }\n    } catch (error) {\n      userDetails = {\n        status: 'anonymous',\n      }\n      if (\n        window.localStorage.getItem('loggedTimestamp') ||\n        window.sessionStorage.getItem('loggedTimestamp') ||\n        hasCookie('ecapiLoginToken') ||\n        hasCookie('autoLoginToken') ||\n        hasCookie('nesLoginToken')\n      ) {\n        userDetails.status = 'not-logged-in'\n      }\n    }\n  }\n  return userDetails\n}\n\nfunction hasCookie(name: string) {\n  return window.document.cookie.indexOf(name + '=') > -1\n}\n\nexport interface IProductProps extends ProductDetails, CartProducts {\n  quantity: number\n  price: number\n  sku?: string\n  unitPrice: number\n}\n\nexport interface IProduct extends IProductFields, ProductDetails, CartProducts {\n  quantity: number\n  price: number\n  sku?: string\n  unitPrice: number\n}\n\nexport interface IProductFields {\n  range: string | null\n  technologies: string[]\n  cupSizes: string[]\n  isStandingOrders: boolean\n}\n"],"sourceRoot":""}