{"version":3,"file":"906.bundle.js","mappings":"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","sources":["webpack:///./components/help-option/index.js","webpack:///./components/more-ways-of-help/index.js","webpack:///./hooks/useHelper.js","webpack:///./hooks/useMessage.js","webpack:///./utils/analytics/fpti-helper.js","webpack:///./hooks/useTracking.js","webpack:///./utils/analytics/fpti-constants.js","webpack:///./utils/helper.js","webpack:///./utils/poll.js"],"sourcesContent":["import {\n ArrowRightIcon,\n BodyText,\n CaptionText,\n Card,\n Col,\n Icon,\n Link,\n} from '@paypalcorp/pp-react'\nimport React from 'react'\nimport { HELP_CHANNEL_DATA } from '../../utils/prop-type-shape'\nimport { componentNames, fptiTypes } from '../../utils/analytics/fpti-constants'\n\n// Hooks\nimport useTracking from '../../hooks/useTracking'\n\n// styles\nimport './help-option.less'\n\n// HelpOption Component to render individual help option card\nfunction HelpOption({ iconName, title, desc, target, url, id }) {\n const { trackClick } = useTracking()\n\n const handleOnClick = (event) => {\n event.preventDefault()\n\n // Track click event through FPTI\n trackClick({\n name: componentNames.MORE_WAYS_OF_HELP,\n type: fptiTypes.ON_CLICK,\n link: `help-option|${id}|clicked`,\n })\n\n window.open(url, target || '_blank')\n }\n\n return (\n \n handleOnClick(e)}\n className=\"hc_more-help-option__card\"\n data-testid=\"hc-help-option-card\"\n >\n
\n \n
\n
\n \n {title}\n \n \n {desc}\n \n
\n
\n \n \n \n
\n \n \n )\n}\n\nHelpOption.propTypes = HELP_CHANNEL_DATA\n\nexport default HelpOption\n","import { Col, HeadingText } from '@paypalcorp/pp-react'\nimport { Message } from '@paypalcorp/worldready-react'\nimport React, { useEffect } from 'react'\nimport { componentNames, fptiTypes } from '../../utils/analytics/fpti-constants'\nimport { MORE_WAYS_OF_HELP_DATA } from '../../utils/prop-type-shape'\nimport HelpOption from '../help-option'\n\nimport useTracking from '../../hooks/useTracking'\nimport './more-ways-of-help.less'\n// MoreWaysOfHelp Component - To display help contact channels\nfunction MoreWaysOfHelp({ helpChannels }) {\n const { trackActivity } = useTracking()\n\n // On component mount\n useEffect(() => {\n trackActivity({\n name: componentNames.MORE_WAYS_OF_HELP,\n type: fptiTypes.SUCCESS,\n })\n }, [trackActivity])\n\n const isHelpChannelsExist = () => {\n return Array.isArray(helpChannels) && helpChannels.length\n }\n\n const renderHelpOptions = () => {\n return (\n isHelpChannelsExist() && (\n <>\n \n \n \n \n \n {helpChannels.map((helpChannel) => (\n \n ))}\n \n )\n )\n }\n\n return <>{renderHelpOptions()}\n}\n\nMoreWaysOfHelp.propTypes = MORE_WAYS_OF_HELP_DATA\n\nexport default MoreWaysOfHelp\n","import { useCallback } from 'react'\nimport { JP, PERSONAL, BUSINESS, TECHNICAL } from '../constants'\nimport { useAppContext } from '../contexts/app-context'\n\nexport const useHelper = () => {\n const { reqContextData, pageProps } = useAppContext()\n\n const generateLinkWithCoBrand = useCallback(\n (link) => {\n if (reqContextData.coBrand) {\n return `/${reqContextData.coBrand}${link}`\n }\n return link\n },\n [reqContextData],\n )\n\n const isLoggedIn = useCallback(() => {\n return reqContextData.isLoggedIn\n }, [reqContextData])\n\n const getPageName = useCallback(() => {\n return pageProps.pageName\n }, [pageProps])\n\n const getDisplayName = useCallback(() => {\n const { user, country } = reqContextData\n if (user && typeof user === 'object') {\n if (country === JP) {\n return user.lastName || ''\n }\n return user.firstName || ''\n }\n return ''\n }, [reqContextData])\n\n const getUserUiExp = useCallback(() => {\n return reqContextData.userUiExp\n }, [reqContextData])\n\n const getHomePathByExperience = useCallback(\n (exp) => {\n const experience = exp || reqContextData.userUiExp\n const experiencePathMapping = {\n [PERSONAL]: '/cshelp/personal',\n [BUSINESS]: '/cshelp/business',\n [TECHNICAL]: '/cshelp/technical',\n }\n\n return experiencePathMapping[experience] || '/cshelp/home'\n },\n [reqContextData],\n )\n\n return {\n generateLinkWithCoBrand,\n isLoggedIn,\n getDisplayName,\n getPageName,\n getUserUiExp,\n getHomePathByExperience,\n }\n}\n","import { MessageFormat } from '@paypalcorp/worldready'\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react'\nimport { useContext, useCallback } from 'react'\n\nexport const useMessage = () => {\n const worldReady = useContext(WorldReadyContext)\n\n const getMessage = useCallback(\n (messageId, data) => {\n if (data) {\n return new MessageFormat(worldReady, { id: messageId }).format(data)\n }\n return new MessageFormat(worldReady, { id: messageId }).format()\n },\n [worldReady],\n )\n\n return { getMessage }\n}\n","// https://github.paypal.com/pages/Tracking-R/client-side-instrumentation/#record_ac\n\nimport { isRenderingOnServer } from '../helper'\nimport poll from '../poll'\nimport { FPTI_PREFIX, fptiTypes } from './fpti-constants'\n\n// Validate if analytics object is available on window.\nconst validateAnalyticsObject = () => {\n if (\n !(typeof window !== 'undefined' && window.PAYPAL && window.PAYPAL.analytics)\n ) {\n return Promise.reject()\n }\n return Promise.resolve()\n}\n\n/**\n * Function to poll and check if analytics is available on window. If available fire FPTI.\n * @param options\n * @param callback\n * @returns {Promise}\n */\nexport const trackingHelper = (options, callback) =>\n poll(validateAnalyticsObject, 4, 500)\n .then(() => {\n callback(options)\n })\n .catch(() => {})\n\nconst generateFptiTagValues = ({ name, type, event_name }, pageName) => {\n if (!name || !type || !pageName) {\n throw new Error('Missing name || type || pageName to generate FPTI data')\n }\n\n let fpti = {}\n switch (type) {\n case fptiTypes.SUCCESS: {\n fpti.page = `${FPTI_PREFIX}${name}`\n fpti.event_name = event_name\n ? event_name\n : `${name.replaceAll('-', '_')}_shown_in_${pageName}_page`\n break\n }\n\n case fptiTypes.ERROR: {\n fpti.page = `${FPTI_PREFIX}${name}-error`\n fpti.event_name = event_name\n ? event_name\n : `${name.replaceAll('-', '_')}_error_in_${pageName}_page`\n break\n }\n\n case fptiTypes.ON_CLICK: {\n fpti.page = `${FPTI_PREFIX}${name}`\n fpti.event_name = event_name\n ? event_name\n : `${name.replaceAll('-', '_')}_click_in_${pageName}_page`\n break\n }\n\n case fptiTypes.NO_DATA: {\n fpti.page = `${FPTI_PREFIX}${name}-no-data`\n fpti.event_name = event_name\n ? event_name\n : `${name.replaceAll('-', '_')}_no_data_to_render_in_${pageName}_page`\n break\n }\n\n case fptiTypes.VALIDATION_ERROR: {\n fpti.page = `${FPTI_PREFIX}${name}-validation-error`\n fpti.event_name = event_name\n ? event_name\n : `${name.replaceAll('-', '_')}_validation_error_in_${pageName}_page`\n break\n }\n\n case fptiTypes.SERVICE_ERROR: {\n fpti.page = `${FPTI_PREFIX}${name}-service-error`\n fpti.event_name = event_name\n ? event_name\n : `${name.replaceAll('-', '_')}_service_error_in_${pageName}_page`\n break\n }\n\n default: {\n fpti.event_name = ''\n break\n }\n }\n\n return fpti\n}\n\n// Get FPTI Options\n// eslint-disable-next-line complexity\nexport const mapFptiOptions = (fptiOptions, baseOptions) => {\n if (isRenderingOnServer()) {\n return {}\n }\n\n const FPTIObject = (window && window.fpti) || {}\n\n // generate FPTI tags and values\n\n const generatedOptions = generateFptiTagValues(\n fptiOptions,\n baseOptions.pageName,\n )\n\n // clearing out error props in case they exist\n FPTIObject.erpg = null\n FPTIObject.erfd = null\n FPTIObject.eccd = null\n\n // For setting link\n if (fptiOptions.link) {\n FPTIObject.link = fptiOptions.link || ''\n FPTIObject.pgln = `${generatedOptions.page}|${fptiOptions.link}`\n FPTIObject.pglk = `${baseOptions.pgrp}|${fptiOptions.link}`\n } else {\n FPTIObject.link = null\n FPTIObject.pgln = null\n FPTIObject.pglk = null\n }\n\n // Set event Type\n FPTIObject.e = fptiOptions.e || null\n\n // set article doc id\n FPTIObject.article_doc_id = fptiOptions.article_doc_id || null\n\n // add hpid if it is part of the options, else clear it\n FPTIObject.hpid = fptiOptions.hpid || null\n\n // add help_doc_id and help_component_ids if available in the options, else clear them\n FPTIObject.help_doc_id = fptiOptions.help_doc_id || ''\n FPTIObject.help_component_ids = fptiOptions.help_component_ids || ''\n\n // Search keyword\n FPTIObject.srch = fptiOptions.srch || null // TODO:Datamasking - check if data masking is required as we are doing in smarthelp\n\n // customer confirmed\n FPTIObject.link_name = fptiOptions.link_name || ''\n\n FPTIObject.channel_name = fptiOptions.channel_name || ''\n\n FPTIObject.rpa = fptiOptions.rpa || null\n\n FPTIObject.hcar = fptiOptions.hcar || null\n\n FPTIObject.hcaf = fptiOptions.hcaf || null\n\n FPTIObject.exp = fptiOptions.exp || null\n\n FPTIObject.articleContentExp = fptiOptions.articleContentExp || null\n\n // reset params added from activity widget\n FPTIObject.evnt_type = fptiOptions.evnt_type || null\n FPTIObject.widgetVariant = fptiOptions.widgetVariant || null\n FPTIObject.module = fptiOptions.module || null\n FPTIObject.product = fptiOptions.product || null\n\n return { ...FPTIObject, ...baseOptions, ...generatedOptions }\n}\n\n// // Track Impression event\nexport const trackImpression = (params) =>\n trackingHelper(params, (options) => {\n const fptiData = mapFptiOptions(options)\n return window.PAYPAL.analytics.Analytics.prototype.recordImpression({\n data: fptiData,\n })\n })\n\nexport const trackActivityEvent = (params) =>\n trackingHelper(params, (options) => {\n const fptiData = options\n fptiData.e = 'ac'\n window.PAYPAL.analytics.Analytics.prototype.recordEvent(\n fptiData.event_name,\n { data: fptiData },\n )\n })\n\n// Track Click Event\nexport const trackClickEvent = (params) =>\n trackingHelper(params, (options) => {\n const fptiData = options\n fptiData.e = 'cl'\n window.PAYPAL.analytics.Analytics.prototype.recordEvent(\n fptiData.event_name,\n { data: fptiData },\n )\n })\n\n// // Track Javascript Error\n// https://github.paypal.com/pages/Tracking-R/client-side-instrumentation/#record_error\nexport const trackJSError = (errorObject) => {\n if (window.PAYPAL && window.PAYPAL.trackJSError) {\n window.PAYPAL.trackJSError(errorObject)\n }\n // PAYPAL.analytics.logJSError(errorObject, ['TopicTree', ['errorType']]);\n}\n","/* eslint-disable no-shadow */\nimport { useCallback, useMemo } from 'react'\nimport {\n mapFptiOptions,\n trackActivityEvent,\n trackClickEvent,\n} from '../utils/analytics/fpti-helper'\nimport serverData from '../utils/server-data'\nimport { isRenderingOnServer } from '../utils/helper'\nimport {\n COMPONENT_NAME,\n FPTI_PREFIX,\n fptiTypes,\n} from '../utils/analytics/fpti-constants'\n\nconst mapBaseOptions = (options) => {\n if (isRenderingOnServer()) {\n return {}\n }\n\n const { pageProps, reqContextData } = serverData\n const { pageName } = pageProps\n const { userUiExp } = reqContextData\n\n const baseOptions = {\n ...options,\n pgrp: `${FPTI_PREFIX}${pageName}`,\n comp: COMPONENT_NAME,\n pageName,\n exp: userUiExp, // This the value that holds what the exp the user is viewing on the exp that the user is on in the client side.\n }\n\n return baseOptions\n}\n\n// hook-based, memoized FPTI tracker for functional components\nconst useTracking = (options) => {\n const mappedBaseOptions = useMemo(() => {\n return mapBaseOptions(options)\n }, [options])\n\n const trackClick = useCallback(\n (options) => {\n const mergedOptions = {\n ...mapFptiOptions(options, mappedBaseOptions),\n }\n\n trackClickEvent(mergedOptions)\n },\n [mappedBaseOptions],\n )\n\n const trackActivity = useCallback(\n (options) => {\n const mergedOptions = {\n ...mapFptiOptions(options, mappedBaseOptions),\n }\n\n trackActivityEvent(mergedOptions)\n },\n [mappedBaseOptions],\n )\n\n const fptiTypeByStatusCode = useCallback((statusCode) => {\n if (statusCode) {\n if (statusCode === 404) {\n return fptiTypes.NO_DATA\n }\n\n if (statusCode === 400) {\n return fptiTypes.VALIDATION_ERROR\n }\n\n if (statusCode === 200) {\n return fptiTypes.SUCCESS\n }\n\n if (statusCode >= 500) {\n return fptiTypes.SERVICE_ERROR\n }\n }\n return fptiTypes.ERROR\n }, [])\n\n const trackErrorFPTI = useCallback((data, componentName) => {\n if (!data || typeof data !== 'object' || !componentName) {\n throw new Error('Missing data || componentName - In firing error FPTI')\n }\n\n const { isError, statusCode } = data\n const type = isError && fptiTypeByStatusCode(statusCode)\n return trackActivity({ name: componentName, type })\n }, [])\n\n return {\n trackClick,\n trackActivity,\n fptiTypeByStatusCode,\n trackErrorFPTI,\n }\n}\n\n// non-hook-based FPTI tracker for class components\n// TODO: Still under work\nexport const fpti = (componentOptions) => {\n const mappedComponentOptions = mapBaseOptions(componentOptions)\n\n const fptiClick = (options) => {\n const mergedOptions = {\n ...mapBaseOptions(options),\n ...mappedComponentOptions,\n }\n trackActivityEvent(mergedOptions, mappedComponentOptions)\n }\n\n return {\n fptiClick,\n }\n}\n\nexport default useTracking\n","import { POSITIONS } from '../../constants/index'\n\nexport const FPTI_PREFIX = 'main:help:center:'\n\nexport const fptiTypes = {\n SUCCESS: 'success',\n ERROR: 'error',\n NO_DATA: 'no-data',\n ON_CLICK: 'on-click',\n VALIDATION_ERROR: 'valdation-error',\n SERVICE_ERROR: 'service-error',\n}\n\n// Feature/ component names\nexport const componentNames = {\n ARTICLE_CONTENT: 'article-content',\n RELATED_ARTICLES: 'related-articles',\n TOPIC_TREE: 'topic-tree',\n HERO_MODULE: 'hero-module',\n SEARCH_BAR: 'search-bar',\n RECOMMENDED_SOLUTIONS: 'recommended-solutions',\n SEARCH_AUTO_SUGGESTIONS: 'search-auto-suggestions',\n SEARCH_TOP_POPULAR_ARTICLES: 'search-top-popular-articles',\n BREADCRUMB: 'breadcrumb',\n MORE_WAYS_OF_HELP: 'more-ways-of-help',\n ARTICLE_FEEDBACK: 'article-feedback',\n COMMUNITY_POSTS: 'community-posts',\n TAB_SWITCHER: 'tab-switcher',\n LOGIN_PROMPT: 'login-prompt',\n QUALTRICS_SURVEY: 'qualtrics-survey',\n DISPUTE_TRACKER: 'dispute-tracker',\n REFUND_TRACKER: 'refund-tracker',\n CURRENCY_CONVERTER: 'currency-converter',\n ALERT: 'alert',\n COMPLAINTS: 'complaints',\n SUBMIT_COMPLAINT: 'submit-complaint',\n COMPLAINTS_SUMMARY_SHEET: 'complaints-summary-sheet',\n COMPLAINTS_LOGIN_SHEET: 'complaints-login-sheet',\n INTENT_CHATBOT_PROMPT: 'intent-chatbot-prompt',\n CHAT_BOT: 'chat-bot',\n ASYNC_CHAT_BOT: 'async-chat-bot',\n PAYPAL_ASSISTANT: 'paypal-assistant',\n ARTICLE_INTENTS: 'article-intents',\n ACTIVITY_WIDGET: 'activity-widget',\n}\n\nexport const ARTICLE_INTENTS_NO_DATA_EVENT =\n 'article_intents_no_data_in_article_page'\n\nexport const COMPONENT_NAME = 'helpcenternodeweb'\n\nexport const AW_POSITION_EVENTS = {\n [POSITIONS.TOP]: 'activity_widget_shown_at_top',\n [POSITIONS.BOTTOM]: 'activity_widget_shown_at_bottom',\n}\n","import _isEmpty from 'lodash/isEmpty'\nimport _isString from 'lodash/isString'\nimport { YT_IFRAME_SCRIPT_URL } from '../constants'\n\nconst maskRegEx =\n /(\\d\\d+|(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,}))/g // eslint-disable-line\nconst maskPattern = '#########'\n\n// Function to filter list of words from url for SEO purpose\nexport const filterURLWordSEO = (articleTitle) => {\n //TODO:: check on this later\n // try {\n // if (true) {\n // // Will remove special character from the string to filter out words\n // const specialCharactersToReplace = /[?.,!{}()\"-]/g; // Add characters here to remove it from the article\n // const seoWordsLowerCase = seoURlFilter.filterWords.map((item) => item.toLowerCase());\n // return articleTitle\n // .replace(specialCharactersToReplace, '')\n // .toLowerCase()\n // .split(' ')\n // .filter((item) => !seoWordsLowerCase.includes(item))\n // .join(' ');\n // }\n // return articleTitle;\n // } catch (e) {\n // return articleTitle;\n // }\n return articleTitle\n}\n\n/**\n Function to convert a string to a URL-friendly format by replacing \n special characters with hyphens and removing all other special characters.\n 1) .replace(/ /g, '-'): This replaces all occurrences of space characters with hyphens.\n 2) .replace(/[&\\/\\\\#, +()$~%.'\":*?<>{}]/g, ''): This removes all special characters that are not allowed in URLs.\n 3) .replace(/[/\\\\]/g, '-'): This replaces forward slashes and backslashes with hyphens.\n * @param {*} title \n * @returns \n */\nexport const getFaqUrlFromTitle = (title) => {\n return encodeURIComponent(\n title &&\n filterURLWordSEO(title)\n .replace(/ /g, '-')\n .replace(/[&\\/\\\\#, +()$~%.'\":*?<>{}]/g, '')\n .replace(/[/\\\\]/g, '-')\n .toLowerCase(),\n )\n}\n\nexport const getTitleForArticleUrl = (title, articleId) => {\n return decodeURIComponent(\n `${getFaqUrlFromTitle(filterURLWordSEO(title))}-${articleId.toLowerCase()}`,\n )\n}\n\nexport const isRenderingOnServer = () => {\n return typeof window === 'undefined'\n}\n\n// Filter top contact reason response data\nexport const filterSearchResponse = (responseData = {}, options) => {\n const { data } = responseData\n let dataSet = data\n if (!Array.isArray(data)) {\n return []\n }\n\n if (options && options.maxResults) {\n dataSet = data.slice(0, options.maxResults)\n }\n\n return dataSet.map((article, index) => ({\n id: `suggestion_${index + 1}`,\n value: article.articleTitle || article.document_title,\n docid: article.articleId || article.document_id,\n rank: article.rank || '',\n }))\n}\n\nexport const getSanitizedValue = (value) => {\n const returnValue = value ? value.trim() : ''\n try {\n return encodeURIComponent(returnValue)\n } catch (error) {\n return returnValue\n }\n}\n\nexport function dataMasking(data) {\n if (_isString(data)) {\n return data.replace(maskRegEx, maskPattern)\n }\n\n return data\n}\n\n/*\n * applicable only for iframe having source of videos hosted on paypalobjects\n * @param { object } iframe html element\n * @returns { string } html string\n */\nexport const getArticleVideoIframeSrcDoc = (iframeElement) => {\n const { height, width, src } = iframeElement\n return ``\n}\n\n/**\n * load Youtube Iframe API asynchronously\n */\nexport const loadYTIframeScript = () => {\n const script = document.createElement('script')\n script.src = YT_IFRAME_SCRIPT_URL\n script.async = true\n document.body.appendChild(script)\n}\n\n/**\n * Function to generate the Complaints webform URL using selected complaint reason and locale\n * @param {*} complaintReason\n * @param {*} locale\n */\nexport const getComplaintsWebformUrl = (complaintReason, locale) => {\n return `/smarthelp/contact-us/complaints?complaint_reason=${complaintReason}&locale.x=${locale}`\n}\n","/* eslint-disable promise/no-return-wrap */\n// Polling + exponential backoff function\n// eslint-disable-next-line no-promise-executor-return\nconst waitForTimeout = (duration) =>\n new Promise((res) => setTimeout(res, duration))\n\nexport default function poll(customDataValidator, retries = 1, delay = 200) {\n if (!retries || typeof customDataValidator !== 'function') {\n return Promise.reject(false)\n }\n\n return customDataValidator()\n .then((response) => Promise.resolve(response))\n .catch((err) => {\n if (retries) {\n return waitForTimeout(delay).then(() =>\n poll(customDataValidator, retries - 1, delay * 2),\n )\n }\n return Promise.reject(err)\n })\n}\n\n/*\nEXAMPLE of how to use this file:\n\nvar data; <- variable that's defined but has no data in it yet.\n\n// Let's simulate server lag time.\nsetTimeout(() => {\n data = 'hello!!!';\n}, 10);\n\n// This is a custom validator function which makes it so our poll function can be super generic since it doesn't care about how to validate data\nfunction testForData() {\n return (data) ? Promise.resolve(data) : Promise.reject(false);\n}\n\npoll(testForData, 3, 100)\n .then((resp) => console.log(resp))\n .catch((err) => console.log(err));\n\n*/\n"],"names":["HelpOption","iconName","title","desc","target","url","id","trackClick","useTracking","sm","lg","className","onClick","e","preventDefault","name","componentNames","type","fptiTypes","link","window","open","size","strong","href","propTypes","HELP_CHANNEL_DATA","MoreWaysOfHelp","helpChannels","trackActivity","useEffect","Array","isArray","length","xs","as","map","helpChannel","key","MORE_WAYS_OF_HELP_DATA","useHelper","useAppContext","reqContextData","pageProps","generateLinkWithCoBrand","useCallback","coBrand","isLoggedIn","getPageName","pageName","getDisplayName","user","country","JP","lastName","firstName","getUserUiExp","userUiExp","getHomePathByExperience","exp","experience","PERSONAL","BUSINESS","TECHNICAL","useMessage","worldReady","useContext","WorldReadyContext","getMessage","messageId","data","MessageFormat","format","validateAnalyticsObject","PAYPAL","analytics","Promise","resolve","reject","trackingHelper","options","callback","poll","then","catch","mapFptiOptions","fptiOptions","baseOptions","isRenderingOnServer","FPTIObject","fpti","generatedOptions","event_name","Error","page","FPTI_PREFIX","replaceAll","generateFptiTagValues","erpg","erfd","eccd","pgln","pglk","pgrp","article_doc_id","hpid","help_doc_id","help_component_ids","srch","link_name","channel_name","rpa","hcar","hcaf","articleContentExp","evnt_type","widgetVariant","module","product","mappedBaseOptions","useMemo","serverData","comp","COMPONENT_NAME","mapBaseOptions","mergedOptions","fptiData","Analytics","prototype","recordEvent","fptiTypeByStatusCode","statusCode","trackErrorFPTI","componentName","isError","SUCCESS","ERROR","NO_DATA","ON_CLICK","VALIDATION_ERROR","SERVICE_ERROR","ARTICLE_CONTENT","RELATED_ARTICLES","TOPIC_TREE","HERO_MODULE","SEARCH_BAR","RECOMMENDED_SOLUTIONS","SEARCH_AUTO_SUGGESTIONS","SEARCH_TOP_POPULAR_ARTICLES","BREADCRUMB","MORE_WAYS_OF_HELP","ARTICLE_FEEDBACK","COMMUNITY_POSTS","TAB_SWITCHER","LOGIN_PROMPT","QUALTRICS_SURVEY","DISPUTE_TRACKER","REFUND_TRACKER","CURRENCY_CONVERTER","ALERT","COMPLAINTS","SUBMIT_COMPLAINT","COMPLAINTS_SUMMARY_SHEET","COMPLAINTS_LOGIN_SHEET","INTENT_CHATBOT_PROMPT","CHAT_BOT","ASYNC_CHAT_BOT","PAYPAL_ASSISTANT","ARTICLE_INTENTS","ACTIVITY_WIDGET","ARTICLE_INTENTS_NO_DATA_EVENT","AW_POSITION_EVENTS","POSITIONS","maskRegEx","maskPattern","getFaqUrlFromTitle","encodeURIComponent","replace","toLowerCase","getTitleForArticleUrl","articleId","decodeURIComponent","filterSearchResponse","dataSet","maxResults","slice","article","index","value","articleTitle","document_title","docid","document_id","rank","getSanitizedValue","returnValue","trim","error","dataMasking","_isString","getArticleVideoIframeSrcDoc","iframeElement","height","width","src","loadYTIframeScript","script","document","createElement","YT_IFRAME_SCRIPT_URL","async","body","appendChild","getComplaintsWebformUrl","complaintReason","locale","waitForTimeout","duration","res","setTimeout","customDataValidator","retries","delay","response","err"],"sourceRoot":""}