diff --git a/backend/package-lock.json b/backend/package-lock.json index 6a2cfff2..60a8e66b 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -73,7 +73,7 @@ "rimraf": "^2.6.2", "source-map-support": "^0.5.16", "tsc-watch": "^4.0.0", - "typescript": "^4.4.0-dev.20210629" + "typescript": "^4.3.4" } }, "../../Knub": { @@ -83,7 +83,7 @@ "dependencies": { "@discordjs/voice": "^0.5.1", "discord-api-types": "^0.18.1", - "discord.js": "^13.0.0-dev.edab5af.1624996138", + "discord.js": "^13.0.0-dev.64f093f.1625054868", "knub-command-manager": "^9.1.0", "ts-essentials": "^6.0.7" }, @@ -5721,9 +5721,9 @@ } }, "node_modules/typescript": { - "version": "4.4.0-dev.20210629", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.0-dev.20210629.tgz", - "integrity": "sha512-kqDceSuAA0qQ6z5mrQc3LcD6IcwrKOZZ2YO7oBgwfGM0zzraUKhpdJSZovwN0pF3MdI211HccvrHf8JX7UJD7A==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", + "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -8880,7 +8880,7 @@ "@typescript-eslint/parser": "^4.23.0", "chai": "^4.3.4", "discord-api-types": "^0.18.1", - "discord.js": "^13.0.0-dev.edab5af.1624996138", + "discord.js": "^13.0.0-dev.64f093f.1625054868", "eslint": "^7.2.0", "husky": "^4.3.8", "knub-command-manager": "^9.1.0", @@ -10844,9 +10844,9 @@ } }, "typescript": { - "version": "4.4.0-dev.20210629", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.0-dev.20210629.tgz", - "integrity": "sha512-kqDceSuAA0qQ6z5mrQc3LcD6IcwrKOZZ2YO7oBgwfGM0zzraUKhpdJSZovwN0pF3MdI211HccvrHf8JX7UJD7A==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", + "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", "dev": true }, "uid2": { diff --git a/backend/package.json b/backend/package.json index 9cf5f4b3..88c84cb7 100644 --- a/backend/package.json +++ b/backend/package.json @@ -88,7 +88,7 @@ "rimraf": "^2.6.2", "source-map-support": "^0.5.16", "tsc-watch": "^4.0.0", - "typescript": "^4.4.0-dev.20210629" + "typescript": "^4.3.4" }, "ava": { "files": [ diff --git a/backend/src/index.ts b/backend/src/index.ts index a830042b..560e5f45 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -19,7 +19,7 @@ import { RecoverablePluginError } from "./RecoverablePluginError"; import { SimpleError } from "./SimpleError"; import { ZeppelinGlobalConfig, ZeppelinGuildConfig } from "./types"; import { startUptimeCounter } from "./uptime"; -import { errorMessage, isDiscordHTTPError, isDiscordRESTError, successMessage } from "./utils"; +import { errorMessage, isDiscordHTTPError, isDiscordAPIError, successMessage } from "./utils"; const fsp = fs.promises; @@ -113,7 +113,7 @@ function errorHandler(err) { console.error(`Exiting after ${RECENT_PLUGIN_ERROR_EXIT_THRESHOLD} plugin errors`); process.exit(1); } - } else if (isDiscordRESTError(err) || isDiscordHTTPError(err)) { + } else if (isDiscordAPIError(err) || isDiscordHTTPError(err)) { // Discord API errors, usually safe to just log instead of crash // We still bail if we get a ton of them in a short amount of time if (++recentDiscordErrors >= RECENT_DISCORD_ERROR_EXIT_THRESHOLD) { diff --git a/backend/src/plugins/AutoReactions/events/AddReactionsEvt.ts b/backend/src/plugins/AutoReactions/events/AddReactionsEvt.ts index e8a0fc29..fc96efc6 100644 --- a/backend/src/plugins/AutoReactions/events/AddReactionsEvt.ts +++ b/backend/src/plugins/AutoReactions/events/AddReactionsEvt.ts @@ -1,6 +1,6 @@ import { GuildChannel, Permissions } from "discord.js"; import { LogType } from "../../../data/LogType"; -import { isDiscordRESTError } from "../../../utils"; +import { isDiscordAPIError } from "../../../utils"; import { getMissingChannelPermissions } from "../../../utils/getMissingChannelPermissions"; import { missingPermissionError } from "../../../utils/missingPermissionError"; import { readChannelPermissions } from "../../../utils/readChannelPermissions"; @@ -36,7 +36,7 @@ export const AddReactionsEvt = autoReactionsEvt({ try { await message.react(reaction); } catch (e) { - if (isDiscordRESTError(e)) { + if (isDiscordAPIError(e)) { const logs = pluginData.getPlugin(LogsPlugin); if (e.code === 10008) { logs.log(LogType.BOT_ALERT, { diff --git a/backend/src/plugins/Automod/actions/setSlowmode.ts b/backend/src/plugins/Automod/actions/setSlowmode.ts index c303de3a..f2b9aeac 100644 --- a/backend/src/plugins/Automod/actions/setSlowmode.ts +++ b/backend/src/plugins/Automod/actions/setSlowmode.ts @@ -2,7 +2,7 @@ import { Snowflake, TextChannel } from "discord.js"; import * as t from "io-ts"; import { ChannelTypeStrings } from "src/types"; import { LogType } from "../../../data/LogType"; -import { convertDelayStringToMS, isDiscordRESTError, tDelayString, tNullable } from "../../../utils"; +import { convertDelayStringToMS, isDiscordAPIError, tDelayString, tNullable } from "../../../utils"; import { automodAction } from "../helpers"; export const SetSlowmodeAction = automodAction({ @@ -49,7 +49,7 @@ export const SetSlowmodeAction = automodAction({ } catch (e) { // Check for invalid form body -> indicates duration was too large const errorMessage = - isDiscordRESTError(e) && e.code === 50035 + isDiscordAPIError(e) && e.code === 50035 ? `Duration is greater than maximum native slowmode duration` : e.message; diff --git a/backend/src/plugins/Cases/functions/postToCaseLogChannel.ts b/backend/src/plugins/Cases/functions/postToCaseLogChannel.ts index 33a6e97d..7f3f04d5 100644 --- a/backend/src/plugins/Cases/functions/postToCaseLogChannel.ts +++ b/backend/src/plugins/Cases/functions/postToCaseLogChannel.ts @@ -2,7 +2,7 @@ import { FileOptions, Message, MessageOptions, Snowflake, TextChannel } from "di import { GuildPluginData } from "knub"; import { Case } from "../../../data/entities/Case"; import { LogType } from "../../../data/LogType"; -import { isDiscordRESTError } from "../../../utils"; +import { isDiscordAPIError } from "../../../utils"; import { CasesPluginType } from "../types"; import { getCaseEmbed } from "./getCaseEmbed"; import { resolveCaseId } from "./resolveCaseId"; @@ -25,7 +25,7 @@ export async function postToCaseLogChannel( } result = await caseLogChannel.send({ ...content }); } catch (e) { - if (isDiscordRESTError(e) && (e.code === 50013 || e.code === 50001)) { + if (isDiscordAPIError(e) && (e.code === 50013 || e.code === 50001)) { pluginData.state.logs.log(LogType.BOT_ALERT, { body: `Missing permissions to post mod cases in <#${caseLogChannel.id}>`, }); diff --git a/backend/src/plugins/CompanionChannels/functions/handleCompanionPermissions.ts b/backend/src/plugins/CompanionChannels/functions/handleCompanionPermissions.ts index ddbfc266..de83899b 100644 --- a/backend/src/plugins/CompanionChannels/functions/handleCompanionPermissions.ts +++ b/backend/src/plugins/CompanionChannels/functions/handleCompanionPermissions.ts @@ -1,7 +1,7 @@ import { Permissions, Snowflake, StageChannel, TextChannel, VoiceChannel } from "discord.js"; import { GuildPluginData } from "knub"; import { LogType } from "../../../data/LogType"; -import { isDiscordRESTError, MINUTES } from "../../../utils"; +import { isDiscordAPIError, MINUTES } from "../../../utils"; import { LogsPlugin } from "../../Logs/LogsPlugin"; import { CompanionChannelsPluginType, TCompanionChannelOpts } from "../types"; import { getCompanionChannelOptsForVoiceChannelId } from "./getCompanionChannelOptsForVoiceChannelId"; @@ -66,7 +66,7 @@ export async function handleCompanionPermissions( }); } } catch (e) { - if (isDiscordRESTError(e) && e.code === 50001) { + if (isDiscordAPIError(e) && e.code === 50001) { const logs = pluginData.getPlugin(LogsPlugin); logs.log(LogType.BOT_ALERT, { body: `Missing permissions to handle companion channels. Pausing companion channels for 5 minutes or until the bot is reloaded on this server.`, diff --git a/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts b/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts index b5ff7ed1..57b0f249 100644 --- a/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts +++ b/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts @@ -4,7 +4,7 @@ import { GuildPluginData } from "knub"; import { logger } from "../../../logger"; import { hasPermission, sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; import { ERRORS, RecoverablePluginError } from "../../../RecoverablePluginError"; -import { asSingleLine, isDiscordRESTError, UnknownUser } from "../../../utils"; +import { asSingleLine, isDiscordAPIError, UnknownUser } from "../../../utils"; import { MutesPlugin } from "../../Mutes/MutesPlugin"; import { MuteResult } from "../../Mutes/types"; import { ModActionsPluginType } from "../types"; @@ -60,7 +60,7 @@ export async function actualMuteUserCmd( } catch (e) { if (e instanceof RecoverablePluginError && e.code === ERRORS.NO_MUTE_ROLE_IN_CONFIG) { sendErrorMessage(pluginData, msg.channel as TextChannel, "Could not mute the user: no mute role set in config"); - } else if (isDiscordRESTError(e) && e.code === 10007) { + } else if (isDiscordAPIError(e) && e.code === 10007) { sendErrorMessage(pluginData, msg.channel as TextChannel, "Could not mute the user: unknown member"); } else { logger.error(`Failed to mute user ${user.id}: ${e.stack}`); diff --git a/backend/src/plugins/ModActions/functions/isBanned.ts b/backend/src/plugins/ModActions/functions/isBanned.ts index 60fe37e3..dc476e63 100644 --- a/backend/src/plugins/ModActions/functions/isBanned.ts +++ b/backend/src/plugins/ModActions/functions/isBanned.ts @@ -1,7 +1,7 @@ import { Permissions, Snowflake } from "discord.js"; import { GuildPluginData } from "knub"; import { LogType } from "../../../data/LogType"; -import { isDiscordHTTPError, isDiscordRESTError, SECONDS, sleep } from "../../../utils"; +import { isDiscordHTTPError, isDiscordAPIError, SECONDS, sleep } from "../../../utils"; import { hasDiscordPermissions } from "../../../utils/hasDiscordPermissions"; import { LogsPlugin } from "../../Logs/LogsPlugin"; import { ModActionsPluginType } from "../types"; @@ -26,7 +26,7 @@ export async function isBanned( ]); return potentialBan != null; } catch (e) { - if (isDiscordRESTError(e) && e.code === 10026) { + if (isDiscordAPIError(e) && e.code === 10026) { // [10026]: Unknown Ban return false; } @@ -36,7 +36,7 @@ export async function isBanned( return false; } - if (isDiscordRESTError(e) && e.code === 50013) { + if (isDiscordAPIError(e) && e.code === 50013) { pluginData.getPlugin(LogsPlugin).log(LogType.BOT_ALERT, { body: `Missing "Ban Members" permission to check for existing bans`, }); diff --git a/backend/src/plugins/ReactionRoles/commands/ClearReactionRolesCmd.ts b/backend/src/plugins/ReactionRoles/commands/ClearReactionRolesCmd.ts index dc68a245..229b8fbe 100644 --- a/backend/src/plugins/ReactionRoles/commands/ClearReactionRolesCmd.ts +++ b/backend/src/plugins/ReactionRoles/commands/ClearReactionRolesCmd.ts @@ -1,7 +1,7 @@ import { Message, Snowflake } from "discord.js"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; -import { isDiscordRESTError } from "../../../utils"; +import { isDiscordAPIError } from "../../../utils"; import { reactionRolesCmd } from "../types"; export const ClearReactionRolesCmd = reactionRolesCmd({ @@ -25,7 +25,7 @@ export const ClearReactionRolesCmd = reactionRolesCmd({ try { targetMessage = await args.message.channel.messages.fetch(args.message.messageId as Snowflake); } catch (err) { - if (isDiscordRESTError(err) && err.code === 50001) { + if (isDiscordAPIError(err) && err.code === 50001) { sendErrorMessage(pluginData, msg.channel, "Missing access to the specified message"); return; } diff --git a/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts b/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts index c118b973..dba3db59 100644 --- a/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts +++ b/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts @@ -1,7 +1,7 @@ import { Snowflake } from "discord.js"; import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; -import { canUseEmoji, isDiscordRESTError, isValidEmoji, noop, trimPluginDescription } from "../../../utils"; +import { canUseEmoji, isDiscordAPIError, isValidEmoji, noop, trimPluginDescription } from "../../../utils"; import { canReadChannel } from "../../../utils/canReadChannel"; import { reactionRolesCmd, TReactionRolePair } from "../types"; import { applyReactionRoleReactionsToMessage } from "../util/applyReactionRoleReactionsToMessage"; @@ -42,7 +42,7 @@ export const InitReactionRolesCmd = reactionRolesCmd({ try { targetMessage = await args.message.channel.messages.fetch(args.message.messageId as Snowflake).catch(noop); } catch (e) { - if (isDiscordRESTError(e)) { + if (isDiscordAPIError(e)) { sendErrorMessage(pluginData, msg.channel, `Error ${e.code} while getting message: ${e.message}`); return; } diff --git a/backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts b/backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts index c9e1e0f7..8dafc9fe 100644 --- a/backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts +++ b/backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts @@ -2,7 +2,7 @@ import { Snowflake, TextChannel } from "discord.js"; import { GuildPluginData } from "knub"; import { ReactionRole } from "../../../data/entities/ReactionRole"; import { LogType } from "../../../data/LogType"; -import { isDiscordRESTError, sleep } from "../../../utils"; +import { isDiscordAPIError, sleep } from "../../../utils"; import { LogsPlugin } from "../../Logs/LogsPlugin"; import { ReactionRolesPluginType } from "../types"; @@ -27,7 +27,7 @@ export async function applyReactionRoleReactionsToMessage( try { targetMessage = await channel.messages.fetch(messageId as Snowflake); } catch (e) { - if (isDiscordRESTError(e)) { + if (isDiscordAPIError(e)) { if (e.code === 10008) { // Unknown message, remove reaction roles from the message logs.log(LogType.BOT_ALERT, { @@ -51,7 +51,7 @@ export async function applyReactionRoleReactionsToMessage( try { await targetMessage.reactions.removeAll(); } catch (e) { - if (isDiscordRESTError(e)) { + if (isDiscordAPIError(e)) { errors.push(`Error ${e.code} while removing old reactions: ${e.message}`); logs.log(LogType.BOT_ALERT, { body: `Error ${e.code} while removing old reaction role reactions from message ${channelId}/${messageId}: ${e.message}`, @@ -73,7 +73,7 @@ export async function applyReactionRoleReactionsToMessage( await targetMessage.react(rawEmoji); await sleep(750); // Make sure we don't hit rate limits } catch (e) { - if (isDiscordRESTError(e)) { + if (isDiscordAPIError(e)) { if (e.code === 10014) { pluginData.state.reactionRoles.removeFromMessage(messageId, rawEmoji); errors.push(`Unknown emoji: ${rawEmoji}`); diff --git a/backend/src/plugins/Slowmode/util/applyBotSlowmodeToUserId.ts b/backend/src/plugins/Slowmode/util/applyBotSlowmodeToUserId.ts index 94ec6dc3..45f35d58 100644 --- a/backend/src/plugins/Slowmode/util/applyBotSlowmodeToUserId.ts +++ b/backend/src/plugins/Slowmode/util/applyBotSlowmodeToUserId.ts @@ -2,7 +2,7 @@ import { GuildChannel, Permissions, Snowflake, TextChannel } from "discord.js"; import { GuildPluginData } from "knub"; import { LogType } from "../../../data/LogType"; import { logger } from "../../../logger"; -import { isDiscordRESTError, stripObjectToScalars, UnknownUser } from "../../../utils"; +import { isDiscordAPIError, stripObjectToScalars, UnknownUser } from "../../../utils"; import { SlowmodePluginType } from "../types"; export async function applyBotSlowmodeToUserId( @@ -24,7 +24,7 @@ export async function applyBotSlowmodeToUserId( } catch (e) { const user = pluginData.client.users.fetch(userId as Snowflake) || new UnknownUser({ id: userId }); - if (isDiscordRESTError(e) && e.code === 50013) { + if (isDiscordAPIError(e) && e.code === 50013) { logger.warn( `Missing permissions to apply bot slowmode to user ${userId} on channel ${channel.name} (${channel.id}) on server ${pluginData.guild.name} (${pluginData.guild.id})`, ); diff --git a/backend/src/utils.ts b/backend/src/utils.ts index b05af8cf..9f549db7 100644 --- a/backend/src/utils.ts +++ b/backend/src/utils.ts @@ -70,13 +70,13 @@ export function isValidSnowflake(str: string) { } export const DISCORD_HTTP_ERROR_NAME = "DiscordHTTPError"; -export const DISCORD_REST_ERROR_NAME = "DiscordRESTError"; +export const DISCORD_REST_ERROR_NAME = "DiscordAPIError"; export function isDiscordHTTPError(err: Error | string) { return typeof err === "object" && err.constructor?.name === DISCORD_HTTP_ERROR_NAME; } -export function isDiscordRESTError(err: Error | string) { +export function isDiscordAPIError(err: Error | string) { return typeof err === "object" && err.constructor?.name === DISCORD_REST_ERROR_NAME; } @@ -470,7 +470,7 @@ export async function findRelevantAuditLogEntry( try { auditLogs = await guild.fetchAuditLogs({ limit: 5, type: actionType }); } catch (e) { - if (isDiscordRESTError(e) && e.code === 50013) { + if (isDiscordAPIError(e) && e.code === 50013) { // If we don't have permission to read audit log, set audit log requests on cooldown auditLogNextAttemptAfterFail.set(guild.id, Date.now() + AUDIT_LOG_FAIL_COOLDOWN); } else if (isDiscordHTTPError(e) && e.code === 500) { diff --git a/backend/src/utils/safeFindRelevantAuditLogEntry.ts b/backend/src/utils/safeFindRelevantAuditLogEntry.ts index 4b83510b..8845e52e 100644 --- a/backend/src/utils/safeFindRelevantAuditLogEntry.ts +++ b/backend/src/utils/safeFindRelevantAuditLogEntry.ts @@ -1,7 +1,7 @@ import { GuildPluginData } from "knub"; import { LogType } from "../data/LogType"; import { LogsPlugin } from "../plugins/Logs/LogsPlugin"; -import { findRelevantAuditLogEntry, isDiscordRESTError } from "../utils"; +import { findRelevantAuditLogEntry, isDiscordAPIError } from "../utils"; /** * Wrapper for findRelevantAuditLogEntry() that handles permission errors gracefully. @@ -17,7 +17,7 @@ export async function safeFindRelevantAuditLogEntry( try { return await findRelevantAuditLogEntry(pluginData.guild, actionType, userId, attempts, attemptDelay); } catch (e) { - if (isDiscordRESTError(e) && e.code === 50013) { + if (isDiscordAPIError(e) && e.code === 50013) { const logs = pluginData.getPlugin(LogsPlugin); logs.log(LogType.BOT_ALERT, { body: "Missing permissions to read audit log", diff --git a/backend/src/utils/sendDM.ts b/backend/src/utils/sendDM.ts index 851efcb5..7cfc3f87 100644 --- a/backend/src/utils/sendDM.ts +++ b/backend/src/utils/sendDM.ts @@ -1,6 +1,6 @@ import { MessagePayload, User } from "discord.js"; import { logger } from "../logger"; -import { createChunkedMessage, HOURS, isDiscordRESTError } from "../utils"; +import { createChunkedMessage, HOURS, isDiscordAPIError } from "../utils"; import Timeout = NodeJS.Timeout; let dmsDisabled = false; @@ -30,7 +30,7 @@ export async function sendDM(user: User, content: string | MessagePayload, sourc await user.send(content); } } catch (e) { - if (isDiscordRESTError(e) && e.code === 20026) { + if (isDiscordAPIError(e) && e.code === 20026) { logger.warn(`Received error code 20026: ${e.message}`); logger.warn("Disabling attempts to send DMs for 1 hour"); disableDMs(1 * HOURS); diff --git a/package-lock.json b/package-lock.json index 308ef9b3..21898d07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "prettier": "^1.19.1", "tslint": "^5.13.1", "tslint-config-prettier": "^1.18.0", - "typescript": "^4.1.3" + "typescript": "^4.3.4" } }, "node_modules/@babel/code-frame": { @@ -1975,9 +1975,9 @@ } }, "node_modules/typescript": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", - "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", + "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -3611,9 +3611,9 @@ "dev": true }, "typescript": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", - "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz", + "integrity": "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==", "dev": true }, "validate-npm-package-license": { diff --git a/package.json b/package.json index 1c3f821c..0c1f6d68 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "prettier": "^1.19.1", "tslint": "^5.13.1", "tslint-config-prettier": "^1.18.0", - "typescript": "^4.1.3" + "typescript": "^4.3.4" }, "husky": { "hooks": {