diff --git a/bun.lock b/bun.lock index 7c4b39df..9bfcb008 100644 --- a/bun.lock +++ b/bun.lock @@ -100,6 +100,7 @@ "altcha-lib": "catalog:", "bun-bagel": "catalog:", "chalk": "catalog:", + "confbox": "catalog:", "drizzle-orm": "catalog:", "hono": "catalog:", "hono-openapi": "catalog:", @@ -168,12 +169,14 @@ "@versia/client": "workspace:*", "@versia/sdk": "workspace:*", "altcha-lib": "catalog:", + "bullmq": "catalog:", "chalk": "catalog:", "drizzle-orm": "catalog:", "hono": "catalog:", "hono-openapi": "catalog:", "html-to-text": "catalog:", "ioredis": "catalog:", + "ip-matching": "catalog:", "linkify-html": "catalog:", "magic-regexp": "catalog:", "markdown-it": "catalog:", @@ -182,6 +185,7 @@ "mitt": "catalog:", "qs": "catalog:", "sharp": "catalog:", + "web-push": "catalog:", "zod": "catalog:", "zod-to-json-schema": "catalog:", "zod-validation-error": "catalog:", diff --git a/cli/index.ts b/cli/index.ts index 2eb71b4a..daa7a402 100644 --- a/cli/index.ts +++ b/cli/index.ts @@ -6,7 +6,7 @@ import { versionPlugin } from "@clerc/plugin-version"; import { setupDatabase } from "@versia-server/kit/db"; import { Clerc } from "clerc"; import { searchManager } from "~/classes/search/search-manager.ts"; -import pkg from "~/package.json" with { type: "json" }; +import pkg from "../package.json" with { type: "json" }; import { rebuildIndexCommand } from "./index/rebuild.ts"; import { refetchInstanceCommand } from "./instance/refetch.ts"; import { createUserCommand } from "./user/create.ts"; diff --git a/cli/instance/refetch.ts b/cli/instance/refetch.ts index 3e0e1096..a8ae898f 100644 --- a/cli/instance/refetch.ts +++ b/cli/instance/refetch.ts @@ -1,11 +1,11 @@ import { Instance } from "@versia-server/kit/db"; +import { FetchJobType, fetchQueue } from "@versia-server/kit/queues/fetch"; import { Instances } from "@versia-server/kit/tables"; import chalk from "chalk"; // @ts-expect-error - Root import is required or the Clec type definitions won't work // biome-ignore lint/correctness/noUnusedImports: Root import is required or the Clec type definitions won't work import { defineCommand, type Root } from "clerc"; import { eq } from "drizzle-orm"; -import { FetchJobType, fetchQueue } from "~/classes/queues/fetch.ts"; export const refetchInstanceCommand = defineCommand( { diff --git a/packages/api/app.ts b/packages/api/app.ts index 98ba93a2..d9c5322d 100644 --- a/packages/api/app.ts +++ b/packages/api/app.ts @@ -13,14 +13,14 @@ import { secureHeaders } from "hono/secure-headers"; import { openAPISpecs } from "hono-openapi"; import { Youch } from "youch"; import { applyToHono } from "@/bull-board.ts"; -import pkg from "~/package.json" with { type: "application/json" }; -import { PluginLoader } from "../../classes/plugin/loader.ts"; +import pkg from "../../package.json" with { type: "application/json" }; import type { ApiRouteExports, HonoEnv } from "../../types/api.ts"; import { agentBans } from "./middlewares/agent-bans.ts"; import { boundaryCheck } from "./middlewares/boundary-check.ts"; import { ipBans } from "./middlewares/ip-bans.ts"; import { logger } from "./middlewares/logger.ts"; import { rateLimit } from "./middlewares/rate-limit.ts"; +import { PluginLoader } from "./plugin-loader.ts"; import { routes } from "./routes.ts"; // Extends Zod with OpenAPI schema generation import "zod-openapi/extend"; diff --git a/packages/api/package.json b/packages/api/package.json index afd83d01..398db16f 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -68,6 +68,7 @@ "magic-regexp": "catalog:", "altcha-lib": "catalog:", "@hono/zod-validator": "catalog:", - "zod-validation-error": "catalog:" + "zod-validation-error": "catalog:", + "confbox": "catalog:" } } diff --git a/classes/plugin/loader.ts b/packages/api/plugin-loader.ts similarity index 100% rename from classes/plugin/loader.ts rename to packages/api/plugin-loader.ts diff --git a/packages/api/routes/api/v1/accounts/[id]/mute.ts b/packages/api/routes/api/v1/accounts/[id]/mute.ts index 7e3cc236..44455d74 100644 --- a/packages/api/routes/api/v1/accounts/[id]/mute.ts +++ b/packages/api/routes/api/v1/accounts/[id]/mute.ts @@ -10,13 +10,13 @@ import { withUserParam, } from "@versia-server/kit/api"; import { Relationship } from "@versia-server/kit/db"; -import { describeRoute } from "hono-openapi"; -import { resolver, validator } from "hono-openapi/zod"; -import { z } from "zod"; import { RelationshipJobType, relationshipQueue, -} from "~/classes/queues/relationships"; +} from "@versia-server/kit/queues/relationships"; +import { describeRoute } from "hono-openapi"; +import { resolver, validator } from "hono-openapi/zod"; +import { z } from "zod"; export default apiRoute((app) => app.post( diff --git a/packages/api/routes/api/v1/instance/index.ts b/packages/api/routes/api/v1/instance/index.ts index d3ebc916..73577875 100644 --- a/packages/api/routes/api/v1/instance/index.ts +++ b/packages/api/routes/api/v1/instance/index.ts @@ -8,7 +8,7 @@ import { and, eq, isNull } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import type { z } from "zod"; -import manifest from "~/package.json" with { type: "json" }; +import manifest from "../../../../../../package.json" with { type: "json" }; export default apiRoute((app) => app.get( diff --git a/packages/api/routes/api/v2/instance/index.ts b/packages/api/routes/api/v2/instance/index.ts index c8271f98..8f65cc6f 100644 --- a/packages/api/routes/api/v2/instance/index.ts +++ b/packages/api/routes/api/v2/instance/index.ts @@ -6,7 +6,7 @@ import { Users } from "@versia-server/kit/tables"; import { and, eq, isNull } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; -import pkg from "~/package.json" with { type: "json" }; +import pkg from "../../../../../../package.json" with { type: "json" }; export default apiRoute((app) => app.get( diff --git a/packages/api/routes/inbox/index.ts b/packages/api/routes/inbox/index.ts index 1a35193c..248a49e3 100644 --- a/packages/api/routes/inbox/index.ts +++ b/packages/api/routes/inbox/index.ts @@ -1,8 +1,8 @@ import { apiRoute, handleZodError } from "@versia-server/kit/api"; +import { InboxJobType, inboxQueue } from "@versia-server/kit/queues/inbox"; import { describeRoute } from "hono-openapi"; import { validator } from "hono-openapi/zod"; import { z } from "zod"; -import { InboxJobType, inboxQueue } from "~/classes/queues/inbox"; export default apiRoute((app) => app.post( diff --git a/packages/api/routes/users/[uuid]/inbox/index.ts b/packages/api/routes/users/[uuid]/inbox/index.ts index 7e60ee94..04f0adab 100644 --- a/packages/api/routes/users/[uuid]/inbox/index.ts +++ b/packages/api/routes/users/[uuid]/inbox/index.ts @@ -1,9 +1,9 @@ import { ApiError } from "@versia-server/kit"; import { apiRoute, handleZodError } from "@versia-server/kit/api"; +import { InboxJobType, inboxQueue } from "@versia-server/kit/queues/inbox"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; -import { InboxJobType, inboxQueue } from "~/classes/queues/inbox"; export default apiRoute((app) => app.post( diff --git a/packages/api/routes/well-known/nodeinfo/2.0/index.ts b/packages/api/routes/well-known/nodeinfo/2.0/index.ts index 35c8ec43..725bffdb 100644 --- a/packages/api/routes/well-known/nodeinfo/2.0/index.ts +++ b/packages/api/routes/well-known/nodeinfo/2.0/index.ts @@ -4,7 +4,7 @@ import { Note, User } from "@versia-server/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { z } from "zod"; -import manifest from "~/package.json" with { type: "json" }; +import manifest from "../../../../../../package.json" with { type: "json" }; export default apiRoute((app) => app.get( diff --git a/packages/api/routes/well-known/versia.ts b/packages/api/routes/well-known/versia.ts index a694f484..89bf672b 100644 --- a/packages/api/routes/well-known/versia.ts +++ b/packages/api/routes/well-known/versia.ts @@ -7,7 +7,7 @@ import { asc } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { urlToContentFormat } from "@/content_types"; -import pkg from "~/package.json" with { type: "json" }; +import pkg from "../../../../package.json" with { type: "json" }; export default apiRoute((app) => app.get( diff --git a/packages/plugin-kit/db/media.ts b/packages/plugin-kit/db/media.ts index 3d24bf8c..de967fd4 100644 --- a/packages/plugin-kit/db/media.ts +++ b/packages/plugin-kit/db/media.ts @@ -23,7 +23,7 @@ import sharp from "sharp"; import type { z } from "zod"; import { mimeLookup } from "@/content_types.ts"; import { getMediaHash } from "../../../classes/media/media-hasher.ts"; -import { MediaJobType, mediaQueue } from "../../../classes/queues/media.ts"; +import { MediaJobType, mediaQueue } from "../queues/media.ts"; import { BaseInterface } from "./base.ts"; type MediaType = InferSelectModel; diff --git a/packages/plugin-kit/db/note.ts b/packages/plugin-kit/db/note.ts index f392f1dc..19a90283 100644 --- a/packages/plugin-kit/db/note.ts +++ b/packages/plugin-kit/db/note.ts @@ -30,10 +30,7 @@ import { createRegExp, exactly, global } from "magic-regexp"; import type { z } from "zod"; import { mergeAndDeduplicate } from "@/lib.ts"; import { sanitizedHtmlStrip } from "@/sanitization"; -import { - DeliveryJobType, - deliveryQueue, -} from "../../../classes/queues/delivery.ts"; +import { DeliveryJobType, deliveryQueue } from "../queues/delivery.ts"; import { Application } from "./application.ts"; import { BaseInterface } from "./base.ts"; import { Emoji } from "./emoji.ts"; diff --git a/packages/plugin-kit/db/user.ts b/packages/plugin-kit/db/user.ts index 3a7b76ae..f0d9bfa7 100644 --- a/packages/plugin-kit/db/user.ts +++ b/packages/plugin-kit/db/user.ts @@ -54,11 +54,8 @@ import { getBestContentType } from "@/content_types"; import { randomString } from "@/math"; import { searchManager } from "~/classes/search/search-manager"; import type { HttpVerb, KnownEntity } from "~/types/api.ts"; -import { - DeliveryJobType, - deliveryQueue, -} from "../../../classes/queues/delivery.ts"; -import { PushJobType, pushQueue } from "../../../classes/queues/push.ts"; +import { DeliveryJobType, deliveryQueue } from "../queues/delivery.ts"; +import { PushJobType, pushQueue } from "../queues/push.ts"; import { BaseInterface } from "./base.ts"; import { Emoji } from "./emoji.ts"; import { Instance } from "./instance.ts"; diff --git a/classes/inbox/processor.ts b/packages/plugin-kit/inbox-processor.ts similarity index 100% rename from classes/inbox/processor.ts rename to packages/plugin-kit/inbox-processor.ts diff --git a/packages/plugin-kit/package.json b/packages/plugin-kit/package.json index 0815c3a9..489beb27 100644 --- a/packages/plugin-kit/package.json +++ b/packages/plugin-kit/package.json @@ -55,7 +55,10 @@ "markdown-it": "catalog:", "markdown-it-toc-done-right": "catalog:", "markdown-it-container": "catalog:", - "@hackmd/markdown-it-task-lists": "catalog:" + "@hackmd/markdown-it-task-lists": "catalog:", + "bullmq": "catalog:", + "web-push": "catalog:", + "ip-matching": "catalog:" }, "files": [ "tables/migrations" @@ -85,6 +88,10 @@ "import": "./regex.ts", "default": "./regex.ts" }, + "./queues/*": { + "import": "./queues/*.ts", + "default": "./queues/*.ts" + }, "./markdown": { "import": "./markdown.ts", "default": "./markdown.ts" diff --git a/classes/queues/delivery.ts b/packages/plugin-kit/queues/delivery.ts similarity index 96% rename from classes/queues/delivery.ts rename to packages/plugin-kit/queues/delivery.ts index bb01837b..368c4ff1 100644 --- a/classes/queues/delivery.ts +++ b/packages/plugin-kit/queues/delivery.ts @@ -1,10 +1,10 @@ import type { JSONObject } from "@versia/sdk"; import * as VersiaEntities from "@versia/sdk/entities"; import { config } from "@versia-server/config"; -import { User } from "@versia-server/kit/db"; -import { connection } from "@versia-server/kit/redis"; import { Queue, Worker } from "bullmq"; import chalk from "chalk"; +import { User } from "../db/user.ts"; +import { connection } from "../redis.ts"; export enum DeliveryJobType { FederateEntity = "federateEntity", diff --git a/classes/queues/fetch.ts b/packages/plugin-kit/queues/fetch.ts similarity index 92% rename from classes/queues/fetch.ts rename to packages/plugin-kit/queues/fetch.ts index 010beb39..836e2fe1 100644 --- a/classes/queues/fetch.ts +++ b/packages/plugin-kit/queues/fetch.ts @@ -1,9 +1,9 @@ import { config } from "@versia-server/config"; -import { Instance } from "@versia-server/kit/db"; -import { connection } from "@versia-server/kit/redis"; -import { Instances } from "@versia-server/kit/tables"; import { Queue, Worker } from "bullmq"; import { eq } from "drizzle-orm"; +import { Instance } from "../db/instance.ts"; +import { connection } from "../redis.ts"; +import { Instances } from "../tables/schema.ts"; export enum FetchJobType { Instance = "instance", diff --git a/classes/queues/inbox.ts b/packages/plugin-kit/queues/inbox.ts similarity index 96% rename from classes/queues/inbox.ts rename to packages/plugin-kit/queues/inbox.ts index 9df27f47..be0c54be 100644 --- a/classes/queues/inbox.ts +++ b/packages/plugin-kit/queues/inbox.ts @@ -1,11 +1,12 @@ import type { JSONObject } from "@versia/sdk"; import { config } from "@versia-server/config"; -import { ApiError } from "@versia-server/kit"; -import { Instance, User } from "@versia-server/kit/db"; -import { connection } from "@versia-server/kit/redis"; import { Queue, Worker } from "bullmq"; import type { SocketAddress } from "bun"; -import { InboxProcessor } from "../inbox/processor.ts"; +import { ApiError } from "../api-error.ts"; +import { Instance } from "../db/instance.ts"; +import { User } from "../db/user.ts"; +import { InboxProcessor } from "../inbox-processor.ts"; +import { connection } from "../redis.ts"; export enum InboxJobType { ProcessEntity = "processEntity", diff --git a/classes/queues/media.ts b/packages/plugin-kit/queues/media.ts similarity index 94% rename from classes/queues/media.ts rename to packages/plugin-kit/queues/media.ts index 432d069a..c1ad3e56 100644 --- a/classes/queues/media.ts +++ b/packages/plugin-kit/queues/media.ts @@ -1,9 +1,9 @@ import { config } from "@versia-server/config"; -import { Media } from "@versia-server/kit/db"; -import { connection } from "@versia-server/kit/redis"; import { Queue, Worker } from "bullmq"; -import { calculateBlurhash } from "../media/preprocessors/blurhash.ts"; -import { convertImage } from "../media/preprocessors/image-conversion.ts"; +import { calculateBlurhash } from "../../../classes/media/preprocessors/blurhash.ts"; +import { convertImage } from "../../../classes/media/preprocessors/image-conversion.ts"; +import { Media } from "../db/media.ts"; +import { connection } from "../redis.ts"; export enum MediaJobType { ConvertMedia = "convertMedia", diff --git a/classes/queues/push.ts b/packages/plugin-kit/queues/push.ts similarity index 95% rename from classes/queues/push.ts rename to packages/plugin-kit/queues/push.ts index aaa86379..986479dd 100644 --- a/classes/queues/push.ts +++ b/packages/plugin-kit/queues/push.ts @@ -1,9 +1,12 @@ import { config } from "@versia-server/config"; -import { Note, PushSubscription, Token, User } from "@versia-server/kit/db"; -import { connection } from "@versia-server/kit/redis"; import { Queue, Worker } from "bullmq"; import { sendNotification } from "web-push"; import { htmlToText } from "@/content_types.ts"; +import { Note } from "../db/note.ts"; +import { PushSubscription } from "../db/pushsubscription.ts"; +import { Token } from "../db/token.ts"; +import { User } from "../db/user.ts"; +import { connection } from "../redis.ts"; export enum PushJobType { Notify = "notify", diff --git a/classes/queues/relationships.ts b/packages/plugin-kit/queues/relationships.ts similarity index 93% rename from classes/queues/relationships.ts rename to packages/plugin-kit/queues/relationships.ts index 0851db6d..a8884096 100644 --- a/classes/queues/relationships.ts +++ b/packages/plugin-kit/queues/relationships.ts @@ -1,7 +1,8 @@ import { config } from "@versia-server/config"; -import { Relationship, User } from "@versia-server/kit/db"; -import { connection } from "@versia-server/kit/redis"; import { Queue, Worker } from "bullmq"; +import { Relationship } from "../db/relationship.ts"; +import { User } from "../db/user.ts"; +import { connection } from "../redis.ts"; export enum RelationshipJobType { Unmute = "unmute", diff --git a/packages/worker/workers.ts b/packages/worker/workers.ts index 6dbb140c..819f3a6c 100644 --- a/packages/worker/workers.ts +++ b/packages/worker/workers.ts @@ -1,9 +1,9 @@ -import { getDeliveryWorker } from "~/classes/queues/delivery"; -import { getFetchWorker } from "~/classes/queues/fetch"; -import { getInboxWorker } from "~/classes/queues/inbox"; -import { getMediaWorker } from "~/classes/queues/media"; -import { getPushWorker } from "~/classes/queues/push"; -import { getRelationshipWorker } from "~/classes/queues/relationships"; +import { getDeliveryWorker } from "@versia-server/kit/queues/delivery"; +import { getFetchWorker } from "@versia-server/kit/queues/fetch"; +import { getInboxWorker } from "@versia-server/kit/queues/inbox"; +import { getMediaWorker } from "@versia-server/kit/queues/media"; +import { getPushWorker } from "@versia-server/kit/queues/push"; +import { getRelationshipWorker } from "@versia-server/kit/queues/relationships"; export const workers = { fetch: getFetchWorker, diff --git a/plugins/openid/routes/sso/:id/index.ts b/plugins/openid/routes/sso/:id/index.ts index 5419c557..f4b844d0 100644 --- a/plugins/openid/routes/sso/:id/index.ts +++ b/plugins/openid/routes/sso/:id/index.ts @@ -7,7 +7,7 @@ import { and, eq, type SQL } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; -import type { PluginType } from "~/plugins/openid"; +import type { PluginType } from "../../../index.ts"; export default (plugin: PluginType): void => { plugin.registerRoute("/api/v1/sso/:id", (app) => { diff --git a/utils/bull-board.ts b/utils/bull-board.ts index e69b60ab..5d35e33d 100644 --- a/utils/bull-board.ts +++ b/utils/bull-board.ts @@ -2,16 +2,16 @@ import { createBullBoard } from "@bull-board/api"; import { BullMQAdapter } from "@bull-board/api/bullMQAdapter"; import { HonoAdapter } from "@bull-board/hono"; import { config } from "@versia-server/config"; +import { deliveryQueue } from "@versia-server/kit/queues/delivery"; +import { fetchQueue } from "@versia-server/kit/queues/fetch"; +import { inboxQueue } from "@versia-server/kit/queues/inbox"; +import { mediaQueue } from "@versia-server/kit/queues/media"; +import { pushQueue } from "@versia-server/kit/queues/push"; +import { relationshipQueue } from "@versia-server/kit/queues/relationships"; import type { Hono } from "hono"; import { serveStatic } from "hono/bun"; -import { deliveryQueue } from "~/classes/queues/delivery"; -import { fetchQueue } from "~/classes/queues/fetch"; -import { inboxQueue } from "~/classes/queues/inbox"; -import { mediaQueue } from "~/classes/queues/media"; -import { pushQueue } from "~/classes/queues/push"; -import { relationshipQueue } from "~/classes/queues/relationships"; -import pkg from "~/package.json" with { type: "json" }; import type { HonoEnv } from "~/types/api"; +import pkg from "../package.json" with { type: "json" }; export const applyToHono = (app: Hono): void => { const serverAdapter = new HonoAdapter(serveStatic);