{"version":3,"sources":["webpack:///./Src/Components/Api/Api.ts","webpack:///./Src/Components/Api/ApiUtilities.ts","webpack:///./Src/Components/Api/JsonResult.ts","webpack:///./Src/Components/Api/StandardJsonResponse.ts","webpack:///./Src/Components/Events/Events.ts","webpack:///./Src/Components/FaceIdLogin/FaceIdLogin.ts","webpack:///./Src/Components/GoNative/GoNativeBridge.ts","webpack:///./Src/Components/Recaptcha/Recaptcha.ts","webpack:///./Src/Components/Utilities/UdoManager.ts"],"names":["LsApi","initialized","$","ajaxPrefilter","onPrefilter","$document","document","on","onStart","onSend","onComplete","window","AjaxFormOnSuccess","ajaxFormOnSuccess","AjaxFormOnFailure","ajaxFormOnFailure","_window","_document","ajax","settings","modifySuccessCallback","isPost","addAntiForgeryToken","postTraceLogs","addTraceLogs","isRequestedFromModal","addRequestedFromModal","addRequestId","addViewportSize","addUtcOffset","enableTraceLogs","LsLogger","trace","disableTraceLogs","onSuccess","result","status","xhr","responseJSON","LsJsonResultManager","isJsonResult","run","LsStandardJsonResponseManager","isStandardJsonResponse","requestId","getRequestId","log","url","onError","err","reset","isAjaxUnobtrusiveRequest","addAjaxUnobtrusiveContext","modifyErrorCallback","showOverlay","e","LsLogBeforeRequest","actions","redirect","refresh","submitForm","hideOverlay","response","Array","isArray","some","action","type","mode","LsLogAfterRequest","statusText","excerpt","responseText","handleError","title","content","target","level","getResponseHeader","isGlobalLoggerUrl","readyState","global","openModalByTarget","openErrorNotificationModal","destroyOnClose","success","error","sessionExpired","func","data","$token","length","attr","val","LsApiUtilities","addDataToSettings","traceLogsData","getTraceData","Object","keys","value","headers","addHeadersToXhr","addHeadersToSettings","generateUUID","getHeaderFromSettings","viewportWidth","viewportHeight","undefined","innerWidth","innerHeight","Date","getTimezoneOffset","toArray","form","$form","ajaxUrl","context","get","LsIsPost","method","toUpperCase","requestedWith","getDataFromSettings","LsIsAjaxUnobtrusiveRequest","requestedFrom","isInModal","LsIsRequestedFromModal","indexOf","contentType","FormData","k","append","params","param","d","push","name","key","decodeURIComponent","split","v","setRequestHeader","isXhr","isObject","parsingVersion","events","LsEvents","trigger","medianLogin","email","pw","store","location","href","reload","formId","tokenInput","$tokens","$newToken","notification","html","body","modal","LsModals","openModalByUrl","$newHtml","id","$oldHtml","replaceWith","$forms","find","addBack","validator","unobtrusive","parse","render","delete","obj","showGenericError","this","LsStandardJsonResponse","logError","_global","addEvent","executeFunction","LsCallback","call","parameters","executeRedirect","executeRefresh","loadModal","updateDom","$target","updateDomNoContentActions","updateDomActions","$html","updateDomRemove","remove","updateDomEmpty","empty","updateDomBefore","before","updateDomAfter","after","updateDomPrepend","prepend","updateDomAppend","updateDomReplace","openModal","message","add","event","execute","function","load","open","update","dom","replace","browserEventActions","click","mouseover","handleBrowserEvent","trackInteractionEvent","clickRecommendedProduct","Element","eventAction","currentTarget","closest","HTMLElement","MouseEvent","relatedTarget","dataset","interactionEvent","eventCategory","eventLabel","eventValue","JSON","eventRecommendedProduct","triggerEventWithResultData","triggerInitialEvents","eventDataElements","from","querySelectorAll","el","textContent","eventsOnLoad","ex","addEventListener","ordergroove","ordergrooveEventHandler","selectItem","quantity","module","items","item","eventData","select_item_result","offeringExternalId","OfferingExternalId","Id","searchAlias","SearchAlias","externalId","ExternalId","Name","Type","listPrice","Price","ListPrice","salePrice","SalePrice","subscription","skus","Skus","ecommerce","detail","products","price","ga_label","label","setQuantity","selectedItemId","Number","keywordSearch","filterItems","addToWishlist","viewQuickShop","newsletterSubscription","category","interaction_event_result","event_action","event_category","event_label","event_value","UpdateQuantity","update_quantity_result","RemoveFromCart","remove_from_cart_result","LsFaceIdLogin","_gonative","user","pass","then","stringify","hasTouchId","s","username","password","save","beforeLogin","LsMedianBridge","addCommandCallback","command","persistCallback","callback","callbackFunction","tempFunctionName","Math","random","toString","slice","Promise","resolve","reject","addCommand","addCallbackFunction","callbackName","apply","args","commandObject","statuscallback","medianCommand","navigator","vendor","webkit","messageHandlers","JSBridge","postMessage","deviceInfo","hasSecret","beforeCallback","$submit","secret","credentials","emailInput","pwInput","LsRecaptcha","grecaptcha","$recaptcha","recaptchaSelector","preventDefault","valid","GoogleRecaptchaOnSubmit","token","submit","is","size","width","elementId","attributeName","LsUdoManager","_udoElement","getElementById","LsUdoManagerDefaults","_udoVariableName","udoElement","getAttribute","udoVariableName","udo","udoData","i"],"mappings":"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","file":"20250325-a5952a133b557e3e4e74.js","sourcesContent":["import $ = require(\"jquery\");\r\n\r\n//added for code review\r\n\r\nimport LsApiUtilities from \"./ApiUtilities\";\r\nimport { ILsJsonResult, LsJsonResultManager } from \"./JsonResult\";\r\nimport { ILsStandardJsonResponse, LsStandardJsonResponseManager } from \"./StandardJsonResponse\";\r\nimport LsLoading from \"~/Src/Components/Loading/Loading\";\r\nimport { LsLogger, LsLoggerLevels } from \"~/Src/Components/Logging/Logger\";\r\nimport LsModals from \"~/Src/Components/Modal/Modal\";\r\nimport LsRecaptcha from \"~/Src/Components/Recaptcha/Recaptcha\";\r\n\r\nexport interface ILsApiAjaxSettings extends JQuery.AjaxSettings {\r\n    LsIsAjaxUnobtrusiveRequest?: boolean;\r\n    LsIsPost?: boolean;\r\n    LsIsRequestedFromModal?: boolean;\r\n    LsLogBeforeRequest?: boolean;\r\n    LsLogAfterRequest?: boolean;\r\n}\r\n\r\nexport type LsApiSuccessCallback = (data: any, textStatus: JQuery.Ajax.SuccessTextStatus, jqXHR: JQuery.jqXHR, settings?: ILsApiAjaxSettings) => void;\r\n\r\nexport class LsApi {\r\n    protected static _window: Window;\r\n    protected static get window() {\r\n        return LsApi._window || (LsApi._window = window);\r\n    }\r\n\r\n    protected static _document: Document;\r\n    protected static get document() {\r\n        return LsApi._document || (LsApi._document = document);\r\n    }\r\n\r\n    protected static initialized = false;\r\n    protected static postTraceLogs = false;\r\n\r\n    public constructor() {\r\n        if (!LsApi.initialized) {\r\n            $.ajaxPrefilter(LsApi.onPrefilter);\r\n\r\n            const $document = $(LsApi.document);\r\n            $document.on(\"ajaxStart\", LsApi.onStart);\r\n            $document.on(\"ajaxSend\", LsApi.onSend);\r\n            $document.on(\"ajaxComplete\", LsApi.onComplete);\r\n\r\n            (LsApi.window as any).AjaxFormOnSuccess = LsApi.ajaxFormOnSuccess;\r\n            (LsApi.window as any).AjaxFormOnFailure = LsApi.ajaxFormOnFailure;\r\n\r\n            LsApi.initialized = true;\r\n        }\r\n    }\r\n\r\n    public static ajax(settings: ILsApiAjaxSettings) {\r\n        LsApi.modifySuccessCallback(settings); // error callback is modified in prefilter\r\n        if (LsApiUtilities.isPost(settings)) {\r\n            LsApiUtilities.addAntiForgeryToken(settings);\r\n            if (LsApi.postTraceLogs) {\r\n                LsApiUtilities.addTraceLogs(settings);\r\n            }\r\n            if (LsApiUtilities.isRequestedFromModal(settings)) {\r\n                LsApiUtilities.addRequestedFromModal(settings);\r\n            }\r\n        }\r\n        LsApiUtilities.addRequestId(settings);\r\n        LsApiUtilities.addViewportSize(settings);\r\n        LsApiUtilities.addUtcOffset(settings);\r\n        return $.ajax(settings);\r\n    }\r\n\r\n    public static enableTraceLogs() {\r\n        LsLogger.trace(\"Enabling adding of trace logs to POST requests.\");\r\n        LsApi.postTraceLogs = true;\r\n    }\r\n\r\n    public static disableTraceLogs() {\r\n        LsLogger.trace(\"Disabling adding of trace logs to POST requests.\");\r\n        LsApi.postTraceLogs = false;\r\n    }\r\n\r\n    public static onSuccess(result: ILsJsonResult | ILsStandardJsonResponse, status: JQuery.Ajax.SuccessTextStatus, xhr: JQuery.jqXHR, settings?: ILsApiAjaxSettings) {\r\n        if (xhr.responseJSON) {\r\n            if (LsJsonResultManager.isJsonResult(result)) {\r\n                LsJsonResultManager.run(result, status, xhr, settings);\r\n            } else if (LsStandardJsonResponseManager.isStandardJsonResponse(result)) {\r\n                LsStandardJsonResponseManager.run(result, status, xhr, settings);\r\n            }\r\n        } else if (settings) {\r\n            const requestId = LsApiUtilities.getRequestId(settings);\r\n            LsLogger.log(`Not a JSON response [requestId=${requestId}] [url=${settings.url}]`, \"error\");\r\n        }\r\n    }\r\n\r\n    public static onError(xhr: JQuery.jqXHR, status: JQuery.Ajax.ErrorTextStatus, err: string) { }\r\n\r\n    protected static ajaxFormOnSuccess(result: ILsJsonResult | ILsStandardJsonResponse, status: JQuery.Ajax.SuccessTextStatus, xhr: JQuery.jqXHR) {\r\n        LsApi.onSuccess(result, status, xhr);\r\n    }\r\n\r\n    protected static ajaxFormOnFailure(xhr: JQuery.jqXHR, status: JQuery.Ajax.ErrorTextStatus, err: string) {\r\n        LsApi.onError(xhr, status, err);\r\n\r\n        if ((\"LsRecaptcha\" in window)) {\r\n            LsRecaptcha.reset();\r\n        }\r\n    }\r\n\r\n    protected static onPrefilter(settings: ILsApiAjaxSettings) {\r\n        if (LsApiUtilities.isAjaxUnobtrusiveRequest(settings)) {\r\n            LsApiUtilities.addAjaxUnobtrusiveContext(settings);\r\n            LsApi.modifySuccessCallback(settings);\r\n        }\r\n        LsApi.modifyErrorCallback(settings);\r\n        LsApiUtilities.addRequestId(settings);\r\n        LsApiUtilities.addViewportSize(settings);\r\n        LsApiUtilities.addUtcOffset(settings);\r\n    }\r\n\r\n    protected static onStart() {\r\n        LsLoading.showOverlay();\r\n    }\r\n\r\n    protected static onSend(e: JQuery.TriggeredEvent, xhr: JQuery.jqXHR, settings: ILsApiAjaxSettings) {\r\n        if (LsApiUtilities.isAjaxUnobtrusiveRequest(settings)) {\r\n            if (LsApi.postTraceLogs) {\r\n                LsApiUtilities.addTraceLogs(settings);\r\n            }\r\n            if (LsApiUtilities.isRequestedFromModal(settings)) {\r\n                LsApiUtilities.addRequestedFromModal(settings, xhr);\r\n            }\r\n        }\r\n        if (settings.LsLogBeforeRequest) {\r\n            const requestId = LsApiUtilities.getRequestId(settings);\r\n            LsLogger.trace(`Sending AJAX request [requestId=${requestId}] [url=${settings.url}]`);\r\n        }\r\n    }\r\n\r\n    protected static onComplete(e: JQuery.TriggeredEvent, xhr: JQuery.jqXHR, settings: ILsApiAjaxSettings) {\r\n        if (LsJsonResultManager.isJsonResult(xhr.responseJSON)) {\r\n            const result = xhr.responseJSON;\r\n            if (!(result.actions?.redirect || result.actions?.refresh || result.actions?.submitForm)) {\r\n                LsLoading.hideOverlay();\r\n            }\r\n        } else if (LsStandardJsonResponseManager.isStandardJsonResponse(xhr.responseJSON)) {\r\n            const response = xhr.responseJSON;\r\n            if (Array.isArray(response.actions) && !response.actions.some(action => {\r\n                switch (action.type) {\r\n                    case \"execute\":\r\n                        switch (action.mode) {\r\n                            case \"redirect\":\r\n                            case \"refresh\":\r\n                                return true;\r\n\r\n                        }\r\n                        break;\r\n                    case \"load\":\r\n                        switch (action.mode) {\r\n                            case \"modal\":\r\n                                return true;\r\n                        }\r\n                        break;\r\n                }\r\n                return false;\r\n            })) {\r\n                LsLoading.hideOverlay();\r\n            }\r\n        } else {\r\n            LsLoading.hideOverlay();\r\n        }\r\n\r\n        if (settings.LsLogAfterRequest) {\r\n            const requestId = LsApiUtilities.getRequestId(settings);\r\n            LsLogger.trace(`AJAX request is complete [requestId=${requestId}] [url=${settings.url}] [statusCode=${xhr.status} ${xhr.statusText}] [response=${LsLogger.excerpt(xhr.responseText, 200, false, true)}]`);\r\n        }\r\n    }\r\n\r\n    protected static handleError(xhr: JQuery.jqXHR, status: JQuery.Ajax.TextStatus, err: string, settings: ILsApiAjaxSettings) {\r\n        let title: string;\r\n        let content: string;\r\n        let target: string;\r\n        let level: LsLoggerLevels = \"trace\";\r\n\r\n        if (status === \"abort\") {\r\n            return;\r\n        }\r\n\r\n        switch (xhr.status) {\r\n            case 0:\r\n            case 502:\r\n            case 503:\r\n            case 504:\r\n                target = \"#lsNetworkIssueNotification\";\r\n                break;\r\n            case 400:\r\n                title = \"Error\";\r\n                content = xhr.responseText;\r\n                break;\r\n            case 429:\r\n                title = xhr.getResponseHeader(\"X-LS-T\") || \"Whoa! You're too quick for us!\";\r\n                content = xhr.getResponseHeader(\"X-LS-M\") || \"Please wait a few minutes and give it another try.\";\r\n                break;\r\n            case 200:\r\n            case 500:\r\n                title = xhr.getResponseHeader(\"X-LS-T\") || \"Error\";\r\n                content = xhr.getResponseHeader(\"X-LS-M\") || (xhr.getResponseHeader(\"X-LS-T\") ? \"\" : \"An unknown error has occurred.\");\r\n                break;\r\n            default:\r\n                title = \"An unknown error has occurred.\";\r\n        }\r\n\r\n        if (status === \"parsererror\") {\r\n            level = \"error\";\r\n        }\r\n\r\n        const requestId = LsApiUtilities.getRequestId(settings);\r\n\r\n        if (!LsLogger.isGlobalLoggerUrl(settings.url)) {\r\n            LsLogger.log(`Api.handleError [requestId=${requestId}] [url=${settings.url}] [statusCode=${xhr.status} ${xhr.statusText}] [ajaxStatus=${status}] [xhrStatus=${xhr.readyState} ${[\"UNSENT\", \"OPENED\", \"HEADERS_RECEIVED\", \"LOADING\", \"DONE\"][xhr.readyState]}] [contentEncoding=${xhr.getResponseHeader(\"Content-Encoding\")}]`, level);\r\n        }\r\n\r\n        if (LsApiUtilities.global(settings)) {\r\n            if (target) {\r\n                LsModals.openModalByTarget(target);\r\n            } else {\r\n                LsModals.openErrorNotificationModal(title, content ? `<div>${content}</div>` : \"\", { destroyOnClose: true });\r\n            }\r\n        }\r\n    }\r\n\r\n    protected static modifySuccessCallback(settings: ILsApiAjaxSettings) {\r\n        // only set up default success callback if the ajax settings already have a success callback\r\n        // so that ajax calls that don't care about a response don't break on a non (JSON) response\r\n        // if that assumption changes (that ajax calls without a success callback don't need this default handling),\r\n        //   then handle that case differently\r\n        if (settings.success) {\r\n            let success: JQuery.TypeOrArray<LsApiSuccessCallback> = settings.success;\r\n            let error = settings.error || (() => { });\r\n\r\n            settings.success = [(result: ILsJsonResult | ILsStandardJsonResponse, status, xhr) => {\r\n                if (!xhr.responseJSON) {\r\n                    const requestId = LsApiUtilities.getRequestId(settings);\r\n                    LsLogger.log(`Not a JSON response [requestId=${requestId}] [url=${settings.url}]`, \"error\");\r\n                    LsApi.handleError(xhr, status, \"\", settings);\r\n                    if (!Array.isArray(error)) {\r\n                        error = [error];\r\n                    }\r\n                    for (const func of error) {\r\n                        func(xhr, \"error\", \"\");\r\n                    }\r\n                } else if (LsJsonResultManager.isJsonResult(result) && result.sessionExpired) {\r\n                    LsModals.openModalByTarget(\"#lsSessionExpiredNotification\");\r\n                } else {\r\n                    if (!Array.isArray(success)) {\r\n                        success = [success];\r\n                    }\r\n                    for (const func of success) {\r\n                        func(result, status, xhr, settings);\r\n                    }\r\n                }\r\n            }];\r\n        }\r\n    }\r\n\r\n    protected static modifyErrorCallback(settings: ILsApiAjaxSettings) {\r\n        let error = settings.error || (() => { });\r\n\r\n        settings.error = [(xhr, status, err) => {\r\n            LsApi.handleError(xhr, status, err, settings);\r\n            if (!Array.isArray(error)) {\r\n                error = [error];\r\n            }\r\n            for (const func of error) {\r\n                func(xhr, status, err);\r\n            }\r\n        }];\r\n    }\r\n}\r\n\r\nexport default LsApi;","import $ = require(\"jquery\");\r\n\r\nimport { ILsApiAjaxSettings } from \"./Api\";\r\nimport LsLogger from \"~/Src/Components/Logging/Logger\";\r\nimport LsModals from \"~/Src/Components/Modal/Modal\";\r\nimport { generateUUID } from \"~/Src/Components/Utilities/Utilities\";\r\n\r\nexport class LsApiUtilities {\r\n    public static addAntiForgeryToken(settings: ILsApiAjaxSettings) {\r\n        const data = {};\r\n        const $token = $(\"#lsLayoutAntiForgeryToken input\");\r\n        if ($token.length > 0) {\r\n            data[$token.attr(\"name\")] = $token.val();\r\n            LsApiUtilities.addDataToSettings(settings, data);\r\n        }\r\n    }\r\n\r\n    public static addTraceLogs(settings: ILsApiAjaxSettings) {\r\n        const traceLogsData = LsLogger.getTraceData();\r\n        if (Object.keys(traceLogsData).length > 0) {\r\n            LsApiUtilities.addDataToSettings(settings, traceLogsData);\r\n        }\r\n    }\r\n\r\n    public static addRequestedFromModal(settings: ILsApiAjaxSettings, xhr?: JQuery.jqXHR) {\r\n        let value = \"ls-modal\";\r\n        if ((\"headers\" in settings) && (\"X-Requested-From\" in settings.headers)) {\r\n            value = `${settings.headers[\"X-Requested-From\"]}, ${value}`;\r\n        }\r\n        const headers = { \"X-Requested-From\": value };\r\n        if (xhr) {\r\n            LsApiUtilities.addHeadersToXhr(xhr, headers);\r\n        } else {\r\n            LsApiUtilities.addHeadersToSettings(settings, headers);\r\n        }\r\n    }\r\n\r\n    public static addRequestId(settings: ILsApiAjaxSettings) {\r\n        const requestId = LsApiUtilities.getRequestId(settings);\r\n        if (!requestId) {\r\n            const headers = { \"X-Request-ID\": generateUUID() };\r\n            LsApiUtilities.addHeadersToSettings(settings, headers);\r\n        }\r\n    }\r\n\r\n    public static getRequestId(settings: ILsApiAjaxSettings) {\r\n        return LsApiUtilities.getHeaderFromSettings(settings, \"X-Request-ID\");\r\n    }\r\n\r\n    public static addViewportSize(settings: ILsApiAjaxSettings) {\r\n        const viewportWidth = LsApiUtilities.getHeaderFromSettings(settings, \"X-Viewport-Width\");\r\n        const viewportHeight = LsApiUtilities.getHeaderFromSettings(settings, \"X-Viewport-Height\");\r\n        if ((viewportWidth === undefined) || (viewportHeight === undefined)) {\r\n            const headers = {\r\n                \"X-Viewport-Width\": window.innerWidth,\r\n                \"X-Viewport-Height\": window.innerHeight,\r\n            };\r\n            LsApiUtilities.addHeadersToSettings(settings, headers);\r\n        }\r\n    }\r\n\r\n    public static addUtcOffset(settings: ILsApiAjaxSettings) {\r\n        const utcOffset = LsApiUtilities.getHeaderFromSettings(settings, \"X-UTC-Offset-Minutes\");\r\n        if (!utcOffset) {\r\n            const headers = { \"X-UTC-Offset-Minutes\": (new Date()).getTimezoneOffset() * -1 };\r\n            LsApiUtilities.addHeadersToSettings(settings, headers);\r\n        }\r\n    }\r\n\r\n    public static addAjaxUnobtrusiveContext(settings: ILsApiAjaxSettings) {\r\n        const $forms = $('form[data-ajax=\"true\"]');\r\n        for (const form of $forms.toArray() as Array<HTMLFormElement>) {\r\n            const $form = $(form);\r\n            const data = $form.data();\r\n            const url = data.ajaxUrl || form.action;\r\n            if (url === settings.url) {\r\n                settings.context = $form.get(0);\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    public static isPost(settings: ILsApiAjaxSettings) {\r\n        if (!(\"LsIsPost\" in settings)) {\r\n            settings.LsIsPost = ((\"method\" in settings) || (\"type\" in settings)) && ((settings.method || settings.type).toUpperCase() === \"POST\");\r\n        }\r\n        return settings.LsIsPost;\r\n    }\r\n\r\n    public static isAjaxUnobtrusiveRequest(settings: ILsApiAjaxSettings) {\r\n        if (!(\"LsIsAjaxUnobtrusiveRequest\" in settings)) {\r\n            const requestedWith = LsApiUtilities.getDataFromSettings(settings, \"X-Requested-With\");\r\n            settings.LsIsAjaxUnobtrusiveRequest = requestedWith === \"XMLHttpRequest\";\r\n        }\r\n        return settings.LsIsAjaxUnobtrusiveRequest;\r\n    }\r\n\r\n    public static isRequestedFromModal(settings: ILsApiAjaxSettings) {\r\n        if (!(\"LsIsRequestedFromModal\" in settings)) {\r\n            let requestedFrom = LsApiUtilities.getDataFromSettings(settings, \"X-Requested-From\");\r\n            if (!requestedFrom) {\r\n                if (LsModals.isInModal(settings.context)) {\r\n                    requestedFrom = \"ls-modal\";\r\n                }\r\n            }\r\n            settings.LsIsRequestedFromModal = (typeof requestedFrom === \"string\") && (requestedFrom.indexOf(\"ls-modal\") >= 0);\r\n        }\r\n        return settings.LsIsRequestedFromModal;\r\n    }\r\n\r\n    public static addDataToSettings(settings: ILsApiAjaxSettings, data: { [key: string]: any }) {\r\n        if (settings.data) {\r\n            if (!(\"contentType\" in settings) || settings.contentType === \"application/x-www-form-urlencoded\" || settings.contentType === \"multipart/form-data\") {\r\n                if (typeof settings.data === \"string\") {\r\n                    const params = $.param(data);\r\n                    if (params.length > 0) {\r\n                        settings.data = `${settings.data}&${params}`;\r\n                    }\r\n                } else if (Array.isArray(settings.data)) {\r\n                    const d = { ...data };\r\n                    for (const { name } of settings.data) {\r\n                        if (name in d) {\r\n                            settings.data[name] = d[name];\r\n                            delete d[name];\r\n                        }\r\n                    }\r\n                    for (const k of Object.keys(d)) {\r\n                        (settings.data as Array<any>).push({ name: k, value: d[k] });\r\n                    }\r\n                } else {\r\n                    settings.data = { ...settings.data, ...data };\r\n                }\r\n            } else if (settings.data instanceof FormData) {\r\n                for (const k of Object.keys(data)) {\r\n                    settings.data.append(k, data[k]);\r\n                }\r\n            }\r\n        } else {\r\n            settings.data = $.param(data);\r\n        }\r\n    }\r\n\r\n    public static getDataFromSettings(settings: ILsApiAjaxSettings, key: string) {\r\n        if (settings.data) {\r\n            if (typeof settings.data === \"string\") {\r\n                const d = decodeURIComponent(settings.data);\r\n                if (d.indexOf(key) > -1) {\r\n                    const pairs = settings.data.split(\"&\");\r\n                    for (const pair of pairs) {\r\n                        let [k, v] = pair.split(\"=\");\r\n                        k = decodeURIComponent(k);\r\n                        if (k === key) {\r\n                            return decodeURIComponent(v);\r\n                        }\r\n                    }\r\n                }\r\n            } else if (Array.isArray(settings.data)) {\r\n                for (const { name, value } of settings.data) {\r\n                    if (name === key) {\r\n                        return value;\r\n                    }\r\n                }\r\n            } else if (key in settings.data) {\r\n                return settings.data[key];\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public static addHeadersToSettings(settings: ILsApiAjaxSettings, headers: { [key: string]: any }) {\r\n        if (!(\"headers\" in settings)) {\r\n            settings.headers = {};\r\n        }\r\n        settings.headers = { ...settings.headers, ...headers };\r\n    }\r\n\r\n    public static getHeaderFromSettings(settings: ILsApiAjaxSettings, key: string) {\r\n        if (settings.headers && key in settings.headers) {\r\n            return settings.headers[key];\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    public static addHeadersToXhr(xhr: JQuery.jqXHR, headers: { [key: string]: any }) {\r\n        for (const k of Object.keys(headers)) {\r\n            xhr.setRequestHeader(k, headers[k]);\r\n        }\r\n    }\r\n\r\n    public static isXhr(xhr: any): xhr is JQuery.jqXHR {\r\n        return \"setRequestHeader\" in xhr;\r\n    }\r\n\r\n    public static global(settings: ILsApiAjaxSettings) {\r\n        return !!(settings && (!(\"global\" in settings) || settings.global));\r\n    }\r\n}\r\n\r\nexport default LsApiUtilities;","import $ = require(\"jquery\");\r\n\r\nimport { ILsApiAjaxSettings } from \"./Api\";\r\nimport LsApiUtilities from \"./ApiUtilities\";\r\nimport { LsEvents, ILsEventsData } from \"~/Src/Components/Events/Events\";\r\nimport LsLogger from \"~/Src/Components/Logging/Logger\";\r\nimport { LsModals, ILsModalOptions } from \"~/Src/Components/Modal/Modal\";\r\nimport LsRecaptcha from \"~/Src/Components/Recaptcha/Recaptcha\";\r\nimport LsFaceIdLogin from \"~/Src/Components/FaceIdLogin/FaceIdLogin\";\r\n\r\nexport interface ILsJsonResult {\r\n    message?: string;\r\n    parsingVersion?: \"1.0\";\r\n    success?: boolean;\r\n    sessionExpired?: boolean;\r\n    invalidAutoreplenish?: boolean;\r\n    events?: ILsEventsData | Array<ILsEventsData>;\r\n    actions?: {\r\n        redirect?: string;\r\n        refresh?: boolean;\r\n        submitForm?: {\r\n            formId: string;\r\n            tokenInput: string;\r\n        };\r\n        medianLogin?: {\r\n            email: string;\r\n            pw: string;\r\n        };\r\n    };\r\n    notification?: {\r\n        html: string;\r\n    };\r\n    modal?: {\r\n        url: string;\r\n    };\r\n    html?: string;\r\n    data?: {\r\n        [key: string]: any;\r\n    }\r\n}\r\n\r\nexport class LsJsonResultManager {\r\n    protected static _window: Window;\r\n    protected static get window() {\r\n        return LsJsonResultManager._window || (LsJsonResultManager._window = window);\r\n    }\r\n\r\n    protected static _document: Document;\r\n    protected static get document() {\r\n        return LsJsonResultManager._document || (LsJsonResultManager._document = document);\r\n    }\r\n\r\n    public static isJsonResult(result: unknown): result is ILsJsonResult {\r\n        return LsJsonResultManager.isObject(result) && (!(\"parsingVersion\" in result) || (result.parsingVersion === \"1.0\"));\r\n    }\r\n\r\n    public static run(result: ILsJsonResult, status: JQuery.Ajax.SuccessTextStatus, xhr: JQuery.jqXHR, settings?: ILsApiAjaxSettings) {\r\n        if (result.events) {\r\n            LsEvents.trigger(result.events);\r\n        }\r\n\r\n        if (result.actions?.medianLogin?.email && result.actions?.medianLogin?.pw) {\r\n            LsLogger.log(`MedianLogin was in results, attempting to store faceId`, \"info\");\r\n\r\n            LsFaceIdLogin.store(result.actions.medianLogin.email, result.actions.medianLogin.pw);\r\n        }\r\n\r\n        if (result.actions?.redirect) {\r\n            LsJsonResultManager.window.location.href = result.actions.redirect;\r\n            return;\r\n        } else if (result.actions?.refresh) {\r\n            LsJsonResultManager.window.location.reload(true);\r\n            return;\r\n        } else if (result.actions?.submitForm?.formId && result.actions?.submitForm?.tokenInput) {\r\n            const $form = $(`#${result.actions.submitForm.formId}`);\r\n            const $tokens = $(\"input[name='__RequestVerificationToken']\");\r\n            const $newToken = $(result.actions.submitForm.tokenInput).val();\r\n            $tokens.val($newToken);\r\n            $form.trigger(\"submit\");\r\n            return;\r\n        }\r\n\r\n        if (result.notification?.html) {\r\n            $(LsJsonResultManager.document.body).append(result.notification.html);\r\n        }\r\n\r\n        if (result.modal?.url) {\r\n            LsModals.openModalByUrl(result.modal.url);\r\n        }\r\n\r\n        if (result.html) {\r\n            const $newHtml = $(result.html);\r\n            const id = $newHtml.attr(\"id\");\r\n            if (id) {\r\n                const $oldHtml = $(`#${id}`);\r\n                if ($oldHtml.length > 0) {\r\n                    $oldHtml.replaceWith($newHtml);\r\n\r\n                    const $forms = $newHtml.find(\"form\").addBack(\"form\");\r\n                    if ($forms.length > 0) {\r\n                        for (const form of $forms.toArray()) {\r\n                            const $form = $(form) as JQuery<HTMLFormElement>;\r\n                            const validator: JQueryValidation.Validator = $form.data(\"validator\");\r\n                            if (!validator) {\r\n                                $.validator.unobtrusive.parse($form);\r\n                            }\r\n                            const $recaptcha = $form.find(\"[data-recaptcha-options]\");\r\n                            if ($recaptcha.length > 0) {\r\n                                LsRecaptcha.render($form);\r\n                            }\r\n\r\n                            const $loginFailed = $form.find(\"#lsLoginFailed\");\r\n                            if ($loginFailed.length > 0) {\r\n                                LsFaceIdLogin.delete();\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    $(document).trigger(\"ajaxPageLoad\");\r\n                } else {\r\n                    LsLogger.log(`LsJsonResultManager - element [#${id}] not found`, \"fatal\");\r\n                    if (LsApiUtilities.global(settings)) {\r\n                        LsModals.openErrorNotificationModal(\"An error has occurred.\", \"\", { destroyOnClose: true });\r\n                    }\r\n                }\r\n            } else {\r\n                LsLogger.log(`LsJsonResultManager - response HTML does not have id [response=${LsLogger.excerpt(result.html, 200, false, true)}]`, \"fatal\");\r\n                if (LsApiUtilities.global(settings)) {\r\n                    LsModals.openErrorNotificationModal(\"An error has occurred.\", \"\", { destroyOnClose: true });\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected static isObject(obj: unknown): obj is { [key: string]: any } {\r\n        return !Array.isArray(obj) && (typeof obj === \"object\");\r\n    }\r\n}","import $ = require(\"jquery\");\r\n\r\nimport { ILsApiAjaxSettings } from \"./Api\";\r\nimport LsApiUtilities from \"./ApiUtilities\";\r\nimport { LsCallback, LsCallbackParameters } from \"~/Src/Components/Callback/Callback\";\r\nimport { LsEvents, ILsEventsData } from \"~/Src/Components/Events/Events\";\r\nimport LsLogger from \"~/Src/Components/Logging/Logger\";\r\nimport LsModals from \"~/Src/Components/Modal/Modal\";\r\nimport LsRecaptcha from \"~/Src/Components/Recaptcha/Recaptcha\";\r\n\r\n\r\nexport type ILsStandardJsonResponse = ILsStandardJsonResponse20;\r\ninterface ILsStandardJsonResponse20 {\r\n    parsingVersion: \"2.0\";\r\n    success?: boolean;\r\n    actions?: Array<ILsActions>;\r\n}\r\n\r\n\r\ntype ILsActions = ILsAddActions | ILsExecuteActions | ILsLoadActions | ILsOpenActions | ILsUpdateActions | ILsLegacyActions;\r\n\r\n\r\ntype ILsAddActions = ILsAddEventAction;\r\ninterface ILsAddAction {\r\n    type: \"add\";\r\n}\r\ninterface ILsAddEventAction extends ILsAddAction {\r\n    mode: \"event\";\r\n    value: ILsEventsData;\r\n}\r\n\r\n\r\ntype ILsExecuteActions = ILsExecuteFunctionAction | ILsExecuteRedirectAction | ILsExecuteRefreshAction;\r\ninterface ILsExecuteAction {\r\n    type: \"execute\";\r\n}\r\ninterface ILsExecuteFunctionAction extends ILsExecuteAction {\r\n    mode: \"function\";\r\n    value: {\r\n        path: string; // TODO\r\n        name: string;\r\n        parameters?: LsCallbackParameters;\r\n    };\r\n}\r\ninterface ILsExecuteRedirectAction extends ILsExecuteAction {\r\n    mode: \"redirect\";\r\n    value: string;\r\n}\r\ninterface ILsExecuteRefreshAction extends ILsExecuteAction {\r\n    mode: \"refresh\";\r\n}\r\n\r\n\r\ntype ILsLoadActions = ILsLoadModalAction;\r\ninterface ILsLoadAction {\r\n    type: \"load\";\r\n}\r\ninterface ILsLoadModalAction extends ILsLoadAction {\r\n    mode: \"modal\";\r\n    value: string;\r\n}\r\n\r\n\r\ntype ILsOpenActions = ILsOpenModalAction;\r\ninterface ILsOpenAction {\r\n    type: \"open\";\r\n}\r\ninterface ILsOpenModalAction extends ILsOpenAction {\r\n    mode: \"modal\";\r\n    value: string;\r\n}\r\n\r\n\r\ntype ILsUpdateActions = ILsUpdateDomAction;\r\ninterface ILsUpdateAction {\r\n    type: \"update\";\r\n}\r\ninterface ILsUpdateDomAction extends ILsUpdateAction {\r\n    mode: \"dom\";\r\n    value: {\r\n        method: \"before\" | \"after\" | \"prepend\" | \"append\" | \"replace\" | \"remove\" | \"empty\";\r\n        target: string;\r\n        html?: string;\r\n    };\r\n}\r\n\r\n\r\ntype ILsLegacyActions = ILsLegacyNotificationAction;\r\ninterface ILsLegacyAction {\r\n    type: \"legacy\";\r\n}\r\ninterface ILsLegacyNotificationAction extends ILsLegacyAction {\r\n    mode: \"notification\";\r\n    value: {\r\n        type: \"error\" | \"info\" | \"success\" | \"warning\";\r\n        preventClose?: boolean;\r\n        html: string;\r\n    };\r\n}\r\n\r\n\r\nclass LsStandardJsonResponse {\r\n    protected static _window: Window;\r\n    protected static get window() {\r\n        return LsStandardJsonResponse._window || (LsStandardJsonResponse._window = window);\r\n    }\r\n\r\n    protected _global: boolean;\r\n    protected get global() {\r\n        return this._global || (this._global = LsApiUtilities.global(this.settings));\r\n    }\r\n\r\n    protected settings: ILsApiAjaxSettings;\r\n    protected static actions: { [type: string]: { [mode: string]: (action: ILsActions) => boolean; } } = {\r\n        add: {\r\n            event: LsStandardJsonResponse.addEvent,\r\n        },\r\n        execute: {\r\n            function: LsStandardJsonResponse.executeFunction,\r\n            redirect: LsStandardJsonResponse.executeRedirect,\r\n            refresh: LsStandardJsonResponse.executeRefresh,\r\n        },\r\n        load: {\r\n            modal: LsStandardJsonResponse.loadModal,\r\n        },\r\n        open: {\r\n            modal: LsStandardJsonResponse.openModal,\r\n        },\r\n        update: {\r\n            dom: LsStandardJsonResponse.updateDom,\r\n        },\r\n    };\r\n\r\n    protected static updateDomActions: { [method: string]: ($target: JQuery, $html: JQuery) => void; } = {\r\n        before: LsStandardJsonResponse.updateDomBefore,\r\n        after: LsStandardJsonResponse.updateDomAfter,\r\n        prepend: LsStandardJsonResponse.updateDomPrepend,\r\n        append: LsStandardJsonResponse.updateDomAppend,\r\n        replace: LsStandardJsonResponse.updateDomReplace,\r\n    };\r\n\r\n    protected static updateDomNoContentActions: { [method: string]: ($target: JQuery) => void; } = {\r\n        remove: LsStandardJsonResponse.updateDomRemove,\r\n        empty: LsStandardJsonResponse.updateDomEmpty,\r\n    };\r\n\r\n    public constructor(response: ILsStandardJsonResponse, settings?: ILsApiAjaxSettings) {\r\n        this.settings = settings;\r\n\r\n        if (Array.isArray(response.actions)) {\r\n            for (const action of response.actions) {\r\n                if (action.type in LsStandardJsonResponse.actions) {\r\n                    if (action.mode in LsStandardJsonResponse.actions[action.type]) {\r\n                        const success = LsStandardJsonResponse.actions[action.type][action.mode](action);\r\n                        if (!success) {\r\n                            this.showGenericError();\r\n                        }\r\n                    } else {\r\n                        LsStandardJsonResponse.logError(`unknown action mode [type=${action.type}] [mode=${action.mode}]`);\r\n                        this.showGenericError();\r\n                    }\r\n                } else {\r\n                    LsStandardJsonResponse.logError(`unknown action type [type=${action.type}] [mode=${action.mode}]`);\r\n                    this.showGenericError();\r\n                }\r\n\r\n                // actions that end execution\r\n                switch (action.type) {\r\n                    case \"execute\":\r\n                        switch (action.mode) {\r\n                            case \"redirect\":\r\n                            case \"refresh\":\r\n                                return;\r\n                        }\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected static addEvent(action: ILsAddEventAction): boolean {\r\n        if (action.value) {\r\n            LsEvents.trigger(action.value);\r\n            return true;\r\n        } else {\r\n            LsStandardJsonResponse.logError(`no redirect URL [${action.value}]`);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    protected static executeFunction(action: ILsExecuteFunctionAction): boolean {\r\n        if (action.value) {\r\n            if (action.value.name) {\r\n                // TODO - implement action.value.path\r\n                if (action.value.name in LsStandardJsonResponse.window) {\r\n                    LsCallback.call(action.value.name, action.value.parameters);\r\n                    return true;\r\n                } else {\r\n                    LsStandardJsonResponse.logError(`function [${action.value.name}] not found`);\r\n                }\r\n            } else {\r\n                LsStandardJsonResponse.logError(`no function name [${action.value.name}]`);\r\n            }\r\n        } else {\r\n            LsStandardJsonResponse.logError(`no action value object [${action.value}]`);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    protected static executeRedirect(action: ILsExecuteRedirectAction): boolean {\r\n        if (action.value) {\r\n            LsStandardJsonResponse.window.location.href = action.value;\r\n            return true;\r\n        } else {\r\n            LsStandardJsonResponse.logError(`no redirect URL [${action.value}]`);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    protected static executeRefresh(action: ILsExecuteRefreshAction): boolean {\r\n        LsStandardJsonResponse.window.location.reload(true);\r\n        return true;\r\n    }\r\n\r\n    protected static loadModal(action: ILsLoadModalAction): boolean {\r\n        if (action.value) {\r\n            LsModals.openModalByUrl(action.value);\r\n            return true;\r\n        } else {\r\n            LsStandardJsonResponse.logError(`no modal URL [${action.value}]`);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    protected static updateDom(action: ILsUpdateDomAction): boolean {\r\n        if (action.value) {\r\n            if (action.value.target) {\r\n                const $target = $(action.value.target);\r\n                if ($target.length > 0) {\r\n                    if (action.value.method in LsStandardJsonResponse.updateDomNoContentActions) {\r\n                        LsStandardJsonResponse.updateDomNoContentActions[action.value.method]($target);\r\n                        return true;\r\n                    } else if (action.value.method in LsStandardJsonResponse.updateDomActions) {\r\n                        if (action.value.html) {\r\n                            const $html = $(action.value.html);\r\n                            LsStandardJsonResponse.updateDomActions[action.value.method]($target, $html);\r\n                            const $forms = $html.find(\"form\").addBack(\"form\");\r\n                            if ($forms.length > 0) {\r\n                                for (const form of $forms.toArray()) {\r\n                                    const $form = $(form) as JQuery<HTMLFormElement>;\r\n                                    const validator: JQueryValidation.Validator = $form.data(\"validator\");\r\n                                    if (!validator) {\r\n                                        $.validator.unobtrusive.parse($form);\r\n                                    }\r\n                                    const $recaptcha = $form.find(\"[data-recaptcha-options]\");\r\n                                    if ($recaptcha.length > 0) {\r\n                                        LsRecaptcha.render($form);\r\n                                    }\r\n                                }\r\n                            }\r\n                            return true;\r\n                        } else {\r\n                            LsStandardJsonResponse.logError(`no HTML content [target=${action.value.target}] [method=${action.value.method}] [html=${action.value.html}]`);\r\n                        }\r\n                    } else {\r\n                        LsStandardJsonResponse.logError(`unknown action method [target=${action.value.target}] [method=${action.value.method}] [html=${action.value.html}]`);\r\n                    }\r\n                } else {\r\n                    LsStandardJsonResponse.logError(`element not found [target=${action.value.target}] [method=${action.value.method}] [html=${action.value.html}]`);\r\n                }\r\n            } else {\r\n                LsStandardJsonResponse.logError(`no element selector [target=${action.value.target}] [method=${action.value.method}] [html=${action.value.html}]`);\r\n            }\r\n        } else {\r\n            LsStandardJsonResponse.logError(`no action value object [${action.value}]`);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    protected static updateDomRemove($target: JQuery) {\r\n        $target.remove();\r\n    }\r\n\r\n    protected static updateDomEmpty($target: JQuery) {\r\n        $target.empty();\r\n    }\r\n\r\n    protected static updateDomBefore($target: JQuery, $html: JQuery) {\r\n        $target.before($html);\r\n    }\r\n\r\n    protected static updateDomAfter($target: JQuery, $html: JQuery) {\r\n        $target.after($html);\r\n    }\r\n\r\n    protected static updateDomPrepend($target: JQuery, $html: JQuery) {\r\n        $target.prepend($html);\r\n    }\r\n\r\n    protected static updateDomAppend($target: JQuery, $html: JQuery) {\r\n        $target.append($html);\r\n    }\r\n\r\n    protected static updateDomReplace($target: JQuery, $html: JQuery) {\r\n        $target.replaceWith($html);\r\n    }\r\n\r\n    protected static openModal(action: ILsOpenModalAction): boolean {\r\n        if (action.value) {\r\n            LsModals.openModalByTarget(action.value);\r\n        } else {\r\n            LsStandardJsonResponse.logError(`no modal selector [${action.value}]`);\r\n        }\r\n        return false;\r\n    }\r\n\r\n    protected static logError(message: string) {\r\n        LsLogger.log(`LsStandardJsonResponse - ${message}`, \"fatal\");\r\n    }\r\n\r\n    protected showGenericError = () => {\r\n        if (this.global) {\r\n            LsModals.openErrorNotificationModal(\"An error has occurred.\", \"\", { destroyOnClose: true });\r\n        }\r\n    }\r\n}\r\n\r\nexport class LsStandardJsonResponseManager {\r\n    public static isStandardJsonResponse(response: unknown): response is ILsStandardJsonResponse {\r\n        return LsStandardJsonResponseManager.isObject(response) && (response.parsingVersion === \"2.0\");\r\n    }\r\n\r\n    public static run(response: ILsStandardJsonResponse, status: JQuery.Ajax.SuccessTextStatus, xhr: JQuery.jqXHR, settings?: ILsApiAjaxSettings) {\r\n        const r = new LsStandardJsonResponse(response, settings);\r\n        $(document).trigger(\"ajaxPageLoad\");\r\n    }\r\n\r\n    protected static isObject(obj: unknown): obj is { [key: string]: any } {\r\n        return !Array.isArray(obj) && (typeof obj === \"object\");\r\n    }\r\n}","import LsLogger from \"../Logging/Logger\";\r\nimport LsUdoManager from \"../Utilities/UdoManager\";\r\n\r\nexport interface ILsEventsData {\r\n    event: string;\r\n    eventCallback?: () => void;\r\n    eventTimeout?: number;\r\n    [key: string]: any;\r\n}\r\n\r\nexport interface ILsEventsItemsData {\r\n    // ReSharper disable InconsistentNaming\r\n    items: Array<{\r\n        itemid: number;\r\n        price: number;\r\n        quantity: number;\r\n        skuid: number;\r\n        subtotal: number;\r\n        searchalias: string;\r\n        totalquantity: number;\r\n    }>;\r\n    value: number;\r\n    // ReSharper restore InconsistentNaming\r\n}\r\n\r\nexport class LsEvents {\r\n    // ReSharper disable InconsistentNaming\r\n    protected static _window: Window;\r\n    protected static get window() {\r\n        return LsEvents._window || (LsEvents._window = window);\r\n    }\r\n\r\n    protected static _document: Document;\r\n    protected static get document() {\r\n        return LsEvents._document || (LsEvents._document = LsEvents.window.document);\r\n    }\r\n    // ReSharper restore InconsistentNaming\r\n\r\n    protected static initialized = false;\r\n    protected browserEventActions = {\r\n        click: \"Clicked\",\r\n        mouseover: \"Hovered\",\r\n    }\r\n\r\n    public constructor() {\r\n        if (!LsEvents.initialized) {\r\n            LsEvents.document.addEventListener(\"click\", this.handleBrowserEvent);\r\n            LsEvents.document.addEventListener(\"mouseover\", this.handleBrowserEvent);\r\n\r\n            if (document.readyState === \"loading\") {\r\n                document.addEventListener(\"DOMContentLoaded\", this.triggerInitialEvents);\r\n            } else {\r\n                this.triggerInitialEvents();\r\n            }\r\n\r\n            LsEvents.initialized = true;\r\n        }\r\n    }\r\n\r\n    // this pushes the original object onto the datalayer\r\n    // this does not make a shallow or deep copy\r\n    public static trigger(data: ILsEventsData | Array<ILsEventsData>): void;\r\n    public static trigger(data: unknown) {\r\n        LsUdoManager.push(data);\r\n\r\n        if ((window as any).ordergroove) {\r\n            LsEvents.ordergrooveEventHandler(Array.isArray(data) ? data[0] : data);\r\n        }\r\n    }\r\n\r\n    public static selectItem(key: unknown, data: unknown, quantity: unknown, module: unknown) {\r\n        if ((typeof key === \"string\") && LsEvents.isObject(data) && LsEvents.isObject(data.items)) {\r\n            const item = data.items[key];\r\n            if (LsEvents.isObject(item)) {\r\n                const eventData = {\r\n                    event: \"select_item\",\r\n                    select_item_result: {\r\n                        offeringExternalId: data.OfferingExternalId,\r\n                        id: item.Id,\r\n                        searchAlias: item.SearchAlias,\r\n                        externalId: item.ExternalId,\r\n                        name: item.Name,\r\n                        type: item.Type,\r\n                        listPrice: item.Price.ListPrice,\r\n                        salePrice: item.Price.SalePrice,\r\n                        quantity,\r\n                        subscription: {\r\n                            module,\r\n                        },\r\n                        skus: item.Skus,\r\n                    },\r\n                    ecommerce: {\r\n                        detail: {\r\n                            products: [{\r\n                                name: item[\"Name\"],\r\n                                id: item[\"SearchAlias\"],\r\n                                price: item.Price.SalePrice,\r\n                            }],\r\n                        },\r\n                    },\r\n                    ga_label: {\r\n                        label: item[\"Name\"]\r\n                    }\r\n                };\r\n\r\n                LsEvents.trigger(eventData);\r\n            }\r\n        }\r\n    }\r\n\r\n    public static setQuantity(selectedItemId: unknown, quantity: unknown, data: unknown, module: unknown) {\r\n        if (data && (typeof data === \"object\") && (typeof data[\"items\"] === \"object\")) {\r\n            selectedItemId = Number(selectedItemId);\r\n            for (const k of Object.keys(data[\"items\"])) {\r\n                const item = data[\"items\"][k] as unknown;\r\n                if (typeof item === \"object\") {\r\n                    const id = Number(item[\"Id\"]);\r\n                    if (id === selectedItemId) {\r\n                        const result = {\r\n                            id,\r\n                            searchAlias: item[\"SearchAlias\"],\r\n                            externalId: item[\"ExternalId\"],\r\n                            name: item[\"Name\"],\r\n                            type: item[\"Type\"],\r\n                            quantity,\r\n                            subscription: {\r\n                                module,\r\n                            },\r\n                        };\r\n                        LsEvents.triggerEventWithResultData(\"set_quantity\", result);\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public static keywordSearch(data: unknown) {\r\n        LsEvents.triggerEventWithResultData(\"keyword_search\", data);\r\n    }\r\n\r\n    public static filterItems(data: unknown) {\r\n        LsEvents.triggerEventWithResultData(\"filter_items\", data);\r\n    }\r\n\r\n    public static addToWishlist(data: unknown) {\r\n        LsEvents.triggerEventWithResultData(\"add_to_wishlist\", data);\r\n    }\r\n\r\n    public static viewQuickShop(data: unknown) {\r\n        LsEvents.triggerEventWithResultData(\"quick_shop\", data);\r\n    }\r\n\r\n    public static newsletterSubscription(data: unknown) {\r\n        LsEvents.triggerEventWithResultData(\"newsletter_subscription\", data);\r\n    }\r\n\r\n    public static interactionEvent(action: string, category: string, label?: string, value?: number | string) {\r\n        if (!action || !category) {\r\n            return;\r\n        }\r\n\r\n        const eventData = {\r\n            event: \"interaction_event\",\r\n            interaction_event_result: {\r\n                action,\r\n                category,\r\n                label,\r\n                value,\r\n            },\r\n            event_action: action,\r\n            event_category: category,\r\n            event_label: label,\r\n            event_value: value,\r\n        };\r\n\r\n        LsEvents.trigger(eventData);\r\n        //LsEvents.triggerEventWithResultData(\"interaction_event\", data);\r\n    }\r\n\r\n    protected static triggerEventWithResultData(event: string, data: unknown) {\r\n        const eventData = { event };\r\n        eventData[`${event}_result`] = data;\r\n        LsEvents.trigger(eventData);\r\n    }\r\n\r\n    protected handleBrowserEvent = (e: Event) => {\r\n        this.trackInteractionEvent(e);\r\n\r\n        if (e.type === \"click\") {\r\n            this.clickRecommendedProduct(e);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Required:\r\n     * - data-event-action=\"action type\"\r\n     * - data-event-category=\"category value\"\r\n     *\r\n     * Optional:\r\n     * - data-event-label=\"label\"\r\n     * - data-event-value=\"value\"\r\n     */\r\n    protected trackInteractionEvent = (e: Event) => {\r\n        if (e.target instanceof Element) {\r\n            const eventAction = this.browserEventActions[e.type] || e.type;\r\n            const currentTarget = e.target.closest(`[data-event-action~=\"${eventAction}\"]`);\r\n            if (currentTarget instanceof HTMLElement) {\r\n                if ((e instanceof MouseEvent) && (e.relatedTarget instanceof HTMLElement)) {\r\n                    const relatedTarget = e.relatedTarget.closest(`[data-event-action~=\"${eventAction}\"]`);\r\n                    if (relatedTarget === currentTarget) {\r\n                        return;\r\n                    }\r\n                }\r\n                const data = { ...currentTarget.dataset };\r\n                LsEvents.interactionEvent(eventAction, data.eventCategory, data.eventLabel, data.eventValue);\r\n            }\r\n        }\r\n    }\r\n\r\n    protected clickRecommendedProduct = (e: Event) => {\r\n        if (e.target instanceof Element) {\r\n            const currentTarget = e.target.closest(\"[data-event-recommended-product]\");\r\n            if (currentTarget instanceof HTMLElement) {\r\n                const data = JSON.parse(currentTarget.dataset.eventRecommendedProduct);\r\n                LsEvents.triggerEventWithResultData(\"click_recommended_product\", data);\r\n            }\r\n        }\r\n    }\r\n\r\n    protected triggerInitialEvents = () => {\r\n        const eventDataElements = Array.from(LsEvents.document.querySelectorAll(\"[data-events-on-load]\"));\r\n        if (eventDataElements.length > 0) {\r\n            for (const el of eventDataElements) {\r\n                if (el.textContent) {\r\n                    const data = $(el).data();\r\n                    try {\r\n                        const events = JSON.parse(el.textContent);\r\n                        if (events) {\r\n                            LsEvents.trigger(events);\r\n                        } else {\r\n                            LsLogger.log(`LsEvents.triggerInitialEvents - Event data${data.eventsOnLoad ? ` [${data.eventsOnLoad}]` : \"\"} is null or empty`, \"warn\");\r\n                        }\r\n                    } catch (ex) {\r\n                        LsLogger.log(`LsEvents.triggerInitialEvents - Event data${data.eventsOnLoad ? ` [${data.eventsOnLoad}]` : \"\"} is not valid JSON`, \"warn\");\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected static isObject(obj: unknown): obj is { [key: string]: any } {\r\n        return !Array.isArray(obj) && typeof obj === \"object\";\r\n    }\r\n\r\n    protected static ordergrooveEventHandler = (eventData: any) => {\r\n        switch (eventData.event) {\r\n            case \"update_quantity\":\r\n                (window as any).ordergroove.UpdateQuantity(eventData.update_quantity_result)\r\n                break;\r\n            case \"remove_from_cart\":\r\n                (window as any).ordergroove.RemoveFromCart(eventData.remove_from_cart_result)\r\n                break;\r\n            /*case \"add_to_cart\":\r\n                (window as any).ordergroove.AddToCart(eventData.add_to_cart_result)\r\n                break;\r\n            case \"set_quantity\":\r\n                (window as any).ordergroove.AddToCart(eventData.set_quantity_result)\r\n                break;*/\r\n            default:\r\n                break\r\n        }\r\n    }\r\n}\r\n\r\nexport default LsEvents;","import LsMedianBridge from \"~/Src/Components/GoNative/GoNativeBridge\";\r\nimport LsLogger from \"~/Src/Components/Logging/Logger\";\r\n\r\nexport class LsFaceIdLogin {\r\n    protected static _window: Window;\r\n    protected static get window() {\r\n        return LsFaceIdLogin._window || (LsFaceIdLogin._window = window);\r\n    }\r\n\r\n    protected static _gonative: any;\r\n    protected static get gonative() {\r\n        return LsFaceIdLogin._gonative;\r\n    }\r\n\r\n    protected static _document: Document;\r\n    protected static get document() {\r\n        return LsFaceIdLogin._document || (LsFaceIdLogin._document = document);\r\n    }\r\n\r\n    // post login save secret \r\n    public static store(user: string, pass: string) {\r\n        LsLogger.log(`Storing user info`, \"info\");\r\n\r\n        LsMedianBridge.status().then(function (result: any) {\r\n            LsLogger.log(`Store - Result: ${JSON.stringify(result)}`, \"info\");\r\n\r\n            if (result && result.hasTouchId) {\r\n                var s = JSON.stringify({\r\n                    username: user,\r\n                    password: pass\r\n                });\r\n\r\n                LsMedianBridge.save({ 'secret': s });\r\n            };\r\n        });\r\n    }\r\n\r\n    // check device for faceID login\r\n    public static get() {\r\n        LsLogger.log(`Attempting to get faceId login info`, \"info\");\r\n\r\n        LsMedianBridge.status({ 'callbackFunction': LsMedianBridge.beforeLogin });\r\n    }\r\n\r\n    // delete secret if login fails\r\n    public static delete() {\r\n        LsMedianBridge.delete();\r\n    }\r\n}\r\n\r\nexport default LsFaceIdLogin;","import $ = require(\"jquery\");\r\nimport LsLogger from \"~/Src/Components/Logging/Logger\";\r\n\r\nexport class LsMedianBridge {\r\n    protected static _window: any;\r\n    protected static get window() {\r\n        return LsMedianBridge._window || (LsMedianBridge._window = window);\r\n    }\r\n\r\n    protected static _gonative: object;\r\n    protected static get gonative() {\r\n        return LsMedianBridge._gonative;\r\n    }\r\n\r\n    protected static _document: Document;\r\n    protected static get document() {\r\n        return LsMedianBridge._document || (LsMedianBridge._document = document);\r\n    }\r\n\r\n    protected static addCommandCallback(command?: any, params?: any, persistCallback?: any) {\r\n        if (params && (params.callback || params.callbackFunction)) {\r\n            // execute command with provided callback function\r\n            LsMedianBridge.addCommand(command, params, persistCallback);\r\n        } else {\r\n            // create a temporary function and return a promise that executes command\r\n            var tempFunctionName = '_median_temp_' + Math.random().toString(36).slice(2);\r\n            if (!params) params = {};\r\n            params.callback = tempFunctionName;\r\n            return new Promise(function (resolve, reject) {\r\n                // declare a temporary function\r\n                LsMedianBridge.window[tempFunctionName] = function (data) {\r\n                    resolve(data);\r\n                    delete window[tempFunctionName];\r\n                }\r\n\r\n                LsLogger.log(`Adding command: ${JSON.stringify(command)}, params: ${JSON.stringify(params)}`, \"info\");\r\n\r\n                // execute command\r\n                LsMedianBridge.addCommand(command, params);\r\n            });\r\n        }\r\n    }\r\n\r\n    protected static addCallbackFunction(callbackFunction: any, persistCallback: boolean) {\r\n        let callbackName;\r\n        if (typeof callbackFunction === 'string') {\r\n            callbackName = callbackFunction;\r\n        } else {\r\n            callbackName = '_median_temp_' + Math.random().toString(36).slice(2);\r\n            LsMedianBridge.window[callbackName] = function (...args) {\r\n                callbackFunction.apply(null, args);\r\n                if (!persistCallback) {\r\n                    // if callback is used just once\r\n                    delete window[callbackName];\r\n                }\r\n            }\r\n        }\r\n        return callbackName;\r\n    }\r\n\r\n    protected static addCommand(command?: any, params?: any, persistCallback?: boolean) {\r\n        let commandObject = undefined;\r\n\r\n        if (params) {\r\n            commandObject = {};\r\n            if (params.callback && typeof params.callback === 'function') {\r\n                params.callback = LsMedianBridge.addCallbackFunction(params.callback, persistCallback);\r\n            }\r\n\r\n            if (params.callbackFunction && typeof params.callbackFunction === 'function') {\r\n                params.callbackFunction = LsMedianBridge.addCallbackFunction(params.callbackFunction, persistCallback);\r\n            }\r\n\r\n            if (params.statuscallback && typeof params.statuscallback === 'function') {\r\n                params.statuscallback = LsMedianBridge.addCallbackFunction(params.statuscallback, persistCallback);\r\n            }\r\n\r\n            commandObject.medianCommand = command;\r\n            commandObject.data = params;\r\n        } else {\r\n            commandObject = command;\r\n        }\r\n\r\n        if (navigator.vendor === 'Apple Computer, Inc.') {\r\n            LsMedianBridge.window.webkit.messageHandlers.JSBridge.postMessage(commandObject);\r\n        } else {\r\n            if (params) {\r\n                commandObject = JSON.stringify(commandObject);\r\n            }\r\n        }\r\n    }\r\n\r\n    //////////// Publicly accessible methods ////////////\r\n    public static run() {\r\n        LsMedianBridge.deviceInfo();\r\n    }\r\n\r\n    public static deviceInfo(params?: any) {\r\n        return LsMedianBridge.addCommandCallback(\"median://run/median_device_info\", params, true);\r\n    };\r\n\r\n    public static status(params?: any) {\r\n        return LsMedianBridge.addCommandCallback(\"median://auth/status\", params);\r\n    }\r\n\r\n    public static get(params?: any) {\r\n        LsMedianBridge.addCommand(\"median://auth/get\", params);\r\n    }\r\n\r\n    public static save(params?: any) {\r\n        LsMedianBridge.addCommand(\"median://auth/save\", params);\r\n    }\r\n\r\n    public static delete(params?: any) {\r\n        LsMedianBridge.addCommand(\"median://auth/delete\", params);\r\n    }\r\n\r\n    public static beforeLogin(result: any) {\r\n\r\n        LsLogger.log(`Result: ${JSON.stringify(result)}`, \"info\");\r\n\r\n        if (result && result.hasTouchId && result.hasSecret) {\r\n            // Prompt the user to use the fingerprint to log in\r\n            LsMedianBridge.get({ 'callbackFunction': LsMedianBridge.beforeCallback, 'prompt': 'Allow face/touch id?' });\r\n        };\r\n    }\r\n\r\n    public static beforeCallback(data: any) {\r\n        LsLogger.log(`Logging the data for the promise on login; data: ${data}`, \"info\");\r\n\r\n        const $form = $(\"[data-limited-login], [data-cart-login-modal], [data-checkout-sign-in]\");\r\n        const $submit = $(\"[data-log-id='Submit:Login']\");\r\n\r\n        if (data && data.success && data.secret) {\r\n            const credentials = JSON.parse(data.secret);\r\n            const emailInput = $form.find(\"[data-email-address]\");\r\n            const pwInput = $form.find(\"[data-pw]\");\r\n\r\n            emailInput.val(credentials.username);\r\n            pwInput.val(credentials.password);\r\n\r\n            LsLogger.log(`beforeCallback - secret found and triggering submit button click`, \"info\");\r\n            $submit.click();\r\n        } else {\r\n            // reload the page through ajax to allow manual entry \r\n            LsLogger.log(`beforeCallback - secret not found, page refreshed`, \"info\");\r\n            $(document).trigger(\"ajaxPageLoad\");\r\n        }\r\n    }\r\n}\r\n\r\nexport default LsMedianBridge;","import $ = require(\"jquery\");\r\n\r\nimport \"./Recaptcha.scss\";\r\n\r\nexport class LsRecaptcha {\r\n    // ReSharper disable InconsistentNaming\r\n    protected static _window: Window;\r\n    protected static get window() {\r\n        return LsRecaptcha._window || (LsRecaptcha._window = window);\r\n    }\r\n\r\n    protected static _document: Document;\r\n    protected static get document() {\r\n        return LsRecaptcha._document || (LsRecaptcha._document = document);\r\n    }\r\n    // ReSharper restore InconsistentNaming\r\n\r\n    protected static initialized = false;\r\n    protected $form: JQuery;\r\n    protected static recaptchaSelector = \"[data-recaptcha-options]\";\r\n\r\n    public constructor() {\r\n        if (!LsRecaptcha.initialized) {\r\n            $(LsRecaptcha.document).on(\"click\", \"[data-recaptcha-submit]\", e => {\r\n                if (LsRecaptcha.window.grecaptcha && LsRecaptcha.window.grecaptcha.execute) {\r\n                    this.$form = $(e.currentTarget).closest(\"form\");\r\n                    const $recaptcha = this.$form.find(LsRecaptcha.recaptchaSelector);\r\n                    if ($recaptcha.length > 0) {\r\n                        const id = $recaptcha.data(\"recaptchaId\");\r\n                        if (id !== undefined) {\r\n                            e.preventDefault();\r\n\r\n                            const isValid = this.$form.valid();\r\n                            if (isValid) {\r\n                                LsRecaptcha.window.grecaptcha.execute(id);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            });\r\n\r\n            LsRecaptcha.window.GoogleRecaptchaOnSubmit = token => {\r\n                this.$form.submit();\r\n            }\r\n\r\n            const $recaptchas = $(LsRecaptcha.recaptchaSelector);\r\n            for (const el of $recaptchas.toArray()) {\r\n                LsRecaptcha.render(el);\r\n            }\r\n\r\n            LsRecaptcha.initialized = true;\r\n        }\r\n    }\r\n\r\n    public static render = (el: LsJQuerySelector) => {\r\n        if (LsRecaptcha.window.grecaptcha && LsRecaptcha.window.grecaptcha.render) {\r\n            let $recaptcha = $(el);\r\n            if ($recaptcha.length > 0) {\r\n                if (!$recaptcha.is(LsRecaptcha.recaptchaSelector)) {\r\n                    $recaptcha = $recaptcha.find(LsRecaptcha.recaptchaSelector);\r\n                }\r\n                if ($recaptcha.length > 0) {\r\n                    const data = $recaptcha.data() as ReCaptchaV2.Parameters;\r\n                    if (!(\"recaptchaId\" in data)) {\r\n                        if (data.size !== \"invisible\") {\r\n                            const width = $(LsRecaptcha.window).width();\r\n                            if (width < 360) {\r\n                                $recaptcha.attr(\"data-size\", \"compact\");\r\n                                data.size = \"compact\";\r\n                            }\r\n                        }\r\n                        const id = LsRecaptcha.window.grecaptcha.render($recaptcha.get(0), data);\r\n                        $recaptcha.data(\"recaptchaId\", id);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    //From Docs: Each reCAPTCHA user response token can only be verified once. If you need a new token, you will need to call grecaptcha.reset() to ask the end user to verify with reCAPTCHA again.\r\n    public static reset() {\r\n        if (LsRecaptcha.window.grecaptcha && LsRecaptcha.window.grecaptcha.reset) {\r\n            LsRecaptcha.window.grecaptcha.reset();\r\n        }\r\n    }\r\n}\r\n\r\nexport default LsRecaptcha;","import { LsLogger } from \"../Logging/Logger\";\r\n\r\ntype ILsUdo = Array<{ [key: string]: any }>;\r\n\r\nclass LsUdoManagerDefaults {\r\n    static elementId = \"ls-udo-init\";\r\n    static attributeName = \"data-udo-variable-name\";\r\n}\r\n\r\nexport class LsUdoManager {\r\n    protected static _window: Window;\r\n    protected static get window() {\r\n        return LsUdoManager._window || (LsUdoManager._window = window);\r\n    }\r\n\r\n    protected static _document: Document;\r\n    protected static get document() {\r\n        return LsUdoManager._document || (LsUdoManager._document = LsUdoManager.window.document);\r\n    }\r\n\r\n    protected static _udoElement: HTMLElement;\r\n    protected static get udoElement() {\r\n        LsUdoManager._udoElement = LsUdoManager._udoElement || (LsUdoManager._udoElement = LsUdoManager.document.getElementById(LsUdoManagerDefaults.elementId));\r\n        if (!LsUdoManager._udoElement) {\r\n            LsLogger.log(`udoElement - element [#${LsUdoManagerDefaults.elementId}] not found`, \"fatal\");\r\n        }\r\n\r\n        return LsUdoManager._udoElement;\r\n    }\r\n\r\n    protected static _udoVariableName: string;\r\n    protected static get udoVariableName() {\r\n        return LsUdoManager._udoVariableName || (LsUdoManager._udoVariableName = LsUdoManager.udoElement?.getAttribute(LsUdoManagerDefaults.attributeName));\r\n    }\r\n\r\n    protected static get udoData(): ILsUdo {\r\n        return LsUdoManager.window[LsUdoManager.udoVariableName] || [];\r\n    }\r\n\r\n    public static get(key: string) {\r\n        const udo = LsUdoManager.udoData;\r\n\r\n        for (var i = udo.length - 1; i >= 0; i--) {\r\n            if (udo[i]?.[key]) {\r\n                return udo[i][key];\r\n            }\r\n        }\r\n    }\r\n\r\n    public static push(data: any) {\r\n        const udo = LsUdoManager.udoData;\r\n        if (Array.isArray(data)) {\r\n            udo.push(...data);\r\n        } else {\r\n            udo.push(data);\r\n        }\r\n    }\r\n}\r\n\r\nexport default LsUdoManager;"],"sourceRoot":""}