{"version":3,"file":"JSErrorHandler_INC.min.js","sources":["EncompassWebServices/includes/JSErrorHandler_INC.js"],"sourcesContent":["\"use strict\";\r\n\r\nlet jsErrorHandling_ErrorArr;\r\n\r\nfunction EncompassErrorHandler(message, fileURL, lineNum, columnNum, error) {\r\n if (message instanceof ErrorEvent) {\r\n fileURL = message.filename;\r\n lineNum = message.lineno;\r\n columnNum = message.colno;\r\n error = message.error;\r\n message = message.message;\r\n }\r\n message = EC_Fmt.Null2EmptyStr(message);\r\n // Task 697779: Javascript errors are not being logged to Support SystemErrors table\r\n if (!EC_Fmt.isNull(fileURL) && fileURL.toLowerCase().indexOf(\"jquery.js\") === -1 && (fileURL.indexOf(\"aspx1/\") !== -1 || fileURL.indexOf(\"GlobalDocs/\") !== -1) && message.indexOf(\"nsIDOMWindowInternal.alert\") === -1) {\r\n // Task 717744: Lots of 'Error in Promise' system errors - Find a way to pull out an inner error or better message even when the developer uses a try...catch inside of a JS Promise\r\n if (message.startsWith(\"Error in promise - \")) {\r\n message = message.slice(19);\r\n }\r\n\r\n if ((fileURL === \"UnknownFile\" || fileURL === \"aspx1/UnknownFile\") && EC_Fmt && typeof EC_Fmt.GetPageParameter === \"function\" && EC_Fmt.GetPageParameter(\"DashboardID\")) {\r\n fileURL = `DashboardID=${EC_Fmt.GetPageParameter(\"DashboardID\")}`;\r\n }\r\n\r\n // Task 744054: SystemError: TaskEdit.aspx?Action=Add ResizeObserver loop limit exceeded\r\n // Task 722392: Encompass ID: Wyliq System error:JavaScript Error: UnknownFile (0) - Error in promise - TypeError: NetworkError when attempting to fetch resource.\r\n // Task 952720: JavaScript Error: DashboardID=156941 (0) - AbortError: The operation was aborted.\r\n // Task 953074: JavaScript Error: DashboardID=156940 (0) - Object Not Found Matching Id:1\r\n // Task 954907: System Error:JavaScript Error: DashboardID=168087 (0) - Object Not Found Matching Id:2\r\n // Task 932152: SystemError: GetOAuthID. The remote server returned an error: (403) Forbidden.\r\n // Task 948452: System Error:JavaScript Error: DashboardID=178892 (0) - :\r\n const KnownErrorsFromExtensions = [\"removeNightMode is not defined\", \"extAbbr is not defined\", \"ResizeObserver loop limit exceeded\", \"NetworkError when attempting to fetch resource\", \"TypeError: Failed to fetch\", \"AbortError: The operation was aborted\", \"TypeError: The network connection was lost\", \"Object Not Found Matching Id\", \"TypeError: cancelled\", \"GetOAuthID. The remote server returned an error: (403) Forbidden.\", \"EC_Request: Failed to request\"];\r\n let isKnownErrorFromExtension = false;\r\n\r\n for (let i = 0; i < KnownErrorsFromExtensions.length; i++) {\r\n if (message.indexOf(KnownErrorsFromExtensions[i]) !== -1) {\r\n isKnownErrorFromExtension = true;\r\n }\r\n }\r\n\r\n if (!window.navigator.onLine) {\r\n if (BC_EWS) {\r\n if (!BC_EWS.NoInternetDialog && !BC_EWS.NoInternetDialogInterval) {\r\n clearInterval(BC_EWS.NoInternetDialogInterval);\r\n BC_EWS.NoInternetDialog = ECP.Dialog.Alert(\"No Internet Connection\");\r\n BC_EWS.NoInternetDialogInterval = setInterval(() => {\r\n if (navigator.onLine) {\r\n // Task 713357: Javascript error: Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node'.\r\n if (BC_EWS.NoInternetDialog && typeof BC_EWS.NoInternetDialog.remove === \"function\") {\r\n BC_EWS.NoInternetDialog.remove();\r\n BC_EWS.NoInternetDialog = undefined;\r\n }\r\n clearInterval(BC_EWS.NoInternetDialogInterval);\r\n }\r\n }, 1000);\r\n }\r\n } else {\r\n // eslint-disable-next-line no-alert\r\n alert(\"Internet Connection Lost\");\r\n }\r\n } else if (!isKnownErrorFromExtension) {\r\n // Task 951060: Lots of duplicate system errors if the user makes a mistake in a code block\r\n if (!jsErrorHandling_ErrorArr) {\r\n jsErrorHandling_ErrorArr = [];\r\n }\r\n if (jsErrorHandling_ErrorArr.indexOf(message) === -1) {\r\n jsErrorHandling_ErrorArr.push(message);\r\n\r\n let CurDomain = \"\";\r\n\r\n try {\r\n CurDomain = fileURL.split(/\\/+/g)[1];\r\n } catch (e) {\r\n // ignore this error\r\n }\r\n\r\n let stack = error ? error.stack : \"Error details not received at EncompassErrorHandler()\";\r\n if (fileURL.indexOf(\"aspx1/\") !== -1) {\r\n fileURL = fileURL.substring(fileURL.indexOf(\"aspx1/\") + 6); // Remove the '/ECP.../aspx1/'\r\n }\r\n\r\n if (fileURL.indexOf(\".js?v=\") !== -1) {\r\n const version = fileURL.substring(fileURL.indexOf(\".js?v=\") + 3);\r\n fileURL = fileURL.replace(version, \"\"); // Remove the '?v=....' at the end\r\n stack = EC_Fmt.ReplaceAll(stack, version, \"\");\r\n }\r\n\r\n stack = EC_Fmt.ReplaceAll(EC_Fmt.ReplaceAll(stack, `http://${CurDomain}/`, \"/\"), `https://${CurDomain}/`, \"/\");\r\n\r\n // Task 1064057: Use EC_ Request replace fetch\r\n const myRequest = new ECP.EC_Request(\"DevOps_JSErrorHandler\");\r\n myRequest.SetReturnType(ECP.EC_ReturnType.Text);\r\n myRequest.AddRequestVariable(\"Error\", message, ECP.EC_Verb.Post);\r\n myRequest.AddRequestVariable(\"Domain\", CurDomain, ECP.EC_Verb.Post);\r\n myRequest.AddRequestVariable(\"File\", fileURL, ECP.EC_Verb.Post);\r\n myRequest.AddRequestVariable(\"Line\", lineNum, ECP.EC_Verb.Post);\r\n myRequest.AddRequestVariable(\"Column\", columnNum, ECP.EC_Verb.Post);\r\n myRequest.AddRequestVariable(\"Stack\", stack, ECP.EC_Verb.Post);\r\n myRequest.Submit().then(() => {\r\n if (message.indexOf(\"