diff --git a/cli/commands/emoji/add.ts b/cli/commands/emoji/add.ts index 1daef082..28d1d260 100644 --- a/cli/commands/emoji/add.ts +++ b/cli/commands/emoji/add.ts @@ -30,7 +30,7 @@ export default class EmojiAdd extends BaseCommand { static override flags = {}; public async run(): Promise { - const { flags, args } = await this.parse(EmojiAdd); + const { args } = await this.parse(EmojiAdd); // Check if emoji already exists const existingEmoji = await db.query.Emojis.findFirst({ diff --git a/cli/commands/emoji/delete.ts b/cli/commands/emoji/delete.ts index 3513a876..9567e70d 100644 --- a/cli/commands/emoji/delete.ts +++ b/cli/commands/emoji/delete.ts @@ -1,7 +1,7 @@ import confirm from "@inquirer/confirm"; -import { Args, Flags } from "@oclif/core"; +import { Flags } from "@oclif/core"; import chalk from "chalk"; -import { and, eq, inArray, isNull } from "drizzle-orm"; +import { eq } from "drizzle-orm"; import ora from "ora"; import { EmojiFinderCommand } from "~/cli/classes"; import { formatArray } from "~/cli/utils/format"; @@ -34,7 +34,7 @@ export default class EmojiDelete extends EmojiFinderCommand< }; public async run(): Promise { - const { flags, args } = await this.parse(EmojiDelete); + const { flags } = await this.parse(EmojiDelete); const emojis = await this.findEmojis(); diff --git a/cli/commands/emoji/import.ts b/cli/commands/emoji/import.ts index c16d9692..db855d15 100644 --- a/cli/commands/emoji/import.ts +++ b/cli/commands/emoji/import.ts @@ -46,7 +46,7 @@ export default class EmojiImport extends BaseCommand { }; public async run(): Promise { - const { flags, args } = await this.parse(EmojiImport); + const { args } = await this.parse(EmojiImport); // Check if path ends in .zip, warn the user if it doesn't if (!args.path.endsWith(".zip")) { diff --git a/cli/commands/user/delete.ts b/cli/commands/user/delete.ts index 5373a591..b8ba1127 100644 --- a/cli/commands/user/delete.ts +++ b/cli/commands/user/delete.ts @@ -28,7 +28,7 @@ export default class UserDelete extends UserFinderCommand { }; public async run(): Promise { - const { flags, args } = await this.parse(UserDelete); + const { flags } = await this.parse(UserDelete); const users = await this.findUsers(); diff --git a/cli/commands/user/reset.ts b/cli/commands/user/reset.ts index dc83e9fe..45468cec 100644 --- a/cli/commands/user/reset.ts +++ b/cli/commands/user/reset.ts @@ -37,7 +37,7 @@ export default class UserReset extends UserFinderCommand { }; public async run(): Promise { - const { flags, args } = await this.parse(UserReset); + const { flags } = await this.parse(UserReset); const users = await this.findUsers(); diff --git a/database/entities/Relationship.ts b/database/entities/Relationship.ts index b42a0f25..8deaa0e2 100644 --- a/database/entities/Relationship.ts +++ b/database/entities/Relationship.ts @@ -3,7 +3,6 @@ import { db } from "~/drizzle/db"; import { Relationships } from "~/drizzle/schema"; import type { User } from "~/packages/database-interface/user"; import type { Relationship as APIRelationship } from "~/types/mastodon/relationship"; -import type { UserType } from "./User"; export type Relationship = InferSelectModel; diff --git a/database/entities/Status.ts b/database/entities/Status.ts index 9348416e..edcad4c8 100644 --- a/database/entities/Status.ts +++ b/database/entities/Status.ts @@ -22,8 +22,6 @@ import { exactly, global, letter, - maybe, - oneOrMore, } from "magic-regexp"; import MarkdownIt from "markdown-it"; import markdownItAnchor from "markdown-it-anchor"; diff --git a/index.ts b/index.ts index 07e048ec..fa342574 100644 --- a/index.ts +++ b/index.ts @@ -11,7 +11,6 @@ import { bait } from "~/middlewares/bait"; import { boundaryCheck } from "~/middlewares/boundary-check"; import { ipBans } from "~/middlewares/ip-bans"; import { logger } from "~/middlewares/logger"; -import { urlCheck } from "~/middlewares/url-check"; import { Note } from "~/packages/database-interface/note"; import { handleGlitchRequest } from "~/packages/glitch-server/main"; import { routes } from "~/routes"; @@ -122,7 +121,7 @@ app.use(boundaryCheck); // app.use(urlCheck); // Inject own filesystem router -for (const [route, path] of Object.entries(routes)) { +for (const [, path] of Object.entries(routes)) { // use app.get(path, handler) to add routes const route: APIRouteExports = await import(path); diff --git a/packages/database-interface/oauth.ts b/packages/database-interface/oauth.ts index baa42eaf..b6162b94 100644 --- a/packages/database-interface/oauth.ts +++ b/packages/database-interface/oauth.ts @@ -1,5 +1,5 @@ import { oauthRedirectUri } from "@/constants"; -import { errorResponse, response } from "@/response"; +import { response } from "@/response"; import type { InferInsertModel } from "drizzle-orm"; import { type AuthorizationServer, diff --git a/packages/media-manager/tests/media-backends.test.ts b/packages/media-manager/tests/media-backends.test.ts index bb586382..067b5c14 100644 --- a/packages/media-manager/tests/media-backends.test.ts +++ b/packages/media-manager/tests/media-backends.test.ts @@ -295,7 +295,7 @@ describe("LocalMediaBackend", () => { // deleteByUrl const mockHash = "test-hash"; spyOn(mockMediaHasher, "getMediaHash").mockResolvedValue(mockHash); - const result = await localMediaBackend.addFile(mockFile); + await localMediaBackend.addFile(mockFile); const rmMock = jest.fn().mockResolvedValue(Promise.resolve()); // Spy on fs/promises rm diff --git a/server/api/api/auth/login/index.ts b/server/api/api/auth/login/index.ts index 86e2a60b..94ed0827 100644 --- a/server/api/api/auth/login/index.ts +++ b/server/api/api/auth/login/index.ts @@ -1,5 +1,5 @@ import { applyConfig, handleZodError } from "@/api"; -import { errorResponse, redirect, response } from "@/response"; +import { errorResponse, response } from "@/response"; import { zValidator } from "@hono/zod-validator"; import { eq, or } from "drizzle-orm"; import type { Hono } from "hono"; diff --git a/server/api/api/v1/accounts/:id/followers.ts b/server/api/api/v1/accounts/:id/followers.ts index c8f46556..0b2ebec5 100644 --- a/server/api/api/v1/accounts/:id/followers.ts +++ b/server/api/api/v1/accounts/:id/followers.ts @@ -42,7 +42,6 @@ export default (app: Hono) => auth(meta.auth), async (context) => { const { id } = context.req.valid("param"); - const { user } = context.req.valid("header"); const { max_id, since_id, min_id, limit } = context.req.valid("query"); diff --git a/server/api/api/v1/accounts/:id/following.ts b/server/api/api/v1/accounts/:id/following.ts index 59dab775..a0640fa3 100644 --- a/server/api/api/v1/accounts/:id/following.ts +++ b/server/api/api/v1/accounts/:id/following.ts @@ -42,7 +42,6 @@ export default (app: Hono) => auth(meta.auth), async (context) => { const { id } = context.req.valid("param"); - const { user } = context.req.valid("header"); const { max_id, since_id, min_id } = context.req.valid("query"); const otherUser = await User.fromId(id); diff --git a/server/api/api/v1/accounts/:id/index.ts b/server/api/api/v1/accounts/:id/index.ts index fae2c1b1..44bfdb38 100644 --- a/server/api/api/v1/accounts/:id/index.ts +++ b/server/api/api/v1/accounts/:id/index.ts @@ -1,4 +1,4 @@ -import { applyConfig, auth, handleZodError, idValidator } from "@/api"; +import { applyConfig, auth, handleZodError } from "@/api"; import { errorResponse, jsonResponse } from "@/response"; import { zValidator } from "@hono/zod-validator"; import type { Hono } from "hono"; diff --git a/server/api/api/v1/accounts/:id/mute.ts b/server/api/api/v1/accounts/:id/mute.ts index 714825e5..b5d2d5af 100644 --- a/server/api/api/v1/accounts/:id/mute.ts +++ b/server/api/api/v1/accounts/:id/mute.ts @@ -48,7 +48,8 @@ export default (app: Hono) => async (context) => { const { id } = context.req.valid("param"); const { user } = context.req.valid("header"); - const { notifications, duration } = context.req.valid("json"); + // TODO: Add duration support + const { notifications } = context.req.valid("json"); if (!user) return errorResponse("Unauthorized", 401); diff --git a/server/api/api/v1/accounts/:id/remove_from_followers.ts b/server/api/api/v1/accounts/:id/remove_from_followers.ts index ceef39fa..4096c705 100644 --- a/server/api/api/v1/accounts/:id/remove_from_followers.ts +++ b/server/api/api/v1/accounts/:id/remove_from_followers.ts @@ -1,4 +1,4 @@ -import { applyConfig, auth, handleZodError, idValidator } from "@/api"; +import { applyConfig, auth, handleZodError } from "@/api"; import { errorResponse, jsonResponse } from "@/response"; import { zValidator } from "@hono/zod-validator"; import { and, eq } from "drizzle-orm"; diff --git a/server/api/api/v1/accounts/familiar_followers/index.ts b/server/api/api/v1/accounts/familiar_followers/index.ts index 663b2b6c..7482daf2 100644 --- a/server/api/api/v1/accounts/familiar_followers/index.ts +++ b/server/api/api/v1/accounts/familiar_followers/index.ts @@ -1,4 +1,4 @@ -import { applyConfig, auth, handleZodError, idValidator, qsQuery } from "@/api"; +import { applyConfig, auth, handleZodError, qsQuery } from "@/api"; import { errorResponse, jsonResponse } from "@/response"; import { zValidator } from "@hono/zod-validator"; import { inArray } from "drizzle-orm"; diff --git a/server/api/api/v1/accounts/index.test.ts b/server/api/api/v1/accounts/index.test.ts index 2dfd1bd5..259e37c2 100644 --- a/server/api/api/v1/accounts/index.test.ts +++ b/server/api/api/v1/accounts/index.test.ts @@ -1,18 +1,10 @@ -import { - afterAll, - afterEach, - beforeAll, - describe, - expect, - test, -} from "bun:test"; +import { afterEach, describe, expect, test } from "bun:test"; import { randomBytes } from "node:crypto"; import { config } from "config-manager"; import { eq } from "drizzle-orm"; import { db } from "~/drizzle/db"; import { Users } from "~/drizzle/schema"; -import { getTestStatuses, getTestUsers, sendTestRequest } from "~/tests/utils"; -import type { Account as APIAccount } from "~/types/mastodon/account"; +import { sendTestRequest } from "~/tests/utils"; import { meta } from "./index"; const username = randomBytes(10).toString("hex"); diff --git a/server/api/api/v1/accounts/index.ts b/server/api/api/v1/accounts/index.ts index ed9b1419..aae22b38 100644 --- a/server/api/api/v1/accounts/index.ts +++ b/server/api/api/v1/accounts/index.ts @@ -46,7 +46,7 @@ export default (app: Hono) => auth(meta.auth), async (context) => { const form = context.req.valid("form"); - const { username, email, password, agreement, locale, reason } = + const { username, email, password, agreement, locale } = context.req.valid("form"); if (!config.signups.registration) { diff --git a/server/api/api/v1/accounts/relationships/index.ts b/server/api/api/v1/accounts/relationships/index.ts index 288a192d..c1d6282a 100644 --- a/server/api/api/v1/accounts/relationships/index.ts +++ b/server/api/api/v1/accounts/relationships/index.ts @@ -1,4 +1,4 @@ -import { applyConfig, auth, handleZodError, idValidator, qsQuery } from "@/api"; +import { applyConfig, auth, handleZodError, qsQuery } from "@/api"; import { errorResponse, jsonResponse } from "@/response"; import { zValidator } from "@hono/zod-validator"; import type { Hono } from "hono"; diff --git a/server/api/api/v1/instance/index.ts b/server/api/api/v1/instance/index.ts index ba3a7060..166320e3 100644 --- a/server/api/api/v1/instance/index.ts +++ b/server/api/api/v1/instance/index.ts @@ -35,10 +35,6 @@ export default (app: Hono) => and(isNull(Users.instanceId), eq(Users.isAdmin, true)), ); - const monthlyActiveUsers = await User.getActiveInPeriod( - 30 * 24 * 60 * 60 * 1000, - ); - const knownDomainsCount = ( await db .select({ diff --git a/server/api/api/v1/markers/index.ts b/server/api/api/v1/markers/index.ts index 5efb5928..064f5a2a 100644 --- a/server/api/api/v1/markers/index.ts +++ b/server/api/api/v1/markers/index.ts @@ -1,16 +1,8 @@ -import { - applyConfig, - auth, - handleZodError, - idValidator, - qs, - qsQuery, -} from "@/api"; +import { applyConfig, auth, handleZodError, idValidator } from "@/api"; import { errorResponse, jsonResponse } from "@/response"; import { zValidator } from "@hono/zod-validator"; import { and, count, eq } from "drizzle-orm"; import type { Hono } from "hono"; -import { validator } from "hono/validator"; import { z } from "zod"; import { db } from "~/drizzle/db"; import { Markers } from "~/drizzle/schema"; diff --git a/server/api/api/v1/media/index.ts b/server/api/api/v1/media/index.ts index aad4b35f..ab514651 100644 --- a/server/api/api/v1/media/index.ts +++ b/server/api/api/v1/media/index.ts @@ -45,8 +45,7 @@ export default (app: Hono) => zValidator("form", schemas.form, handleZodError), auth(meta.auth), async (context) => { - const { file, thumbnail, description, focus } = - context.req.valid("form"); + const { file, thumbnail, description } = context.req.valid("form"); if (file.size > config.validation.max_media_size) { return errorResponse( diff --git a/server/api/api/v1/notifications/destroy_multiple/index.ts b/server/api/api/v1/notifications/destroy_multiple/index.ts index 7534ec1a..78e24f88 100644 --- a/server/api/api/v1/notifications/destroy_multiple/index.ts +++ b/server/api/api/v1/notifications/destroy_multiple/index.ts @@ -1,4 +1,4 @@ -import { applyConfig, auth, handleZodError, idValidator } from "@/api"; +import { applyConfig, auth, handleZodError } from "@/api"; import { errorResponse, jsonResponse } from "@/response"; import { zValidator } from "@hono/zod-validator"; import { and, eq, inArray } from "drizzle-orm"; diff --git a/server/api/api/v1/sso/:id/index.ts b/server/api/api/v1/sso/:id/index.ts index 1c7f93e9..7a2f6ff9 100644 --- a/server/api/api/v1/sso/:id/index.ts +++ b/server/api/api/v1/sso/:id/index.ts @@ -1,4 +1,4 @@ -import { applyConfig, auth, handleZodError, jsonOrForm } from "@/api"; +import { applyConfig, auth, handleZodError } from "@/api"; import { errorResponse, jsonResponse, response } from "@/response"; import { zValidator } from "@hono/zod-validator"; import { eq } from "drizzle-orm"; diff --git a/server/api/api/v1/statuses/:id/favourited_by.test.ts b/server/api/api/v1/statuses/:id/favourited_by.test.ts index eff92530..a244919d 100644 --- a/server/api/api/v1/statuses/:id/favourited_by.test.ts +++ b/server/api/api/v1/statuses/:id/favourited_by.test.ts @@ -13,7 +13,7 @@ afterAll(async () => { beforeAll(async () => { for (const status of timeline) { - const res = await sendTestRequest( + await sendTestRequest( new Request( new URL( `/api/v1/statuses/${status.id}/favourite`, @@ -66,7 +66,7 @@ describe(meta.route, () => { const objects = (await response.json()) as APIAccount[]; expect(objects.length).toBe(1); - for (const [index, status] of objects.entries()) { + for (const [, status] of objects.entries()) { expect(status.id).toBe(users[1].id); expect(status.username).toBe(users[1].getUser().username); } diff --git a/server/api/api/v1/statuses/:id/reblogged_by.test.ts b/server/api/api/v1/statuses/:id/reblogged_by.test.ts index 94135db8..480e24f0 100644 --- a/server/api/api/v1/statuses/:id/reblogged_by.test.ts +++ b/server/api/api/v1/statuses/:id/reblogged_by.test.ts @@ -66,7 +66,7 @@ describe(meta.route, () => { const objects = (await response.json()) as APIAccount[]; expect(objects.length).toBe(1); - for (const [index, status] of objects.entries()) { + for (const [, status] of objects.entries()) { expect(status.id).toBe(users[1].id); expect(status.username).toBe(users[1].getUser().username); } diff --git a/server/api/api/v1/statuses/index.ts b/server/api/api/v1/statuses/index.ts index 5486959b..c6f85891 100644 --- a/server/api/api/v1/statuses/index.ts +++ b/server/api/api/v1/statuses/index.ts @@ -1,4 +1,4 @@ -import { applyConfig, auth, handleZodError, jsonOrForm, qs } from "@/api"; +import { applyConfig, auth, handleZodError, jsonOrForm } from "@/api"; import { errorResponse, jsonResponse } from "@/response"; import { zValidator } from "@hono/zod-validator"; import { config } from "config-manager"; diff --git a/server/api/api/v2/filters/:id/index.test.ts b/server/api/api/v2/filters/:id/index.test.ts index bcd4f87a..52220947 100644 --- a/server/api/api/v2/filters/:id/index.test.ts +++ b/server/api/api/v2/filters/:id/index.test.ts @@ -3,7 +3,7 @@ import { config } from "config-manager"; import { getTestUsers, sendTestRequest } from "~/tests/utils"; import { meta } from "./index"; -const { users, tokens, deleteUsers } = await getTestUsers(2); +const { tokens, deleteUsers } = await getTestUsers(2); const response = await sendTestRequest( new Request(new URL("/api/v2/filters", config.http.base_url), { diff --git a/server/api/api/v2/filters/:id/index.ts b/server/api/api/v2/filters/:id/index.ts index f9fb5f96..fd287c5c 100644 --- a/server/api/api/v2/filters/:id/index.ts +++ b/server/api/api/v2/filters/:id/index.ts @@ -1,4 +1,4 @@ -import { applyConfig, auth, handleZodError, jsonOrForm, qs } from "@/api"; +import { applyConfig, auth, handleZodError, jsonOrForm } from "@/api"; import { errorResponse, jsonResponse } from "@/response"; import { zValidator } from "@hono/zod-validator"; import { and, eq, inArray } from "drizzle-orm"; diff --git a/server/api/api/v2/filters/index.test.ts b/server/api/api/v2/filters/index.test.ts index 370c3a0b..946eed5b 100644 --- a/server/api/api/v2/filters/index.test.ts +++ b/server/api/api/v2/filters/index.test.ts @@ -3,7 +3,7 @@ import { config } from "config-manager"; import { getTestUsers, sendTestRequest } from "~/tests/utils"; import { meta } from "./index"; -const { users, tokens, deleteUsers } = await getTestUsers(2); +const { tokens, deleteUsers } = await getTestUsers(2); afterAll(async () => { await deleteUsers(); diff --git a/server/api/api/v2/filters/index.ts b/server/api/api/v2/filters/index.ts index b09075c2..8fb6cbdf 100644 --- a/server/api/api/v2/filters/index.ts +++ b/server/api/api/v2/filters/index.ts @@ -1,8 +1,7 @@ -import { applyConfig, auth, handleZodError, jsonOrForm, qs } from "@/api"; +import { applyConfig, auth, handleZodError, jsonOrForm } from "@/api"; import { errorResponse, jsonResponse } from "@/response"; import { zValidator } from "@hono/zod-validator"; import type { Hono } from "hono"; -import { validator } from "hono/validator"; import { z } from "zod"; import { db } from "~/drizzle/db"; import { FilterKeywords, Filters } from "~/drizzle/schema"; diff --git a/server/api/api/v2/media/index.ts b/server/api/api/v2/media/index.ts index 1962b559..9b5433df 100644 --- a/server/api/api/v2/media/index.ts +++ b/server/api/api/v2/media/index.ts @@ -45,8 +45,7 @@ export default (app: Hono) => zValidator("form", schemas.form, handleZodError), auth(meta.auth), async (context) => { - const { file, thumbnail, description, focus } = - context.req.valid("form"); + const { file, thumbnail, description } = context.req.valid("form"); if (file.size > config.validation.max_media_size) { return errorResponse( diff --git a/server/api/oauth/authorize/index.ts b/server/api/oauth/authorize/index.ts index 39443877..24888742 100644 --- a/server/api/oauth/authorize/index.ts +++ b/server/api/oauth/authorize/index.ts @@ -84,15 +84,8 @@ export default (app: Hono) => zValidator("query", schemas.query, handleZodError), zValidator("form", schemas.form, handleZodError), async (context) => { - const { - scope, - redirect_uri, - response_type, - client_id, - state, - code_challenge, - code_challenge_method, - } = context.req.valid("form"); + const { scope, redirect_uri, response_type, client_id, state } = + context.req.valid("form"); const body = context.req.valid("form"); @@ -234,7 +227,6 @@ export default (app: Hono) => const scopeIncludesProfile = scope?.split(" ").includes("profile"); const scopeIncludesEmail = scope?.split(" ").includes("email"); if (scope) { - const scopes = scope.split(" "); if (scopeIncludesOpenID) { // Include the standard OpenID claims idTokenPayload = { diff --git a/tsconfig.json b/tsconfig.json index 9e4bceba..278372d7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,7 +25,8 @@ "@/*": ["./utils/*"], "~/*": ["./*"], "+/*": ["./server/api/*"] - } + }, + "noUnusedLocals": true }, "include": [ "*.ts", diff --git a/utils/api.ts b/utils/api.ts index b406884a..b44d894a 100644 --- a/utils/api.ts +++ b/utils/api.ts @@ -1,4 +1,3 @@ -import { consoleLogger } from "@/loggers"; import { errorResponse } from "@/response"; import chalk from "chalk"; import { config } from "config-manager"; diff --git a/utils/response.ts b/utils/response.ts index f3436f1c..8c6f8543 100644 --- a/utils/response.ts +++ b/utils/response.ts @@ -27,19 +27,6 @@ export const response = ( }); }; -export const clientResponse = ( - data: BodyInit | null = null, - status = 200, - headers: Record = {}, -) => { - return response(data, status, { - "Content-Security-Policy": - "default-src 'none'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src *; font-src 'self'; connect-src 'self'; media-src *; object-src 'none'; prefetch-src 'none'; child-src 'none'; frame-src 'none'; worker-src 'self'; frame-ancestors 'none'; form-action 'self'; upgrade-insecure-requests; block-all-mixed-content; base-uri 'self'; manifest-src 'self'", - "Access-Control-Allow-Origin": "null", - ...headers, - }); -}; - export const jsonResponse = ( data: object, status = 200,