{"version":3,"file":"709.bundle.js","mappings":"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","sources":["webpack:///./components/search-bar/index.js","webpack:///./constants/api.js","webpack:///./hooks/useAPI.js"],"sourcesContent":["// styles\nimport {\n AutoSuggest,\n BodyText,\n CloseSmIcon,\n Link,\n SearchIcon,\n SuggestionList,\n} from '@paypalcorp/pp-react'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport * as constants from '../../constants/index'\nimport { componentNames, fptiTypes } from '../../utils/analytics/fpti-constants'\nimport './search-bar.less'\n// Utils\nimport {\n filterSearchResponse,\n getFaqUrlFromTitle,\n getSanitizedValue,\n isSearchMinMaxCharValid,\n} from '../../utils/helper'\n\nimport { createMasker } from '@paypalcorp/msgcommon-data'\nimport classNames from 'classnames'\nimport _get from 'lodash/get'\nimport _isEmpty from 'lodash/isEmpty'\nimport { API_NAMES } from '../../constants/api'\nimport { useAppContext } from '../../contexts/app-context'\nimport { useHelper } from '../../hooks/useHelper'\n// Hooks\nimport useAPI from '../../hooks/useAPI'\nimport { useMessage } from '../../hooks/useMessage'\nimport useTracking from '../../hooks/useTracking'\n\n// eslint-disable-next-line max-statements\nfunction SearchBar(props) {\n const { searchQuery, appliedFilter } = props\n\n // Initial State\n const [inputText, setInputText] = useState(searchQuery || '')\n const [suggestions, setSuggestions] = useState([])\n const [inputFocus, setInputFocus] = useState(false)\n const [currentChar, setCurrentChar] = useState(searchQuery?.length || 0)\n const [isMaxCharError, setIsMaxCharError] = useState(false)\n const [isMinCharError, setIsMinCharError] = useState(false)\n const [isDisplayPopularArticles, setIsDisplayPopularArticles] =\n useState(false)\n const [isLoadingSuggestions, setisLoadingSuggestions] = useState(false)\n const [autoSuggestionsErrorMsg, setAutoSuggestionsErrorMsg] = useState('')\n const [suggestionsCache, setSuggestionsCache] = useState({})\n\n // Consume hooks\n const { getMessage } = useMessage()\n const { trackActivity, trackClick } = useTracking()\n const { generateLinkWithCoBrand } = useHelper()\n const { postAPI } = useAPI()\n\n // App Context\n const appCtx = useAppContext()\n const {\n pageProps: {\n apiData: { searchPopularArticles: defaultPopularArticles },\n pageName,\n },\n reqContextData: { country },\n } = appCtx\n const masker = useMemo(() => createMasker(country), [country])\n\n // i18n Message constants\n const i18nMessages = useMemo(() => {\n return {\n searchPlaceHolder: getMessage('app.helpcenter.search'),\n viewSearchResult: getMessage('app.helpcenter.viewSearchResult'),\n autoSuggestionTopHeader: getMessage('app.helpcenter.helpCenterResults'),\n maxCharError: getMessage('app.helpcenter.maxCharError'),\n minCharError: getMessage('app.helpcenter.minCharError'),\n noSuggestionError: getMessage('app.helpcenter.noSuggestionsFound'),\n }\n }, [])\n\n // Variables\n let suggestSelected = false\n\n const filteredDefaultPopularArticles = useMemo(\n () => filterSearchResponse(defaultPopularArticles, { maxResults: 5 }),\n [defaultPopularArticles],\n )\n\n const isSearchPage = useMemo(\n () => pageName === constants.pageNames.SEARCH,\n [pageName],\n )\n\n const returnSanitizedValue = (val) => {\n return getSanitizedValue(masker, val)\n }\n\n // Fetch autocomplete results from search API\n const fetchAutocompleteResults = async (searchString) => {\n try {\n const { data } = await postAPI(API_NAMES.SEARCH_SUGGESTIONS, {\n body: {\n searchString,\n },\n })\n const filteredData = filterSearchResponse({ data })\n return filteredData\n } catch (e) {\n return []\n }\n }\n\n // update the auto complete results, condition to check the same query from cache\n const updateSuggestions = async (query) => {\n const formattedSuggestionsArr = [\n {\n id: 'helpCenterSearchResults',\n title: i18nMessages.autoSuggestionTopHeader,\n },\n ]\n // Check if suggestions exists in cache from the previous search queries\n if (query in suggestionsCache) {\n formattedSuggestionsArr[0].suggestions =\n suggestionsCache[query][0].suggestions\n setisLoadingSuggestions(false)\n return setSuggestions(formattedSuggestionsArr)\n }\n const newResults = await fetchAutocompleteResults(query)\n\n if (!(Array.isArray(newResults) && newResults.length)) {\n setAutoSuggestionsErrorMsg(i18nMessages.noSuggestionError)\n trackActivity({\n name: componentNames.SEARCH_AUTO_SUGGESTIONS,\n type: fptiTypes.NO_DATA,\n link: 'search-autocomplete-no-suggestions-found',\n srch: returnSanitizedValue(query),\n })\n }\n\n formattedSuggestionsArr[0].suggestions = newResults\n suggestionsCache[query] = formattedSuggestionsArr\n setSuggestionsCache({ ...suggestionsCache })\n setisLoadingSuggestions(false)\n setSuggestions(formattedSuggestionsArr)\n return trackActivity({\n name: componentNames.SEARCH_AUTO_SUGGESTIONS,\n type: fptiTypes.SUCCESS,\n link: `search-autocomplete-suggestions-shown|suggestions-length-${newResults.length}`,\n srch: returnSanitizedValue(query),\n })\n }\n\n // show the popular articles when user focus on the search input box\n const showPopularArticles = () => {\n setIsDisplayPopularArticles(true)\n }\n\n // hide the popular articles when user clears the search keyword in the input box\n const hidePopularArticles = () => {\n setIsDisplayPopularArticles(false)\n }\n\n // Method to check the minimum search characters\n const hasMinimimSearchCharacters = () => {\n const sanitizedInputText = inputText ? inputText.trim() : ''\n return sanitizedInputText.length >= constants.MIN_LENGTH_SEARCH_CHAR\n }\n\n // condition checking to enable the popular articles on mouseover when there is no search query\n const isTopPopularArticlesPresent = () => {\n return (\n !hasMinimimSearchCharacters() &&\n Array.isArray(filteredDefaultPopularArticles) &&\n filteredDefaultPopularArticles.length > 0\n )\n }\n\n // on change event handler\n const onChange = (event) => {\n const { value } = event.target\n // To handle empty spaces with out any string on the searchbar\n if (_isEmpty(value.trim()) && inputText.length <= 0) {\n return\n }\n\n if (event.type === 'change') {\n setInputText(value)\n setCurrentChar(value.length)\n }\n\n if (value && value.length >= constants.MAX_LENGTH_SEARCH_CHAR) {\n setIsMaxCharError(true)\n trackActivity({\n name: componentNames.SEARCH_BAR,\n type: fptiTypes.ON_CLICK,\n link: 'search-char-max-limit-error',\n srch: returnSanitizedValue(inputText),\n })\n setSuggestions([])\n } else {\n setIsMaxCharError(false)\n }\n if (value && value.length > 0) {\n hidePopularArticles()\n }\n }\n\n // on Blur event handler\n const onBlur = () => {\n if (inputText.length === 0) {\n setInputFocus(false)\n }\n if (isTopPopularArticlesPresent()) {\n hidePopularArticles()\n }\n }\n\n // on Focus event handler\n const onFocus = (event) => {\n event.preventDefault()\n event.stopPropagation()\n setInputFocus(true)\n\n // FPTI: click on the search box\n trackClick({\n name: componentNames.SEARCH_BAR,\n type: fptiTypes.ON_CLICK,\n link: 'search-bar-focused',\n })\n\n // Default popular articles handler\n if (isTopPopularArticlesPresent()) {\n showPopularArticles()\n\n // FPTI: quicklinks for common questions shown activity\n trackActivity({\n name: componentNames.SEARCH_TOP_POPULAR_ARTICLES,\n type: fptiTypes.SUCCESS,\n link: 'search-bar-popular-articles-quicklinks-shown',\n })\n }\n }\n\n const goToSearchResultsPage = () => {\n const channelStr =\n appliedFilter && appliedFilter.value\n ? `&channel=${appliedFilter.value}`\n : ''\n const returnUrl = `${generateLinkWithCoBrand(\n `/cshelp/search?q=${returnSanitizedValue(inputText)}${channelStr}`,\n )}`\n window.location = returnUrl\n }\n\n const submitForm = (e) => {\n e.stopPropagation()\n e.preventDefault()\n\n // Validation check on input search query\n const searchMinMaxCharValidation = isSearchMinMaxCharValid(inputText)\n if (!searchMinMaxCharValidation.isValid) {\n if (searchMinMaxCharValidation.type === 'MIN_ERROR') {\n return setIsMinCharError(true)\n }\n if (searchMinMaxCharValidation.type === 'MAX_ERROR') {\n return setIsMaxCharError(true)\n }\n return null\n }\n\n // Empty search text will not fire FPTI request\n trackClick({\n name: componentNames.SEARCH_BAR,\n type: fptiTypes.ON_CLICK,\n link: 'search-input-entered-full-search',\n srch: returnSanitizedValue(inputText),\n })\n\n // go to the full search help page\n return goToSearchResultsPage()\n }\n\n // render the character count place holder\n const renderCharCount = () => {\n if (inputText.length > 0) {\n return (\n \n {`${currentChar}/${constants.MAX_LENGTH_SEARCH_CHAR}`}\n \n )\n }\n return ''\n }\n\n // clear the search\n const clearSearch = () => {\n trackClick({\n name: componentNames.SEARCH_BAR,\n type: fptiTypes.ON_CLICK,\n link: 'search-bar|clear-button|clicked',\n })\n setInputText('')\n setIsMaxCharError(false)\n setIsMinCharError(false)\n setSuggestions([])\n setInputFocus(false)\n setAutoSuggestionsErrorMsg('')\n }\n\n // Handle the clear(x) icon key press\n const handleClearKeyPress = (event) => {\n if (event.key === 'Enter') {\n clearSearch()\n }\n }\n\n // on KeyUp event handler\n const onKeyUp = (event) => {\n if (event.key === 'Enter') {\n event.target.blur()\n submitForm(event)\n }\n }\n\n // render the clear button\n const renderClearButton = () => {\n if (!inputText.trim()) {\n return null\n }\n return (\n handleClearKeyPress(event)}\n onClick={() => clearSearch()}\n >\n \n \n )\n }\n\n // call the autocomplete API when onSuggestionsFetchRequested\n const onSuggestionsFetchRequested = (newValue) => {\n // Cancel fetching the auto-complete event after selecting one of the suggestions\n if (suggestSelected) {\n suggestSelected = false\n return\n }\n\n // Disable top article suggestions in search page\n if (isSearchPage) {\n return\n }\n\n const sanitizedValue = newValue.trim()\n if (\n _isEmpty(sanitizedValue) ||\n sanitizedValue.length <= constants.MIN_LENGTH_SEARCH_CHAR\n ) {\n return\n }\n\n if (\n sanitizedValue &&\n sanitizedValue.length >= constants.MAX_LENGTH_SEARCH_CHAR\n ) {\n setSuggestions([])\n return\n }\n\n setisLoadingSuggestions(true)\n setAutoSuggestionsErrorMsg('')\n updateSuggestions(sanitizedValue)\n\n if (isMaxCharError || isMinCharError) {\n setAutoSuggestionsErrorMsg('')\n }\n return\n }\n\n // On suggestion selected logic\n const onSuggestionSelected = (event, suggestion) => {\n event.preventDefault()\n event.stopPropagation()\n\n // articles clicked from auto search. Useful for qulatrics intercepts\n suggestSelected = true // Mark one suggestion be selected\n const formattedTitle = getFaqUrlFromTitle(suggestion.value)\n const articleId = _get(suggestion, 'docid') || ''\n const rank = _get(suggestion, 'rank')\n const searchResultsLength = isDisplayPopularArticles\n ? suggestions.length\n : suggestions[0].suggestions.length\n\n if (isDisplayPopularArticles) {\n trackClick({\n name: componentNames.SEARCH_TOP_POPULAR_ARTICLES,\n type: fptiTypes.ON_CLICK,\n link: `search-bar|popular-quick-link|clicked|${articleId}`,\n help_doc_id: articleId,\n })\n } else {\n trackClick({\n name: componentNames.SEARCH_AUTO_SUGGESTIONS,\n type: fptiTypes.ON_CLICK,\n link: `search-auto-complete-suggestion|clicked|${articleId}|rank-${rank}|suggestions-length-${searchResultsLength}`,\n help_doc_id: articleId,\n srch: returnSanitizedValue(inputText),\n })\n }\n\n const redirectUrl = `${generateLinkWithCoBrand(\n `/cshelp/article/${formattedTitle}-${articleId}`,\n )}`\n window.location = redirectUrl\n }\n\n const renderAutoSuggestionArticlesList = () => {\n return (\n \n )\n }\n\n // Render default top popular articles\n const renderPopularArticlesSuggestionList = () => {\n // Disable top article suggestions in search page\n if (isSearchPage) {\n return null\n }\n\n if (inputFocus && inputText.length === 0 && isTopPopularArticlesPresent()) {\n return (\n \n \n \n )\n }\n return null\n }\n\n // Renders \"View all Results\" link in the suggestions footer section\n const suggestionListFooter = (\n {\n // FPTI: click on the suggestion selected\n trackClick({\n name: componentNames.SEARCH_AUTO_SUGGESTIONS,\n type: fptiTypes.ON_CLICK,\n link: 'auto-suggestions|view-all-results|clicked',\n srch: returnSanitizedValue(inputText),\n })\n }}\n size=\"sm\"\n >\n {i18nMessages.viewSearchResult}\n \n )\n\n const getErrorText = () => {\n if (isMinCharError) {\n return i18nMessages.minCharError\n }\n if (isMaxCharError) {\n return i18nMessages.maxCharError\n }\n return ''\n }\n\n // component onmount\n useEffect(() => {\n // track fpti\n trackActivity({ name: componentNames.SEARCH_BAR, type: fptiTypes.SUCCESS })\n }, [trackActivity])\n\n useEffect(() => {\n if (isSearchPage) {\n const searchMinMaxCharValidation = isSearchMinMaxCharValid(inputText)\n if (!searchMinMaxCharValidation.isValid) {\n if (searchMinMaxCharValidation.type === 'MIN_ERROR') {\n setIsMinCharError(true)\n } else if (searchMinMaxCharValidation.type === 'MAX_ERROR') {\n setIsMaxCharError(true)\n }\n }\n }\n }, [])\n\n return (\n
\n
submitForm(e)}>\n
\n onFocus(event)}\n fetchSuggestions={onSuggestionsFetchRequested}\n autoComplete=\"off\"\n suggestionList={renderAutoSuggestionArticlesList()}\n id=\"searchInput\"\n name=\"searchInput\"\n label={i18nMessages.searchPlaceHolder}\n debounceTimeout={300}\n maxLength={constants.MAX_LENGTH_SEARCH_CHAR}\n value={inputText}\n error={isMaxCharError || isMinCharError}\n suggestionListErrorMessage={autoSuggestionsErrorMsg}\n suggestionListContainerClassName=\"hc_search-bar-suggestions__container\"\n suggestionListFooter={\n !isDisplayPopularArticles && suggestionListFooter\n }\n suggestionListFooterClassName=\"autosuggestion__view-results-footer\"\n errorText={getErrorText()}\n leftIcon={\n \n }\n rightIcon={\n
\n {renderCharCount()}\n {renderClearButton()}\n
\n }\n data-testid=\"hc-autosuggestion-container\"\n isLabelHidden={false}\n isLoadingSuggestions={isLoadingSuggestions}\n />\n {/* Render Suggestions List */}\n {renderPopularArticlesSuggestionList()}\n
\n
\n
\n )\n}\n\nexport default SearchBar\n","export const CHECK_BOT_ELIGIBILITY_URL = '/api/check-bot-eligibility'\nexport const MMT_CONVERSATIONS_URL = '/api/mmt-conversations'\nexport const OCP_SET_CONTEXT_URL = '/api/ocp-set-context'\nexport const UPDATE_BNA_URL = '/api/update-bna'\nexport const FULL_SEARCH_URL = '/api/search'\nexport const AI_SEARCH_STREAM_URL = '/api/get-search-ai-answer'\nexport const SEARCH_SUGGESTIONS = '/api/search-auto-complete'\nexport const SEND_EMAIL = '/api/send-email'\nexport const TOPIC_TREE_URL = '/api/topic-tree'\nexport const STEPUP_AUTH_VALIDATION = '/api/stepup-login-validate'\nexport const STEP_UP_RISK_CHECK = '/api/stepup-riskcheck'\nexport const STEP_UP_AUTH_URL = '/api/stepup-anw'\nexport const SEND_WEBFORM = '/api/send-webform'\n\nexport const API_NAMES = {\n CHECK_BOT_ELIGIBILITY: 'CHECK_BOT_ELIGIBILITY',\n MMT_CONVERSATIONS: 'MMT_CONVERSATIONS',\n OCP_SET_CONTEXT: 'OCP_SET_CONTEXT',\n UPDATE_BNA: 'UPDATE_BNA',\n FULL_SEARCH: 'FULL_SEARCH',\n AI_SEARCH_STREAM: 'AI_SEARCH_STREAM',\n SEARCH_SUGGESTIONS: 'SEARCH_SUGGESTIONS',\n SEND_EMAIL: 'SEND_EMAIL',\n TOPIC_TREE: 'TOPIC_TREE',\n STEPUP_AUTH_VALIDATION: 'STEPUP_AUTH_VALIDATION',\n STEP_UP_RISK_CHECK: 'STEP_UP_RISK_CHECK',\n STEP_UP_AUTH: 'STEP_UP_AUTH',\n SEND_WEBFORM: 'SEND_WEBFORM',\n}\n\nexport const API_URLS = {\n [API_NAMES.CHECK_BOT_ELIGIBILITY]: CHECK_BOT_ELIGIBILITY_URL,\n [API_NAMES.MMT_CONVERSATIONS]: MMT_CONVERSATIONS_URL,\n [API_NAMES.OCP_SET_CONTEXT]: OCP_SET_CONTEXT_URL,\n [API_NAMES.UPDATE_BNA]: UPDATE_BNA_URL,\n [API_NAMES.FULL_SEARCH]: FULL_SEARCH_URL,\n [API_NAMES.AI_SEARCH_STREAM]: AI_SEARCH_STREAM_URL,\n [API_NAMES.SEARCH_SUGGESTIONS]: SEARCH_SUGGESTIONS,\n [API_NAMES.SEND_EMAIL]: SEND_EMAIL,\n [API_NAMES.TOPIC_TREE]: TOPIC_TREE_URL,\n [API_NAMES.STEPUP_AUTH_VALIDATION]: STEPUP_AUTH_VALIDATION,\n [API_NAMES.STEP_UP_RISK_CHECK]: STEP_UP_RISK_CHECK,\n [API_NAMES.STEP_UP_AUTH]: STEP_UP_AUTH_URL,\n [API_NAMES.SEND_WEBFORM]: SEND_WEBFORM,\n}\n","import axios from 'axios'\n\nimport { useCallback } from 'react'\nimport { API_URLS } from '../constants/api'\nimport { useAppContext } from '../contexts/app-context'\n\n/**\n * attach query params on api url\n * @param { string } url\n * @param { object } queryParams\n * @returns\n */\nconst attachQueryParams = (url, queryParams = {}) => {\n url += '?'\n for (const param in queryParams) {\n url += `${encodeURIComponent(param)}=${encodeURIComponent(\n queryParams[param],\n )}&`\n }\n url = url.slice(0, -1)\n return url\n}\n\n/**\n * For any api calls from UI\n */\nconst useAPI = () => {\n const {\n reqContextData: { _csrf },\n } = useAppContext()\n // const { trackActivity } = useTracking()\n\n /**\n * For any GET API call invocation from UI\n * @param { string } url\n * @param { object } query params\n * @returns { Promise } API response\n */\n const getAPI = useCallback(\n async (\n apiName,\n options = { body: {}, queryParams: {}, fptiParams: {} },\n ) => {\n // const hc_event_info = options?.fptiParams?.hc_event_info || null\n try {\n // trackActivity({\n // name: apiName,\n // type: fptiTypes.SERVICE_INIT,\n // hc_event_info,\n // })\n const { queryParams = {} } = options\n let url = API_URLS[apiName]\n url = attachQueryParams(url, queryParams)\n const response = await axios.get(`/cshelp${url}`)\n // trackActivity({\n // name: apiName,\n // type: fptiTypes.SERVICE_SUCCESS,\n // hc_event_info,\n // })\n return response\n } catch (error) {\n // trackActivity({\n // name: apiName,\n // type: fptiTypes.SERVICE_ERROR,\n // hc_event_info,\n // })\n throw error\n }\n },\n [],\n )\n\n /**\n * For any POST API call invocation from UI\n * @param { string } url\n * @param { object } request body and query params\n * @returns { Promise } API response\n */\n const postAPI = useCallback(\n async (\n apiName,\n options = { body: {}, queryParams: {}, fptiParams: {} },\n ) => {\n // const hc_event_info = options?.fptiParams?.hc_event_info || null\n try {\n // trackActivity({\n // name: apiName,\n // type: fptiTypes.SERVICE_INIT,\n // hc_event_info,\n // })\n const { body = {}, queryParams = {} } = options\n let url = API_URLS[apiName]\n url = attachQueryParams(url, queryParams)\n const response = await axios.post(`/cshelp${url}`, { ...body, _csrf })\n // trackActivity({\n // name: apiName,\n // type: fptiTypes.SERVICE_SUCCESS,\n // hc_event_info,\n // })\n return response\n } catch (error) {\n // trackActivity({\n // name: apiName,\n // type: fptiTypes.SERVICE_ERROR,\n // hc_event_info,\n // })\n throw error\n }\n },\n [_csrf],\n )\n\n return { getAPI, postAPI }\n}\n\nexport default useAPI\n"],"names":["props","searchQuery","appliedFilter","useState","inputText","setInputText","suggestions","setSuggestions","inputFocus","setInputFocus","length","currentChar","setCurrentChar","isMaxCharError","setIsMaxCharError","isMinCharError","setIsMinCharError","isDisplayPopularArticles","setIsDisplayPopularArticles","isLoadingSuggestions","setisLoadingSuggestions","autoSuggestionsErrorMsg","setAutoSuggestionsErrorMsg","suggestionsCache","setSuggestionsCache","getMessage","useMessage","useTracking","trackActivity","trackClick","generateLinkWithCoBrand","useHelper","postAPI","useAPI","appCtx","useAppContext","pageProps","defaultPopularArticles","apiData","searchPopularArticles","pageName","country","reqContextData","masker","useMemo","createMasker","i18nMessages","searchPlaceHolder","viewSearchResult","autoSuggestionTopHeader","maxCharError","minCharError","noSuggestionError","suggestSelected","filteredDefaultPopularArticles","filterSearchResponse","maxResults","isSearchPage","constants","SEARCH","returnSanitizedValue","val","getSanitizedValue","fetchAutocompleteResults","searchString","API_NAMES","SEARCH_SUGGESTIONS","body","data","filteredData","updateSuggestions","query","formattedSuggestionsArr","id","title","newResults","Array","isArray","name","componentNames","SEARCH_AUTO_SUGGESTIONS","type","fptiTypes","NO_DATA","link","srch","SUCCESS","hidePopularArticles","isTopPopularArticlesPresent","trim","submitForm","e","stopPropagation","preventDefault","channelStr","returnUrl","searchMinMaxCharValidation","isSearchMinMaxCharValid","isValid","SEARCH_BAR","ON_CLICK","value","window","location","clearSearch","onSuggestionSelected","event","suggestion","formattedTitle","getFaqUrlFromTitle","articleId","_get","rank","searchResultsLength","SEARCH_TOP_POPULAR_ARTICLES","help_doc_id","redirectUrl","suggestionListFooter","href","onClick","size","useEffect","className","role","onSubmit","onChange","target","_isEmpty","onBlur","onKeyUp","key","blur","onFocus","fetchSuggestions","newValue","sanitizedValue","autoComplete","suggestionList","onSelect","hasSections","label","debounceTimeout","maxLength","error","suggestionListErrorMessage","suggestionListContainerClassName","suggestionListFooterClassName","errorText","leftIcon","rightIcon","classNames","tabIndex","onKeyPress","handleClearKeyPress","isLabelHidden","AI_SEARCH_STREAM_URL","CHECK_BOT_ELIGIBILITY","MMT_CONVERSATIONS","OCP_SET_CONTEXT","UPDATE_BNA","FULL_SEARCH","AI_SEARCH_STREAM","SEND_EMAIL","TOPIC_TREE","STEPUP_AUTH_VALIDATION","STEP_UP_RISK_CHECK","STEP_UP_AUTH","SEND_WEBFORM","API_URLS","attachQueryParams","url","queryParams","param","encodeURIComponent","slice","_csrf","getAPI","useCallback","apiName","options","fptiParams","axios","get","response","post"],"sourceRoot":""}