1async function findOrderGrooveSku(){let cart,orderGrooveSku;orderGrooveSku=null,cart=await ontech.getCart(),1===cart.items.length&&(orderGrooveSku=cart.items[0].sku,ontech.storage.setItem(StorageConstants.OG_VARIANT,orderGrooveSku))}const getMembershipFromCart=cartItems=>{!Array.isArray(cartItems)&&"object"==typeof cartItems&&cartItems.hasOwnProperty("items")?cartItems=cartItems.items:Array.isArray(cartItems)||(ontech.log.warn(`getMembershipFromCart: cartItems is not iterable. Defaulting to empty list. cartItems: ${cartItems}`),cartItems=[]);for(const cartItem of cartItems)if(isCartItemMembership(cartItem))return cartItem;return null},getOrderGrooveData=()=>{let optIns,offerIds;if(offerIds={},isUndefinedOrNull(window.og))optIns=[];else{optIns=og.offers.getOptins();for(const optIn of optIns){let offers=offerIds[optIn.product]||[];offers.push(optIn.tracking_override.offer),offerIds[optIn.product]=offers}}if(isEmpty(optIns)||isEmpty(offerIds)){let variantId=ontech.state.get(State.Settings.DEFAULT_MONTHLY_MEMBERSHIP_V2_VARIANT).toString(),ogOfferId=ontech.state.get(State.Settings.OG_PRODUCT_OFFER_ID),tempProductOffer={};tempProductOffer[variantId]=[ogOfferId]||{},optIns.push({product:variantId,subscription_info:{components:[]},tracking_override:{offer:ogOfferId,every:Membership.Ordergroove.Frequency.EVERY,every_period:Membership.Ordergroove.Frequency.EVERY_PERIOD}}),offerIds=tempProductOffer}return{optIns:JSON.stringify(optIns),offerIds:JSON.stringify(offerIds)}},isAnnualMembershipInCart=cartItems=>{for(const cartItem of cartItems)if(Membership.Skus.NON_OSS.includes(cartItem.sku))return!0;return!1},isMembershipInCartV2=cartItems=>{if(!isUndefinedOrNull(cartItems))for(const cartItem of cartItems){const sku=cartItem?.lineItem?.sku||cartItem.sku;if(isEmpty(sku))break;if(Membership.Skus.V2.includes(sku))return ontech.state.do(State.Actions.MEMBERSHIP_ADD_V2),!0}return!1},isExistingV2Member=()=>toBoolean(ontech.state.get(State.Membership.IS_EXISTING_V2_MEMBER)||ontech.state.get(State.Oss.CUSTOMER_IS_ACTIVE_V2)||!1),isV2SignOutFlow=()=>ontech.state.get(State.Membership.V2_SIGN_OUT_FLOW),isMembershipActive=function(){let isMember,isV2Member,isMembershipInCartStateValue,parentOrderIsMember;try{isMember=selfOrDefault(ontech.state.get(State.Membership.IS_MEMBER),!1),isV2Member=isExistingV2Member(),isMembershipInCartStateValue=selfOrDefault(ontech.state.get(State.Membership.IN_CART),!1),parentOrderIsMember=selfOrDefault(ontech.state.get(State.ParentOrder.IS_MEMBER),!1)}catch(err){ontech.log.error("Error in ontech.membership.isMembershipActive",err)}return isMember||isV2Member||isMembershipInCartStateValue||parentOrderIsMember},isMembershipInCart=cartItems=>{!Array.isArray(cartItems)&&"object"==typeof cartItems&&cartItems.hasOwnProperty("items")?cartItems=cartItems.items:Array.isArray(cartItems)||(ontech.log.warn(`isMembershipInCart: cartItems is not iterable. Defaulting to empty list. cartItems: ${cartItems}`),cartItems=[]);for(const cartItem of cartItems)if(isCartItemMembership(cartItem))return!0;return!1},isMembershipDiscount=discountTitle=>"MB"===discountTitle.substr(0,2);async function modifyCartProperties(cartAction,membership,modifyCartCallback){let cartLineItems=[];const cart=await ontech.getCart(Cart.MODIFY_CART_PROPERTIES);for(const[i,cartItem]of cart.items.entries())try{toBoolean(cartItem.properties[Cart.Properties.IS_BUNDLE])&&isCartItemBundle(cartItem)||cartLineItems.push({key:cartItem.key,line:i+1,lineItem:cartItem,properties:cartItem.properties})}catch(error){ontech.log.error(`Error getting productId: ${cart.items[i].product_id}`,error)}if(isMembershipInCartV2(cartLineItems)||isExistingV2Member()||isV2SignOutFlow()){let v2CartUpdaterObject=new V2CartUpdater(cartLineItems,cartAction,membership,modifyCartCallback);isV2SignOutFlow()&&ontech.state.set(State.Membership.V2_SIGN_OUT_FLOW,!1),await v2CartUpdaterObject.updateCart()}else{let cartUpdater=new CartUpdater(cartLineItems,cartAction,membership,modifyCartCallback);await cartUpdater.updateCart()}}async function RemoveCartMembershipBenefits(removeCartCallback=null){customLog("RemoveCartMembershipBenefits: Removing membership benefits","info"),await modifyCartProperties(Cart.REMOVE_MEMBERSHIP_BENEFIT
1S,null,async()=>{await updateCartTotalBenefitValue(removeCartCallback)})}function updateMembershipBenefitUiValues(){let cartTotalBenefitValue=ontech.state.get(State.Membership.TOTAL_BENEFIT_VALUE);isUndefinedOrNull(cartTotalBenefitValue)||(0===cartTotalBenefitValue?($("#you-are-saving").text("Get your first service included, unlimited smart support, savings of 10% off every purchase and more!"),$(".remove-membership").attr("total-savings",cartTotalBenefitValue)):($("#you-are-saving").text(`Youâre saving an additional $${cartTotalBenefitValue} on this purchase for being a member.`),$(".remove-membership").attr("total-savings",cartTotalBenefitValue)))}async function updateCartTotalBenefitValue(updateCartCallback,redirectUrl){void 0===updateCartCallback&&(updateCartCallback=null);const cart=await ontech.getCart(Cart.UPDATE_CART_TOTAL_BENEFIT_VALUE);if(cart.items){let cartTotalBenefitValue=0;for(const cartItem of cart.items){cartItem.discounts.forEach(discount=>{discount.title&&discount.title.startsWith("MB|")&&(cartTotalBenefitValue+=discount.amount/100)})}let totalBenefitValue=cartTotalBenefitValue.toFixed(2);try{ontech.setCartModified(),await updateCart({attributes:{[NoteAttribute.TOTAL_BENEFIT_VALUE]:totalBenefitValue>0?totalBenefitValue:null}})}catch(error){let errMsg="ERROR in updateCartTotalBenefitValue calling update.js call";ontech.logEvent(errMsg),ontech.logEvent("ERROR exception detail for previous error",error),ontech.log.error(errMsg)}ontech.state.do(State.Actions.MEMBERSHIP_TOTAL_BENEFIT_VALUE_CHANGED,cartTotalBenefitValue.toFixed(2)),updateMembershipBenefitUiValues()}redirectUrl?ontech.redirect(redirectUrl):null!=updateCartCallback&&updateCartCallback(!0)}async function UpdateCartMembershipBenefits(updateCartCallback,redirectUrl){void 0===updateCartCallback&&(updateCartCallback=null);let isActive=isMembershipActive();if(isActive){let membershipInfo,membership,membershipInfoString=ontech.state.get(State.ParentOrder.MEMBERSHIP_INFO);membershipInfoString&&(membershipInfo=JSON.parse(membershipInfoString)),membership=isUndefinedOrNull(membershipInfo)?{membershipPlanTitle:ontech.state.get(State.Membership.PLAN_TITLE),membershipPlanSku:ontech.state.get(State.Membership.PLAN_SKU),membershipPlanVariantId:ontech.state.get(State.Membership.PLAN_VARIANT),numFreeInstallsRedeemed:ontech.state.get(State.Membership.FREE_INSTALLS_REDEEMED),numFreeInstallsRemaining:ontech.state.get(State.Membership.FREE_INSTALLS_REMAINING),membershipPlanId:ontech.state.get(State.Membership.PLAN_ID),memberTotalBenefitValue:ontech.state.get(State.Membership.TOTAL_BENEFIT_VALUE),isMember:ontech.state.get(State.Membership.IS_MEMBER)}:{membershipPlanTitle:membershipInfo.membershipPlanTitle,membershipPlanSku:membershipInfo.membershipPlanSku,membershipPlanVariantId:membershipInfo.membershipPlanVariantId,numFreeInstallsRedeemed:membershipInfo.memberFreeInstallsRedeemed,numFreeInstallsRemaining:membershipInfo.memberFreeInstallsRemaining,membershipPlanId:ontech.state.get(State.Membership.PLAN_ID),memberTotalBenefitValue:ontech.state.get(State.Membership.TOTAL_BENEFIT_VALUE),isMember:isActive};let freeInstallOverride=ontech.state.get(State.Membership.FREE_INSTALL_OVERRIDE);freeInstallOverride&&freeInstallOverride>0&&(membership.numFreeInstallsRemaining=JSON.parse(freeInstallOverride)),await modifyCartProperties(Cart.UPDATE_MEMBERSHIP_BENEFITS,membership,async()=>{await updateCartTotalBenefitValue(updateCartCallback,redirectUrl)})}else await modifyCartProperties(Cart.REMOVE_MEMBERSHIP_BENEFITS,null,async()=>{await updateCartTotalBenefitValue(updateCartCallback,redirectUrl)})}ontech.isMembershipInCart=function(cartLineItems){const memberLevel=ontech.state.get(State.Membership.LEVEL),validMemberLevel=1===memberLevel||""===memberLevel;if(!isEmpty(cartLineItems)&&validMemberLevel)for(const cartLineItem of cartLineItems)if(cartLineItem.lineItem&&isCartItemMembership(cartLineItem.lineItem)&&!isEmpty(cartLineItem.lineItem.sku)&&Membership.Skus.FULL.includes(cartLineItem.lineItem.sku))return!0;return!1};const isV2Flow=()=>{let guestLoginCriteria;return guestLoginCriteria=!OSS_CLIENT_NAMES.includes(ontech.state.get(State.CLIENT_NAME))&&!isLoggedIn(),ontech.state.get(State.Membership.V2_IN_CART)||ontech.state.get(State.Membership.IS_EXISTING_V2_MEMBER)||guestLoginCriteria};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.