From b5afd7302475abc58cef5bf6ea9d6285992da382 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 22 Jul 2025 18:47:17 +0000 Subject: [PATCH 1/8] Initial plan From 4f5091ed7f9342c9407411f19b39013750483a87 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 22 Jul 2025 18:56:04 +0000 Subject: [PATCH 2/8] Initial commit: Document plan to fix ESLint issues Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com> --- package-lock.json | 110 ++++------------------------------------------ 1 file changed, 9 insertions(+), 101 deletions(-) diff --git a/package-lock.json b/package-lock.json index baec0b2b..7eb58d2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,7 +61,6 @@ "http-errors": "2.0.0", "i": "^0.3.7", "input-otp": "1.4.2", - "ioredis": "^5.6.1", "jmespath": "^0.16.0", "js-yaml": "4.1.0", "jsonwebtoken": "^9.0.2", @@ -77,7 +76,6 @@ "oslo": "1.2.1", "pg": "^8.16.2", "qrcode.react": "4.2.0", - "rate-limit-redis": "^4.2.1", "react": "19.1.0", "react-dom": "19.1.0", "react-easy-sort": "^1.6.0", @@ -2010,12 +2008,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", - "license": "MIT" - }, "node_modules/@isaacs/balanced-match": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", @@ -2058,6 +2050,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, "license": "ISC", "dependencies": { "minipass": "^7.0.4" @@ -6309,6 +6302,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=18" @@ -6455,15 +6449,6 @@ "node": ">=6" } }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cmdk": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", @@ -6947,15 +6932,6 @@ "node": ">=0.4.0" } }, - "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.10" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -8835,6 +8811,7 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, "license": "ISC" }, "node_modules/graphemer": { @@ -9122,30 +9099,6 @@ "tslib": "^2.8.0" } }, - "node_modules/ioredis": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.1.tgz", - "integrity": "sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==", - "license": "MIT", - "dependencies": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" - } - }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -9606,6 +9559,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, "license": "ISC", "engines": { "node": ">=16" @@ -10112,24 +10066,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "license": "MIT" - }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", "license": "MIT" }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "license": "MIT" - }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", @@ -10481,6 +10423,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "dev": true, "license": "MIT", "dependencies": { "minipass": "^7.1.2" @@ -10493,6 +10436,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" @@ -14470,18 +14414,6 @@ "node": ">= 0.6" } }, - "node_modules/rate-limit-redis": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/rate-limit-redis/-/rate-limit-redis-4.2.1.tgz", - "integrity": "sha512-JsUsVmRVI6G/XrlYtfGV1NMCbGS/CVYayHkxD5Ism5FaL8qpFHCXbFkUeIi5WJ/onJOKWCgtB/xtCLa6qSXb4g==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "peerDependencies": { - "express-rate-limit": ">= 6" - } - }, "node_modules/raw-body": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", @@ -14828,27 +14760,6 @@ "node": ">=0.8.8" } }, - "node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "license": "MIT", - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -15628,12 +15539,6 @@ "node": "*" } }, - "node_modules/standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "license": "MIT" - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -16021,6 +15926,7 @@ "version": "7.4.3", "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dev": true, "license": "ISC", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -16667,6 +16573,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^3.1.1" @@ -16972,6 +16879,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=18" From 2259879595da744ace17172e1815182b06313d8a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 22 Jul 2025 19:07:43 +0000 Subject: [PATCH 3/8] Fix ESLint issues: prefer-const warnings and missing semicolons Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com> --- server/lib/ip.ts | 4 ++-- server/lib/rateLimitStore.ts | 2 +- server/routers/accessToken/listAccessTokens.ts | 2 +- server/routers/gerbil/getAllRelays.ts | 4 ++-- server/routers/gerbil/getConfig.ts | 2 +- server/routers/gerbil/updateHolePunch.ts | 2 +- server/routers/idp/createOidcIdp.ts | 2 +- server/routers/idp/updateOidcIdp.ts | 2 +- server/routers/idp/validateOidcCallback.ts | 4 ++-- server/routers/newt/handleNewtPingRequestMessage.ts | 2 +- server/routers/olm/handleOlmPingMessage.ts | 4 ++-- server/routers/resource/createResource.ts | 2 +- server/routers/resource/listResourceRules.ts | 4 ++-- server/routers/resource/listResources.ts | 2 +- server/routers/role/listRoles.ts | 2 +- server/routers/site/listSites.ts | 2 +- server/routers/site/pickSiteDefaults.ts | 2 +- server/routers/target/helpers.ts | 6 +++--- server/routers/target/listTargets.ts | 4 ++-- server/routers/ws/ws.ts | 2 +- server/setup/scriptsPg/1.6.0.ts | 3 +-- server/setup/scriptsSqlite/1.0.0-beta10.ts | 3 +-- server/setup/scriptsSqlite/1.0.0-beta12.ts | 3 +-- server/setup/scriptsSqlite/1.0.0-beta15.ts | 3 +-- server/setup/scriptsSqlite/1.0.0-beta2.ts | 3 +-- server/setup/scriptsSqlite/1.0.0-beta3.ts | 3 +-- server/setup/scriptsSqlite/1.0.0-beta5.ts | 3 +-- server/setup/scriptsSqlite/1.0.0-beta6.ts | 3 +-- server/setup/scriptsSqlite/1.0.0-beta9.ts | 7 +++---- server/setup/scriptsSqlite/1.2.0.ts | 3 +-- server/setup/scriptsSqlite/1.3.0.ts | 2 +- server/setup/scriptsSqlite/1.5.0.ts | 3 +-- server/setup/scriptsSqlite/1.6.0.ts | 3 +-- src/app/[orgId]/settings/api-keys/create/page.tsx | 2 +- .../settings/resources/[resourceId]/ResourceInfoBox.tsx | 2 +- .../[orgId]/settings/resources/[resourceId]/proxy/page.tsx | 2 +- .../[orgId]/settings/resources/[resourceId]/rules/page.tsx | 4 ++-- src/app/admin/api-keys/create/page.tsx | 2 +- src/app/layout.tsx | 2 +- 39 files changed, 50 insertions(+), 62 deletions(-) diff --git a/server/lib/ip.ts b/server/lib/ip.ts index ad952098..c929f025 100644 --- a/server/lib/ip.ts +++ b/server/lib/ip.ts @@ -271,7 +271,7 @@ export async function getNextAvailableClientSubnet( ) ].filter((address) => address !== null) as string[]; - let subnet = findNextAvailableCidr(addresses, 32, org.subnet); // pick the sites address in the org + const subnet = findNextAvailableCidr(addresses, 32, org.subnet); // pick the sites address in the org if (!subnet) { throw new Error("No available subnets remaining in space"); } @@ -289,7 +289,7 @@ export async function getNextAvailableOrgSubnet(): Promise { const addresses = existingAddresses.map((org) => org.subnet!); - let subnet = findNextAvailableCidr( + const subnet = findNextAvailableCidr( addresses, config.getRawConfig().orgs.block_size, config.getRawConfig().orgs.subnet_group diff --git a/server/lib/rateLimitStore.ts b/server/lib/rateLimitStore.ts index 2f6dc675..56adad98 100644 --- a/server/lib/rateLimitStore.ts +++ b/server/lib/rateLimitStore.ts @@ -1,6 +1,6 @@ import { MemoryStore, Store } from "express-rate-limit"; export function createStore(): Store { - let rateLimitStore: Store = new MemoryStore(); + const rateLimitStore: Store = new MemoryStore(); return rateLimitStore; } diff --git a/server/routers/accessToken/listAccessTokens.ts b/server/routers/accessToken/listAccessTokens.ts index d021c79d..7e9ca087 100644 --- a/server/routers/accessToken/listAccessTokens.ts +++ b/server/routers/accessToken/listAccessTokens.ts @@ -222,7 +222,7 @@ export async function listAccessTokens( (resource) => resource.resourceId ); - let countQuery: any = db + const countQuery: any = db .select({ count: count() }) .from(resources) .where(inArray(resources.resourceId, accessibleResourceIds)); diff --git a/server/routers/gerbil/getAllRelays.ts b/server/routers/gerbil/getAllRelays.ts index abe4d593..aa87c187 100644 --- a/server/routers/gerbil/getAllRelays.ts +++ b/server/routers/gerbil/getAllRelays.ts @@ -48,7 +48,7 @@ export async function getAllRelays( } // Fetch exit node - let [exitNode] = await db.select().from(exitNodes).where(eq(exitNodes.publicKey, publicKey)); + const [exitNode] = await db.select().from(exitNodes).where(eq(exitNodes.publicKey, publicKey)); if (!exitNode) { return next(createHttpError(HttpCode.NOT_FOUND, "Exit node not found")); } @@ -63,7 +63,7 @@ export async function getAllRelays( } // Initialize mappings object for multi-peer support - let mappings: { [key: string]: ProxyMapping } = {}; + const mappings: { [key: string]: ProxyMapping } = {}; // Process each site for (const site of sitesRes) { diff --git a/server/routers/gerbil/getConfig.ts b/server/routers/gerbil/getConfig.ts index d5ec6ced..696e7ea2 100644 --- a/server/routers/gerbil/getConfig.ts +++ b/server/routers/gerbil/getConfig.ts @@ -112,7 +112,7 @@ export async function getConfig( ) ); - let peers = await Promise.all( + const peers = await Promise.all( sitesRes.map(async (site) => { if (site.type === "wireguard") { return { diff --git a/server/routers/gerbil/updateHolePunch.ts b/server/routers/gerbil/updateHolePunch.ts index c48f7551..e00ca59d 100644 --- a/server/routers/gerbil/updateHolePunch.ts +++ b/server/routers/gerbil/updateHolePunch.ts @@ -47,7 +47,7 @@ export async function updateHolePunch( let currentSiteId: number | undefined; - let destinations: PeerDestination[] = []; + const destinations: PeerDestination[] = []; if (olmId) { logger.debug(`Got hole punch with ip: ${ip}, port: ${port} for olmId: ${olmId}`); diff --git a/server/routers/idp/createOidcIdp.ts b/server/routers/idp/createOidcIdp.ts index 51700701..aac5d15e 100644 --- a/server/routers/idp/createOidcIdp.ts +++ b/server/routers/idp/createOidcIdp.ts @@ -68,7 +68,7 @@ export async function createOidcIdp( ); } - let { + const { clientId, clientSecret, authUrl, diff --git a/server/routers/idp/updateOidcIdp.ts b/server/routers/idp/updateOidcIdp.ts index 2f4e3c66..58771b33 100644 --- a/server/routers/idp/updateOidcIdp.ts +++ b/server/routers/idp/updateOidcIdp.ts @@ -85,7 +85,7 @@ export async function updateOidcIdp( } const { idpId } = parsedParams.data; - let { + const { clientId, clientSecret, authUrl, diff --git a/server/routers/idp/validateOidcCallback.ts b/server/routers/idp/validateOidcCallback.ts index 9991ba9c..3a643386 100644 --- a/server/routers/idp/validateOidcCallback.ts +++ b/server/routers/idp/validateOidcCallback.ts @@ -238,7 +238,7 @@ export async function validateOidcCallback( const defaultRoleMapping = existingIdp.idp.defaultRoleMapping; const defaultOrgMapping = existingIdp.idp.defaultOrgMapping; - let userOrgInfo: { orgId: string; roleId: number }[] = []; + const userOrgInfo: { orgId: string; roleId: number }[] = []; for (const org of allOrgs) { const [idpOrgRes] = await db .select() @@ -314,7 +314,7 @@ export async function validateOidcCallback( let existingUserId = existingUser?.userId; - let orgUserCounts: { orgId: string; userCount: number }[] = []; + const orgUserCounts: { orgId: string; userCount: number }[] = []; // sync the user with the orgs and roles await db.transaction(async (trx) => { diff --git a/server/routers/newt/handleNewtPingRequestMessage.ts b/server/routers/newt/handleNewtPingRequestMessage.ts index 91266434..65edea61 100644 --- a/server/routers/newt/handleNewtPingRequestMessage.ts +++ b/server/routers/newt/handleNewtPingRequestMessage.ts @@ -55,7 +55,7 @@ export const handleNewtPingRequestMessage: MessageHandler = async (context) => { ); if (currentConnections.count >= maxConnections) { - return null + return null; } weight = diff --git a/server/routers/olm/handleOlmPingMessage.ts b/server/routers/olm/handleOlmPingMessage.ts index 941f7638..c95f36af 100644 --- a/server/routers/olm/handleOlmPingMessage.ts +++ b/server/routers/olm/handleOlmPingMessage.ts @@ -37,7 +37,7 @@ export const startOfflineChecker = (): void => { }, OFFLINE_CHECK_INTERVAL); logger.info("Started offline checker interval"); -} +}; /** * Stops the background interval that checks for offline clients @@ -48,7 +48,7 @@ export const stopOfflineChecker = (): void => { offlineCheckerInterval = null; logger.info("Stopped offline checker interval"); } -} +}; /** * Handles ping messages from clients and responds with pong diff --git a/server/routers/resource/createResource.ts b/server/routers/resource/createResource.ts index 8f16b198..6cc53066 100644 --- a/server/routers/resource/createResource.ts +++ b/server/routers/resource/createResource.ts @@ -51,7 +51,7 @@ const createHttpResourceSchema = z return true; }, { message: "Invalid subdomain" } - ) + ); const createRawResourceSchema = z .object({ diff --git a/server/routers/resource/listResourceRules.ts b/server/routers/resource/listResourceRules.ts index ff96afea..727d50ba 100644 --- a/server/routers/resource/listResourceRules.ts +++ b/server/routers/resource/listResourceRules.ts @@ -35,7 +35,7 @@ const listResourceRulesSchema = z.object({ }); function queryResourceRules(resourceId: number) { - let baseQuery = db + const baseQuery = db .select({ ruleId: resourceRules.ruleId, resourceId: resourceRules.resourceId, @@ -117,7 +117,7 @@ export async function listResourceRules( const baseQuery = queryResourceRules(resourceId); - let countQuery = db + const countQuery = db .select({ count: sql`cast(count(*) as integer)` }) .from(resourceRules) .where(eq(resourceRules.resourceId, resourceId)); diff --git a/server/routers/resource/listResources.ts b/server/routers/resource/listResources.ts index 3fb2a733..6df56001 100644 --- a/server/routers/resource/listResources.ts +++ b/server/routers/resource/listResources.ts @@ -231,7 +231,7 @@ export async function listResources( (resource) => resource.resourceId ); - let countQuery: any = db + const countQuery: any = db .select({ count: count() }) .from(resources) .where(inArray(resources.resourceId, accessibleResourceIds)); diff --git a/server/routers/role/listRoles.ts b/server/routers/role/listRoles.ts index 7e838956..a63b285b 100644 --- a/server/routers/role/listRoles.ts +++ b/server/routers/role/listRoles.ts @@ -100,7 +100,7 @@ export async function listRoles( const { orgId } = parsedParams.data; - let countQuery: any = db + const countQuery: any = db .select({ count: sql`cast(count(*) as integer)` }) .from(roles) .where(eq(roles.orgId, orgId)); diff --git a/server/routers/site/listSites.ts b/server/routers/site/listSites.ts index 6227ef28..bdf44026 100644 --- a/server/routers/site/listSites.ts +++ b/server/routers/site/listSites.ts @@ -176,7 +176,7 @@ export async function listSites( const accessibleSiteIds = accessibleSites.map((site) => site.siteId); const baseQuery = querySites(orgId, accessibleSiteIds); - let countQuery = db + const countQuery = db .select({ count: count() }) .from(sites) .where( diff --git a/server/routers/site/pickSiteDefaults.ts b/server/routers/site/pickSiteDefaults.ts index 2ae25c11..d6309d0c 100644 --- a/server/routers/site/pickSiteDefaults.ts +++ b/server/routers/site/pickSiteDefaults.ts @@ -86,7 +86,7 @@ export async function pickSiteDefaults( .where(eq(sites.exitNodeId, exitNode.exitNodeId)); // TODO: we need to lock this subnet for some time so someone else does not take it - let subnets = sitesQuery.map((site) => site.subnet).filter((subnet) => subnet !== null); + const subnets = sitesQuery.map((site) => site.subnet).filter((subnet) => subnet !== null); // exclude the exit node address by replacing after the / with a site block size subnets.push( exitNode.address.replace( diff --git a/server/routers/target/helpers.ts b/server/routers/target/helpers.ts index 5b65feb7..e5aa2ba9 100644 --- a/server/routers/target/helpers.ts +++ b/server/routers/target/helpers.ts @@ -2,7 +2,7 @@ import { db } from "@server/db"; import { resources, targets } from "@server/db"; import { eq } from "drizzle-orm"; -let currentBannedPorts: number[] = []; +const currentBannedPorts: number[] = []; export async function pickPort(siteId: number): Promise<{ internalPort: number; @@ -15,8 +15,8 @@ export async function pickPort(siteId: number): Promise<{ // TODO: is this all inefficient? // Fetch targets for all resources of this site - let targetIps: string[] = []; - let targetInternalPorts: number[] = []; + const targetIps: string[] = []; + const targetInternalPorts: number[] = []; await Promise.all( resourcesRes.map(async (resource) => { const targetsRes = await db diff --git a/server/routers/target/listTargets.ts b/server/routers/target/listTargets.ts index 86599fa1..44f27d48 100644 --- a/server/routers/target/listTargets.ts +++ b/server/routers/target/listTargets.ts @@ -35,7 +35,7 @@ const listTargetsSchema = z.object({ }); function queryTargets(resourceId: number) { - let baseQuery = db + const baseQuery = db .select({ targetId: targets.targetId, ip: targets.ip, @@ -99,7 +99,7 @@ export async function listTargets( const baseQuery = queryTargets(resourceId); - let countQuery = db + const countQuery = db .select({ count: sql`cast(count(*) as integer)` }) .from(targets) .where(eq(targets.resourceId, resourceId)); diff --git a/server/routers/ws/ws.ts b/server/routers/ws/ws.ts index 0d9f84d3..8fb773d3 100644 --- a/server/routers/ws/ws.ts +++ b/server/routers/ws/ws.ts @@ -62,7 +62,7 @@ const wss: WebSocketServer = new WebSocketServer({ noServer: true }); const NODE_ID = uuidv4(); // Client tracking map (local to this node) -let connectedClients: Map = new Map(); +const connectedClients: Map = new Map(); // Helper to get map key const getClientMapKey = (clientId: string) => clientId; diff --git a/server/setup/scriptsPg/1.6.0.ts b/server/setup/scriptsPg/1.6.0.ts index 62beb0e0..48fd8a8a 100644 --- a/server/setup/scriptsPg/1.6.0.ts +++ b/server/setup/scriptsPg/1.6.0.ts @@ -36,9 +36,8 @@ export default async function migration() { } // Read and parse the YAML file - let rawConfig: any; const fileContents = fs.readFileSync(filePath, "utf8"); - rawConfig = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); if (rawConfig.server?.trust_proxy) { rawConfig.server.trust_proxy = 1; diff --git a/server/setup/scriptsSqlite/1.0.0-beta10.ts b/server/setup/scriptsSqlite/1.0.0-beta10.ts index 6fd5289b..20d2a873 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta10.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta10.ts @@ -23,9 +23,8 @@ export default async function migration() { } // Read and parse the YAML file - let rawConfig: any; const fileContents = fs.readFileSync(filePath, "utf8"); - rawConfig = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); delete rawConfig.server.secure_cookies; diff --git a/server/setup/scriptsSqlite/1.0.0-beta12.ts b/server/setup/scriptsSqlite/1.0.0-beta12.ts index a400b3a6..e6656b88 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta12.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta12.ts @@ -25,9 +25,8 @@ export default async function migration() { } // Read and parse the YAML file - let rawConfig: any; const fileContents = fs.readFileSync(filePath, "utf8"); - rawConfig = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); if (!rawConfig.flags) { rawConfig.flags = {}; diff --git a/server/setup/scriptsSqlite/1.0.0-beta15.ts b/server/setup/scriptsSqlite/1.0.0-beta15.ts index e50558a5..bfc9259b 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta15.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta15.ts @@ -30,9 +30,8 @@ export default async function migration() { } // Read and parse the YAML file - let rawConfig: any; const fileContents = fs.readFileSync(filePath, "utf8"); - rawConfig = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); const baseDomain = rawConfig.app.base_domain; const certResolver = rawConfig.traefik.cert_resolver; diff --git a/server/setup/scriptsSqlite/1.0.0-beta2.ts b/server/setup/scriptsSqlite/1.0.0-beta2.ts index f8aa9bc3..306c0343 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta2.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta2.ts @@ -22,9 +22,8 @@ export default async function migration() { } // Read and parse the YAML file - let rawConfig: any; const fileContents = fs.readFileSync(filePath, "utf8"); - rawConfig = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); // Validate the structure if (!rawConfig.app || !rawConfig.app.base_url) { diff --git a/server/setup/scriptsSqlite/1.0.0-beta3.ts b/server/setup/scriptsSqlite/1.0.0-beta3.ts index 3bbaae81..cd61d989 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta3.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta3.ts @@ -22,9 +22,8 @@ export default async function migration() { } // Read and parse the YAML file - let rawConfig: any; const fileContents = fs.readFileSync(filePath, "utf8"); - rawConfig = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); // Validate the structure if (!rawConfig.gerbil) { diff --git a/server/setup/scriptsSqlite/1.0.0-beta5.ts b/server/setup/scriptsSqlite/1.0.0-beta5.ts index f0555121..e4727c31 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta5.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta5.ts @@ -25,9 +25,8 @@ export default async function migration() { } // Read and parse the YAML file - let rawConfig: any; const fileContents = fs.readFileSync(filePath, "utf8"); - rawConfig = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); // Validate the structure if (!rawConfig.server) { diff --git a/server/setup/scriptsSqlite/1.0.0-beta6.ts b/server/setup/scriptsSqlite/1.0.0-beta6.ts index 8fbb1387..0ab33348 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta6.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta6.ts @@ -23,9 +23,8 @@ export default async function migration() { } // Read and parse the YAML file - let rawConfig: any; const fileContents = fs.readFileSync(filePath, "utf8"); - rawConfig = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); // Validate the structure if (!rawConfig.server) { diff --git a/server/setup/scriptsSqlite/1.0.0-beta9.ts b/server/setup/scriptsSqlite/1.0.0-beta9.ts index c731996b..647fc8f2 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta9.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta9.ts @@ -58,9 +58,8 @@ export default async function migration() { } // Read and parse the YAML file - let rawConfig: any; const fileContents = fs.readFileSync(filePath, "utf8"); - rawConfig = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); rawConfig.server.resource_session_request_param = "p_session_request"; @@ -122,7 +121,7 @@ export default async function migration() { const traefikFileContents = fs.readFileSync(traefikPath, "utf8"); const traefikConfig = yaml.load(traefikFileContents) as any; - let parsedConfig: any = schema.safeParse(traefikConfig); + const parsedConfig: any = schema.safeParse(traefikConfig); if (parsedConfig.success) { // Ensure websecure entrypoint exists @@ -179,7 +178,7 @@ export default async function migration() { const traefikFileContents = fs.readFileSync(traefikPath, "utf8"); const traefikConfig = yaml.load(traefikFileContents) as any; - let parsedConfig: any = schema.safeParse(traefikConfig); + const parsedConfig: any = schema.safeParse(traefikConfig); if (parsedConfig.success) { // delete permanent from redirect-to-https middleware diff --git a/server/setup/scriptsSqlite/1.2.0.ts b/server/setup/scriptsSqlite/1.2.0.ts index 940d38e6..06bad0b9 100644 --- a/server/setup/scriptsSqlite/1.2.0.ts +++ b/server/setup/scriptsSqlite/1.2.0.ts @@ -43,9 +43,8 @@ export default async function migration() { } // Read and parse the YAML file - let rawConfig: any; const fileContents = fs.readFileSync(filePath, "utf8"); - rawConfig = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); if (!rawConfig.flags) { rawConfig.flags = {}; diff --git a/server/setup/scriptsSqlite/1.3.0.ts b/server/setup/scriptsSqlite/1.3.0.ts index a75dc207..3f9f4bbb 100644 --- a/server/setup/scriptsSqlite/1.3.0.ts +++ b/server/setup/scriptsSqlite/1.3.0.ts @@ -177,7 +177,7 @@ export default async function migration() { } const fileContents = fs.readFileSync(filePath, "utf8"); - let rawConfig: any = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); if (!rawConfig.server.secret) { rawConfig.server.secret = generateIdFromEntropySize(32); diff --git a/server/setup/scriptsSqlite/1.5.0.ts b/server/setup/scriptsSqlite/1.5.0.ts index 69fe7053..d4067872 100644 --- a/server/setup/scriptsSqlite/1.5.0.ts +++ b/server/setup/scriptsSqlite/1.5.0.ts @@ -44,9 +44,8 @@ export default async function migration() { } // Read and parse the YAML file - let rawConfig: any; const fileContents = fs.readFileSync(filePath, "utf8"); - rawConfig = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); if (rawConfig.cors?.headers) { const headers = JSON.parse( diff --git a/server/setup/scriptsSqlite/1.6.0.ts b/server/setup/scriptsSqlite/1.6.0.ts index b27fedb5..0307d5c9 100644 --- a/server/setup/scriptsSqlite/1.6.0.ts +++ b/server/setup/scriptsSqlite/1.6.0.ts @@ -45,9 +45,8 @@ export default async function migration() { } // Read and parse the YAML file - let rawConfig: any; const fileContents = fs.readFileSync(filePath, "utf8"); - rawConfig = yaml.load(fileContents); + const rawConfig: any = yaml.load(fileContents); if (rawConfig.server?.trust_proxy) { rawConfig.server.trust_proxy = 1; diff --git a/src/app/[orgId]/settings/api-keys/create/page.tsx b/src/app/[orgId]/settings/api-keys/create/page.tsx index 2e40522e..82a7915c 100644 --- a/src/app/[orgId]/settings/api-keys/create/page.tsx +++ b/src/app/[orgId]/settings/api-keys/create/page.tsx @@ -108,7 +108,7 @@ export default function Page() { async function onSubmit(data: CreateFormValues) { setCreateLoading(true); - let payload: CreateOrgApiKeyBody = { + const payload: CreateOrgApiKeyBody = { name: data.name }; diff --git a/src/app/[orgId]/settings/resources/[resourceId]/ResourceInfoBox.tsx b/src/app/[orgId]/settings/resources/[resourceId]/ResourceInfoBox.tsx index 717e4d49..9291892a 100644 --- a/src/app/[orgId]/settings/resources/[resourceId]/ResourceInfoBox.tsx +++ b/src/app/[orgId]/settings/resources/[resourceId]/ResourceInfoBox.tsx @@ -28,7 +28,7 @@ export default function ResourceInfoBox({}: ResourceInfoBoxType) { const { isEnabled, isAvailable } = useDockerSocket(site!); const t = useTranslations(); - let fullUrl = `${resource.ssl ? "https" : "http"}://${resource.fullDomain}`; + const fullUrl = `${resource.ssl ? "https" : "http"}://${resource.fullDomain}`; return ( diff --git a/src/app/[orgId]/settings/resources/[resourceId]/proxy/page.tsx b/src/app/[orgId]/settings/resources/[resourceId]/proxy/page.tsx index dee0dd66..7ab02c7e 100644 --- a/src/app/[orgId]/settings/resources/[resourceId]/proxy/page.tsx +++ b/src/app/[orgId]/settings/resources/[resourceId]/proxy/page.tsx @@ -327,7 +327,7 @@ export default function ReverseProxyTargets(props: { setProxySettingsLoading(true); // Save targets - for (let target of targets) { + for (const target of targets) { const data = { ip: target.ip, port: target.port, diff --git a/src/app/[orgId]/settings/resources/[resourceId]/rules/page.tsx b/src/app/[orgId]/settings/resources/[resourceId]/rules/page.tsx index 2f7d03ee..21c74311 100644 --- a/src/app/[orgId]/settings/resources/[resourceId]/rules/page.tsx +++ b/src/app/[orgId]/settings/resources/[resourceId]/rules/page.tsx @@ -271,7 +271,7 @@ export default function ResourceRules(props: { } // Save rules - for (let rule of rules) { + for (const rule of rules) { const data = { action: rule.action, match: rule.match, @@ -348,7 +348,7 @@ export default function ResourceRules(props: { setRules([ ...rules.map((r) => { - let res = { + const res = { ...r, new: false, updated: false diff --git a/src/app/admin/api-keys/create/page.tsx b/src/app/admin/api-keys/create/page.tsx index 3b6aac82..2f95c7fd 100644 --- a/src/app/admin/api-keys/create/page.tsx +++ b/src/app/admin/api-keys/create/page.tsx @@ -106,7 +106,7 @@ export default function Page() { async function onSubmit(data: CreateFormValues) { setCreateLoading(true); - let payload: CreateOrgApiKeyBody = { + const payload: CreateOrgApiKeyBody = { name: data.name }; diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 1ad8d10a..e8b9c681 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -34,7 +34,7 @@ export default async function RootLayout({ const env = pullEnv(); const locale = await getLocale(); - let supporterData = { + const supporterData = { visible: true } as any; From a2526ea2441a47e666f21afed2990af13c615f98 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 28 Jul 2025 17:30:21 +0000 Subject: [PATCH 4/8] Revert mappings variable from const to let in getAllRelays.ts Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com> --- server/routers/gerbil/getAllRelays.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/routers/gerbil/getAllRelays.ts b/server/routers/gerbil/getAllRelays.ts index aa87c187..9e7563b7 100644 --- a/server/routers/gerbil/getAllRelays.ts +++ b/server/routers/gerbil/getAllRelays.ts @@ -63,7 +63,7 @@ export async function getAllRelays( } // Initialize mappings object for multi-peer support - const mappings: { [key: string]: ProxyMapping } = {}; + let mappings: { [key: string]: ProxyMapping } = {}; // Process each site for (const site of sitesRes) { From 27ac204bb6adc8adf748077f86a47633671aee27 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 28 Jul 2025 17:43:40 +0000 Subject: [PATCH 5/8] Fix variables incorrectly changed from let to const - revert to let where variables are reassigned Co-authored-by: oschwartz10612 <4999704+oschwartz10612@users.noreply.github.com> --- server/routers/gerbil/updateHolePunch.ts | 2 +- server/routers/site/pickSiteDefaults.ts | 2 +- server/routers/ws/ws.ts | 2 +- server/setup/scriptsPg/1.6.0.ts | 3 ++- server/setup/scriptsSqlite/1.0.0-beta10.ts | 3 ++- server/setup/scriptsSqlite/1.0.0-beta12.ts | 3 ++- server/setup/scriptsSqlite/1.0.0-beta15.ts | 3 ++- server/setup/scriptsSqlite/1.0.0-beta2.ts | 3 ++- server/setup/scriptsSqlite/1.0.0-beta3.ts | 3 ++- server/setup/scriptsSqlite/1.0.0-beta5.ts | 3 ++- server/setup/scriptsSqlite/1.0.0-beta6.ts | 3 ++- server/setup/scriptsSqlite/1.0.0-beta9.ts | 3 ++- server/setup/scriptsSqlite/1.2.0.ts | 3 ++- server/setup/scriptsSqlite/1.3.0.ts | 3 ++- server/setup/scriptsSqlite/1.5.0.ts | 3 ++- server/setup/scriptsSqlite/1.6.0.ts | 3 ++- src/app/layout.tsx | 2 +- 17 files changed, 30 insertions(+), 17 deletions(-) diff --git a/server/routers/gerbil/updateHolePunch.ts b/server/routers/gerbil/updateHolePunch.ts index e00ca59d..c48f7551 100644 --- a/server/routers/gerbil/updateHolePunch.ts +++ b/server/routers/gerbil/updateHolePunch.ts @@ -47,7 +47,7 @@ export async function updateHolePunch( let currentSiteId: number | undefined; - const destinations: PeerDestination[] = []; + let destinations: PeerDestination[] = []; if (olmId) { logger.debug(`Got hole punch with ip: ${ip}, port: ${port} for olmId: ${olmId}`); diff --git a/server/routers/site/pickSiteDefaults.ts b/server/routers/site/pickSiteDefaults.ts index d6309d0c..2ae25c11 100644 --- a/server/routers/site/pickSiteDefaults.ts +++ b/server/routers/site/pickSiteDefaults.ts @@ -86,7 +86,7 @@ export async function pickSiteDefaults( .where(eq(sites.exitNodeId, exitNode.exitNodeId)); // TODO: we need to lock this subnet for some time so someone else does not take it - const subnets = sitesQuery.map((site) => site.subnet).filter((subnet) => subnet !== null); + let subnets = sitesQuery.map((site) => site.subnet).filter((subnet) => subnet !== null); // exclude the exit node address by replacing after the / with a site block size subnets.push( exitNode.address.replace( diff --git a/server/routers/ws/ws.ts b/server/routers/ws/ws.ts index 8fb773d3..0d9f84d3 100644 --- a/server/routers/ws/ws.ts +++ b/server/routers/ws/ws.ts @@ -62,7 +62,7 @@ const wss: WebSocketServer = new WebSocketServer({ noServer: true }); const NODE_ID = uuidv4(); // Client tracking map (local to this node) -const connectedClients: Map = new Map(); +let connectedClients: Map = new Map(); // Helper to get map key const getClientMapKey = (clientId: string) => clientId; diff --git a/server/setup/scriptsPg/1.6.0.ts b/server/setup/scriptsPg/1.6.0.ts index 48fd8a8a..4e23fe4d 100644 --- a/server/setup/scriptsPg/1.6.0.ts +++ b/server/setup/scriptsPg/1.6.0.ts @@ -37,7 +37,8 @@ export default async function migration() { // Read and parse the YAML file const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); if (rawConfig.server?.trust_proxy) { rawConfig.server.trust_proxy = 1; diff --git a/server/setup/scriptsSqlite/1.0.0-beta10.ts b/server/setup/scriptsSqlite/1.0.0-beta10.ts index 20d2a873..cf988f04 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta10.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta10.ts @@ -24,7 +24,8 @@ export default async function migration() { // Read and parse the YAML file const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); delete rawConfig.server.secure_cookies; diff --git a/server/setup/scriptsSqlite/1.0.0-beta12.ts b/server/setup/scriptsSqlite/1.0.0-beta12.ts index e6656b88..2fbc00b6 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta12.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta12.ts @@ -26,7 +26,8 @@ export default async function migration() { // Read and parse the YAML file const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); if (!rawConfig.flags) { rawConfig.flags = {}; diff --git a/server/setup/scriptsSqlite/1.0.0-beta15.ts b/server/setup/scriptsSqlite/1.0.0-beta15.ts index bfc9259b..ef82d029 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta15.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta15.ts @@ -31,7 +31,8 @@ export default async function migration() { // Read and parse the YAML file const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); const baseDomain = rawConfig.app.base_domain; const certResolver = rawConfig.traefik.cert_resolver; diff --git a/server/setup/scriptsSqlite/1.0.0-beta2.ts b/server/setup/scriptsSqlite/1.0.0-beta2.ts index 306c0343..b2ad8386 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta2.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta2.ts @@ -23,7 +23,8 @@ export default async function migration() { // Read and parse the YAML file const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); // Validate the structure if (!rawConfig.app || !rawConfig.app.base_url) { diff --git a/server/setup/scriptsSqlite/1.0.0-beta3.ts b/server/setup/scriptsSqlite/1.0.0-beta3.ts index cd61d989..36fab908 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta3.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta3.ts @@ -23,7 +23,8 @@ export default async function migration() { // Read and parse the YAML file const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); // Validate the structure if (!rawConfig.gerbil) { diff --git a/server/setup/scriptsSqlite/1.0.0-beta5.ts b/server/setup/scriptsSqlite/1.0.0-beta5.ts index e4727c31..44412ad0 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta5.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta5.ts @@ -26,7 +26,8 @@ export default async function migration() { // Read and parse the YAML file const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); // Validate the structure if (!rawConfig.server) { diff --git a/server/setup/scriptsSqlite/1.0.0-beta6.ts b/server/setup/scriptsSqlite/1.0.0-beta6.ts index 0ab33348..ba927b35 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta6.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta6.ts @@ -24,7 +24,8 @@ export default async function migration() { // Read and parse the YAML file const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); // Validate the structure if (!rawConfig.server) { diff --git a/server/setup/scriptsSqlite/1.0.0-beta9.ts b/server/setup/scriptsSqlite/1.0.0-beta9.ts index 647fc8f2..58f1d5d3 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta9.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta9.ts @@ -59,7 +59,8 @@ export default async function migration() { // Read and parse the YAML file const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); rawConfig.server.resource_session_request_param = "p_session_request"; diff --git a/server/setup/scriptsSqlite/1.2.0.ts b/server/setup/scriptsSqlite/1.2.0.ts index 06bad0b9..22862210 100644 --- a/server/setup/scriptsSqlite/1.2.0.ts +++ b/server/setup/scriptsSqlite/1.2.0.ts @@ -44,7 +44,8 @@ export default async function migration() { // Read and parse the YAML file const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); if (!rawConfig.flags) { rawConfig.flags = {}; diff --git a/server/setup/scriptsSqlite/1.3.0.ts b/server/setup/scriptsSqlite/1.3.0.ts index 3f9f4bbb..820ce0ad 100644 --- a/server/setup/scriptsSqlite/1.3.0.ts +++ b/server/setup/scriptsSqlite/1.3.0.ts @@ -177,7 +177,8 @@ export default async function migration() { } const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); if (!rawConfig.server.secret) { rawConfig.server.secret = generateIdFromEntropySize(32); diff --git a/server/setup/scriptsSqlite/1.5.0.ts b/server/setup/scriptsSqlite/1.5.0.ts index d4067872..30dd98e7 100644 --- a/server/setup/scriptsSqlite/1.5.0.ts +++ b/server/setup/scriptsSqlite/1.5.0.ts @@ -45,7 +45,8 @@ export default async function migration() { // Read and parse the YAML file const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); if (rawConfig.cors?.headers) { const headers = JSON.parse( diff --git a/server/setup/scriptsSqlite/1.6.0.ts b/server/setup/scriptsSqlite/1.6.0.ts index 0307d5c9..35915b7d 100644 --- a/server/setup/scriptsSqlite/1.6.0.ts +++ b/server/setup/scriptsSqlite/1.6.0.ts @@ -46,7 +46,8 @@ export default async function migration() { // Read and parse the YAML file const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig: any = yaml.load(fileContents); + let rawConfig: any; + rawConfig = yaml.load(fileContents); if (rawConfig.server?.trust_proxy) { rawConfig.server.trust_proxy = 1; diff --git a/src/app/layout.tsx b/src/app/layout.tsx index e8b9c681..1ad8d10a 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -34,7 +34,7 @@ export default async function RootLayout({ const env = pullEnv(); const locale = await getLocale(); - const supporterData = { + let supporterData = { visible: true } as any; From 4701da201d83b9a005909a267bb10eeacd81691c Mon Sep 17 00:00:00 2001 From: Owen Date: Sun, 10 Aug 2025 10:09:52 -0700 Subject: [PATCH 6/8] Fix a few consts to lets --- server/routers/idp/validateOidcCallback.ts | 4 ++-- server/routers/target/helpers.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/routers/idp/validateOidcCallback.ts b/server/routers/idp/validateOidcCallback.ts index 3a643386..9991ba9c 100644 --- a/server/routers/idp/validateOidcCallback.ts +++ b/server/routers/idp/validateOidcCallback.ts @@ -238,7 +238,7 @@ export async function validateOidcCallback( const defaultRoleMapping = existingIdp.idp.defaultRoleMapping; const defaultOrgMapping = existingIdp.idp.defaultOrgMapping; - const userOrgInfo: { orgId: string; roleId: number }[] = []; + let userOrgInfo: { orgId: string; roleId: number }[] = []; for (const org of allOrgs) { const [idpOrgRes] = await db .select() @@ -314,7 +314,7 @@ export async function validateOidcCallback( let existingUserId = existingUser?.userId; - const orgUserCounts: { orgId: string; userCount: number }[] = []; + let orgUserCounts: { orgId: string; userCount: number }[] = []; // sync the user with the orgs and roles await db.transaction(async (trx) => { diff --git a/server/routers/target/helpers.ts b/server/routers/target/helpers.ts index e5aa2ba9..aa45d8ba 100644 --- a/server/routers/target/helpers.ts +++ b/server/routers/target/helpers.ts @@ -15,8 +15,8 @@ export async function pickPort(siteId: number): Promise<{ // TODO: is this all inefficient? // Fetch targets for all resources of this site - const targetIps: string[] = []; - const targetInternalPorts: number[] = []; + let targetIps: string[] = []; + let targetInternalPorts: number[] = []; await Promise.all( resourcesRes.map(async (resource) => { const targetsRes = await db From c3723d0fce1b60094d8d32e61a330a0bed9a1e8a Mon Sep 17 00:00:00 2001 From: Owen Date: Sun, 10 Aug 2025 10:14:04 -0700 Subject: [PATCH 7/8] Add semi --- src/app/[orgId]/settings/clients/ClientsTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/[orgId]/settings/clients/ClientsTable.tsx b/src/app/[orgId]/settings/clients/ClientsTable.tsx index 89766dfc..7fa81622 100644 --- a/src/app/[orgId]/settings/clients/ClientsTable.tsx +++ b/src/app/[orgId]/settings/clients/ClientsTable.tsx @@ -290,7 +290,7 @@ export default function ClientsTable({ clients, orgId }: ClientTableProps) { columns={columns} data={rows} addClient={() => { - router.push(`/${orgId}/settings/clients/create`) + router.push(`/${orgId}/settings/clients/create`); }} /> From ea27075babe8201bfece242f1d14d1611e33afd9 Mon Sep 17 00:00:00 2001 From: Owen Date: Sun, 10 Aug 2025 10:14:45 -0700 Subject: [PATCH 8/8] Lint fix --- server/routers/gerbil/getAllRelays.ts | 2 +- server/routers/idp/validateOidcCallback.ts | 4 ++-- server/routers/olm/handleOlmRegisterMessage.ts | 2 +- server/routers/site/pickSiteDefaults.ts | 2 +- server/routers/target/helpers.ts | 4 ++-- server/routers/ws/ws.ts | 2 +- src/app/[orgId]/settings/clients/create/page.tsx | 2 +- src/app/layout.tsx | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/server/routers/gerbil/getAllRelays.ts b/server/routers/gerbil/getAllRelays.ts index 9e7563b7..aa87c187 100644 --- a/server/routers/gerbil/getAllRelays.ts +++ b/server/routers/gerbil/getAllRelays.ts @@ -63,7 +63,7 @@ export async function getAllRelays( } // Initialize mappings object for multi-peer support - let mappings: { [key: string]: ProxyMapping } = {}; + const mappings: { [key: string]: ProxyMapping } = {}; // Process each site for (const site of sitesRes) { diff --git a/server/routers/idp/validateOidcCallback.ts b/server/routers/idp/validateOidcCallback.ts index 9991ba9c..3a643386 100644 --- a/server/routers/idp/validateOidcCallback.ts +++ b/server/routers/idp/validateOidcCallback.ts @@ -238,7 +238,7 @@ export async function validateOidcCallback( const defaultRoleMapping = existingIdp.idp.defaultRoleMapping; const defaultOrgMapping = existingIdp.idp.defaultOrgMapping; - let userOrgInfo: { orgId: string; roleId: number }[] = []; + const userOrgInfo: { orgId: string; roleId: number }[] = []; for (const org of allOrgs) { const [idpOrgRes] = await db .select() @@ -314,7 +314,7 @@ export async function validateOidcCallback( let existingUserId = existingUser?.userId; - let orgUserCounts: { orgId: string; userCount: number }[] = []; + const orgUserCounts: { orgId: string; userCount: number }[] = []; // sync the user with the orgs and roles await db.transaction(async (trx) => { diff --git a/server/routers/olm/handleOlmRegisterMessage.ts b/server/routers/olm/handleOlmRegisterMessage.ts index 32e4fe51..95c6d519 100644 --- a/server/routers/olm/handleOlmRegisterMessage.ts +++ b/server/routers/olm/handleOlmRegisterMessage.ts @@ -102,7 +102,7 @@ export const handleOlmRegisterMessage: MessageHandler = async (context) => { .where(eq(clientSites.clientId, client.clientId)); // Prepare an array to store site configurations - let siteConfigurations = []; + const siteConfigurations = []; logger.debug(`Found ${sitesData.length} sites for client ${client.clientId}`); if (sitesData.length === 0) { diff --git a/server/routers/site/pickSiteDefaults.ts b/server/routers/site/pickSiteDefaults.ts index 2ae25c11..d6309d0c 100644 --- a/server/routers/site/pickSiteDefaults.ts +++ b/server/routers/site/pickSiteDefaults.ts @@ -86,7 +86,7 @@ export async function pickSiteDefaults( .where(eq(sites.exitNodeId, exitNode.exitNodeId)); // TODO: we need to lock this subnet for some time so someone else does not take it - let subnets = sitesQuery.map((site) => site.subnet).filter((subnet) => subnet !== null); + const subnets = sitesQuery.map((site) => site.subnet).filter((subnet) => subnet !== null); // exclude the exit node address by replacing after the / with a site block size subnets.push( exitNode.address.replace( diff --git a/server/routers/target/helpers.ts b/server/routers/target/helpers.ts index aa45d8ba..e5aa2ba9 100644 --- a/server/routers/target/helpers.ts +++ b/server/routers/target/helpers.ts @@ -15,8 +15,8 @@ export async function pickPort(siteId: number): Promise<{ // TODO: is this all inefficient? // Fetch targets for all resources of this site - let targetIps: string[] = []; - let targetInternalPorts: number[] = []; + const targetIps: string[] = []; + const targetInternalPorts: number[] = []; await Promise.all( resourcesRes.map(async (resource) => { const targetsRes = await db diff --git a/server/routers/ws/ws.ts b/server/routers/ws/ws.ts index 0d9f84d3..8fb773d3 100644 --- a/server/routers/ws/ws.ts +++ b/server/routers/ws/ws.ts @@ -62,7 +62,7 @@ const wss: WebSocketServer = new WebSocketServer({ noServer: true }); const NODE_ID = uuidv4(); // Client tracking map (local to this node) -let connectedClients: Map = new Map(); +const connectedClients: Map = new Map(); // Helper to get map key const getClientMapKey = (clientId: string) => clientId; diff --git a/src/app/[orgId]/settings/clients/create/page.tsx b/src/app/[orgId]/settings/clients/create/page.tsx index 00b6b34c..419487d0 100644 --- a/src/app/[orgId]/settings/clients/create/page.tsx +++ b/src/app/[orgId]/settings/clients/create/page.tsx @@ -280,7 +280,7 @@ export default function Page() { return; } - let payload: CreateClientBody = { + const payload: CreateClientBody = { name: data.name, type: data.method as "olm", siteIds: data.siteIds.map((site) => parseInt(site.id)), diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 1ad8d10a..e8b9c681 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -34,7 +34,7 @@ export default async function RootLayout({ const env = pullEnv(); const locale = await getLocale(); - let supporterData = { + const supporterData = { visible: true } as any;