{"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":"qHA+gBO,iE,gGA3gBcA,E,yKACNC,S,WAAyC,kBA0gBjD,gBACN,KACC,OAAOC,EAAOA,EAAKC,KAAUA,IAE9B,IACC,IAAIC,EAASC,gBAAgBF,KAC7B,OAAOD,EAAOE,OAAH,GAAX,EACC,SACD,OAAOC,eAAP,IAlhBsD,kBAEpD,MAAO,CACLC,QAAS,WADJ,GAELC,sB,GALsCC,M,+BC4lBrC,cArfA,cACN,GAAIC,GAASA,EAAb,KACC,OAAOA,OAAP,G,ihCAzBK,kBACJ,OAAF,EACQP,EAAOA,EAAH,GAAX,GAEG,GAAWO,EAAf,OACKA,EAAIJ,gBAARI,IAEMP,EAAOO,OAAH,GAAX,GAudM,gBACN,IACC,IAAIL,EAASD,IACZ,SACD,OAAOO,EAAP,GAED,OAAIN,GAAUA,EAAd,KACQA,YAAY,EAAnB,GAED,EArfM,cACJ,OAAK,WACN,IAAK,IAAIO,EAAJ,GAAeC,EAApB,EAA2BA,EAAIC,UAA/B,OAAiDD,IAChDD,KAAUE,UAAVF,GAED,IACC,OAAON,gBAAgBS,aAAvB,IACC,SACD,OAAOT,eAAP,KAmdI,gBACN,IAAID,EAASD,IACb,OAAIC,GAAUA,EAAd,KACQA,OAAP,GAEMF,EAAP,GA0DM,0KAjeP,IArHA,EAqHsBa,EAAtB,cAAiE,8BAC3DC,EAD2D,uBAEzD,SAEqBC,uBAFrB,8BACFD,EAAcE,WACZA,eADFF,KAGIA,sBACFA,sBAAkCA,4BAAlCA,WAPyD,WAY3DA,EAAc,CACZG,OAAQ,cAGRF,gDACAA,8BADAA,oBAEAG,EAFAH,oBAGAG,EAHAH,mBAIAG,EATY,oBAWZJ,iCAtByD,WA0B/D,eAjDoBK,EAAtB,cACE,IAAMC,EAAuBL,YAA7B,UAD8D,OAuazD,gBACN,KACC,OAAOf,EAAOA,EAAKC,KAAUA,IAE9B,IACC,IAAIC,EAASC,gBAAgBF,KAC7B,OAAOD,EAAOE,OAAH,GAAX,EACC,SACD,OAAOC,eAAP,IA/a8D,gBAG9D,IAAMkB,EAAN,GAH8D,SAIxDlB,QAAA,IACJmB,EAAA,mBAAoD,uBAC9C,SACoCnB,YACpCoB,sBAAsCH,EAFtC,2BAIF,IAAMI,EAhEd,SAA2BC,GAKzB,IAJA,IAIA,EAJMC,EAAN,GACMC,EAAN,GACIC,EAAJ,KACIC,GAAJ,EACA,sBAAmC,KAAxBC,EAAwB,QAC7B,CAAC,WAAY,UAAUC,QAAQD,EAA/B,OAAJ,EACEJ,OAAkBI,EAAlBJ,MAEAI,qCADK,IAELA,0BAEAF,EAAQE,gCAARF,IACSE,mCAAJ,EACLH,OAAcG,kCAAdH,KACK,oBAAIG,SACTD,MAGJ,MAAO,CACLF,SADK,EAELE,iBAFK,EAGLD,MAHK,EAILF,gBAyCmCM,CAA/B,GACAX,wBANgD,sBALQ,WAoB9D,kBA/CoBY,EAAtB,cACE,IAAMb,EAAuBL,YAA7B,UADsE,SAEzBA,mBAFyB,oBAGtE,IAAMM,EAAN,GAHsE,SAIhElB,QAAA,IACJ+B,EAAA,gBAAAC,GAA4C,uBACtC,SAC0Bf,aAC1Be,EAFA,4BAIMC,EAAcD,EAJpB,UAKIE,EAAS,EAAH,KAAZ,GAIID,OAAJ,IAAuBC,UACrBA,WAEFhB,gBAbwC,sBALwB,WAwBtE,kBA3DoBiB,EAAtB,cAAqE,qBAC/D,SACWvB,uCADX,kBAD+D,WAIjE,eA9BkBwB,EAAtB,cAAyE,qBACnE,SACyCxB,2BADzC,yCAIwBA,qBAJxB,yCAKYZ,QAAA,IACZqC,EAAA,gBAAAC,GACE,MADsB,wBAElBA,EAFkB,8BAGJ1B,iCAEF0B,EALM,mCAGpBC,UAHoB,WAUtB,YAHmBC,EAAA,2BACjB,mBAAeC,OAAiBH,EAAhC,aAEF,GAAgCI,eAAgBH,aAhBlD,YAKF,qBANqE,YAsBrE,OADAI,uCACA,SAsHJ,SAAS5B,EAAU6B,GACjB,OAAOhC,+BAA+BgC,EAA/BhC,MAAP","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":""}