@artisan-commerce/shopping-cart-core 0.12.0-canary.73
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.
- package/README.md +3 -0
- package/dist/bundle.cjs.js +2228 -0
- package/dist/bundle.cjs.js.map +1 -0
- package/dist/bundle.d.ts +873 -0
- package/dist/bundle.esm.js +2167 -0
- package/dist/bundle.esm.js.map +1 -0
- package/dist/bundle.umd.js +2232 -0
- package/dist/bundle.umd.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.cjs.js","sources":["../src/config/constants.ts","../src/utils/queue.utils.ts","../src/utils/eventLoop.utils.ts","../src/lib/state.ts","../src/utils/common.utils.ts","../src/lib/initShoppingCart/initShoppingCart.ts","../src/utils/shoppingCart.utils.ts","../src/lib/fetchShoppingCart/fetchShoppingCart.ts","../../../node_modules/dayjs/dayjs.min.js","../src/errors/state.errors.ts","../src/errors/product/product.errors.ts","../../../node_modules/crypt/crypt.js","../../../node_modules/charenc/charenc.js","../../../node_modules/sha1/sha1.js","../src/utils/product/product.utils.ts","../src/lib/addProduct/addProduct.ts","../src/lib/subtractProduct/subtractProduct.ts","../src/lib/removeProduct/removeProduct.ts","../src/lib/setProduct/setProduct.ts","../src/lib/replaceProduct/replaceProduct.ts","../src/lib/createShoppingCart/createShoppingCart.ts","../src/lib/emptyShoppingCart/emptyShoppingCart.ts","../src/lib/deleteShoppingCart/deleteShoppingCart.ts","../src/errors/guards.utils.ts","../src/errors/validation.errors.ts","../src/services/common.services.ts","../src/utils/services.utils.ts","../src/services/validate/validate.service.ts","../src/lib/validateShoppingCart/validateShoppingCart.ts","../src/lib/listenBenefitsWallet/listenBenefitsWallet.ts","../src/services/coupons/coupons.service.ts","../src/lib/applyBenefit/applyBenefit.ts","../src/lib/removeBenefit/removeBenefit.ts","../src/utils/benefits.utils.ts","../src/lib/redeemCoupon/redeemCoupon.ts","../src/lib/mergeShoppingCart/mergeShoppingCart.ts","../src/lib/updateShoppingCart/updateShoppingCart.ts"],"sourcesContent":["// Project constants\nconst CONSTANTS = {\n // Date format for products metadata\n PRODUCT_DATE_FORMAT: \"YYYY-MM-DD hh:mm:ss.SSS\",\n // Default shopping cart name\n DEFAULT_SHOPPING_CART_NAME: \"default\",\n // Maximum number of shopping carts allowed\n DEFAULT_MAX_SHOPPING_CARTS: 2\n};\n\nexport default CONSTANTS;\n","import { ShoppingCart } from \"@artisan-commerce/types\";\n\nexport class ActionQueue {\n private queue: (() => Promise<ShoppingCart | null>)[];\n\n constructor() {\n this.queue = [];\n }\n\n // Length of the queue\n get length() {\n return this.queue.length;\n }\n\n // Adds a new action to the queue\n enqueue(newItem: () => Promise<ShoppingCart | null>) {\n this.queue.push(newItem);\n }\n\n // Removes the oldest action of the queue and returns it\n dequeue() {\n return this.queue.shift();\n }\n}\n","import { getState } from \"../lib/state\";\n\nexport class EventLoop {\n private running: boolean;\n\n constructor() {\n this.running = false;\n }\n\n // Run the next enqueued event\n private async run() {\n const { queue } = getState();\n const next = queue.dequeue();\n if (!next) {\n this.running = false;\n return;\n }\n return await next();\n }\n\n // Whether the loop has finished or is currently running\n get isRunning() {\n return this.running;\n }\n\n // Start running the enqueued events\n async start() {\n this.running = true;\n\n while (this.running) {\n await this.run();\n }\n }\n}\n","// State functions and data\nimport { GlobalState } from \"../types/common.types\";\nimport CONSTANTS from \"../config/constants\";\nimport { ActionQueue } from \"../utils/queue.utils\";\nimport { EventLoop } from \"../utils/eventLoop.utils\";\n\nconst { DEFAULT_SHOPPING_CART_NAME, DEFAULT_MAX_SHOPPING_CARTS } = CONSTANTS;\n\nexport const initialState: GlobalState = {\n accountId: undefined,\n customerId: undefined,\n activeShoppingCart: DEFAULT_SHOPPING_CART_NAME,\n maxShoppingCarts: DEFAULT_MAX_SHOPPING_CARTS,\n wallets: {},\n anonymous: false,\n initialized: false,\n queue: new ActionQueue(),\n eventLoop: new EventLoop(),\n debug: false\n};\nObject.freeze(initialState);\n\nlet state: GlobalState = { ...initialState };\nObject.seal(state);\n\nexport const setState = (overrides: Partial<GlobalState>) => {\n state = { ...state, ...overrides };\n};\n\nexport const getState = () => {\n return { ...state };\n};\n","// Common utility functions\n\nimport { CartProductAnswer } from \"@artisan-commerce/types\";\nimport { CartProductQuestion } from \"@artisan-commerce/types\";\n\nimport { getState } from \"../lib/state\";\nimport { ShoppingCartConfig } from \"../types/common.types\";\n\nexport const defaultSort = (a: number | string, b: number | string) => {\n if (a > b) {\n return 1;\n } else if (b > a) {\n return -1;\n } else {\n return 0;\n }\n};\n\nexport const sortByField = (field: string, a: any, b: any) => {\n const idA = a[field];\n const idB = b[field];\n if (idA > idB) {\n return 1;\n } else if (idB > idA) {\n return -1;\n } else {\n return 0;\n }\n};\n\nexport const sortByProductId = (a: CartProductAnswer, b: CartProductAnswer) => {\n return sortByField(\"productId\", a, b);\n};\n\nexport const sortByQuestionId = (\n a: CartProductQuestion,\n b: CartProductQuestion\n) => {\n return sortByField(\"questionId\", a, b);\n};\n\n/**\n * Functions that throws an error when running on development environment\n * and logs the error if running on production environment\n * @since 0.1.0\n * @param message: the message to be displayed\n */\nexport const logError = (message: string) => {\n if (process.env.NODE_ENV === \"production\") {\n console.error(message);\n } else {\n throw new Error(message);\n }\n};\n\n/**\n * Functions that logs a warning only if on debug mode\n * @since 0.1.0\n * @param message: the message to be displayed\n */\nexport const logDebug = (message: string) => {\n const { debug } = getState();\n if (!debug) return;\n console.warn(message);\n};\n\n/**\n * Utility function to reuse global configuration.\n *\n * @since 0.1.0\n * @param {ShoppingCartConfig} config Custom configuration\n * @returns {ShoppingCartConfig} Configuration prioritizing custom over global\n * values\n */\nexport const reuseGlobalConfig = <T extends ShoppingCartConfig>(\n config?: T\n): T => {\n const { debug: configDebug } = config ?? {};\n const { store: configStore } = config ?? {};\n const { accountId: configAccountId } = config ?? {};\n const { anonymous: configAnonymous } = config ?? {};\n const { customerId: configCustomerId } = config ?? {};\n const { shoppingCartName: configCartName } = config ?? {};\n const { maxShoppingCarts: configMaxShoppingCarts } = config ?? {};\n\n const { accountId: globalAccountId } = getState();\n const { customerId: globalCustomerId } = getState();\n const { store: globalStore, anonymous: globalAnonymous } = getState();\n const { activeShoppingCart: globalCartName } = getState();\n const { maxShoppingCarts: globalMaxShoppingCarts } = getState();\n const { debug: globalDebug } = getState();\n\n const accountId = configAccountId ?? globalAccountId;\n const customerId = configCustomerId ?? globalCustomerId;\n const prunedConfigStore = configStore\n ? { ...configStore, polygons: null }\n : undefined;\n const store = prunedConfigStore ?? globalStore;\n const shoppingCartName = configCartName ?? globalCartName;\n const maxShoppingCarts = configMaxShoppingCarts ?? globalMaxShoppingCarts;\n const anonymous = configAnonymous ?? globalAnonymous;\n const debug = configDebug ?? globalDebug;\n\n return {\n ...config,\n shoppingCartName,\n customerId,\n store,\n accountId,\n anonymous,\n maxShoppingCarts,\n debug\n } as T;\n};\n","import { ShoppingCartConfig } from \"../../types/common.types\";\nimport { setState, initialState, getState } from \"../state\";\nimport CONSTANTS from \"../../config/constants\";\nimport { logDebug } from \"../../utils/common.utils\";\n\nconst { DEFAULT_SHOPPING_CART_NAME } = CONSTANTS;\n\n/**\n * Initialize shopping cart metadata, stores initial global state\n * for future needs and establishes connection with artisnDB.\n *\n * @since 0.1.0\n * @param {ShoppingCartConfig} config Global shopping cart state that can\n * be configure at the function call level\n */\nexport const initShoppingCart = (config: ShoppingCartConfig = {}) => {\n const { initialized } = getState();\n if (initialized) {\n logDebug(\n `initShoppingCart has been called more than once.\n This behavior will very likely result in unexpected outcomes so its\n call was skipped. Please make sure initShoppingCart is only called once`\n );\n return;\n }\n const { shoppingCartName } = config;\n setState({\n ...config,\n activeShoppingCart: shoppingCartName ?? DEFAULT_SHOPPING_CART_NAME\n });\n const isServer = typeof window === \"undefined\";\n if (!isServer) setState({ initialized: true });\n};\n\n/**\n * Closes all connections and resets the library to its default state.\n *\n * @since 0.1.0\n */\nexport const closeShoppingCart = () => {\n // TODO: Maybe make the terminate a separate function in the future??\n // const state = getState();\n setState({ ...initialState });\n};\n","// Shopping cart object utility functions\nimport { CartStore, Product } from \"@artisan-commerce/types\";\nimport { ShoppingCart } from \"@artisan-commerce/types\";\n\nimport { getState } from \"../lib/state\";\nimport { ShoppingCartConfig } from \"../types/common.types\";\n\n/**\n * Function to obtain a cart store based on the store provided and the stores\n * already in the cart.\n *\n * @template T Store additional info\n * @template U Product additional info\n * @template V Categories additional info\n * @template W Vendor additional info\n * @template X Catalogues additional info\n * @since 0.1.0\n * @param {number|Store} storeData Store data\n * @param {CartStore} stores Shopping cart store data\n * @returns {CartStore} The complete CartStore object\n */\nexport const getStore = (\n storeData: ShoppingCartConfig[\"store\"],\n stores: ShoppingCart[\"stores\"]\n): CartStore => {\n const { storeId } = storeData ?? {};\n return { ...storeData, ...stores[storeId!] };\n};\n\n/**\n * Checks if the shopping cart package has been initialized.\n *\n * @since 0.1.0\n * @returns {boolean} The attribute that indicates whether or not the cart has\n * been initialized\n */\nexport const checkInit = () => getState().initialized;\n\n/**\n * Checks if the product to be modified is inside shopping cart benefits.\n * If true, the benefits and benefits hash of the cart are deleted.\n *\n * @template T Shopping cart generic type\n * @since 0.1.0\n * @param {ShoppingCart} shoppingCart Provided shopping cart to be modified\n * @param {Product} product Provided product to be modified, if none provided,\n * assume the shopping cart is being emptied\n * @returns {ShoppingCart} A shopping cart with the benefit and benefitsHash\n * deleted\n */\nexport const cleanShoppingCart = <T extends ShoppingCart = ShoppingCart>(\n shoppingCart: T,\n product?: Product\n): T => {\n const { benefits } = shoppingCart;\n if (!benefits?.length) return shoppingCart;\n\n // Search for the product id inside benefits based on the product provided\n const benefit = benefits.find(benefit => {\n // If there is no product provided, clear benefits and benefits hash\n if (!product) return true;\n const { type } = benefit;\n // Check only if the benefit type is PRODUCT\n if (type !== \"PRODUCT\") return undefined;\n // If the award property is not array, do not continue the search\n if (!Array.isArray(benefit.award)) return undefined;\n return benefit.award.find(\n award => award.productId.toString() === product.productId\n );\n });\n\n if (!benefit) return shoppingCart;\n\n delete shoppingCart.benefits;\n delete shoppingCart.benefitsHash;\n\n return shoppingCart;\n};\n","import { ShoppingCart } from \"@artisan-commerce/types\";\n\nimport { getState, setState } from \"../state\";\nimport { reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { ShoppingCartConfig } from \"../../types/common.types\";\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\nimport { checkInit } from \"../../utils/shoppingCart.utils\";\n\n/**\n * Fetches a shopping cart of the given customer and account, given by the\n * specified name. It will first try to look at the function config.\n * If it cannot find any of the needed parameters, it will look into the global\n * config provided in initShoppingCart.\n *\n * @template T Shopping cart generic type\n * @since 0.1.0\n * @param name The name of the wanted shopping cart, if none is given it will\n * use the default shopping cart name to find one\n * @param config Function call level shopping cart configuration\n * @returns The shopping cart of a given customer given by its specified name\n */\nexport const getShoppingCart = async <T extends ShoppingCart = ShoppingCart>(\n builders: ShoppingCartBuilders,\n config?: ShoppingCartConfig\n) => {\n const { getShoppingCartNode } = builders ?? {};\n return new Promise<T | null>((resolve, reject) => {\n const action = async () => {\n try {\n const { shoppingCartName } = reuseGlobalConfig(config);\n const shoppingCartNode = await getShoppingCartNode(config);\n\n if (!shoppingCartNode || !checkInit()) {\n resolve(null);\n return null;\n }\n\n setState({ activeShoppingCart: shoppingCartName });\n const shoppingCart = shoppingCartNode.data() as T;\n resolve(shoppingCart);\n return shoppingCart;\n } catch (e) {\n reject(e);\n return null;\n }\n };\n const { eventLoop, queue } = getState();\n queue.enqueue(action);\n if (!eventLoop.isRunning) eventLoop.start();\n });\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",f=\"month\",h=\"quarter\",c=\"year\",d=\"date\",$=\"Invalid Date\",l=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\")},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},g={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,f),s=n-i<0,u=e.clone().add(r+(s?-1:1),f);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:f,y:c,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:h}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},v=\"en\",D={};D[v]=M;var p=function(t){return t instanceof _},S=function t(e,n,r){var i;if(!e)return v;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(v=i),i||!r&&v},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=g;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match(l);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===$)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<w(t)},m.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!O.u(e)||e,h=O.p(t),$=function(t,e){var i=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},l=function(t,e){return O.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,g=\"set\"+(this.$u?\"UTC\":\"\");switch(h){case c:return r?$(1,0):$(31,11);case f:return r?$(1,M):$(0,M+1);case o:var v=this.$locale().weekStart||0,D=(y<v?y+7:y)-v;return $(r?m-D:m+(6-D),M);case a:case d:return l(g+\"Hours\",0);case u:return l(g+\"Minutes\",1);case s:return l(g+\"Seconds\",2);case i:return l(g+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=O.p(t),h=\"set\"+(this.$u?\"UTC\":\"\"),$=(n={},n[a]=h+\"Date\",n[d]=h+\"Date\",n[f]=h+\"Month\",n[c]=h+\"FullYear\",n[u]=h+\"Hours\",n[s]=h+\"Minutes\",n[i]=h+\"Seconds\",n[r]=h+\"Milliseconds\",n)[o],l=o===a?this.$D+(e-this.$W):e;if(o===f||o===c){var y=this.clone().set(d,1);y.$d[$](l),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else $&&this.$d[$](l);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[O.p(t)]()},m.add=function(r,h){var d,$=this;r=Number(r);var l=O.p(h),y=function(t){var e=w($);return O.w(e.date(e.date()+Math.round(t*r)),$)};if(l===f)return this.set(f,this.$M+r);if(l===c)return this.set(c,this.$y+r);if(l===a)return y(1);if(l===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[l]||1,m=this.$d.getTime()+r*M;return O.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||$;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=O.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,f=n.months,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},c=function(t){return O.s(s%12||12,t,\"0\")},d=n.meridiem||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r},l={YY:String(this.$y).slice(-2),YYYY:this.$y,M:a+1,MM:O.s(a+1,2,\"0\"),MMM:h(n.monthsShort,a,f,3),MMMM:h(f,a),D:this.$D,DD:O.s(this.$D,2,\"0\"),d:String(this.$W),dd:h(n.weekdaysMin,this.$W,o,2),ddd:h(n.weekdaysShort,this.$W,o,3),dddd:o[this.$W],H:String(s),HH:O.s(s,2,\"0\"),h:c(1),hh:c(2),a:d(s,u,!0),A:d(s,u,!1),m:String(u),mm:O.s(u,2,\"0\"),s:String(this.$s),ss:O.s(this.$s,2,\"0\"),SSS:O.s(this.$ms,3,\"0\"),Z:i};return r.replace(y,(function(t,e){return e||l[t]||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,$){var l,y=O.p(d),M=w(r),m=(M.utcOffset()-this.utcOffset())*e,g=this-M,v=O.m(this,M);return v=(l={},l[c]=v/12,l[f]=v,l[h]=v/3,l[o]=(g-m)/6048e5,l[a]=(g-m)/864e5,l[u]=g/n,l[s]=g/e,l[i]=g/t,l)[y]||g,$?v:O.a(v)},m.daysInMonth=function(){return this.endOf(f).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=S(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return O.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),T=_.prototype;return w.prototype=T,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",f],[\"$y\",c],[\"$D\",d]].forEach((function(t){T[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),w.extend=function(t,e){return t.$i||(t(e,_,w),t.$i=!0),w},w.locale=S,w.isDayjs=p,w.unix=function(t){return w(1e3*t)},w.en=D[v],w.Ls=D,w.p={},w}));","// State error handling functions\nimport { Vendor } from \"@artisan-commerce/types\";\nimport { ArtisnPlatform } from \"@artisan-commerce/types\";\nimport { Wallet } from \"@artisan-commerce/types\";\n\nimport { getState } from \"../lib/state\";\nimport { BenefitsWalletConfig, Wallets } from \"../types/coupons.types\";\nimport { RemoveBenefitConfig } from \"../types/coupons.types\";\nimport { GlobalState, ShoppingCartConfig } from \"../types/common.types\";\nimport { ApplyBenefitConfig } from \"../types/coupons.types\";\nimport { StoreCouponDetailConfig } from \"../services/coupons/coupons.service.types\";\n\nexport const checkAccountId = (\n accountId: GlobalState[\"accountId\"] | undefined,\n message = \"\"\n) => {\n const { accountId: globalAccountId } = getState();\n if (\n typeof accountId === \"undefined\" &&\n typeof globalAccountId === \"undefined\"\n ) {\n throw new Error(\n `AccountId must be defined. Either provide a global accountId or at the function call level. ${message}`\n );\n }\n};\n\nexport const checkCustomerId = (\n customerId: GlobalState[\"customerId\"] | undefined,\n message = \"\"\n) => {\n const { customerId: globalCustomerId } = getState();\n if (\n typeof customerId === \"undefined\" &&\n typeof globalCustomerId === \"undefined\"\n ) {\n throw new Error(\n `CustomerId must be defined. Either provide a global customerId or at the function call level. ${message}`\n );\n }\n};\n\nexport const checkInitialized = () => {\n const { initialized } = getState();\n if (!initialized) {\n throw new Error(\n `Shopping cart not initialized. Make sure initShoppingCart has been called.`\n );\n }\n};\n\nexport const checkStoreId = (\n store: GlobalState[\"store\"] | undefined,\n message = \"\"\n) => {\n const { store: globalStore } = getState();\n if (typeof store === \"undefined\" && typeof globalStore === \"undefined\") {\n throw new Error(\n `Store must be defined. Either provide a global store or at the function call level. ${message}`\n );\n }\n};\n\nexport const checkApiURL = (apiURL: string | undefined, message = \"\") => {\n if (typeof apiURL === \"undefined\") {\n throw new Error(\n `ApiURL must be defined. Either provide a global ApiURL or at the function call level. ${message}`\n );\n }\n};\n\nexport const checkMinimumConfigProvided = (config: ShoppingCartConfig = {}) => {\n const { accountId, customerId } = config;\n checkAccountId(accountId);\n checkCustomerId(customerId);\n};\n\n/**\n * Checks benefit configuration provided to apply or remove\n * a benefit in shopping cart.\n *\n * @since 0.1.0\n * @param {Wallets} wallets Benefits wallet configuration and parameters to pass\n * to apply in shopping cart\n * @param {ApplyBenefitConfig|RemoveBenefitConfig} config Configuration to apply\n * or remove a benefit in shopping cart\n * @returns {string|undefined} A message if there are no active wallet or\n * benefits\n */\nexport const checkBenefitConfigProvided = (\n wallets: Wallets,\n cartName: string,\n config?: ApplyBenefitConfig | RemoveBenefitConfig\n) => {\n const { benefitId } = config ?? {};\n const activeWallet: Wallet = wallets[cartName];\n const benefits = activeWallet?.benefits;\n\n checkBenefitId(benefitId);\n\n if (!activeWallet || !benefits) {\n return `No benefits wallet available for ${cartName}, you probably forgot to call listenBenefitsWallet beforehand.`;\n }\n};\n\n/**\n * Checks if a benefit id was provided to apply or remove it\n * from the shopping cart.\n *\n * @since 0.1.0\n * @param benefitId The benefit to be applied\n */\nexport const checkBenefitId = (benefitId?: number) => {\n if (typeof benefitId !== \"undefined\") return;\n\n throw new Error(\n `BenefitId must be defined. Provide it at the function call level.`\n );\n};\n\n/**\n * Checks if vendor id was provided.\n *\n * @since 0.1.0\n * @param {string|number} vendorId Provided vendor id\n * @param {string} message Provided custom message\n */\nexport const checkVendorId = (\n vendorId: Vendor[\"id\"] | undefined,\n message = \"\"\n) => {\n if (typeof vendorId === \"undefined\") {\n throw new Error(\n `VendorId must be defined. Provide a global vendorId at the function call level. ${message}`\n );\n }\n};\n\n/**\n * Check minimum fetch wallet configuration provided.\n *\n * @since 0.1.0\n * @param {BenefitsWalletConfig} config Benefits wallet configuration parameters to pass to call the endpoint.\n */\nexport const checkMinimumFetchWalletConfigProvided = (\n config?: BenefitsWalletConfig\n) => {\n const { customerId } = config ?? {};\n checkCustomerId(customerId);\n};\n\nexport const checkPlatform = (\n platform: ArtisnPlatform | undefined,\n message = \"\"\n) => {\n if (typeof platform === \"undefined\") {\n throw new Error(\n `Platform must be defined. Either provide a global Platform in the artisn object or at the function call level. ${message}`\n );\n }\n};\n\nexport const checkAuthToken = (authToken: string | undefined) => {\n if (!authToken) {\n throw new Error(\n `No auth token provided. Please make sure you provide one globally or a the function level call. You may included it in the Authorization header.`\n );\n }\n const validAuthToken = authToken.startsWith(\"Bearer \");\n if (!validAuthToken) {\n throw new Error(\n `The provided auth token is invalid. Please provide a valid one.`\n );\n }\n};\n\n/**\n * Checks if the country id and the coupon id were provided inside the\n * configuration object to fetch a store coupon detail.\n *\n * @since 0.1.0\n * @param {StoreCouponDetailConfig} vendorId Provided vendor id\n * @param {string} message Provided custom message\n */\nexport const checkStoreCouponDetailConfig = (\n config: StoreCouponDetailConfig,\n message = \"\"\n) => {\n const { countryId, couponId } = config;\n if (typeof countryId === \"undefined\" || typeof couponId === \"undefined\") {\n throw new Error(\n `Country id or coupon id must be defined. Provide those params at the function call level. ${message}`\n );\n }\n};\n","// Product error functions\nimport { ProductActionConfig } from \"../../types/common.types\";\nimport { ProductRemoveConfig } from \"../../types/common.types\";\nimport { checkStoreId } from \"../state.errors\";\n\nexport const checkProductAmount = (amount: number) => {\n if (typeof amount !== \"number\") {\n throw new Error(\n \"Invalid amount received, please make sure you include a valid amount.\"\n );\n }\n if (amount < 0) {\n throw new Error(\n `Cannot receive a negative amount of an item. Please ensure you have added a proper amount of items.`\n );\n }\n if (amount === 0) {\n throw new Error(\n \"Attempting to pass 0 amount. This might indicate a problem with your code. Please ensure you have added a proper amount of items.\"\n );\n }\n};\n\nexport const checkModifyProductConfig = (config: ProductActionConfig) => {\n const { store, amount } = config;\n checkStoreId(store);\n checkProductAmount(amount);\n};\n\nexport const checkRemoveProductConfig = (config: ProductRemoveConfig) => {\n const { store } = config;\n checkStoreId(store);\n};\n\nexport const checkReplaceProductConfig = (config: ProductRemoveConfig) => {\n const { store } = config;\n checkStoreId(store);\n};\n","(function() {\n var base64map\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n crypt = {\n // Bit-wise rotation left\n rotl: function(n, b) {\n return (n << b) | (n >>> (32 - b));\n },\n\n // Bit-wise rotation right\n rotr: function(n, b) {\n return (n << (32 - b)) | (n >>> b);\n },\n\n // Swap big-endian to little-endian and vice versa\n endian: function(n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++)\n n[i] = crypt.endian(n[i]);\n return n;\n },\n\n // Generate an array of any length of random bytes\n randomBytes: function(n) {\n for (var bytes = []; n > 0; n--)\n bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function(bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n words[b >>> 5] |= bytes[i] << (24 - b % 32);\n return words;\n },\n\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function(words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a hex string\n bytesToHex: function(bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n\n // Convert a hex string to a byte array\n hexToBytes: function(hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n\n // Convert a byte array to a base-64 string\n bytesToBase64: function(bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n for (var j = 0; j < 4; j++)\n if (i * 8 + j * 6 <= bytes.length * 8)\n base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n else\n base64.push('=');\n }\n return base64.join('');\n },\n\n // Convert a base-64 string to a byte array\n base64ToBytes: function(base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n }\n return bytes;\n }\n };\n\n module.exports = crypt;\n})();\n","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","(function() {\n var crypt = require('crypt'),\n utf8 = require('charenc').utf8,\n bin = require('charenc').bin,\n\n // The core\n sha1 = function (message) {\n // Convert to byte array\n if (message.constructor == String)\n message = utf8.stringToBytes(message);\n else if (typeof Buffer !== 'undefined' && typeof Buffer.isBuffer == 'function' && Buffer.isBuffer(message))\n message = Array.prototype.slice.call(message, 0);\n else if (!Array.isArray(message))\n message = message.toString();\n\n // otherwise assume byte array\n\n var m = crypt.bytesToWords(message),\n l = message.length * 8,\n w = [],\n H0 = 1732584193,\n H1 = -271733879,\n H2 = -1732584194,\n H3 = 271733878,\n H4 = -1009589776;\n\n // Padding\n m[l >> 5] |= 0x80 << (24 - l % 32);\n m[((l + 64 >>> 9) << 4) + 15] = l;\n\n for (var i = 0; i < m.length; i += 16) {\n var a = H0,\n b = H1,\n c = H2,\n d = H3,\n e = H4;\n\n for (var j = 0; j < 80; j++) {\n\n if (j < 16)\n w[j] = m[i + j];\n else {\n var n = w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16];\n w[j] = (n << 1) | (n >>> 31);\n }\n\n var t = ((H0 << 5) | (H0 >>> 27)) + H4 + (w[j] >>> 0) + (\n j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 :\n j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 :\n j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 :\n (H1 ^ H2 ^ H3) - 899497514);\n\n H4 = H3;\n H3 = H2;\n H2 = (H1 << 30) | (H1 >>> 2);\n H1 = H0;\n H0 = t;\n }\n\n H0 += a;\n H1 += b;\n H2 += c;\n H3 += d;\n H4 += e;\n }\n\n return [H0, H1, H2, H3, H4];\n },\n\n // Public API\n api = function (message, options) {\n var digestbytes = crypt.wordsToBytes(sha1(message));\n return options && options.asBytes ? digestbytes :\n options && options.asString ? bin.bytesToString(digestbytes) :\n crypt.bytesToHex(digestbytes);\n };\n\n api._blocksize = 16;\n api._digestsize = 20;\n\n module.exports = api;\n})();\n","// Product utility function\nimport sha1 from \"sha1\";\nimport { AdditionalInfo } from \"@artisan-commerce/types\";\nimport { Benefit, CartProductAnswer } from \"@artisan-commerce/types\";\nimport { CartProduct, CartProductQuestion } from \"@artisan-commerce/types\";\nimport { ShoppingCart, CartStore, Store } from \"@artisan-commerce/types\";\nimport { modifierUtils } from \"@artisan-commerce/products\";\nimport { getProductTotals, transformers } from \"@artisan-commerce/products\";\n\nimport { sortByProductId, sortByQuestionId } from \"../common.utils\";\nimport { ShoppingCartTotals } from \"./product.utils.types\";\nimport { ShoppingCartTotalsConfig } from \"./product.utils.types\";\nimport { getShoppingCart } from \"../../lib/fetchShoppingCart/fetchShoppingCart\";\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\nimport { FindProductConfig } from \"../../types/common.types\";\n\nconst { toCartProduct } = transformers;\nconst { divideProductQA } = modifierUtils;\n\n// Extract the product hash based on a given cart product\nexport const getProductHash = (\n product: CartProduct | CartProductAnswer\n): string => {\n const resetedProduct = divideProductQA(product);\n const { productId, questionsAndAnswers, priceCategory } = resetedProduct;\n const prunedQuestions = pruneQuestionsAndAnswers(questionsAndAnswers);\n const sortedQuestions = prunedQuestions.sort(sortByQuestionId);\n const questionAndAnswersIds = sortedQuestions.reduce((acc, question) => {\n const sortedAnswers = question.answers.sort(sortByProductId);\n const answerIds = sortedAnswers.reduce((acc, answer, index) => {\n const { productId, amount } = answer;\n const childrenHash = getProductHash(answer);\n const concatChildrenHash = childrenHash ? `{${childrenHash}}` : \"\";\n if (index === 0) {\n return `${productId}=${amount}${concatChildrenHash}`;\n }\n return `${acc}|${productId}=${amount}${concatChildrenHash}`;\n }, \"\");\n const questionIds = `${question.questionId}:${answerIds}`;\n if (acc === \"\") {\n return `${questionIds}`;\n }\n return `${acc}-${questionIds}`;\n }, \"\");\n const sequence = `${productId}-${questionAndAnswersIds}*${priceCategory}`;\n return sha1(sequence);\n};\n\n// Remove not relevant questions and answers\nexport const pruneQuestionsAndAnswers = <\n T extends CartProductQuestion = CartProductQuestion\n>(\n questions: T[]\n): T[] => {\n const prunedQuestions = questions.reduce<T[]>((acc, question) => {\n const prunedAnswers = question.answers.filter(answer => {\n return answer.amount > 0;\n });\n const prunedAnswersAndChildren = prunedAnswers.map(answer => {\n const prunedChildren = pruneQuestionsAndAnswers(\n answer.questionsAndAnswers\n );\n return { ...answer, questionsAndAnswers: prunedChildren };\n });\n return [...acc, { ...question, answers: prunedAnswersAndChildren }];\n }, []);\n const prunedQuestionsAndAnswers = prunedQuestions.filter(question => {\n return question.answers.length > 0;\n });\n return prunedQuestionsAndAnswers;\n};\n\n/**\n * Calculate the given shopping cart total values\n *\n * @since 0.1.0\n * @param products the products in the shopping cart\n * @param config additional info to calculate shopping cart summary\n * @returns an object with a summary of the shopping cart totals\n */\nexport const getShoppingCartTotal = (\n shoppingCart: ShoppingCart,\n config: ShoppingCartTotalsConfig = {}\n): ShoppingCartTotals => {\n const initialValue: ShoppingCartTotals = {\n subtotal: 0,\n totalDiscounts: null,\n shippingCost: null,\n totalTaxes: null,\n totalPoints: null,\n total: 0\n };\n\n const products = getShoppingCartProducts(shoppingCart);\n\n // If there are no products, it returns the default object\n if (!products.length) return initialValue;\n\n const totals = products.reduce<ShoppingCartTotals>((acc, product) => {\n const cartProduct = toCartProduct(product);\n const { priceCategory } = cartProduct;\n const productTotal = getProductTotals(cartProduct);\n const isPoints = priceCategory === \"POINTS\";\n const points = isPoints ? productTotal.netPrice : 0;\n const normal = !isPoints ? productTotal.netPrice : 0;\n const subtotalNormal = !isPoints ? productTotal.grossPrice : 0;\n return {\n subtotal: acc.subtotal + subtotalNormal,\n totalDiscounts:\n productTotal.totalDiscounts !== null\n ? Number(acc.totalDiscounts) + productTotal.totalDiscounts\n : null,\n totalTaxes:\n productTotal.totalTaxes !== null\n ? Number(acc.totalTaxes) + productTotal.totalTaxes\n : null,\n shippingCost: null,\n totalPoints: points !== null ? Number(acc.totalPoints) + points : null,\n total: acc.total + normal\n };\n }, initialValue);\n\n const totalsWithBenefits = applyBenefits(shoppingCart, totals);\n const { shippingCost = shoppingCart.shippingCost } = config;\n if (!shippingCost) {\n return totalsWithBenefits;\n }\n\n // If shipping cost is given, add does values to the summary\n const { grossPrice, netPrice, taxTotal, discountTotal } = shippingCost;\n const totalsWithShippingCost = {\n subtotal: totalsWithBenefits.subtotal + grossPrice,\n totalDiscounts:\n totalsWithBenefits.totalDiscounts !== null\n ? totalsWithBenefits.totalDiscounts + discountTotal\n : discountTotal,\n totalTaxes:\n totalsWithBenefits.totalTaxes !== null\n ? totalsWithBenefits.totalTaxes + taxTotal\n : taxTotal,\n shippingCost: netPrice,\n totalPoints: totalsWithBenefits.totalPoints,\n total: totalsWithBenefits.total + netPrice\n };\n\n return totalsWithShippingCost;\n};\n\n// Join all products from all stores in a shopping cart into a single array\nexport const getShoppingCartProducts = <\n T extends AdditionalInfo = AdditionalInfo,\n U extends AdditionalInfo = AdditionalInfo\n>(\n shoppingCart: ShoppingCart<AdditionalInfo, T, U>,\n storeId?: Store[\"storeId\"]\n): CartProduct<T, U>[] => {\n let stores: CartStore<AdditionalInfo, T, U>[];\n if (typeof storeId === \"undefined\") {\n stores = Object.values(shoppingCart.stores);\n } else {\n stores = [shoppingCart.stores[storeId]];\n }\n\n return stores.reduce<CartProduct<T, U>[]>((acc, store) => {\n if (!store) return acc;\n const products = Object.values(store.products);\n return [...acc, ...products];\n }, []);\n};\n\nexport const applyBenefits = (\n shoppingCart: ShoppingCart,\n shoppingCartTotals: ShoppingCartTotals\n): ShoppingCartTotals => {\n const additionalInfo = shoppingCart[\"additional_info\"];\n const benefits = shoppingCart[\"benefits\"];\n if (!benefits) {\n return shoppingCartTotals;\n }\n const benefitsValues = Object.values(benefits);\n return benefitsValues.reduce((acc, benefit) => {\n if (benefit.type === \"DISCOUNT_PERCENTAGE\" && benefit.discountPercentage) {\n return applyBenefitByDiscountPercentage(benefit, acc, shoppingCart);\n }\n if (benefit.type === \"DISCOUNT_FIXED\" && benefit.discountFixed) {\n return applyBenefitByDiscountFixed(benefit, acc, additionalInfo);\n }\n return acc;\n }, shoppingCartTotals);\n};\n\nexport const applyBenefitByDiscountPercentage = (\n benefit: Benefit,\n shoppingCartTotals: ShoppingCartTotals,\n shoppingCart: ShoppingCart\n): ShoppingCartTotals => {\n let taxValue = 0;\n const additionalInfo = shoppingCart[\"additional_info\"];\n const { billTotal } = shoppingCart;\n const { NORMAL } = billTotal;\n const { discounts } = NORMAL ?? {};\n discounts?.forEach(discount => {\n if (discount.taxValue) {\n taxValue += discount.taxValue;\n }\n });\n const { subtotal, total: prevTotal } = shoppingCartTotals;\n const { totalDiscounts: prevTotalDiscounts } = shoppingCartTotals;\n const discountPercentage = benefit.discountPercentage! * 0.01;\n\n if (typeof additionalInfo?.copayment !== \"undefined\") {\n const copayment = additionalInfo?.copayment;\n const totalDiscount = copayment * discountPercentage + taxValue;\n const newTotalDiscounts =\n prevTotalDiscounts !== null\n ? prevTotalDiscounts + totalDiscount\n : totalDiscount;\n const newTotal = (copayment - totalDiscount).toFixed(4);\n\n return {\n ...shoppingCartTotals,\n totalDiscounts: newTotalDiscounts,\n total: Number(newTotal)\n };\n }\n\n const totalDiscount = subtotal * discountPercentage + taxValue;\n const newTotalDiscounts =\n prevTotalDiscounts !== null\n ? prevTotalDiscounts + totalDiscount\n : totalDiscount;\n const newTotal = prevTotal - totalDiscount;\n return {\n ...shoppingCartTotals,\n totalDiscounts: newTotalDiscounts,\n total: newTotal\n };\n};\n\nexport const applyBenefitByDiscountFixed = (\n benefit: Benefit,\n shoppingCartTotals: ShoppingCartTotals,\n additionalInfo: ShoppingCart[\"additional_info\"]\n): ShoppingCartTotals => {\n const { total: prevTotal } = shoppingCartTotals;\n const { totalDiscounts: prevTotalDiscounts } = shoppingCartTotals;\n const discountFixed = Number(benefit.discountFixed!);\n if (typeof additionalInfo?.copayment !== \"undefined\") {\n const copayment = additionalInfo?.copayment;\n const newTotalDiscounts =\n prevTotalDiscounts !== null\n ? prevTotalDiscounts + discountFixed\n : discountFixed;\n const newTotal = (copayment - discountFixed).toFixed(4);\n\n return {\n ...shoppingCartTotals,\n totalDiscounts: newTotalDiscounts,\n total: Number(newTotal)\n };\n }\n\n const newTotalDiscounts =\n prevTotalDiscounts !== null\n ? prevTotalDiscounts + discountFixed\n : discountFixed;\n const newTotal = prevTotal - discountFixed;\n return {\n ...shoppingCartTotals,\n totalDiscounts: newTotalDiscounts,\n total: newTotal\n };\n};\n\n/**\n * Returns the specified product based on its id or hash if it exists on the\n * active shopping cart. If both are provided, the hash takes precedence\n * over the product id.\n *\n * @param {FindProductConfig} config Configuration provided to find the\n * desired product\n * @returns {Promise<Product|undefined>} The product if found in the\n * shopping cart\n */\nexport const findProduct = async <\n T extends AdditionalInfo = AdditionalInfo,\n U extends AdditionalInfo = AdditionalInfo\n>(\n builders: ShoppingCartBuilders,\n config: FindProductConfig\n): Promise<CartProduct<T, U> | undefined> => {\n const { getShoppingCartNode } = builders ?? {};\n const { shoppingCartName } = config;\n const { accountId, customerId, hash, productId, store } = config;\n\n try {\n if (!hash && typeof productId === \"undefined\") {\n throw new Error(\n `You must provide either a product id or a product hash,\n but none were given.`\n );\n }\n\n const shoppingCart = await getShoppingCart<\n ShoppingCart<AdditionalInfo, T, U>\n >(\n { getShoppingCartNode },\n {\n accountId,\n customerId,\n store,\n shoppingCartName\n }\n );\n\n if (!shoppingCart) return;\n const products = getShoppingCartProducts<T, U>(shoppingCart);\n\n let product;\n if (hash) {\n product = products.find(item => item.hash === hash);\n } else {\n product = products.find(item => item.productId === productId);\n }\n return product;\n } catch (e) {\n console.error(e);\n return undefined;\n }\n};\n","import dayjs from \"dayjs\";\nimport { CartProduct, Product } from \"@artisan-commerce/types\";\nimport { transformers } from \"@artisan-commerce/products\";\nimport { ShoppingCart } from \"@artisan-commerce/types\";\nimport { modifierUtils } from \"@artisan-commerce/products\";\n\nimport { getShoppingCart } from \"../fetchShoppingCart/fetchShoppingCart\";\nimport { ProductAddConfig } from \"../../types/common.types\";\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\nimport CONSTANTS from \"../../config/constants\";\nimport { checkModifyProductConfig } from \"../../errors/product/product.errors\";\nimport { getProductHash } from \"../../utils/product/product.utils\";\nimport { pruneQuestionsAndAnswers } from \"../../utils/product/product.utils\";\nimport { getStore } from \"../../utils/shoppingCart.utils\";\nimport { reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { getState } from \"../state\";\n\nconst { PRODUCT_DATE_FORMAT } = CONSTANTS;\nconst { toCartProduct } = transformers;\nconst { multiplyProductQA, divideProductQA } = modifierUtils;\n\n/**\n * Adds a product amount async to the remote shopping cart.\n *\n * @template T Shopping cart generic type\n * @since 0.1.0\n * @param {Product} product The product object that will be added to the cart.\n * It can be a BaseProduct, a DetailedProduct or a CartProduct.\n * @param {ProductAddConfig} config A configuration that specifies how to\n * make an action over a product. E.g specify the amount.\n */\nexport const addProduct = async <T extends ShoppingCart = ShoppingCart>(\n builders: ShoppingCartBuilders,\n product: Product,\n config: ProductAddConfig\n) => {\n const { getShoppingCartNode, setDoc, createShoppingCart } = builders ?? {};\n\n const { createCart } = config;\n // Create a shopping cart if it doesn't exist\n if (createCart) {\n const reusedConfig = reuseGlobalConfig(config);\n const shoppingCart = await getShoppingCart(builders, reusedConfig);\n if (!shoppingCart)\n await createShoppingCart?.(\n reusedConfig,\n createCart === true ? undefined : createCart\n );\n }\n return new Promise<T | null>((resolve, reject) => {\n const action = async () => {\n try {\n const reusedConfig = reuseGlobalConfig(config);\n // Verify minimum config\n checkModifyProductConfig(reusedConfig);\n // Get latest shopping cart\n const shoppingCartNode = await getShoppingCartNode(reusedConfig);\n if (!shoppingCartNode) {\n console.warn(\n \"Cannot add a product because no shopping cart node was found. Please ensure you have a shopping cart before continue.\"\n );\n resolve(null);\n return null;\n }\n const shoppingCart = shoppingCartNode.data() as T;\n // Add product to cart\n const updatedCart = addProductToCartHelper<T>(\n shoppingCart,\n product,\n config\n );\n // Update cart remotely\n await setDoc?.({\n reusedConfig,\n shoppingCartNode,\n payload: updatedCart\n });\n resolve(updatedCart);\n return updatedCart;\n } catch (e) {\n reject(e);\n return null;\n }\n };\n const { eventLoop, queue } = getState();\n queue.enqueue(action);\n if (!eventLoop.isRunning) eventLoop.start();\n });\n};\n\n// Modifies the given shopping cart to show that the product was added.\nexport const addProductToCartHelper = <T extends ShoppingCart = ShoppingCart>(\n shoppingCart: T,\n product: Product,\n config: ProductAddConfig\n): T => {\n const reusedConfig = reuseGlobalConfig(config);\n // For testing purposes this check is duplicated, DON'T REMOVE\n if (process.env.NODE_ENV === \"test\") {\n checkModifyProductConfig(reusedConfig);\n }\n const { amount: originalAmount } = product as CartProduct;\n const amount = originalAmount ? originalAmount : 1;\n const hashCartProduct = toCartProduct(product, {\n ...reusedConfig,\n amount: amount ?? 1\n });\n const cartProduct = toCartProduct(product, reusedConfig);\n const { store: configStore } = reusedConfig;\n const { storeId } = configStore ?? {};\n const hash = getProductHash(hashCartProduct);\n const updatedCart = { ...shoppingCart };\n const stores = { ...shoppingCart.stores };\n const store = getStore(configStore, stores);\n const products = { ...store.products };\n const productExist = products[hash];\n const now = dayjs().format(PRODUCT_DATE_FORMAT);\n if (!productExist) {\n // Add metadata to new product\n products[hash] = cartProduct;\n products[hash].hash = hash;\n products[hash].createdAt = now;\n } else {\n // Update metadata to existing product\n // Reset QA amount and cost to 1 unit\n products[hash] = divideProductQA(products[hash]);\n products[hash].amount += cartProduct.amount;\n }\n products[hash].updatedAt = now;\n // Multiply QA amount and cost to the total amount of same products added\n let updatedProduct = products[hash];\n updatedProduct = multiplyProductQA(updatedProduct);\n const { questionsAndAnswers } = updatedProduct;\n const newCartModifiers = pruneQuestionsAndAnswers(questionsAndAnswers);\n products[hash] = { ...updatedProduct, questionsAndAnswers: newCartModifiers };\n store.products = products;\n stores[storeId!] = store;\n updatedCart.stores = stores;\n return updatedCart;\n};\n","import dayjs from \"dayjs\";\nimport { ShoppingCart, Product, CartProduct } from \"@artisan-commerce/types\";\nimport { transformers } from \"@artisan-commerce/products\";\nimport { modifierUtils } from \"@artisan-commerce/products\";\n\nimport { ProductActionConfig } from \"../../types/common.types\";\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\nimport { checkModifyProductConfig } from \"../../errors/product/product.errors\";\nimport CONSTANTS from \"../../config/constants\";\nimport { getProductHash } from \"../../utils/product/product.utils\";\nimport { getStore } from \"../../utils/shoppingCart.utils\";\nimport { cleanShoppingCart } from \"../../utils/shoppingCart.utils\";\nimport { reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { getState } from \"../state\";\n\nconst { PRODUCT_DATE_FORMAT } = CONSTANTS;\nconst { toCartProduct } = transformers;\nconst { multiplyProductQA, divideProductQA } = modifierUtils;\n\n/**\n * Subtracts a product amount async to the remote shopping cart.\n *\n * @template T Shopping cart generic type\n * @since 0.1.0\n * @param {Product} product The product object that will be subtracted from the\n * cart. It can be a BaseProduct, a DetailedProduct or a CartProduct\n * @param {ProductActionConfig} config A configuration that specifies how to\n * make an action over a product. E.g specify the amount\n */\nexport const subtractProduct = async <T extends ShoppingCart = ShoppingCart>(\n builders: ShoppingCartBuilders,\n product: Product,\n config: ProductActionConfig\n) => {\n return new Promise<T | null>((resolve, reject) => {\n const action = async () => {\n try {\n const { setDoc, getShoppingCartNode } = builders ?? {};\n const reusedConfig = reuseGlobalConfig(config);\n // Verify minimum config\n checkModifyProductConfig(reusedConfig);\n // Get latest shopping cart\n const shoppingCartNode = await getShoppingCartNode(reusedConfig);\n if (!shoppingCartNode) {\n console.warn(\n \"Cannot subtract product because no shopping cart nodes found. Please ensure you have a shopping cart before continue.\"\n );\n resolve(null);\n return null;\n }\n const shoppingCart = shoppingCartNode.data() as T;\n // Subtract product amount from cart\n const updatedCart = subtractProductHelper(\n shoppingCart,\n product,\n reusedConfig\n );\n // Update cart remotely\n await setDoc?.({\n reusedConfig,\n shoppingCartNode,\n payload: updatedCart\n });\n resolve(updatedCart);\n return updatedCart;\n } catch (e) {\n reject(e);\n return null;\n }\n };\n const { eventLoop, queue } = getState();\n queue.enqueue(action);\n if (!eventLoop.isRunning) eventLoop.start();\n });\n};\n\n// Modifies the given shopping cart to show that the product was subtracted.\nexport const subtractProductHelper = <T extends ShoppingCart = ShoppingCart>(\n shoppingCart: T,\n product: Product,\n config: ProductActionConfig\n): T => {\n const reusedConfig = reuseGlobalConfig(config);\n // For testing purposes this check is duplicated, DON'T REMOVE\n if (process.env.NODE_ENV === \"test\") {\n checkModifyProductConfig(reusedConfig);\n }\n const { amount: originalAmount } = product as CartProduct;\n const amount = originalAmount ? originalAmount : 1;\n const hashCartProduct = toCartProduct(product, {\n ...reusedConfig,\n amount: amount ?? 1\n });\n const cartProduct = toCartProduct(product, reusedConfig);\n const { store: configStore } = reusedConfig;\n const { storeId } = configStore ?? {};\n const hash = getProductHash(hashCartProduct);\n let updatedCart = { ...shoppingCart };\n const stores = { ...shoppingCart.stores };\n if (typeof stores[storeId!] === \"undefined\") {\n console.warn(\n `StoreId given is invalid. There is no store with id ${storeId} on the shopping cart.`\n );\n return shoppingCart;\n }\n const store = getStore(configStore, stores);\n const products = { ...store.products };\n const productExist = products[hash];\n const now = dayjs().format(PRODUCT_DATE_FORMAT);\n if (!productExist) {\n console.warn(\n `Attempting to subtract the amount of product that is not in the given shopping cart store.`\n );\n return shoppingCart;\n }\n products[hash] = divideProductQA(products[hash]);\n const newAmount = products[hash].amount - cartProduct.amount;\n if (newAmount > 0) {\n products[hash].amount = newAmount;\n products[hash].updatedAt = now;\n products[hash] = multiplyProductQA(products[hash]);\n } else {\n delete products[hash];\n // Clear cart\n updatedCart = cleanShoppingCart(shoppingCart, product);\n }\n store.products = products;\n if (!Object.keys(store.products).length) {\n delete stores[storeId!];\n } else {\n stores[storeId!] = store;\n }\n updatedCart.stores = stores;\n return updatedCart;\n};\n","import { CartProduct, Product, ShoppingCart } from \"@artisan-commerce/types\";\nimport { transformers } from \"@artisan-commerce/products\";\n\nimport { getProductHash } from \"../../utils/product/product.utils\";\nimport { ProductRemoveConfig } from \"../../types/common.types\";\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\nimport { checkRemoveProductConfig } from \"../../errors/product/product.errors\";\nimport { getStore } from \"../../utils/shoppingCart.utils\";\nimport { cleanShoppingCart } from \"../../utils/shoppingCart.utils\";\nimport { reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { getState } from \"../state\";\n\nconst { toCartProduct } = transformers;\n\n/**\n * Removes a product async from the remote shopping cart\n *\n * @template T Shopping cart generic type\n * @since 0.1.0\n * @param {Product} product the product object that will be removed from the\n * cart. It can be a BaseProduct, a DetailedProduct or a CartProduct\n * @param {ProductRemoveConfig} config global configuration overrides. E.g\n * storeId\n */\nexport const removeProduct = async <T extends ShoppingCart = ShoppingCart>(\n builders: ShoppingCartBuilders,\n product: Product,\n config: ProductRemoveConfig = {}\n) => {\n return new Promise<T | null>((resolve, reject) => {\n const action = async () => {\n try {\n const { setDoc, getShoppingCartNode } = builders ?? {};\n const reusedConfig = reuseGlobalConfig(config);\n // Verify minimum config\n checkRemoveProductConfig(reusedConfig);\n // Get latest shopping cart\n const shoppingCartNode = await getShoppingCartNode(reusedConfig);\n if (!shoppingCartNode) {\n console.warn(\n \"Cannot remove a product because no shopping cart nodes found. Please ensure you have a shopping cart before continue.\"\n );\n resolve(null);\n return null;\n }\n const shoppingCart = shoppingCartNode.data() as T;\n // Remove product from cart\n const cart = removeProductHelper(shoppingCart, product, reusedConfig);\n // Clean cart\n const updatedCart = cleanShoppingCart<T>(cart, product);\n // Update cart remotely\n await setDoc?.({\n reusedConfig,\n shoppingCartNode,\n payload: updatedCart\n });\n resolve(updatedCart);\n return updatedCart;\n } catch (e) {\n reject(e);\n return null;\n }\n };\n const { eventLoop, queue } = getState();\n queue.enqueue(action);\n if (!eventLoop.isRunning) eventLoop.start();\n });\n};\n\n// Modifies the given shopping cart to show that the product was removed.\nexport const removeProductHelper = <T extends ShoppingCart = ShoppingCart>(\n shoppingCart: T,\n product: Product,\n config: ProductRemoveConfig\n): T => {\n const reusedConfig = reuseGlobalConfig(config);\n // For testing purposes this check is duplicated, DON'T REMOVE\n if (process.env.NODE_ENV === \"test\") {\n checkRemoveProductConfig(reusedConfig);\n }\n let productHash = (product as CartProduct).hash;\n if (!productHash) {\n const cartProduct = toCartProduct(product);\n productHash = getProductHash(cartProduct);\n }\n const { store: configStore } = reusedConfig;\n const { storeId } = configStore ?? {};\n const updatedCart = { ...shoppingCart };\n const stores = { ...shoppingCart.stores };\n if (typeof stores[storeId!] === \"undefined\") {\n console.warn(\n `StoreId given is invalid. There is no store with id ${storeId} on the shopping cart.`\n );\n return shoppingCart;\n }\n const store = getStore(configStore, stores);\n\n const products = { ...store.products };\n const productExist = products[productHash];\n if (!productExist) {\n console.warn(\n `Attempting to remove product that is not in the given shopping cart store.`\n );\n return shoppingCart;\n }\n delete products[productHash];\n store.products = products;\n if (!Object.keys(store.products).length) {\n delete stores[storeId!];\n } else {\n stores[storeId!] = store;\n }\n updatedCart.stores = stores;\n return updatedCart;\n};\n","import dayjs from \"dayjs\";\nimport { Product, CartProduct } from \"@artisan-commerce/types\";\nimport { ShoppingCart } from \"@artisan-commerce/types\";\nimport { transformers } from \"@artisan-commerce/products\";\nimport { modifierUtils } from \"@artisan-commerce/products\";\n\nimport { ProductActionConfig } from \"../../types/common.types\";\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\nimport { ProductSetConfig } from \"../../types/common.types\";\nimport CONSTANTS from \"../../config/constants\";\nimport { checkModifyProductConfig } from \"../../errors/product/product.errors\";\nimport { getProductHash } from \"../../utils/product/product.utils\";\nimport { pruneQuestionsAndAnswers } from \"../../utils/product/product.utils\";\nimport { getStore } from \"../../utils/shoppingCart.utils\";\nimport { cleanShoppingCart } from \"../../utils/shoppingCart.utils\";\nimport { reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { getState } from \"../state\";\n\nconst { PRODUCT_DATE_FORMAT } = CONSTANTS;\nconst { toCartProduct } = transformers;\nconst { multiplyProductQA, divideProductQA } = modifierUtils;\n\n/**\n * Sets a product async in the remote shopping cart\n *\n * @template T Shopping cart generic type\n * @since 0.1.0\n * @param {Product} product The product object that will be set in the cart. It\n * can be a BaseProduct, a DetailedProduct or a CartProduct\n * @param {ProductSetConfig} config A configuration that specifies how to make\n * an action over a product. E.g specify the amount\n */\nexport const setProduct = async <T extends ShoppingCart = ShoppingCart>(\n builders: ShoppingCartBuilders,\n product: Product,\n config: ProductSetConfig = {}\n) => {\n return new Promise<T | null>((resolve, reject) => {\n const action = async () => {\n try {\n const { setDoc, getShoppingCartNode } = builders ?? {};\n const reusedConfig = reuseGlobalConfig(config);\n // Verify minimum config\n const amount =\n reusedConfig.amount ?? (product as CartProduct)?.amount ?? 1;\n const actionConfig: ProductActionConfig = { ...reusedConfig, amount };\n checkModifyProductConfig(actionConfig);\n // Get latest shopping cart\n const shoppingCartNode = await getShoppingCartNode(reusedConfig);\n if (!shoppingCartNode) {\n console.warn(\n \"Cannot set product because no shopping cart nodes found. Please ensure you have a shopping cart before continue.\"\n );\n resolve(null);\n return null;\n }\n const shoppingCart = shoppingCartNode.data() as T;\n // set product in the cart\n const cart = setProductHelper(shoppingCart, product, actionConfig);\n // Clean cart\n const updatedCart = cleanShoppingCart(cart, product);\n // Update cart remotely\n await setDoc?.({\n reusedConfig,\n shoppingCartNode,\n payload: updatedCart\n });\n resolve(updatedCart);\n return updatedCart;\n } catch (e) {\n reject(e);\n return null;\n }\n };\n const { eventLoop, queue } = getState();\n queue.enqueue(action);\n if (!eventLoop.isRunning) eventLoop.start();\n });\n};\n\n// Modifies the given shopping cart to show that the product was set.\nexport const setProductHelper = <T extends ShoppingCart = ShoppingCart>(\n shoppingCart: T,\n product: Product,\n config: ProductActionConfig\n): T => {\n const reusedConfig = reuseGlobalConfig(config);\n // For testing purposes this check is duplicated, DON'T REMOVE\n if (process.env.NODE_ENV === \"test\") {\n checkModifyProductConfig(reusedConfig);\n }\n const amount = (product as CartProduct)?.amount ?? 1;\n const hashCartProduct = toCartProduct(product, { ...reusedConfig, amount });\n const { store: configStore } = reusedConfig;\n const { storeId } = configStore ?? {};\n const hash = getProductHash(hashCartProduct);\n const updatedCart = { ...shoppingCart };\n const stores = { ...shoppingCart.stores };\n const store = getStore(configStore, stores);\n const products = { ...store.products };\n const productExist = products[hash];\n const now = dayjs().format(PRODUCT_DATE_FORMAT);\n products[hash] = hashCartProduct;\n if (!productExist) {\n // Add metadata to new product\n products[hash].createdAt = now;\n products[hash].hash = hash;\n } else {\n // Reset QA amount and cost to 1 unit\n products[hash] = divideProductQA(products[hash]);\n }\n products[hash].updatedAt = now;\n // Multiply QA amount and cost to the total amount of same products added\n let updatedProduct = toCartProduct(products[hash], reusedConfig);\n updatedProduct = multiplyProductQA(updatedProduct);\n const { questionsAndAnswers } = updatedProduct;\n const newCartModifiers = pruneQuestionsAndAnswers(questionsAndAnswers);\n products[hash] = { ...updatedProduct, questionsAndAnswers: newCartModifiers };\n store.products = products;\n stores[storeId!] = { ...store, polygons: null };\n updatedCart.stores = stores;\n return updatedCart;\n};\n","// replaceProduct functions\nimport { CartProduct } from \"@artisan-commerce/types\";\nimport { ShoppingCart } from \"@artisan-commerce/types\";\n\nimport { ProductReplaceConfig } from \"../../types/common.types\";\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\nimport { checkReplaceProductConfig } from \"../../errors/product/product.errors\";\nimport { getStore } from \"../../utils/shoppingCart.utils\";\nimport { cleanShoppingCart } from \"../../utils/shoppingCart.utils\";\nimport { addProductToCartHelper } from \"../addProduct/addProduct\";\nimport { reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { getState } from \"../state\";\n\n/**\n * Replaces an existing product async in the remote shopping cart\n *\n * @template T Shopping cart generic type\n * @since 0.1.0\n * @param {CartProduct} product The product object that will be replaced in the\n * cart. It can only be a CartProduct\n * @param {ProductReplaceConfig} config A configuration that specifies how to\n * make an action over a product. E.g specify the store\n */\nexport const replaceProduct = async <T extends ShoppingCart = ShoppingCart>(\n builders: ShoppingCartBuilders,\n product: CartProduct,\n config: ProductReplaceConfig\n) => {\n return new Promise<T | null>((resolve, reject) => {\n const action = async () => {\n try {\n const { setDoc, getShoppingCartNode } = builders ?? {};\n const reusedConfig = reuseGlobalConfig(config);\n // Verify minimum config\n checkReplaceProductConfig(reusedConfig);\n // Get latest shopping cart\n const shoppingCartNode = await getShoppingCartNode(reusedConfig);\n if (!shoppingCartNode) {\n console.warn(\n \"Cannot replace product because no shopping cart nodes found. Please ensure you have a shopping cart before continue.\"\n );\n resolve(null);\n return null;\n }\n const shoppingCart = shoppingCartNode.data() as T;\n // set product in the cart\n const cart = replaceProductHelper(shoppingCart, product, reusedConfig);\n // Clean cart\n const updatedCart = cleanShoppingCart(cart, product);\n // Update cart remotely\n await setDoc?.({\n reusedConfig,\n shoppingCartNode,\n payload: updatedCart\n });\n resolve(updatedCart);\n return updatedCart;\n } catch (e) {\n reject(e);\n return null;\n }\n };\n const { eventLoop, queue } = getState();\n queue.enqueue(action);\n if (!eventLoop.isRunning) eventLoop.start();\n });\n};\n\n// Modifies the given shopping cart to show that the product was replaced.\n// It will use the product.hash property by default since it likely possess the previous product hash.\n// Otherwise it will look into the config for a more specific hash\nexport const replaceProductHelper = <T extends ShoppingCart = ShoppingCart>(\n shoppingCart: T,\n product: CartProduct,\n config: ProductReplaceConfig\n): T => {\n const reusedConfig = reuseGlobalConfig(config);\n // For testing purposes this check is duplicated, DON'T REMOVE\n if (process.env.NODE_ENV === \"test\") {\n checkReplaceProductConfig(reusedConfig);\n }\n const { hash: configHash } = reusedConfig;\n const hash = configHash ?? product.hash;\n const { store: configStore } = reusedConfig;\n const { storeId } = configStore ?? {};\n const stores = { ...shoppingCart.stores };\n const store = getStore(configStore, stores);\n const products = { ...store.products };\n const productExist = products[hash];\n if (!productExist) {\n console.warn(\n \"Cannot replace a product because no product was found in the given store\"\n );\n return shoppingCart;\n }\n delete products[hash];\n store.products = products;\n if (!Object.keys(store.products).length) {\n delete stores[storeId!];\n } else {\n stores[storeId!] = store;\n }\n let updatedCart = { ...shoppingCart };\n updatedCart.stores = stores;\n const newProduct = { ...product, amount: 0 };\n updatedCart = addProductToCartHelper(updatedCart, newProduct, reusedConfig);\n return updatedCart;\n};\n","import { ShoppingCart } from \"@artisan-commerce/types\";\n\nimport CONSTANTS from \"../../config/constants\";\n\nconst { DEFAULT_SHOPPING_CART_NAME } = CONSTANTS;\n\nexport const buildInitialShoppingCart = <T extends ShoppingCart = ShoppingCart>(\n overrides: Partial<T> = {}\n): ShoppingCart => {\n const date = new Date().toISOString();\n return {\n id: \"\",\n name: DEFAULT_SHOPPING_CART_NAME,\n latitude: -1,\n longitude: -1,\n createdAt: date,\n updatedAt: date,\n channelId: 1,\n stores: {},\n billTotal: {},\n shippingCost: null,\n ...overrides\n };\n};\n","import { ShoppingCart } from \"@artisan-commerce/types\";\n\nimport { EmptyShoppingCartConfig } from \"../../types/common.types\";\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\nimport { logDebug, reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { cleanShoppingCart } from \"../../utils/shoppingCart.utils\";\nimport { getState } from \"../state\";\n\n/**\n * Removes all products in all stores of a given cart. It will attempt to delete\n * the last active shopping cart otherwise the default.\n *\n * If a vendor identifier is specified in the configuration object, it will\n * remove all stores that have the specified vendor.\n *\n * @template T Shopping cart generic type\n * @since 0.1.0\n * @param {ShoppingCartConfig} config Empty shopping cart configuration\n */\nexport const emptyShoppingCart = async <T extends ShoppingCart = ShoppingCart>(\n builders: ShoppingCartBuilders,\n config?: EmptyShoppingCartConfig\n) => {\n return new Promise<T | null>((resolve, reject) => {\n const action = async () => {\n try {\n const { getShoppingCartNode, setDoc } = builders ?? {};\n const shoppingCartNode = await getShoppingCartNode(config);\n const reusedConfig = reuseGlobalConfig(config);\n const { shoppingCartName, vendorId } = reusedConfig;\n if (!shoppingCartNode) {\n logDebug(\n `Cannot empty cart, shopping cart nodes not found. Please ensure you have a shopping cart with name ${shoppingCartName} before continue.`\n );\n resolve(null);\n return null;\n }\n const shoppingCart = (await shoppingCartNode.data()) as T;\n delete shoppingCart.pickUpTime;\n const stores: ShoppingCart[\"stores\"] = {};\n if (typeof vendorId !== \"undefined\") {\n const filteredStores = Object.values(shoppingCart.stores).filter(\n // TODO: confirm the vendor id type. This is because the backend\n // hasn't decide if this is a number or string\n // eslint-disable-next-line eqeqeq\n store => store.vendor.id != vendorId\n );\n filteredStores.forEach(store => {\n stores[`${store.storeId}`] = store;\n });\n }\n const cart = { ...shoppingCart, stores };\n const updatedCart = cleanShoppingCart<T>(cart);\n await setDoc?.({\n reusedConfig,\n shoppingCartNode,\n payload: updatedCart\n });\n resolve(updatedCart);\n return updatedCart;\n } catch (e) {\n reject(e);\n return null;\n }\n };\n const { eventLoop, queue } = getState();\n queue.enqueue(action);\n if (!eventLoop.isRunning) eventLoop.start();\n });\n};\n","import { ShoppingCart } from \"@artisan-commerce/types\";\n\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\nimport { ShoppingCartConfig } from \"../../types/common.types\";\nimport { logDebug, reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { getState } from \"../state\";\n\n/**\n * Deletes a customer shopping cart given by its name. It will attempt to delete\n * the last active shopping cart otherwise the default.\n *\n * @template T Shopping cart generic type\n * @since 0.1.0\n * @param {ShoppingCartConfig} config Function call level shopping cart\n * configuration\n */\nexport const deleteShoppingCart = async <T extends ShoppingCart = ShoppingCart>(\n builders: ShoppingCartBuilders,\n config?: ShoppingCartConfig\n) => {\n return new Promise<T | null>((resolve, reject) => {\n const action = async () => {\n try {\n const { getShoppingCartNode, deleteDoc } = builders ?? {};\n const shoppingCartNode = await getShoppingCartNode(config);\n const reusedConfig = reuseGlobalConfig(config);\n const { shoppingCartName } = reusedConfig;\n if (!shoppingCartNode) {\n logDebug(\n `Couldn't find any shopping cart with name ${shoppingCartName} with the given config.`\n );\n resolve(null);\n return null;\n }\n const shoppingCart = shoppingCartNode.data() as T;\n await deleteDoc?.({ shoppingCartNode, reusedConfig });\n resolve(shoppingCart);\n return shoppingCart;\n } catch (e) {\n reject(e);\n return null;\n }\n };\n const { eventLoop, queue } = getState();\n queue.enqueue(action);\n if (!eventLoop.isRunning) eventLoop.start();\n });\n};\n","import { checkAuthToken } from \"./state.errors\";\n\nexport const verifyHeaders = (headers: Headers) => {\n const validPlatforms = [\n \"web\",\n \"ios\",\n \"android\",\n \"windows\",\n \"macos\",\n \"call center\"\n ];\n const platform = headers.get(\"Platform\");\n const validPlatformsText = validPlatforms.join(\", \");\n\n if (!headers.has(\"account\")) {\n throw new Error(\"Missing account\");\n }\n\n if (!platform) {\n throw new Error(\"Missing Platform\");\n }\n\n if (!validPlatforms.includes(platform)) {\n throw new Error(\n `Invalid Platform: ${platform}, please use ${validPlatformsText}`\n );\n }\n\n checkAuthToken(headers.get(\"Authorization\") ?? undefined);\n};\n","// validate shopping cart errors\nimport { ValidateConfig } from \"../lib/validateShoppingCart/validateShoppingCart.types\";\nimport { verifyHeaders } from \"./guards.utils\";\nimport { checkApiURL } from \"./state.errors\";\n\n// Check whether the validate shopping cart config fulfills the minimum requirements\nexport const checkValidateShoppingCartConfig = (\n config: ValidateConfig,\n headers: Headers\n) => {\n const { apiURL } = config;\n checkApiURL(apiURL);\n verifyHeaders(headers);\n};\n","// common services logic\n\nexport const commonHeaders = {\n \"Content-Type\": \"application/json\"\n};\n","// Services utils functions and data\n\nimport { getState } from \"../lib/state\";\nimport { commonHeaders } from \"../services/common.services\";\nimport { SettingsHeaders } from \"../types/common.types\";\n\nexport const buildServiceHeaders = async (\n settings: SettingsHeaders,\n headers: Headers\n): Promise<Headers> => {\n const { token, platform, accountId: globalAccountId } = settings ?? {};\n const { accountId: localAccountId } = getState();\n\n const account =\n headers.get(\"account\") ??\n localAccountId?.toString() ??\n globalAccountId?.toString() ??\n \"\";\n\n const selectedPlatform = headers.get(\"Platform\") ?? platform ?? \"\";\n\n const Platform = selectedPlatform;\n const Authorization = headers.get(\"Authorization\") ?? token ?? \"\";\n\n return new Headers({\n ...commonHeaders,\n ...headers,\n Authorization,\n Platform,\n account\n });\n};\n","// Shopping cart validation services\nimport { Alert, ShoppingCart } from \"@artisan-commerce/types\";\n\nimport { ValidateShoppingCartConfig } from \"./validate.service.types\";\nimport { ValidateShoppingCartResult } from \"./validate.service.types\";\nimport { buildServiceHeaders } from \"../../utils/services.utils\";\nimport { getShoppingCartProducts } from \"../..\";\nimport { verifyHeaders } from \"../../errors/guards.utils\";\n\n/**\n * The endpoint to validate a shopping cart.\n *\n * @since 0.1.0\n * @param {ValidateShoppingCartConfig} config Validate shopping cart\n * configuration\n * @param {ValidateHeaders} headers Headers to validate the shopping cart\n * @returns {Promise<ValidateShoppingCartResult>} An object which contains stores and\n * products alerts.\n */\nexport const validateShoppingCart = async (\n config: ValidateShoppingCartConfig,\n headers: Headers\n): Promise<ValidateShoppingCartResult> => {\n const { id, latitude, longitude, apiURL } = config;\n\n verifyHeaders(headers);\n const token = headers.get(\"Authorization\")!;\n const platform = headers.get(\"Platform\")!;\n const accountId = headers.get(\"account\")!;\n\n const settings = { token, platform, accountId };\n\n const selectedHeaders = await buildServiceHeaders(settings, headers);\n\n let url = `${apiURL}/api/shopping-cart/${id}/validateShoppingCart`;\n\n try {\n if (typeof latitude !== \"undefined\" && typeof longitude !== \"undefined\") {\n url += `?latitude=${latitude}&longitude=${longitude}`;\n }\n const data = await fetch(url, {\n headers: selectedHeaders\n }).then(async data => {\n return await data.json();\n });\n const shoppingCart: ShoppingCart = data.data;\n if (!shoppingCart) throw new Error(\"No shopping cart was found.\");\n\n const storeAlerts = Object.values(shoppingCart.stores).reduce<Alert[]>(\n (acc, store) => {\n if (store.alerts.length) return [...acc, ...store.alerts];\n return acc;\n },\n []\n );\n\n const products = getShoppingCartProducts(shoppingCart);\n const productsAlerts = products.map(item => item.alerts).flat();\n\n const alerts = {\n stores: storeAlerts,\n products: productsAlerts\n };\n\n return alerts;\n } catch (e) {\n console.error(e.message);\n return {\n stores: [\n {\n errorLevel: 1,\n message: \"Ocurrió un error desconocido, comuníquese con soporte\",\n type: \"\"\n }\n ],\n products: []\n };\n }\n};\n","// Validate the shopping cart\nimport { ValidateConfig } from \"./validateShoppingCart.types\";\nimport { checkValidateShoppingCartConfig } from \"../../errors/validation.errors\";\nimport { validateShoppingCart as validateService } from \"../../services/validate/validate.service\";\nimport { reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\n\n/**\n * Validate shopping cart integrity.\n *\n * @since 0.1.0\n * @param {ValidateConfig} config Object that defines the properties to check\n * whether the shopping cart is valid.\n * @param {Partial<Headers>} headers The shopping cart that will be\n * validated. If none provided, then it will use default as its name.\n * @return {Promise<ValidateShoppingCartResult | undefined>} An object which\n * contains stores and products alerts\n */\nexport const validateShoppingCart = async (\n builders: ShoppingCartBuilders,\n config: ValidateConfig = {},\n headers: Headers\n) => {\n const { getShoppingCartNode } = builders ?? {};\n const reusedConfig = reuseGlobalConfig(config);\n // Verify minimum config\n checkValidateShoppingCartConfig(reusedConfig, headers);\n\n const { latitude, longitude, shoppingCartName, apiURL } = reusedConfig;\n const shoppingCartNode = await getShoppingCartNode(reusedConfig);\n const { id } = shoppingCartNode ?? {};\n if (typeof id === \"undefined\") {\n console.error(\n `Cannot use undefined as a shopping cart id. Shopping cart ${shoppingCartName} was not found. Validation canceled.`\n );\n return;\n }\n if (typeof apiURL === \"undefined\") {\n console.error(\"apiURL must be provided\");\n return;\n }\n // Call validate end-point\n return await validateService({ id, latitude, longitude, apiURL }, headers);\n};\n","// listenBenefitsWallet functions\n\nimport { getState, setState } from \"../state\";\n\n/**\n * Close firestore connection.\n *\n * @since 0.1.0\n * @param {string} selectedName The user's shopping cart name\n * @param {Function} unsubscribe Reference to firestore node.\n */\nexport const unsubscriber = (\n shoppingCartName: string,\n unsubscribe?: () => void\n) => {\n const { wallets } = getState();\n const newWallets = { ...wallets };\n delete newWallets[shoppingCartName];\n setState({ wallets: newWallets });\n if (unsubscribe) unsubscribe();\n};\n","// Coupons services\nimport { ShoppingCart, StoreCoupon } from \"@artisan-commerce/types\";\nimport { StoreCouponDetail } from \"@artisan-commerce/types\";\n\nimport { logError } from \"../../utils/common.utils\";\nimport { checkVendorId } from \"../../errors/state.errors\";\nimport { StoreCouponsConfig } from \"./coupons.service.types\";\nimport { RedeemCouponResponse } from \"./coupons.service.types\";\nimport { buildServiceHeaders } from \"../../utils/services.utils\";\nimport { StoreCouponDetailConfig } from \"./coupons.service.types\";\nimport { ApplyBenefitServiceConfig } from \"./coupons.service.types\";\nimport { checkStoreCouponDetailConfig } from \"../../errors/state.errors\";\nimport { BenefitsWalletConfig } from \"../../types/coupons.types\";\nimport { verifyHeaders } from \"../../errors/guards.utils\";\n\n/**\n * The endpoint to fetch a wallet of a user.\n *\n * @since 0.1.0\n * @param {BenefitsWalletConfig} config Benefits wallet configuration\n * @param {Headers} headers Supported headers to pass to the endpoint\n */\nexport const fetchWalletByUser = async (\n config: BenefitsWalletConfig,\n headers: Headers\n) => {\n const { vendorId, customerId, apiURL } = config;\n\n verifyHeaders(headers);\n const token = headers.get(\"Authorization\")!;\n const platform = headers.get(\"Platform\")!;\n const accountId = headers.get(\"account\")!;\n\n const settings = { token, platform, accountId };\n\n headers.set(\"uid\", customerId!.toString());\n const selectedHeaders = await buildServiceHeaders(settings, headers);\n\n let serviceURL = \"/api/shopping-cart/retrieveBenefits\";\n\n if (vendorId) serviceURL = serviceURL + `?vendorId=${vendorId}`;\n\n const url = `${apiURL}${serviceURL}`;\n const data = await fetch(url, {\n headers: selectedHeaders\n })\n .then(async data => {\n return await data.json();\n })\n .catch(e => {\n throw new Error(`Failed to retrieve the user's wallet\\n ${e.message}`);\n });\n if (!data) {\n throw new Error(\n `The benefits wallet is not defined. Make sure coupons are well configured`\n );\n }\n};\n\n/**\n * The endpoint to redeem a coupon.\n *\n * @since 0.1.0\n * @param {BenefitsWalletConfig} config Benefits wallet configuration\n * @param {string} code The code to redeem a coupon\n * @param {Headers} headers Supported headers to pass to the endpoint\n * @returns {Promise<boolean>} True if the coupon was redeemed correctly, false\n * if otherwise.\n */\nexport const redeemCouponService = async (\n config: BenefitsWalletConfig,\n code: string,\n headers: Headers\n) => {\n const { customerId, apiURL } = config;\n verifyHeaders(headers);\n const token = headers.get(\"Authorization\")!;\n const platform = headers.get(\"Platform\")!;\n const accountId = headers.get(\"account\")!;\n\n const settings = { token, platform, accountId };\n\n headers.set(\"uid\", customerId!.toString());\n const selectedHeaders = await buildServiceHeaders(settings, headers);\n\n try {\n const url = `${apiURL}/api/wallet_profit/apply`;\n const result = await fetch(url, {\n method: \"post\",\n body: JSON.stringify({ code }),\n headers: selectedHeaders\n }).then(async data => {\n return await data.json();\n });\n const response: RedeemCouponResponse = result;\n const { code: responseCode, data, message } = response;\n if (responseCode === 200) return true;\n if (!data) throw new Error(message.code);\n\n logError(\n `Unhandled response when redeeming coupon ${JSON.stringify(\n response,\n undefined,\n 2\n )}`\n );\n return false;\n } catch (e) {\n throw new Error(e.message);\n }\n};\n\n/**\n * The endpoint to apply a benefit of type `DISCOUNT`.\n *\n * @since 0.1.0\n * @param {ApplyBenefitServiceConfig} config Apply benefit service configuration\n * @param {Headers} headers Supported headers to pass to the endpoint\n * @returns {Promise<ShoppingCart|undefined>} A shopping cart with the benefits\n * applied to it\n */\nexport const applyBenefitService = async (\n config: ApplyBenefitServiceConfig,\n headers: Headers\n): Promise<ShoppingCart | undefined> => {\n const { benefit, customerId, shoppingCartId, apiURL } = config;\n const { benefitId } = benefit;\n verifyHeaders(headers);\n const token = headers.get(\"Authorization\")!;\n const platform = headers.get(\"Platform\")!;\n const accountId = headers.get(\"account\")!;\n\n const settings = { token, platform, accountId };\n\n headers.set(\"uid\", customerId!.toString());\n const selectedHeaders = await buildServiceHeaders(settings, headers);\n const selectedBenefitBody = {\n benefitId,\n shoppingCartId\n };\n\n const url = `${apiURL}/api/shopping-cart/applyBenefit`;\n const data = await fetch(url, {\n method: \"post\",\n body: JSON.stringify(selectedBenefitBody),\n headers: selectedHeaders\n }).then(async data => {\n return await data.json();\n });\n\n if (data?.code !== 200) {\n throw new Error(data.message?.message ?? data.message);\n }\n\n if (data?.data.length === 0) {\n throw new Error(\"No benefits were applied to the current shopping cart\");\n }\n\n return data;\n};\n\n/**\n * The endpoint to fetch a store coupons.\n *\n * @since 0.1.0\n * @param {StoreCouponsConfig} config Store coupons configuration\n * @param {Headers} headers Supported headers to pass to the endpoint\n * @returns {Promise<StoreCoupon[]>} An array of store coupons\n */\nexport const fetchStoreCoupons = async (\n config: StoreCouponsConfig,\n headers: Headers\n): Promise<StoreCoupon[]> => {\n const { vendorId, apiURL } = config;\n\n checkVendorId(vendorId);\n\n const url = `${apiURL}/api/couponByPromotion/categories?orderBy=created_at&sortBy=DESC&vendorId=${vendorId}`;\n verifyHeaders(headers);\n const token = headers.get(\"Authorization\")!;\n const platform = headers.get(\"Platform\")!;\n const accountId = headers.get(\"account\")!;\n\n const settings = { token, platform, accountId };\n\n const selectedHeaders = await buildServiceHeaders(settings, headers);\n\n const data = await fetch(url, {\n method: \"get\",\n headers: selectedHeaders\n }).then(async data => {\n return await data.json();\n });\n\n if (data?.code !== 200) throw new Error(data.message);\n return data.data;\n};\n\n/**\n * The endpoint to fetch a store coupon detail.\n *\n * @since 0.1.0\n * @param {StoreCouponDetailConfig} config Store coupon detail configuration\n * @param {Headers} headers Supported headers to pass to the endpoint\n * @returns {Promise<StoreCouponDetail>} A store coupon detail object\n */\nexport const fetchStoreCouponDetail = async (\n config: StoreCouponDetailConfig,\n headers: Headers\n): Promise<StoreCouponDetail> => {\n const { couponId, countryId, apiURL } = config;\n\n checkStoreCouponDetailConfig(config);\n\n const url = `${apiURL}/api/coupon/${couponId}?countryId=${countryId}`;\n verifyHeaders(headers);\n const token = headers.get(\"Authorization\")!;\n const platform = headers.get(\"Platform\")!;\n const accountId = headers.get(\"account\")!;\n\n const settings = { token, platform, accountId };\n\n const selectedHeaders = await buildServiceHeaders(settings, headers);\n\n const data = await fetch(url, {\n method: \"get\",\n headers: selectedHeaders\n }).then(async data => {\n return await data.json();\n });\n\n if (data?.code !== 200) throw new Error(data.message);\n return data.data;\n};\n","// applyBenefits functions\nimport { ShoppingCart, Benefit, Wallet } from \"@artisan-commerce/types\";\nimport { ShippingCost } from \"@artisan-commerce/types\";\n\nimport { getState } from \"../state\";\nimport { checkBenefitConfigProvided } from \"../../errors/state.errors\";\nimport { checkMinimumConfigProvided } from \"../../errors/state.errors\";\nimport { getShoppingCart } from \"../fetchShoppingCart/fetchShoppingCart\";\nimport { addProduct } from \"../addProduct/addProduct\";\nimport { validateShoppingCart } from \"../validateShoppingCart/validateShoppingCart\";\nimport { logError, reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { ApplyBenefitConfig } from \"../../types/coupons.types\";\nimport { applyBenefitService } from \"../../services/coupons/coupons.service\";\nimport { getShoppingCartTotal } from \"../../utils/product/product.utils\";\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\n\n/**\n * Apply a benefit with the given configuration on the current shopping cart.\n *\n * @since 0.1.0\n * @param {ApplyBenefitConfig} config Benefits wallet configuration and\n * @param {Headers} headers Supported headers to pass to the endpoint\n * parameters to be passed to apply in shopping cart\n */\nexport const applyBenefit = async (\n builders: ShoppingCartBuilders,\n config: ApplyBenefitConfig,\n headers: Headers\n) => {\n const reusedConfig = reuseGlobalConfig(config);\n // Check if customerId and accountId exists to redeemCoupon\n // based on the code given\n checkMinimumConfigProvided(reusedConfig);\n\n const { benefitId, shoppingCartName } = reusedConfig;\n const { wallets } = getState();\n\n // Check if benefitId and benefits exists to apply benefit\n const errorMessage = checkBenefitConfigProvided(\n wallets,\n shoppingCartName!,\n reusedConfig\n );\n\n if (errorMessage) {\n logError(errorMessage);\n return;\n }\n\n const activeWallet: Wallet = wallets[shoppingCartName!];\n const benefits = activeWallet.benefits;\n\n const benefitToApply = benefits.find(\n benefit => benefit.benefitId === benefitId\n );\n\n if (!benefitToApply) {\n logError(\n `No benefit was found in the benefits wallet with the benefitId provided.`\n );\n return;\n }\n\n const { type: benefitType } = benefitToApply;\n\n switch (benefitType) {\n case \"PRODUCT\":\n return applyProductBenefitHelper(builders, reusedConfig, benefitToApply);\n\n case \"ALTER_DELIVERY\":\n return applyAlterDeliveryBenefitHelper(\n builders,\n reusedConfig,\n benefitToApply,\n headers\n );\n\n case \"DISCOUNT_PERCENTAGE\":\n case \"DISCOUNT_FIXED\":\n return applyDiscountBenefitHelper(\n builders,\n reusedConfig,\n benefitToApply,\n headers\n );\n\n default:\n logError(\n \"The benefit to be applied is not of type PRODUCT, DISCOUNT_PERCENTAGE, DISCOUNT_FIXED or ALTER_DELIVERY.\"\n );\n break;\n }\n};\n\n/**\n * Helper to apply a product benefit provided.\n *\n * @since 0.1.0\n * @param {ApplyBenefitConfig} config Benefits wallet configuration and\n * parameters to be passed to apply in shopping cart\n * @param {Benefit} benefit Benefit object to be applied\n */\nexport const applyProductBenefitHelper = async (\n builders: ShoppingCartBuilders,\n config: ApplyBenefitConfig,\n benefit: Benefit\n) => {\n const { applyBenefitsToCart } = builders ?? {};\n\n const reusedConfig = reuseGlobalConfig(config);\n const { product, productConfig, anonymous } = reusedConfig;\n const { benefitId } = benefit;\n\n if (!product || !productConfig) {\n logError(\n `The product or the product configuration has not been provided to apply the selected benefit.`\n );\n return;\n }\n\n product.benefitId = benefitId;\n\n await applyBenefitsToCart?.(reusedConfig, benefit);\n\n await addProduct(builders, product, {\n anonymous,\n ...productConfig\n });\n};\n\n/**\n * Helper to apply an alter delivery benefit provided.\n *\n * @since 0.1.0\n * @param {ApplyBenefitConfig} config Benefits wallet configuration and\n * parameters to be passed to apply in shopping cart\n * @param {Benefit} benefit Benefit object to be applied\n */\nexport const applyAlterDeliveryBenefitHelper = async (\n builders: ShoppingCartBuilders,\n config: ApplyBenefitConfig,\n benefit: Benefit,\n headers: Headers\n) => {\n const { applyBenefitsToCart, getShoppingCartNode } = builders ?? {};\n const reusedConfig = reuseGlobalConfig(config);\n const { shippingCost, latitude, longitude, shoppingCartName } = reusedConfig;\n const { anonymous } = reusedConfig;\n\n // Check latitude and longitude to call validateCart\n if (!shippingCost || !latitude || !longitude) {\n logError(\n \"The shippingCost, latitude and longitude are required to apply the selected benefit.\"\n );\n return;\n }\n\n const { benefitWalletId, award } = benefit;\n\n if (Array.isArray(award)) {\n logError(\n \"To apply a ALTER_DELIVERY benefit, the award associated with the benefit cannot be an array.\"\n );\n return;\n }\n\n const { benefitId: awardBenefitId, discountPercentage } = award;\n const { subtotalBeforeTaxes } = shippingCost;\n const value = subtotalBeforeTaxes * (discountPercentage / 100);\n\n const benefitList = [];\n benefitList.push({\n benefitWalletId,\n benefitId: awardBenefitId,\n discountBase: subtotalBeforeTaxes,\n percentage: discountPercentage,\n priceCategory: \"NORMAL\",\n value\n });\n shippingCost.discounts = benefitList;\n\n await applyBenefitsToCart?.(reusedConfig, benefit, shippingCost);\n\n // Validate cart to back-end recalculate values in shippingCost\n await validateShoppingCart(\n { getShoppingCartNode },\n {\n latitude,\n longitude,\n shoppingCartName,\n anonymous\n },\n headers\n );\n};\n\n/**\n * Helper apply a benefit provided to benefits array in shopping cart.\n *\n * @since 0.1.0\n * @param {ShoppingCart} shoppingCart User's shopping cart\n * @param {Benefit} benefit Benefit object to be applied\n * @param {ShippingCost} shippingCost ShippingCost object to be added\n * in shopping cart\n * @returns {ShoppingCart} A shopping cart with the benefits applied\n */\nexport const applyBenefitsHelper = (\n shoppingCart: ShoppingCart,\n benefit: Benefit,\n shippingCost?: ShippingCost\n): ShoppingCart => {\n const { hash } = benefit;\n const { benefits } = shoppingCart;\n const temporalBenefits = benefits ?? [];\n\n temporalBenefits.push(benefit);\n\n shoppingCart.benefits = temporalBenefits;\n shoppingCart.benefitsHash = hash;\n\n // Add shipping cost in shopping cart when applying alter_delivery's benefit\n if (shippingCost) shoppingCart.shippingCost = shippingCost;\n\n return shoppingCart;\n};\n\n/**\n * Helper to apply a provided discount benefit.\n *\n * @since 0.1.0\n * @param {ApplyBenefitConfig} config Benefits wallet configuration and\n * parameters to be passed to apply in shopping cart\n * @param {Benefit} benefit Benefit object to be applied\n * @param {Headers} headers Supported headers to pass to the endpoint\n */\nexport const applyDiscountBenefitHelper = async (\n builders: ShoppingCartBuilders,\n config: ApplyBenefitConfig,\n benefit: Benefit,\n headers: Headers\n) => {\n const reuseConfig = reuseGlobalConfig(config);\n const { customerId, shoppingCartId, shoppingCartName, apiURL } = reuseConfig;\n if (!customerId) {\n logError(\n \"To apply a DISCOUNT_PERCENTAGE or DISCOUNT_FIXED benefit, a customerId must be provided.\"\n );\n return;\n }\n if (!shoppingCartId) {\n logError(\n \"To apply a DISCOUNT_PERCENTAGE or DISCOUNT_FIXED benefit, a shoppingCartId must be provided.\"\n );\n return;\n }\n const shoppingCart = await getShoppingCart(builders, reuseConfig);\n if (!shoppingCart) {\n logError(\n `Cannot apply discount benefit because no shopping cart was found. Please ensure you create a shopping cart with name ${shoppingCartName} before continue.`\n );\n return;\n }\n const { subtotal } = getShoppingCartTotal(shoppingCart);\n if (\n benefit.type === \"DISCOUNT_FIXED\" &&\n subtotal < Number(benefit.discountFixed)\n ) {\n logError(\n \"Cannot apply DISCOUNT_FIXED benefit because discount is greater than cart subtotal.\"\n );\n return;\n }\n await applyBenefitService(\n { benefit, customerId, shoppingCartId, apiURL },\n headers\n );\n};\n","// removeBenefits functions\nimport { ShoppingCart, Benefit, ShippingCost } from \"@artisan-commerce/types\";\nimport { Wallet } from \"@artisan-commerce/types\";\n\nimport { getState } from \"../state\";\nimport { checkMinimumConfigProvided } from \"../../errors/state.errors\";\nimport { checkBenefitConfigProvided } from \"../../errors/state.errors\";\nimport { RemoveBenefitConfig } from \"../../types/coupons.types\";\nimport { logError, reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\n\n/**\n * Remove a benefit with the given config on the current shopping cart.\n *\n * @since 0.1.0\n * @param {RemoveBenefitConfig} config Benefits wallet configuration and\n * parameters to be passed to remove in shopping cart\n */\nexport const removeBenefit = async (\n builders: ShoppingCartBuilders,\n config: RemoveBenefitConfig\n) => {\n const { getShoppingCartNode, removeBenefitsFromCart } = builders ?? {};\n const { removeProduct } = builders ?? {};\n const reusedConfig = reuseGlobalConfig(config);\n // Check if customerId and accountId exists to redeemCoupon based on the\n // code given\n checkMinimumConfigProvided(reusedConfig);\n\n const { benefitId, shoppingCartName } = reusedConfig;\n const { wallets } = getState();\n\n // Check if benefitId and benefits exists to remove benefit\n const errorMessage = checkBenefitConfigProvided(\n wallets,\n shoppingCartName!,\n reusedConfig\n );\n\n if (errorMessage) {\n logError(errorMessage);\n return;\n }\n\n const activeWallet: Wallet = wallets[shoppingCartName!];\n const benefits = activeWallet.benefits;\n\n const benefitToRemove = benefits.find(\n benefit => benefit.benefitId === benefitId\n );\n\n if (!benefitToRemove) {\n logError(\n `No benefit was found in the benefits wallet with the benefitId provided.`\n );\n return;\n }\n\n const { type: benefitType } = benefitToRemove;\n\n switch (benefitType) {\n case \"PRODUCT\":\n return removeProductBenefitHelper(\n { getShoppingCartNode, removeBenefitsFromCart, removeProduct },\n reusedConfig,\n benefitToRemove\n );\n\n case \"ALTER_DELIVERY\":\n return removeAlterDeliveryBenefitHelper(\n { getShoppingCartNode, removeBenefitsFromCart },\n reusedConfig,\n benefitToRemove\n );\n\n case \"DISCOUNT_PERCENTAGE\":\n case \"DISCOUNT_FIXED\":\n return removeBenefitsFromCart?.(reusedConfig, benefitToRemove);\n\n default:\n logError(\n \"The benefit to be removed is not of type PRODUCT, DISCOUNT_PERCENTAGE, DISCOUNT_FIXED or ALTER_DELIVERY.\"\n );\n break;\n }\n};\n\n/**\n * Helper to remove a product benefit provided.\n *\n * @since 0.1.0\n * @param {RemoveBenefitConfig} config Benefits wallet configuration and\n * parameters to be passed to remove in shopping cart\n * @param {Benefit} benefit Benefit object to be removed from the cart\n */\nexport const removeProductBenefitHelper = async (\n builders: ShoppingCartBuilders,\n config: RemoveBenefitConfig,\n benefit: Benefit\n) => {\n const { removeBenefitsFromCart } = builders ?? {};\n const { removeProduct } = builders ?? {};\n const reusedConfig = reuseGlobalConfig(config);\n const { product, productConfig } = reusedConfig;\n const { store } = productConfig ?? {};\n\n if (!product || !store) {\n logError(\n \"The cart product and the store, inside benefitProductConfig object, are required to remove the selected benefit.\"\n );\n return;\n }\n\n reusedConfig.productConfig!.store = { ...store, polygons: null };\n\n await removeBenefitsFromCart?.(reusedConfig, benefit);\n\n await removeProduct?.(product, productConfig);\n};\n\n/**\n * Helper to remove an alter delivery benefit provided.\n *\n * @since 0.1.0\n * @param {RemoveBenefitConfig} config Benefits wallet configuration and\n * parameters to be passed to remove in shopping cart\n * @param {Benefit} benefit Benefit object to be removed\n */\nexport const removeAlterDeliveryBenefitHelper = async (\n builders: ShoppingCartBuilders,\n config: RemoveBenefitConfig,\n benefit: Benefit\n) => {\n const { removeBenefitsFromCart } = builders ?? {};\n const reusedConfig = reuseGlobalConfig(config);\n const { shippingCost } = reusedConfig;\n\n if (!shippingCost) {\n logError(`The shippingCost is require to remove the selected benefit.`);\n return;\n }\n\n return removeBenefitsFromCart?.(reusedConfig, benefit, shippingCost);\n};\n\n/**\n * Helper to find and remove a benefit provided from benefits array\n * in the shopping cart.\n *\n * @since 0.1.0\n * @param {ShoppingCart} shoppingCart User's shopping cart\n * @param {Benefit} benefit Benefit object to be removed\n * @param {ShippingCost} shippingCost ShippingCost object to be restored\n * in shopping cart\n * @returns {ShoppingCart} Returns an updated shopping cart\n */\nexport const removeBenefitsHelper = (\n shoppingCart: ShoppingCart,\n benefit: Benefit,\n shippingCost?: ShippingCost\n): ShoppingCart => {\n const { benefits } = shoppingCart;\n const { benefitId } = benefit;\n\n // Check if shopping cart has benefits that can be removed.\n if (!benefits) {\n console.warn(\n `Cannot remove benefit because the shopping cart does not have benefits applied.`\n );\n return shoppingCart;\n }\n\n const benefitIdIndex = benefits.findIndex(\n benefit => benefit.benefitId === benefitId\n );\n\n // check if the benefit to be removed exists in the shopping cart\n if (benefitIdIndex < 0) {\n console.warn(\n `This benefit cannot be removed because it is not applied to the shopping cart.`\n );\n return shoppingCart;\n }\n\n benefits.splice(benefitIdIndex, 1);\n delete shoppingCart.benefitsHash;\n\n // Restore shipping cost in shopping cart when removing alter_delivery's\n // benefit type\n if (shippingCost) shoppingCart.shippingCost = shippingCost;\n\n return shoppingCart;\n};\n","// Benefits utility functions\nimport { Benefit, Wallet } from \"@artisan-commerce/types\";\n\nimport { getState, setState } from \"../lib/state\";\nimport { DocumentNode, ShoppingCartConfig } from \"../types/common.types\";\nimport { BenefitsBuilders } from \"../types/common.types\";\nimport { checkMinimumConfigProvided } from \"../errors/state.errors\";\nimport { WalletInternal } from \"../types/coupons.types\";\n\n/**\n * Gets the initial state of an empty benefits wallet.\n *\n * @since 0.1.0\n * @returns An empty benefits wallet\n */\nexport const getInitialBenefitsWallet = (\n overrides: Partial<Wallet> = {}\n): Wallet => {\n return { benefits: [], ...overrides };\n};\n\n/**\n * Transforms the benefits node to an array of benefits.\n *\n * @since 0.1.0\n * @param {DocumentNode} benefitsNode Benefits by user node\n * @param {string} hash Realtime db node id\n * @returns {Benefit[]} An array of benefits with the hash inside them\n */\nexport const mapCollectionToBenefits = (\n benefitsNode: DocumentNode,\n hash: string\n) => {\n const benefits: Benefit[] = Object.values(benefitsNode).map(benefit => {\n const newBenefit: Benefit = { ...benefit, hash };\n return newBenefit;\n });\n return benefits;\n};\n\n/**\n * Updates the current benefits wallets with a new wallet.\n *\n * @since 0.1.0\n * @param {string} walletName The name of the target wallet\n * @param {WalletInternal} newWallet The new wallet to be set in the state\n */\nexport const updateBenefitsWallets = (\n walletName: string,\n newWallet: WalletInternal\n) => {\n const { wallets } = getState();\n\n const newWallets = {\n ...wallets,\n [walletName]: { ...newWallet }\n };\n setState({ wallets: newWallets });\n};\n\n/**\n * Fetches all Artisn benefits of the given customer and account. It will first\n * try to look at the function config. If it cannot find any of the needed\n * parameters, it will look into the global config provided in initShoppingCart.\n *\n * @since 0.1.0\n * @param {ShoppingCartConfig} config Shopping cart configuration\n * @returns {Promise<ShoppingCartNodes | undefined>} A collection of benefits\n * of the given customer in the form of firestore document nodes\n */\nexport const getBenefitsNode = async (\n builders: BenefitsBuilders,\n config: ShoppingCartConfig = {}\n): Promise<any | undefined> => {\n const { getBenefitsCollection } = builders ?? {};\n const { accountId: globalAccountId } = getState();\n const { customerId: globalCustomerId } = getState();\n const { accountId, customerId } = config;\n // Handle no config\n checkMinimumConfigProvided(config);\n // Connect to firestore\n const benefitsCollection = await getBenefitsCollection?.(\n \"benefitsByUser\",\n String(customerId ?? globalCustomerId),\n String(accountId ?? globalAccountId)\n );\n\n return benefitsCollection;\n};\n\n/**\n * Fetches the wallet node of the given customer and account. It will first try\n * to look at the function config. If it cannot find any of the needed\n * parameters, it will look into the global config provided in initShoppingCart.\n *\n * @since 0.1.0\n * @param {ShoppingCartConfig} config Shopping cart configuration\n * @returns {Promise<any | undefined>} The benefits of a given\n * customer in the form of firestore document nodes\n */\nexport const getWalletNode = async (\n builders: BenefitsBuilders,\n config?: ShoppingCartConfig\n): Promise<any | undefined> => {\n try {\n const { getBenefitsDocuments } = builders ?? {};\n const benefitsCollection = await getBenefitsNode(builders, config);\n if (!benefitsCollection) return;\n\n const newestBenefits = await getBenefitsDocuments?.(benefitsCollection);\n\n return newestBenefits;\n } catch (e) {\n console.error(e.message);\n }\n};\n\n/**\n * Fetches an array of benefits of the given customer and account. It will first\n * try to look at the function config. If it cannot find any of the needed\n * parameters, it will look into the global config provided in initShoppingCart.\n *\n * @since 0.1.0\n * @param {ShoppingCartConfig} config Shopping cart configuration\n * @returns {Promise<Benefit[] | undefined>} An array of benefits of the given\n * customer, each benefit has the firestore hash inside them.\n */\nexport const getWallet = async (\n builders: BenefitsBuilders,\n config?: ShoppingCartConfig | undefined\n): Promise<Benefit[] | undefined> => {\n const benefitsByUserNode = await getWalletNode(builders, config);\n if (!benefitsByUserNode) return;\n if (Object.keys(benefitsByUserNode.data()).length === 0) return [];\n\n const hash = benefitsByUserNode.id;\n const benefitsData = Object.values(benefitsByUserNode.data()) as Benefit[];\n const benefits: Benefit[] = benefitsData.map(benefit => {\n const newBenefit: Benefit = { ...benefit, hash };\n return newBenefit;\n });\n return benefits;\n};\n","// redeemCoupon functions\nimport { getState, setState } from \"../state\";\nimport { logError, reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { checkMinimumConfigProvided } from \"../../errors/state.errors\";\nimport { redeemCouponService } from \"../../services/coupons/coupons.service\";\nimport { fetchWalletByUser } from \"../../services/coupons/coupons.service\";\nimport { WalletHeaders, Wallets } from \"../../types/coupons.types\";\nimport { WalletInternal } from \"../../types/coupons.types\";\nimport { BenefitsWalletConfig } from \"../../types/coupons.types\";\nimport { getInitialBenefitsWallet } from \"../../utils/benefits.utils\";\nimport { verifyHeaders } from \"../../errors/guards.utils\";\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\n\n/**\n * Redeems a coupon based on the code given.\n *\n * @since 0.1.0\n * @param {BenefitsWalletConfig} config Benefits wallet configuration parameters\n * to be passed to call the endpoint.\n * @param {string} code The code that the user inputs on the app.\n * @param {Partial<WalletHeaders>} headers Headers to be passed to call the\n * endpoint, as a default header, the uid is fetched internally\n */\nexport const redeemCoupon = async (\n builders: ShoppingCartBuilders,\n config: BenefitsWalletConfig,\n code: string,\n headers: Headers\n) => {\n const { getWallet } = builders ?? {};\n const reusedConfig = reuseGlobalConfig(config);\n const { customerId, shoppingCartName } = reusedConfig;\n\n // Check if customerId and accountId exists to redeemCoupon based on the\n // code given\n checkMinimumConfigProvided(config);\n // Check minimum required headers\n verifyHeaders(headers);\n\n const { wallets } = getState();\n const activeWallet = wallets[shoppingCartName!];\n\n if (!activeWallet) {\n logError(\n `No benefits wallet available for ${shoppingCartName}, you probably forgot to call listenBenefitsWallet beforehand.`\n );\n }\n\n await redeemCouponService(reusedConfig, code, headers as WalletHeaders);\n\n // TODO: From this line onwards, the endpoint to retrieve benefits is called\n // again because the backend removed this functionality. This endpoint call\n // will be removed once the backend supports these changes (again).\n\n await fetchWalletByUser(reusedConfig, headers as WalletHeaders);\n\n const benefits = await getWallet?.({\n customerId,\n shoppingCartName\n });\n\n if (!benefits) {\n throw new Error(\n `Failed to fetch benefits from firestore for the current customer after redeeming coupon`\n );\n }\n\n const updatedWallet = getInitialBenefitsWallet({\n benefits\n });\n\n const newInternalWallet: WalletInternal = {\n benefits: [...updatedWallet.benefits],\n onSnapshot: activeWallet.onSnapshot\n };\n const newWallets: Wallets = {\n ...wallets,\n [shoppingCartName!]: newInternalWallet\n };\n setState({ wallets: newWallets });\n\n activeWallet.onSnapshot(updatedWallet); //TODO: Check if onSnapshot works in web and mobile platforms\n};\n","// mergeShoppingCart functions\nimport { ShoppingCart } from \"@artisan-commerce/types\";\n\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\nimport { ShoppingCartConfig } from \"../../types/common.types\";\nimport { logDebug, reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { addProductToCartHelper } from \"../addProduct/addProduct\";\nimport { getState } from \"../state\";\n\n/**\n * Merge a shopping cart to the current shopping cart or to the one specified\n * through the configuration.\n *\n * @template T Shopping cart generic type\n * @since 0.1.0\n * @param {ShoppingCart} shoppingCart Shopping cart to be merged\n * @param {ShoppingCartConfig} config Configuration to get the current shopping\n * cart\n */\nexport const mergeShoppingCart = async <T extends ShoppingCart = ShoppingCart>(\n builders: ShoppingCartBuilders,\n shoppingCart: T,\n config?: ShoppingCartConfig\n) => {\n return new Promise<T | null>((resolve, reject) => {\n const action = async () => {\n try {\n const { getShoppingCartNode, setDoc } = builders ?? {};\n const shoppingCartNode = await getShoppingCartNode?.(config);\n const reusedConfig = reuseGlobalConfig(config);\n if (!shoppingCartNode) {\n logDebug(\n \"Cannot merge the shopping carts because no shopping cart nodes were usedConfig found. Please ensure you have a shopping cart before continue.\"\n );\n resolve(null);\n return null;\n }\n let destinyShoppingCart = shoppingCartNode.data() as T;\n\n const stores = Object.values(shoppingCart.stores);\n\n stores.forEach(store => {\n const products = Object.values(store.products);\n\n products.forEach(product => {\n const { amount } = product;\n destinyShoppingCart = addProductToCartHelper(\n destinyShoppingCart,\n product,\n {\n store,\n amount\n }\n );\n });\n });\n await setDoc?.({\n reusedConfig,\n shoppingCartNode,\n payload: destinyShoppingCart\n });\n resolve(destinyShoppingCart);\n return destinyShoppingCart;\n } catch (e) {\n reject(e);\n return null;\n }\n };\n const { eventLoop, queue } = getState();\n queue.enqueue(action);\n if (!eventLoop.isRunning) eventLoop.start();\n });\n};\n","// updateShoppingCart functions\n\nimport { ShoppingCart } from \"@artisan-commerce/types\";\n\nimport { ShoppingCartBuilders } from \"../../types/common.types\";\nimport { ShoppingCartConfig } from \"../../types/common.types\";\nimport { reuseGlobalConfig } from \"../../utils/common.utils\";\nimport { getState } from \"../state\";\n\n/**\n * Sets properties in the shopping cart remotely.\n *\n * @template T Shopping cart generic type\n * @since 0.1.0\n * @param {Function} shoppingCart The cart that will be set remotely\n * @param {ShoppingCartConfig} config Shopping cart configuration\n */\nexport const updateShoppingCart = async <T extends ShoppingCart = ShoppingCart>(\n builders: ShoppingCartBuilders,\n setShoppingCart: (previousShoppingCart: T) => T,\n config?: ShoppingCartConfig\n) => {\n return new Promise<T | null>((resolve, reject) => {\n const action = async () => {\n try {\n const { setDoc, getShoppingCartNode } = builders ?? {};\n const reusedConfig = reuseGlobalConfig(config);\n const { shoppingCartName } = reuseGlobalConfig(config);\n const shoppingCartNode = await getShoppingCartNode(config);\n if (!shoppingCartNode) {\n console.warn(\n `Cannot update remote cart because no shopping cart was found. Please ensure you create a shopping cart with name ${shoppingCartName} before continue.`\n );\n resolve(null);\n return null;\n }\n const cart = (await shoppingCartNode.data()) as T;\n const updatedCart = updateShoppingCartHelper(cart, setShoppingCart);\n // Update cart remotely\n await setDoc?.({\n reusedConfig,\n shoppingCartNode,\n payload: updatedCart\n });\n resolve(updatedCart);\n return updatedCart;\n } catch (e) {\n reject(e);\n return null;\n }\n };\n const { eventLoop, queue } = getState();\n queue.enqueue(action);\n if (!eventLoop.isRunning) eventLoop.start();\n });\n};\n\n/**\n * Modifies the given shopping cart to show changes.\n *\n * @template T Shopping cart generic type\n * @since 0.1.0\n * @param {ShoppingCart} cart The cart that will be modified\n * @param {Function} shoppingCart The cart to be set\n * @returns {ShoppingCart} The shopping cart with updated properties\n */\nexport const updateShoppingCartHelper = <T extends ShoppingCart = ShoppingCart>(\n cart: T,\n setShoppingCart: (previousShoppingCart: T) => T\n): T => {\n const updatedCart: T = {\n ...cart,\n ...setShoppingCart(cart)\n };\n return updatedCart;\n};\n"],"names":["__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","DEFAULT_SHOPPING_CART_NAME","__defProps","__getOwnPropDescs","__spreadProps","this","crypt","cryptModule","require$$0","require$$1","sha1Module","toCartProduct","transformers","divideProductQA","modifierUtils","products","getProductTotals","PRODUCT_DATE_FORMAT","multiplyProductQA","validateShoppingCart","validateService"],"mappings":"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C,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAA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"}
|