From 68777ec421d41be0da27013afd4165ae7d658d26 Mon Sep 17 00:00:00 2001 From: Arpit Chakladar Date: Mon, 13 Jul 2026 23:17:25 +0530 Subject: refactor: added linting with esling and also resolved warnings for it --- src/scripts/common/login/captcha.ts | 46 +++++++++++++++++++++---------------- src/scripts/common/login/index.ts | 2 +- src/scripts/common/stop-blocking.ts | 4 ++-- 3 files changed, 29 insertions(+), 23 deletions(-) (limited to 'src/scripts/common') diff --git a/src/scripts/common/login/captcha.ts b/src/scripts/common/login/captcha.ts index 73e8995..a63aa24 100644 --- a/src/scripts/common/login/captcha.ts +++ b/src/scripts/common/login/captcha.ts @@ -1,4 +1,5 @@ import { observeDOM } from "@/shared/observe-dom"; +import { OCRRequest, OCRResponse } from "@/shared/ocr-request"; /** * Pre-processes a CAPTCHA image on a canvas by removing grayish @@ -9,18 +10,18 @@ import { observeDOM } from "@/shared/observe-dom"; * @param width - Canvas width in pixels. * @param height - Canvas height in pixels. */ -export function prepareCaptcha(ctx: CanvasRenderingContext2D, width: number, height: number) { +export function prepareCaptcha(ctx: CanvasRenderingContext2D, width: number, height: number): void { const imgData = ctx.getImageData(0, 0, width, height); const data = imgData.data; const radius = 1; /** Returns true when all three channels are below 50 (very dark). */ - function isBlack(r: number, g: number, b: number) { + function isBlack(r: number, g: number, b: number): boolean { return r < 50 && g < 50 && b < 50; } /** Returns true when the colour is a mid-range grey (no strong hue). */ - function isGrayish(r: number, g: number, b: number) { + function isGrayish(r: number, g: number, b: number): boolean { return Math.abs(r - g) < 15 && Math.abs(g - b) < 15 && r > 100 && r < 200; } @@ -28,7 +29,7 @@ export function prepareCaptcha(ctx: CanvasRenderingContext2D, width: number, hei * Checks whether a black pixel exists within `radius` pixels of (x, y). * Used to preserve dark structures when removing grey noise. */ - function hasNearbyBlack(x: number, y: number) { + function hasNearbyBlack(x: number, y: number): boolean { for (let dx = -radius; dx <= radius; dx++) { for (let dy = -radius; dy <= radius; dy++) { const nx = x + dx; @@ -65,14 +66,17 @@ export function prepareCaptcha(ctx: CanvasRenderingContext2D, width: number, hei } observeDOM(() => { - const loginFormElement = document.querySelector("#loginform") as (HTMLFormElement | undefined); + const loginFormElement = document.querySelector("#loginform"); if (loginFormElement) { - const captchaImg = loginFormElement.querySelector("#captchaImg") as HTMLImageElement; - const captchaInput = loginFormElement.querySelector("#txtInput") as HTMLInputElement; + const captchaImg = loginFormElement.querySelector("#captchaImg"); + const captchaInput = loginFormElement.querySelector("#txtInput"); + + if (!captchaImg || !captchaInput) + return false; // Wait for image to load to get correct dimensions - captchaImg.addEventListener("load", async () => { + captchaImg.addEventListener("load", function(): void { const { width, height } = captchaImg; // 1. Create canvas @@ -86,33 +90,35 @@ observeDOM(() => { canvas.style.display = "none"; // 3. Insert canvas before image - captchaImg.parentNode!.querySelectorAll("canvas").forEach(c => c.remove()); - captchaImg.parentNode!.insertBefore(canvas, captchaImg); + captchaImg.parentNode?.querySelectorAll("canvas") + .forEach((c) => { c.remove(); }); + captchaImg.parentNode?.insertBefore(canvas, captchaImg); // 4. Hide image captchaImg.style.display = "none"; // 5. Draw the image onto the canvas - const ctx = canvas.getContext("2d")!; + const ctx = canvas.getContext("2d"); + if (!ctx) + return; ctx.drawImage(captchaImg, 0, 0); prepareCaptcha(ctx, canvas.width, canvas.height); canvas.style.display = ""; const dataURL = canvas.toDataURL("image/png"); // Perform OCR - chrome.runtime.sendMessage( + chrome.runtime.sendMessage( { type: "OCR", dataURL }, - ({ success, text, confidence }) => { - if (success) { - const textResult = text.trim(); - if (confidence < 80 || textResult.length !== 6) { + function(ocrResponse): void { + if (ocrResponse.success) { + const textResult = ocrResponse.text.trim(); + if (ocrResponse.confidence < 80 || textResult.length !== 6) // Reset the captcha if confidence is low - captchaImg.src = "generateCaptcha?" + new Date().getTime(); - } else { + captchaImg.src = `generateCaptcha?${new Date().getTime().toString()}`; + else captchaInput.value = textResult; - } } - }, + } ); }); } diff --git a/src/scripts/common/login/index.ts b/src/scripts/common/login/index.ts index 17e2117..95b9c5b 100644 --- a/src/scripts/common/login/index.ts +++ b/src/scripts/common/login/index.ts @@ -1 +1 @@ -import "@/scripts/login/captcha"; +import "@/scripts/common/login/captcha"; diff --git a/src/scripts/common/stop-blocking.ts b/src/scripts/common/stop-blocking.ts index 3fa3de6..bdebfe9 100644 --- a/src/scripts/common/stop-blocking.ts +++ b/src/scripts/common/stop-blocking.ts @@ -13,7 +13,7 @@ document.addEventListener("DOMContentLoaded", () => { } return proxiedBind.apply(this, Array.from(arguments) as any); - } + }; const proxiedKeydown = $.prototype.keydown; /** Proxies jQuery `.keydown()` so all key presses are allowed. */ @@ -21,7 +21,7 @@ document.addEventListener("DOMContentLoaded", () => { arguments[0] = (_: any) => true; return proxiedKeydown.apply(this, Array.from(arguments) as any); - } + }; $.prototype.bind = proxiedBind; $.prototype.keydown = proxiedKeydown; -- cgit v1.2.3