diff --git a/.eslintrc.yml b/.eslintrc.yml index 40b1128..d0a061e 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -53,12 +53,12 @@ parserOptions: extends: - 'eslint:recommended' - 'plugin:prettier/recommended' + - 'plugin:@typescript-eslint/recommended' plugins: - '@typescript-eslint' - ######### # Rules # ######### -rules: - no-useless-escape: warn - semi: error +# rules: +# no-useless-escape: warn +# semi: error diff --git a/.prettierrc b/.prettierrc index c3ee367..522fc89 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,7 +1,7 @@ { "tabWidth": 2, "semi": true, - "trailingComma": "es5", + "trailingComma": "all", "singleQuote": true, "endOfLine": "lf" } diff --git a/package-lock.json b/package-lock.json index 5c0d28a..dd53a3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -254,6 +254,28 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/js": { "version": "8.56.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", @@ -334,6 +356,28 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -647,30 +691,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/utils": { "version": "6.19.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz", @@ -958,13 +978,12 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -1549,19 +1568,7 @@ } } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { + "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", @@ -1577,13 +1584,26 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/eslint/node_modules/find-up": { @@ -1629,6 +1649,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -1709,15 +1741,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -1730,7 +1753,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -2059,6 +2082,28 @@ "node": ">= 6" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -3122,15 +3167,18 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ms": { @@ -3158,6 +3206,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/multimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/multimatch/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", @@ -3931,6 +4001,28 @@ "node": ">=6.0.0" } }, + "node_modules/recursive-readdir/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/replace-buffer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/replace-buffer/-/replace-buffer-1.2.1.tgz", diff --git a/src/i18n.js b/src/i18n.js index 2e5342c..f239009 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -172,7 +172,7 @@ class LocalizedMessage { replacePlaceholders_(text, placeholderValues = []) { let replacedText = placeholderValues.reduce( (acc, cur) => acc.replace(new RegExp(cur.regexp, 'g'), cur.value), - text + text, ); return replacedText; } @@ -374,7 +374,7 @@ class LocalizedMessage { */ replaceErrorHeaderNameTargetUrlNotFound( headerNameTargetUrl, - sheetNameDashboard + sheetNameDashboard, ) { let text = this.messageList.errorHeaderNameTargetUrlNotFound; let placeholderValues = [ @@ -398,7 +398,7 @@ class LocalizedMessage { */ replaceAlertMessageLogExtractionComplete( extractStatusLogDays, - sheetNameStatusLogsExtracted + sheetNameStatusLogsExtracted, ) { let text = this.messageList.alertMessageLogExtractionComplete; let placeholderValues = [ diff --git a/src/websiteMonitoring.js b/src/websiteMonitoring.js index 6f0a4d7..4120ab5 100644 --- a/src/websiteMonitoring.js +++ b/src/websiteMonitoring.js @@ -49,7 +49,7 @@ const RESPONSE_CODE_WILDCARD = 'x'; function onOpen() { const localMessage = new LocalizedMessage( - SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetLocale() + SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetLocale(), ); const ui = SpreadsheetApp.getUi(); ui.createMenu(localMessage.messageList.menuTitle) @@ -58,27 +58,27 @@ function onOpen() { .createMenu(localMessage.messageList.menuTriggers) .addItem( localMessage.messageList.menuSetStatusCheckTrigger, - 'setupStatusCheckTrigger' + 'setupStatusCheckTrigger', ) .addItem( localMessage.messageList.menuSetLogExtractionTrigger, - 'setupLogExtractionTrigger' + 'setupLogExtractionTrigger', ) .addItem( localMessage.messageList.menuSetReminderTrigger, - 'setupReminderTrigger' + 'setupReminderTrigger', ) .addSeparator() .addItem( localMessage.messageList.menuDeleteTriggers, - 'deleteTimeBasedTriggers' - ) + 'deleteTimeBasedTriggers', + ), ) .addSeparator() .addItem(localMessage.messageList.menuCheckStatus, 'websiteMonitoring') .addItem( localMessage.messageList.menuExtractStatusLogs, - 'extractStatusLogs' + 'extractStatusLogs', ) .addToUi(); } @@ -139,8 +139,8 @@ function setupTrigger_(handlerFunction, frequencyKey, frequencyUnit) { throw new Error( localMessage.replaceErrorInvalidFrequencyValue( frequencyKey, - SHEET_NAME_OPTIONS - ) + SHEET_NAME_OPTIONS, + ), ); } // Brief descriptions of the handler functions @@ -155,9 +155,9 @@ function setupTrigger_(handlerFunction, frequencyKey, frequencyUnit) { localMessage.messageList.alertTitleContinueTriggerSetup, localMessage.replaceAlertMessageContinueTriggerSetup( functionDesc[handlerFunction] ? functionDesc[handlerFunction] : '', - myEmail + myEmail, ), - ui.ButtonSet.YES_NO_CANCEL + ui.ButtonSet.YES_NO_CANCEL, ); if (continueResponse !== ui.Button.YES) { throw new Error(localMessage.messageList.errorTriggerSetupCanceled); @@ -191,7 +191,7 @@ function setupTrigger_(handlerFunction, frequencyKey, frequencyUnit) { .create(); } else { throw new Error( - localMessage.replaceErrorInvalidFrequencyUnit(frequencyUnit) + localMessage.replaceErrorInvalidFrequencyUnit(frequencyUnit), ); } // Set up a trigger for monthly reminders @@ -201,9 +201,9 @@ function setupTrigger_(handlerFunction, frequencyKey, frequencyUnit) { localMessage.replaceAlertTitleCompleteTriggerSetup(handlerFunction), localMessage.replaceAlertMessageCompleteTriggerSetup( options[frequencyKey], - frequencyUnit + frequencyUnit, ), - ui.ButtonSet.OK + ui.ButtonSet.OK, ); } catch (e) { console.error(e.stack); @@ -219,13 +219,13 @@ function setupTrigger_(handlerFunction, frequencyKey, frequencyUnit) { */ function setupReminderTrigger(muteUi = false) { console.info( - '[setupReminderTrigger] Setting trigger for the monthly reminder...' + '[setupReminderTrigger] Setting trigger for the monthly reminder...', ); if (!muteUi) { var ui = SpreadsheetApp.getUi(); } const localMessage = new LocalizedMessage( - SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetLocale() + SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetLocale(), ); const handlerFunction = 'sendReminder'; try { @@ -242,9 +242,9 @@ function setupReminderTrigger(muteUi = false) { ui.alert( localMessage.replaceAlertTitleCompleteTriggerSetup(handlerFunction), localMessage.replaceAlertMessageCompleteReminderTriggerSetup( - Session.getActiveUser().getEmail() + Session.getActiveUser().getEmail(), ), - ui.ButtonSet.OK + ui.ButtonSet.OK, ); } } catch (e) { @@ -265,26 +265,26 @@ function deleteTimeBasedTriggers() { const ui = SpreadsheetApp.getUi(); const myEmail = Session.getActiveUser().getEmail(); const localMessage = new LocalizedMessage( - SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetLocale() + SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetLocale(), ); try { const continueResponse = ui.alert( localMessage.messageList.alertTitleContinueTriggerDelete, localMessage.replaceAlertMessageContinueTriggerDelete(myEmail), - ui.ButtonSet.YES_NO_CANCEL + ui.ButtonSet.YES_NO_CANCEL, ); if (continueResponse !== ui.Button.YES) { throw new Error(localMessage.messageList.errorTriggerDeleteCanceled); } // Delete all existing triggers set by the user. ScriptApp.getProjectTriggers().forEach((trigger) => - ScriptApp.deleteTrigger(trigger) + ScriptApp.deleteTrigger(trigger), ); console.info('[deleteTimeBasedTriggers] Deleted triggers.'); ui.alert( localMessage.messageList.alertTitleComplete, localMessage.messageList.alertMessageTriggerDelete, - ui.ButtonSet.OK + ui.ButtonSet.OK, ); } catch (e) { console.error(e.stack); @@ -325,7 +325,7 @@ function websiteMonitoring(triggered = false) { TARGET_WEBSITES_RANGE_POSITION.row, TARGET_WEBSITES_RANGE_POSITION.col, targetWebsitesSheet.getLastRow() - TARGET_WEBSITES_RANGE_POSITION.row + 1, - TARGET_WEBSITES_COL_NUM + TARGET_WEBSITES_COL_NUM, ) .getValues(); const targetWebsitesHeader = targetWebsitesArr.shift(); @@ -339,10 +339,10 @@ function websiteMonitoring(triggered = false) { } o[k] = row[i]; return o; - }, {}) + }, {}), ); targetWebsites = targetWebsites.filter( - (website) => website[HEADER_NAME_TARGET_URL] // Filter out rows with empty target URLs + (website) => website[HEADER_NAME_TARGET_URL], // Filter out rows with empty target URLs ); // Check and update savedStatus so that it matches with targetWebsites const savedStatusUpdated = Object.keys(savedStatus).reduce((obj, key) => { @@ -381,10 +381,10 @@ function websiteMonitoring(triggered = false) { logSpreadsheetsHeader.reduce((o, k, i) => { o[k] = row[i]; return o; - }, {}) + }, {}), ); const logSpreadsheetUrls = logSpreadsheets.filter( - (row) => row.YEAR == currentYear + (row) => row.YEAR == currentYear, ); if (!logSpreadsheetUrls.length) { // Create a new spreadsheet from template @@ -393,7 +393,7 @@ function websiteMonitoring(triggered = false) { ? DriveApp.getFolderById(options.DRIVE_FOLDER_ID) : DriveApp.getRootFolder(); const templateFile = DriveApp.getFileById( - SpreadsheetApp.openByUrl(options.TEMPLATE_LOG_SHEET_URL).getId() + SpreadsheetApp.openByUrl(options.TEMPLATE_LOG_SHEET_URL).getId(), // While the code can be made more simple by asking the user to enter the ID // of the template spreadsheet, there is a certain logical usefulness to use // the template URL rather than its ID since URLs can be directly referenced @@ -414,14 +414,14 @@ function websiteMonitoring(triggered = false) { }); } const logSheet = SpreadsheetApp.openByUrl( - logSpreadsheetUrls[0].URL + logSpreadsheetUrls[0].URL, ).getSheets()[0]; // Assuming that the logs be entered on the left-most worksheet of the log spreadsheet try { // Replace wildcards in options.ALLOWED_RESPONSE_CODES and options.ERROR_RESPONSE_CODES to actual codes options.ALLOWED_RESPONSE_CODES = parseResponseCodes_( options.ALLOWED_RESPONSE_CODES, RESPONSE_CODE_WILDCARD, - spreadsheetLocale + spreadsheetLocale, ); if (!options.ALLOWED_RESPONSE_CODES.includes('200')) { options.ALLOWED_RESPONSE_CODES.push('200'); @@ -429,7 +429,7 @@ function websiteMonitoring(triggered = false) { options.ERROR_RESPONSE_CODES = parseResponseCodes_( options.ERROR_RESPONSE_CODES, RESPONSE_CODE_WILDCARD, - spreadsheetLocale + spreadsheetLocale, ); // Get the actual HTTP response codes let dashboardStatus = []; // Array to record on the dashboard worksheet @@ -439,7 +439,7 @@ function websiteMonitoring(triggered = false) { websiteName: website['WEBSITE NAME'], targetUrl: website[HEADER_NAME_TARGET_URL], targetUrlEncoded: Utilities.base64Encode( - website[HEADER_NAME_TARGET_URL] + website[HEADER_NAME_TARGET_URL], ), status: savedStatusUpdated[ @@ -450,7 +450,7 @@ function websiteMonitoring(triggered = false) { responseRecord['responseCode'] = String( UrlFetchApp.fetch(responseRecord.targetUrl, { muteHttpExceptions: true, - }).getResponseCode() + }).getResponseCode(), ); let checkEnd = new Date(); responseRecord['timeStamp'] = standardFormatDate_(checkEnd, timeZone); @@ -461,7 +461,7 @@ function websiteMonitoring(triggered = false) { ) { if ( options.ERROR_RESPONSE_CODES.includes( - responseRecord.responseCode + responseRecord.responseCode, ) && (!responseRecord.status || responseRecord.status === 'UP') ) { @@ -492,7 +492,7 @@ function websiteMonitoring(triggered = false) { savedStatusUpdated[responseRecord.targetUrlEncoded] = responseRecord; return changes; }, - { newErrors: [], resolved: [] } + { newErrors: [], resolved: [] }, ); // Update the worksheet on latest statuses let latestStatusSheet = ss.getSheetByName(SHEET_NAME_LATEST_STATUS); @@ -514,16 +514,16 @@ function websiteMonitoring(triggered = false) { statusChange.newErrors .map( (errorResponse) => - `Site Name: ${errorResponse.websiteName}\nURL: ${errorResponse.targetUrl}\nResponse Code: ${errorResponse.responseCode}\nResponse Time: ${errorResponse.responseTime}\n` + `Site Name: ${errorResponse.websiteName}\nURL: ${errorResponse.targetUrl}\nResponse Code: ${errorResponse.responseCode}\nResponse Time: ${errorResponse.responseTime}\n`, ) .join('\n'), - ss.getUrl() + ss.getUrl(), ); if (options.ENABLE_CHAT_NOTIFICATION) { // Post on Google Chat postToChat_( options.CHAT_WEBHOOK_URL, - `*${messageSub}*\n\n${messageBody}` + `*${messageSub}*\n\n${messageBody}`, ); } if ( @@ -543,13 +543,13 @@ function websiteMonitoring(triggered = false) { return `Site Name: ${resolvedResponse.websiteName}\nURL: ${resolvedResponse.targetUrl}\nResponse Code: ${resolvedResponse.responseCode}\nResponse Time: ${resolvedResponse.responseTime}\n`; }) .join('\n'), - ss.getUrl() + ss.getUrl(), ); if (options.ENABLE_CHAT_NOTIFICATION) { // Post on Google Chat postToChat_( options.CHAT_WEBHOOK_URL, - `*${messageSub}*\n\n${messageBody}` + `*${messageSub}*\n\n${messageBody}`, ); } if ( @@ -587,7 +587,7 @@ function websiteMonitoring(triggered = false) { ui.alert( localMessage.messageList.alertTitleCompleteStatusCheck, completeMessage, - ui.ButtonSet.OK + ui.ButtonSet.OK, ); } } catch (e) { @@ -606,7 +606,7 @@ function websiteMonitoring(triggered = false) { // Post on Google Chat postToChat_( options.CHAT_WEBHOOK_URL, - `*${messageSub}*\n\n${messageBody}` + `*${messageSub}*\n\n${messageBody}`, ); } if ( @@ -621,7 +621,7 @@ function websiteMonitoring(triggered = false) { ui.alert( localMessage.messageList.alertTitleError, e.stack, - ui.ButtonSet.OK + ui.ButtonSet.OK, ); } } @@ -651,7 +651,7 @@ function extractStatusLogs(triggered = false) { try { // Clear the worksheet to enter new status logs const extractedLogsSheet = ss.getSheetByName( - SHEET_NAME_STATUS_LOGS_EXTRACTED + SHEET_NAME_STATUS_LOGS_EXTRACTED, ); extractedLogsSheet.getDataRange().clearContent(); // Get the list of target websites to monitor @@ -663,7 +663,7 @@ function extractStatusLogs(triggered = false) { targetWebsitesSheet.getLastRow() - TARGET_WEBSITES_RANGE_POSITION.row + 1, - TARGET_WEBSITES_COL_NUM + TARGET_WEBSITES_COL_NUM, ) .getValues(); const targetWebsitesHeader = targetWebsitesArr.shift(); @@ -672,7 +672,7 @@ function extractStatusLogs(triggered = false) { if (urlIndex < 0) { let errorMessage = localMessage.replaceErrorHeaderNameTargetUrlNotFound( HEADER_NAME_TARGET_URL, - SHEET_NAME_DASHBOARD + SHEET_NAME_DASHBOARD, ); if (triggered === true) { ScriptApp.getProjectTriggers().forEach((trigger) => { @@ -704,7 +704,7 @@ function extractStatusLogs(triggered = false) { // Get the start date to obtain status logs const today = new Date(); const startLog = new Date( - new Date().setDate(today.getDate() - options.EXTRACT_STATUS_LOGS_DAYS) + new Date().setDate(today.getDate() - options.EXTRACT_STATUS_LOGS_DAYS), ); // Extract status logs from the list of log spreadsheets const logSpreadsheetsArr = ss @@ -785,9 +785,9 @@ function extractStatusLogs(triggered = false) { localMessage.messageList.alertTitleComplete, localMessage.replaceAlertMessageLogExtractionComplete( options.EXTRACT_STATUS_LOGS_DAYS, - SHEET_NAME_STATUS_LOGS_EXTRACTED + SHEET_NAME_STATUS_LOGS_EXTRACTED, ), - ui.ButtonSet.OK + ui.ButtonSet.OK, ); } } catch (e) { @@ -841,7 +841,7 @@ function sendReminder() { targetWebsitesSheet.getLastRow() - TARGET_WEBSITES_RANGE_POSITION.row + 1, - TARGET_WEBSITES_COL_NUM + TARGET_WEBSITES_COL_NUM, ) .getValues(); targetWebsitesArr.shift(); @@ -850,13 +850,13 @@ function sendReminder() { localMessage.messageList.messageMonitoredSitesPrefix }:\n${targetWebsitesArr .map((website) => `- ${website.join(' ')}`) - .join('\n')}` + .join('\n')}`, ); } else if ( trigger.getHandlerFunction() === 'extractStatusLogsTriggered' ) { info.push( - localMessage.messageList.messageTriggerLogExtractionIsSet + localMessage.messageList.messageTriggerLogExtractionIsSet, ); } return info; @@ -865,7 +865,7 @@ function sendReminder() { messageSub += localMessage.messageList.mailSubSendReminder; messageBody = localMessage.replaceMailBodySendReminder( triggerInfo, - ss.getUrl() + ss.getUrl(), ); } catch (e) { console.error(e.stack); @@ -876,7 +876,7 @@ function sendReminder() { // Post on Google Chat postToChat_( options.CHAT_WEBHOOK_URL, - `*${messageSub}*\n\n${messageBody}` + `*${messageSub}*\n\n${messageBody}`, ); } if ( @@ -903,7 +903,7 @@ function sendReminder() { function parseResponseCodes_( codes, wildcard = 'x', - locale = Session.getActiveUserLocale() + locale = Session.getActiveUserLocale(), ) { let localMessage = new LocalizedMessage(locale); return codes @@ -940,7 +940,7 @@ function parseResponseCodes_( */ function standardFormatDate_( dateObj, - timeZone = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone() + timeZone = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(), ) { return Utilities.formatDate(dateObj, timeZone, 'yyyy-MM-dd HH:mm:ss'); }