diff --git a/biome.json b/biome.json index 088e0efb..3c920d07 100644 --- a/biome.json +++ b/biome.json @@ -99,7 +99,15 @@ "noCommonJs": "warn", "noExportedImports": "warn", "noSubstr": "warn", - "useTrimStartEnd": "warn" + "useTrimStartEnd": "warn", + "noRestrictedImports": { + "options": { + "paths": { + "~/packages/": "Use the appropriate package instead of importing from the packages directory directly." + } + }, + "level": "error" + } }, "performance": { "noDynamicNamespaceImportAccess": "warn" diff --git a/bun.lock b/bun.lock index 271fa4bc..1c27e921 100644 --- a/bun.lock +++ b/bun.lock @@ -4,84 +4,111 @@ "": { "name": "versia-server", "dependencies": { - "@bull-board/api": "^6.10.1", - "@bull-board/hono": "^6.10.1", - "@clerc/plugin-completions": "^0.44.0", - "@clerc/plugin-friendly-error": "^0.44.0", - "@clerc/plugin-help": "^0.44.0", - "@clerc/plugin-not-found": "^0.44.0", - "@clerc/plugin-version": "^0.44.0", - "@hackmd/markdown-it-task-lists": "^2.1.4", - "@hono/zod-validator": "^0.7.0", - "@inquirer/confirm": "^5.1.12", - "@logtape/file": "^0.12.0", - "@logtape/logtape": "^0.12.0", - "@scalar/hono-api-reference": "^0.9.4", - "@sentry/bun": "^9.29.0", + "@bull-board/api": "catalog:", + "@bull-board/hono": "catalog:", + "@clerc/plugin-completions": "catalog:", + "@clerc/plugin-friendly-error": "catalog:", + "@clerc/plugin-help": "catalog:", + "@clerc/plugin-not-found": "catalog:", + "@clerc/plugin-version": "catalog:", + "@hackmd/markdown-it-task-lists": "catalog:", + "@hono/zod-validator": "catalog:", + "@inquirer/confirm": "catalog:", + "@logtape/file": "catalog:", + "@logtape/logtape": "catalog:", + "@scalar/hono-api-reference": "catalog:", + "@sentry/bun": "catalog:", + "@versia-server/config": "workspace:*", "@versia/client": "workspace:*", "@versia/kit": "workspace:*", "@versia/sdk": "workspace:*", - "altcha-lib": "^1.3.0", - "blurhash": "^2.0.5", - "bullmq": "^5.53.3", - "chalk": "^5.4.1", - "clerc": "^0.44.0", - "confbox": "^0.2.2", - "drizzle-orm": "^0.44.2", - "feed": "^5.1.0", - "hono": "^4.7.11", - "hono-openapi": "^0.4.8", - "hono-rate-limiter": "^0.4.2", - "html-to-text": "^9.0.5", - "ioredis": "^5.6.1", - "ip-matching": "^2.1.2", + "altcha-lib": "catalog:", + "blurhash": "catalog:", + "bullmq": "catalog:", + "chalk": "catalog:", + "clerc": "catalog:", + "confbox": "catalog:", + "drizzle-orm": "catalog:", + "feed": "catalog:", + "hono": "catalog:", + "hono-openapi": "catalog:", + "hono-rate-limiter": "catalog:", + "html-to-text": "catalog:", + "ioredis": "catalog:", + "ip-matching": "catalog:", "iso-639-1": "^3.1.5", - "jose": "^6.0.11", - "linkify-html": "^4.3.1", - "linkify-string": "^4.3.1", - "linkifyjs": "^4.3.1", - "magic-regexp": "^0.10.0", - "markdown-it": "^14.1.0", - "markdown-it-anchor": "^9.2.0", - "markdown-it-container": "^4.0.0", - "markdown-it-mathjax3": "^4.3.2", - "markdown-it-toc-done-right": "^4.2.0", - "mime-types": "^3.0.1", - "mitata": "^1.0.34", - "oauth4webapi": "^3.5.2", - "ora": "^8.2.0", - "qs": "^6.14.0", - "sharp": "^0.34.2", - "sonic-channel": "^1.3.1", - "string-comparison": "^1.3.0", - "stringify-entities": "^4.0.4", - "unicode-emoji-json": "^0.8.0", - "uqr": "^0.1.2", - "web-push": "^3.6.7", - "xss": "^1.0.15", - "youch": "^4.1.0-beta.7", - "zod": "^3.25.64", - "zod-openapi": "^4.2.4", - "zod-validation-error": "^3.5.0", + "jose": "catalog:", + "linkify-html": "catalog:", + "linkify-string": "catalog:", + "linkifyjs": "catalog:", + "magic-regexp": "catalog:", + "markdown-it": "catalog:", + "markdown-it-anchor": "catalog:", + "markdown-it-container": "catalog:", + "markdown-it-mathjax3": "catalog:", + "markdown-it-toc-done-right": "catalog:", + "mime-types": "catalog:", + "mitata": "catalog:", + "oauth4webapi": "catalog:", + "ora": "catalog:", + "qs": "catalog:", + "sharp": "catalog:", + "sonic-channel": "catalog:", + "string-comparison": "catalog:", + "stringify-entities": "catalog:", + "unicode-emoji-json": "catalog:", + "uqr": "catalog:", + "web-push": "catalog:", + "xss": "catalog:", + "youch": "catalog:", + "zod": "catalog:", + "zod-openapi": "catalog:", + "zod-validation-error": "catalog:", }, "devDependencies": { - "@biomejs/biome": "2.0.0-beta.5", - "@types/bun": "^1.2.16", - "@types/html-to-text": "^9.0.4", - "@types/markdown-it-container": "^2.0.10", - "@types/mime-types": "^3.0.1", - "@types/qs": "^6.14.0", - "@types/web-push": "^3.6.4", - "bun-bagel": "^1.2.0", - "drizzle-kit": "^0.31.1", - "markdown-it-image-figures": "^2.1.1", - "ts-prune": "^0.10.3", - "typescript": "^5.8.3", - "vitepress": "^1.6.3", - "vitepress-plugin-tabs": "^0.7.1", - "vitepress-sidebar": "^1.31.1", - "vue": "^3.5.16", - "zod-to-json-schema": "^3.24.5", + "@types/bun": "catalog:", + "@types/html-to-text": "catalog:", + "@types/markdown-it-container": "catalog:", + "@types/mime-types": "catalog:", + "@types/qs": "catalog:", + "@types/web-push": "catalog:", + "bun-bagel": "catalog:", + "drizzle-kit": "catalog:", + "markdown-it-image-figures": "catalog:", + "ts-prune": "catalog:", + "typescript": "catalog:", + "vitepress": "catalog:", + "vitepress-plugin-tabs": "catalog:", + "vitepress-sidebar": "catalog:", + "vue": "catalog:", + "zod-to-json-schema": "catalog:", + }, + }, + "packages/api": { + "name": "@versia-server/api", + "version": "0.9.0-alpha.0", + "dependencies": { + "@logtape/logtape": "catalog:", + "@scalar/hono-api-reference": "catalog:", + "@versia-server/config": "workspace:*", + "@versia/client": "workspace:*", + "@versia/kit": "workspace:*", + "@versia/sdk": "workspace:*", + "bun-bagel": "catalog:", + "chalk": "catalog:", + "drizzle-orm": "catalog:", + "hono": "catalog:", + "hono-openapi": "catalog:", + "hono-rate-limiter": "catalog:", + "ip-matching": "catalog:", + "iso-639-1": "catalog:", + "jose": "catalog:", + "sharp": "catalog:", + "string-comparison": "catalog:", + "unicode-emoji-json": "catalog:", + "youch": "catalog:", + "zod": "catalog:", + "zod-openapi": "catalog:", }, }, "packages/client": { @@ -89,40 +116,150 @@ "version": "0.2.0-alpha.4", "dependencies": { "@badgateway/oauth2-client": "^3.0.0", - "iso-639-1": "^3.1.5", - "magic-regexp": "^0.10.0", - "zod": "^3.24.2", - "zod-openapi": "^4.2.4", + "iso-639-1": "catalog:", + "magic-regexp": "catalog:", + "zod": "catalog:", + "zod-openapi": "catalog:", + }, + }, + "packages/config": { + "name": "@versia-server/config", + "version": "0.0.1", + "dependencies": { + "@versia/client": "workspace:*", + "chalk": "catalog:", + "confbox": "catalog:", + "iso-639-1": "catalog:", + "mime-types": "catalog:", + "web-push": "catalog:", + "zod": "catalog:", + "zod-to-json-schema": "catalog:", + "zod-validation-error": "catalog:", }, }, "packages/plugin-kit": { "name": "@versia/kit", "version": "0.0.0", "dependencies": { - "drizzle-orm": "^0.44.2", - "hono": "^4.7.7", - "mitt": "^3.0.1", - "zod": "^3.24.2", - "zod-to-json-schema": "^3.24.5", - "zod-validation-error": "^3.4.0", + "@logtape/logtape": "catalog:", + "@versia-server/config": "workspace:*", + "@versia/client": "workspace:*", + "@versia/sdk": "workspace:*", + "altcha-lib": "catalog:", + "chalk": "catalog:", + "drizzle-orm": "catalog:", + "hono": "catalog:", + "hono-openapi": "catalog:", + "html-to-text": "catalog:", + "magic-regexp": "catalog:", + "mitt": "catalog:", + "sharp": "catalog:", + "zod": "catalog:", + "zod-to-json-schema": "catalog:", + "zod-validation-error": "catalog:", }, }, "packages/sdk": { "name": "@versia/sdk", "version": "0.0.1", "dependencies": { - "magic-regexp": "^0.10.0", - "mime-types": "^3.0.1", - "zod": "^3.24.2", + "magic-regexp": "catalog:", + "mime-types": "catalog:", + "zod": "catalog:", + }, + }, + "packages/worker": { + "name": "@versia-server/worker", + "version": "0.9.0-alpha.0", + "dependencies": { + "@logtape/logtape": "catalog:", + "@versia-server/config": "workspace:*", + "@versia/kit": "workspace:*", + "chalk": "catalog:", }, }, }, "trustedDependencies": [ "sharp", "esbuild", - "@biomejs/biome", "msgpackr-extract", ], + "catalog": { + "@biomejs/biome": "2.0.0-beta.5", + "@bull-board/api": "^6.10.1", + "@bull-board/hono": "^6.10.1", + "@clerc/plugin-completions": "^0.44.0", + "@clerc/plugin-friendly-error": "^0.44.0", + "@clerc/plugin-help": "^0.44.0", + "@clerc/plugin-not-found": "^0.44.0", + "@clerc/plugin-version": "^0.44.0", + "@hackmd/markdown-it-task-lists": "^2.1.4", + "@hono/zod-validator": "^0.7.0", + "@inquirer/confirm": "^5.1.12", + "@logtape/file": "^0.12.0", + "@logtape/logtape": "^0.12.0", + "@scalar/hono-api-reference": "^0.9.4", + "@sentry/bun": "^9.29.0", + "@types/bun": "^1.2.16", + "@types/html-to-text": "^9.0.4", + "@types/markdown-it-container": "^2.0.10", + "@types/mime-types": "^3.0.1", + "@types/qs": "^6.14.0", + "@types/web-push": "^3.6.4", + "altcha-lib": "^1.3.0", + "blurhash": "^2.0.5", + "bullmq": "^5.53.3", + "bun-bagel": "^1.2.0", + "chalk": "^5.4.1", + "clerc": "^0.44.0", + "confbox": "^0.2.2", + "drizzle-kit": "^0.31.1", + "drizzle-orm": "^0.44.2", + "feed": "^5.1.0", + "hono": "^4.7.11", + "hono-openapi": "^0.4.8", + "hono-rate-limiter": "^0.4.2", + "html-to-text": "^9.0.5", + "ioredis": "^5.6.1", + "ip-matching": "^2.1.2", + "iso-639-1": "^3.1.5", + "jose": "^6.0.11", + "linkify-html": "^4.3.1", + "linkify-string": "^4.3.1", + "linkifyjs": "^4.3.1", + "magic-regexp": "^0.10.0", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^9.2.0", + "markdown-it-container": "^4.0.0", + "markdown-it-image-figures": "^2.1.1", + "markdown-it-mathjax3": "^4.3.2", + "markdown-it-toc-done-right": "^4.2.0", + "mime-types": "^3.0.1", + "mitata": "^1.0.34", + "mitt": "^3.0.1", + "oauth4webapi": "^3.5.2", + "ora": "^8.2.0", + "qs": "^6.14.0", + "sharp": "^0.34.2", + "sonic-channel": "^1.3.1", + "string-comparison": "^1.3.0", + "stringify-entities": "^4.0.4", + "ts-prune": "^0.10.3", + "typescript": "^5.8.3", + "unicode-emoji-json": "^0.8.0", + "uqr": "^0.1.2", + "vitepress": "^1.6.3", + "vitepress-plugin-tabs": "^0.7.1", + "vitepress-sidebar": "^1.31.1", + "vue": "^3.5.16", + "web-push": "^3.6.7", + "xss": "^1.0.15", + "youch": "^4.1.0-beta.7", + "zod": "^3.25.64", + "zod-openapi": "^4.2.4", + "zod-to-json-schema": "^3.24.5", + "zod-validation-error": "^3.5.0", + }, "packages": { "@algolia/autocomplete-core": ["@algolia/autocomplete-core@1.17.7", "", { "dependencies": { "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", "@algolia/autocomplete-shared": "1.17.7" } }, "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q=="], @@ -174,24 +311,6 @@ "@badgateway/oauth2-client": ["@badgateway/oauth2-client@3.2.0", "", {}, "sha512-EHsoV6oLHot7HeYkIoSxCZApNgBjwNo1OTV9kXIDnmijGAshlVkJreVAAtexFn+sfDKPE0JW5SCPYJV1y4IoMg=="], - "@biomejs/biome": ["@biomejs/biome@2.0.0-beta.5", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.0.0-beta.5", "@biomejs/cli-darwin-x64": "2.0.0-beta.5", "@biomejs/cli-linux-arm64": "2.0.0-beta.5", "@biomejs/cli-linux-arm64-musl": "2.0.0-beta.5", "@biomejs/cli-linux-x64": "2.0.0-beta.5", "@biomejs/cli-linux-x64-musl": "2.0.0-beta.5", "@biomejs/cli-win32-arm64": "2.0.0-beta.5", "@biomejs/cli-win32-x64": "2.0.0-beta.5" }, "bin": { "biome": "bin/biome" } }, "sha512-1ldO4AepieVvg4aLi1ubZkA7NsefQT2UTNssbJbDiQTGem8kCHx/PZCwLxIR6UzFpGIjh0xsDzivyVvhnmqmuA=="], - - "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.0.0-beta.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-pnJiaoDpwGo+ctGkMu4POcO8jgOgCErBdYbhutr+K9rxxJS+TlHLr0LR91GCEWbGV2O1oyZRFQcW21rYFoak4w=="], - - "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.0.0-beta.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-WwEZpqcmsNoFpZkUFNQcbZo52WK4hLGQ0vZk3PQ8JlZ55gJsHiyhtv6aem6fVlyVCvZgpsC0sYPLE3VvFVKNAQ=="], - - "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.0.0-beta.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-lAF1de+Ki0vnq14NwDXouKkAR/iviyMNrUngSHjTGFC4z8XGVEfIw0ZMSm7fAdJZ5fAWodt9HiYmEAVs5EtHQg=="], - - "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.0.0-beta.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-4vxNkYx1uEt211W8hLdXddc7icRHQgYENb72g6uTd/tLVPSBvIwqUAxAOkU+9Ai1E/8R4sWy7HIxREgpuFgbNA=="], - - "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.0.0-beta.5", "", { "os": "linux", "cpu": "x64" }, "sha512-I0Pt1VHeL1mN8G7ZwV2u9AfzBd5ZKfbvHUI4x2wETUZbwcQlAu/nEzEa2LUe5HqSmnctTR36ig7RkkM9qbmIrA=="], - - "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.0.0-beta.5", "", { "os": "linux", "cpu": "x64" }, "sha512-nUeKGO517GtRCxziVD9les1HiCs2s2/WIVITMN9+9RRuLOko8r+T77E8ZXEmlfLOfOIOeE6z62WITqei3oNccA=="], - - "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.0.0-beta.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-YXW6hgbrgBcWQ1SLO69ypWlluPchgQV5C1lTG4xOcBUWdCsfYuQirM64S6Dov7SFPqsMIoFC6LlQRW+n8qAyiA=="], - - "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.0.0-beta.5", "", { "os": "win32", "cpu": "x64" }, "sha512-N7Yby52BJmvEdst1iMbclE5hxxefboaXKRJLm1tLfBYr4FeuoCe6j8HdiQSwhCRdIUGFFqBLaDXh//LLF6EReA=="], - "@bull-board/api": ["@bull-board/api@6.10.1", "", { "dependencies": { "redis-info": "^3.1.0" }, "peerDependencies": { "@bull-board/ui": "6.10.1" } }, "sha512-VPkZa2XZI2Wk2MqK1XyiiS+tOhNan54mnm2fpv2KA0fdZ92mQqNjhKkOpsykhQv9XUEc8cCRlZqGxf67YCMJbQ=="], "@bull-board/hono": ["@bull-board/hono@6.10.1", "", { "dependencies": { "@bull-board/api": "6.10.1", "@bull-board/ui": "6.10.1", "ejs": "^3.1.10" }, "peerDependencies": { "hono": "^4" } }, "sha512-2I9BUS7jbtQ4tCKOJdVKQn6uW8MXJKUGIhHLK2r4X8kiXZvk2I7jjt0KZ4VNyF9nfoBblgX5WemxE4sU61kGGg=="], @@ -570,6 +689,12 @@ "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + "@versia-server/api": ["@versia-server/api@workspace:packages/api"], + + "@versia-server/config": ["@versia-server/config@workspace:packages/config"], + + "@versia-server/worker": ["@versia-server/worker@workspace:packages/worker"], + "@versia/client": ["@versia/client@workspace:packages/client"], "@versia/kit": ["@versia/kit@workspace:packages/plugin-kit"], diff --git a/classes/config/to-json-schema.ts b/classes/config/to-json-schema.ts deleted file mode 100644 index 3afd989b..00000000 --- a/classes/config/to-json-schema.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { zodToJsonSchema } from "zod-to-json-schema"; - -await import("~/config.ts"); - -// This is an awkward way to avoid import cycles for some reason -await (async () => { - const { ConfigSchema } = await import("./schema.ts"); - - const jsonSchema = zodToJsonSchema(ConfigSchema, {}); - - console.write(`${JSON.stringify(jsonSchema, null, 4)}\n`); -})(); diff --git a/classes/functions/status.ts b/classes/functions/status.ts index 55988fd3..beadfacb 100644 --- a/classes/functions/status.ts +++ b/classes/functions/status.ts @@ -1,7 +1,9 @@ import markdownItTaskLists from "@hackmd/markdown-it-task-lists"; import { db, type Note, User } from "@versia/kit/db"; import { Instances, Users } from "@versia/kit/tables"; +import type * as VersiaEntities from "@versia/sdk/entities"; import { FederationRequester } from "@versia/sdk/http"; +import { config } from "@versia-server/config"; import { and, eq, inArray, isNull, or, sql } from "drizzle-orm"; import linkifyHtml from "linkify-html"; import { @@ -18,8 +20,6 @@ import markdownItContainer from "markdown-it-container"; import markdownItTocDoneRight from "markdown-it-toc-done-right"; import { mentionValidator } from "@/api"; import { sanitizeHtml, sanitizeHtmlInline } from "@/sanitization"; -import { config } from "~/config.ts"; -import type * as VersiaEntities from "~/packages/sdk/entities/index.ts"; import { transformOutputToUserWithRelations, userRelations } from "./user.ts"; /** diff --git a/classes/inbox/processor.ts b/classes/inbox/processor.ts index b4497bc3..7c366573 100644 --- a/classes/inbox/processor.ts +++ b/classes/inbox/processor.ts @@ -1,4 +1,5 @@ import { getLogger, type Logger } from "@logtape/logtape"; +import { ApiError } from "@versia/kit"; import { type Instance, Like, @@ -8,6 +9,10 @@ import { User, } from "@versia/kit/db"; import { Likes, Notes } from "@versia/kit/tables"; +import { EntitySorter, type JSONObject } from "@versia/sdk"; +import { verify } from "@versia/sdk/crypto"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { config } from "@versia-server/config"; import type { SocketAddress } from "bun"; import { Glob } from "bun"; import chalk from "chalk"; @@ -15,12 +20,6 @@ import { and, eq } from "drizzle-orm"; import { matches } from "ip-matching"; import { isValidationError } from "zod-validation-error"; import { sentry } from "@/sentry"; -import { config } from "~/config.ts"; -import { verify } from "~/packages/sdk/crypto.ts"; -import * as VersiaEntities from "~/packages/sdk/entities/index.ts"; -import { EntitySorter } from "~/packages/sdk/inbox-processor.ts"; -import type { JSONObject } from "~/packages/sdk/types.ts"; -import { ApiError } from "../errors/api-error.ts"; /** * Checks if the hostname is defederated using glob matching. diff --git a/classes/plugin/loader.test.ts b/classes/plugin/loader.test.ts deleted file mode 100644 index 816b7516..00000000 --- a/classes/plugin/loader.test.ts +++ /dev/null @@ -1,221 +0,0 @@ -/* import { - afterEach, - beforeEach, - describe, - expect, - jest, - mock, - test, -} from "bun:test"; -import { ZodError, type ZodTypeAny, z } from "zod"; -import { Plugin } from "~/packages/plugin-kit"; -import { type Manifest, manifestSchema } from "~/packages/plugin-kit/schema"; -import { PluginLoader } from "./loader.ts"; - -const mockReaddir = jest.fn(); -const mockGetLogger = jest.fn(() => ({ - fatal: jest.fn(), -})); -const mockParseJSON5 = jest.fn(); -const mockParseJSONC = jest.fn(); -const mockFromZodError = jest.fn(); - -mock.module("node:fs/promises", () => ({ - readdir: mockReaddir, -})); - -mock.module("@logtape/logtape", () => ({ - getLogger: mockGetLogger, -})); - -mock.module("confbox", () => ({ - parseJSON5: mockParseJSON5, - parseJSONC: mockParseJSONC, -})); - -mock.module("zod-validation-error", () => ({ - fromZodError: mockFromZodError, -})); - -describe("PluginLoader", () => { - let pluginLoader: PluginLoader; - - beforeEach(() => { - pluginLoader = new PluginLoader(); - }); - - afterEach(() => { - jest.clearAllMocks(); - }); - - test("getDirectories should return directories", async () => { - mockReaddir.mockResolvedValue([ - { name: "dir1", isDirectory: (): true => true }, - { name: "file1", isDirectory: (): false => false }, - { name: "dir2", isDirectory: (): true => true }, - ]); - - // biome-ignore lint/complexity/useLiteralKeys: Private method - const directories = await PluginLoader["getDirectories"]("/some/path"); - expect(directories).toEqual(["dir1", "dir2"]); - }); - - test("findManifestFile should return manifest file if found", async () => { - mockReaddir.mockResolvedValue(["manifest.json", "otherfile.txt"]); - - const manifestFile = - // biome-ignore lint/complexity/useLiteralKeys: Private method - await PluginLoader["findManifestFile"]("/some/path"); - expect(manifestFile).toBe("manifest.json"); - }); - - test("hasEntrypoint should return true if entrypoint file is found", async () => { - mockReaddir.mockResolvedValue(["index.ts", "otherfile.txt"]); - - // biome-ignore lint/complexity/useLiteralKeys: Private method - const hasEntrypoint = await PluginLoader["hasEntrypoint"]("/some/path"); - expect(hasEntrypoint).toBe(true); - }); - - test("parseManifestFile should parse JSON manifest", async () => { - const manifestContent = { name: "test-plugin" }; - Bun.file = jest.fn().mockReturnValue({ - text: (): Promise => - Promise.resolve(JSON.stringify(manifestContent)), - }); - - // biome-ignore lint/complexity/useLiteralKeys: Private method - const manifest = await pluginLoader["parseManifestFile"]( - "/some/path/manifest.json", - "manifest.json", - ); - expect(manifest).toEqual(manifestContent); - }); - - test("findPlugins should return plugin directories with valid manifest and entrypoint", async () => { - mockReaddir - .mockResolvedValueOnce([ - { name: "plugin1", isDirectory: (): true => true }, - { name: "plugin2", isDirectory: (): true => true }, - ]) - .mockResolvedValue(["manifest.json", "index.ts"]); - - const plugins = await PluginLoader.findPlugins("/some/path"); - expect(plugins).toEqual(["plugin1", "plugin2"]); - }); - - test("parseManifest should parse and validate manifest", async () => { - const manifestContent: Manifest = { - name: "test-plugin", - version: "1.1.0", - description: "Doobaee", - }; - mockReaddir.mockResolvedValue(["manifest.json"]); - Bun.file = jest.fn().mockReturnValue({ - text: (): Promise => - Promise.resolve(JSON.stringify(manifestContent)), - }); - manifestSchema.safeParseAsync = jest.fn().mockResolvedValue({ - success: true, - data: manifestContent, - }); - - const manifest = await pluginLoader.parseManifest( - "/some/path", - "plugin1", - ); - expect(manifest).toEqual(manifestContent); - }); - - test("parseManifest should throw error if manifest is missing", async () => { - mockReaddir.mockResolvedValue([]); - - await expect( - pluginLoader.parseManifest("/some/path", "plugin1"), - ).rejects.toThrow("Plugin plugin1 is missing a manifest file"); - }); - - test("parseManifest should throw error if manifest is invalid", async () => { - // @ts-expect-error trying to cause a type error here - const manifestContent: Manifest = { - name: "test-plugin", - version: "1.1.0", - }; - mockReaddir.mockResolvedValue(["manifest.json"]); - Bun.file = jest.fn().mockReturnValue({ - text: (): Promise => - Promise.resolve(JSON.stringify(manifestContent)), - }); - manifestSchema.safeParseAsync = jest.fn().mockResolvedValue({ - success: false, - error: new ZodError([]), - }); - - await expect( - pluginLoader.parseManifest("/some/path", "plugin1"), - ).rejects.toThrow(); - }); - - test("loadPlugin should load and return a Plugin instance", async () => { - const mockPlugin = new Plugin(z.object({})); - mock.module("/some/path/index.ts", () => ({ - default: mockPlugin, - })); - - const plugin = await pluginLoader.loadPlugin("/some/path", "index.ts"); - expect(plugin).toBeInstanceOf(Plugin); - }); - - test("loadPlugin should throw error if default export is not a Plugin", async () => { - mock.module("/some/path/index.ts", () => ({ - default: "cheese", - })); - - await expect( - pluginLoader.loadPlugin("/some/path", "index.ts"), - ).rejects.toThrow("Entrypoint is not a Plugin"); - }); - - test("loadPlugins should load all plugins in a directory", async () => { - const manifestContent: Manifest = { - name: "test-plugin", - version: "1.1.0", - description: "Doobaee", - }; - const mockPlugin = new Plugin(z.object({})); - - mockReaddir - .mockResolvedValueOnce([ - { name: "plugin1", isDirectory: (): true => true }, - { name: "plugin2", isDirectory: (): true => true }, - ]) - .mockResolvedValue(["manifest.json", "index.ts"]); - Bun.file = jest.fn().mockReturnValue({ - text: (): Promise => - Promise.resolve(JSON.stringify(manifestContent)), - }); - manifestSchema.safeParseAsync = jest.fn().mockResolvedValue({ - success: true, - data: manifestContent, - }); - mock.module("/some/path/plugin1/index", () => ({ - default: mockPlugin, - })); - mock.module("/some/path/plugin2/index", () => ({ - default: mockPlugin, - })); - - const plugins = await pluginLoader.loadPlugins("/some/path", true); - expect(plugins).toEqual([ - { - manifest: manifestContent, - plugin: mockPlugin as unknown as Plugin, - }, - { - manifest: manifestContent, - plugin: mockPlugin as unknown as Plugin, - }, - ]); - }); -}); - */ diff --git a/classes/plugin/loader.ts b/classes/plugin/loader.ts index 7f356962..2985af70 100644 --- a/classes/plugin/loader.ts +++ b/classes/plugin/loader.ts @@ -1,14 +1,13 @@ import { readdir } from "node:fs/promises"; import { getLogger, type Logger } from "@logtape/logtape"; +import { type Manifest, manifestSchema, Plugin } from "@versia/kit"; +import { config } from "@versia-server/config"; import { file, sleep } from "bun"; import chalk from "chalk"; import { parseJSON5, parseJSONC } from "confbox"; import type { Hono } from "hono"; import type { ZodTypeAny } from "zod"; import { fromZodError, type ValidationError } from "zod-validation-error"; -import { config } from "~/config.ts"; -import { Plugin } from "~/packages/plugin-kit/plugin"; -import { type Manifest, manifestSchema } from "~/packages/plugin-kit/schema"; import type { HonoEnv } from "~/types/api"; /** diff --git a/classes/queues/delivery.ts b/classes/queues/delivery.ts index 448c8da3..9f44f98f 100644 --- a/classes/queues/delivery.ts +++ b/classes/queues/delivery.ts @@ -1,9 +1,9 @@ import { User } from "@versia/kit/db"; +import type { JSONObject } from "@versia/sdk"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { config } from "@versia-server/config"; import { Queue, Worker } from "bullmq"; import chalk from "chalk"; -import { config } from "~/config.ts"; -import * as VersiaEntities from "~/packages/sdk/entities"; -import type { JSONObject } from "~/packages/sdk/types"; import { connection } from "~/utils/redis.ts"; export enum DeliveryJobType { diff --git a/classes/queues/fetch.ts b/classes/queues/fetch.ts index f76a910f..4b5bd098 100644 --- a/classes/queues/fetch.ts +++ b/classes/queues/fetch.ts @@ -1,8 +1,8 @@ import { Instance } from "@versia/kit/db"; import { Instances } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { Queue, Worker } from "bullmq"; import { eq } from "drizzle-orm"; -import { config } from "~/config.ts"; import { connection } from "~/utils/redis.ts"; export enum FetchJobType { diff --git a/classes/queues/inbox.ts b/classes/queues/inbox.ts index a55f9136..00ed5511 100644 --- a/classes/queues/inbox.ts +++ b/classes/queues/inbox.ts @@ -1,11 +1,11 @@ import { getLogger } from "@logtape/logtape"; +import { ApiError } from "@versia/kit"; import { Instance, User } from "@versia/kit/db"; +import type { JSONObject } from "@versia/sdk"; +import { config } from "@versia-server/config"; import { Queue, Worker } from "bullmq"; import type { SocketAddress } from "bun"; -import { config } from "~/config.ts"; -import type { JSONObject } from "~/packages/sdk/types.ts"; import { connection } from "~/utils/redis.ts"; -import { ApiError } from "../errors/api-error.ts"; import { InboxProcessor } from "../inbox/processor.ts"; export enum InboxJobType { diff --git a/classes/queues/media.ts b/classes/queues/media.ts index a10a0e38..b5d6b2cf 100644 --- a/classes/queues/media.ts +++ b/classes/queues/media.ts @@ -1,6 +1,6 @@ import { Media } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import { Queue, Worker } from "bullmq"; -import { config } from "~/config.ts"; import { connection } from "~/utils/redis.ts"; import { calculateBlurhash } from "../media/preprocessors/blurhash.ts"; import { convertImage } from "../media/preprocessors/image-conversion.ts"; diff --git a/classes/queues/push.ts b/classes/queues/push.ts index 1378cb4e..8bf46086 100644 --- a/classes/queues/push.ts +++ b/classes/queues/push.ts @@ -1,8 +1,8 @@ import { Note, PushSubscription, Token, User } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import { Queue, Worker } from "bullmq"; import { sendNotification } from "web-push"; import { htmlToText } from "@/content_types.ts"; -import { config } from "~/config.ts"; import { connection } from "~/utils/redis.ts"; export enum PushJobType { diff --git a/classes/queues/relationships.ts b/classes/queues/relationships.ts index 0a7960b8..a5d7c335 100644 --- a/classes/queues/relationships.ts +++ b/classes/queues/relationships.ts @@ -1,6 +1,6 @@ import { Relationship, User } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import { Queue, Worker } from "bullmq"; -import { config } from "~/config.ts"; import { connection } from "~/utils/redis.ts"; export enum RelationshipJobType { diff --git a/classes/search/search-manager.ts b/classes/search/search-manager.ts index 21762bae..ae5ef8b4 100644 --- a/classes/search/search-manager.ts +++ b/classes/search/search-manager.ts @@ -5,12 +5,12 @@ import { getLogger } from "@logtape/logtape"; import { db, Note, User } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import type { SQL, ValueOrArray } from "drizzle-orm"; import { Ingest as SonicChannelIngest, Search as SonicChannelSearch, } from "sonic-channel"; -import { config } from "~/config.ts"; /** * Enum for Sonic index types diff --git a/cli/index.ts b/cli/index.ts index 2d315504..c744528b 100644 --- a/cli/index.ts +++ b/cli/index.ts @@ -3,9 +3,9 @@ import { friendlyErrorPlugin } from "@clerc/plugin-friendly-error"; import { helpPlugin } from "@clerc/plugin-help"; import { notFoundPlugin } from "@clerc/plugin-not-found"; import { versionPlugin } from "@clerc/plugin-version"; +import { setupDatabase } from "@versia/kit/db"; import { Clerc } from "clerc"; import { searchManager } from "~/classes/search/search-manager.ts"; -import { setupDatabase } from "~/drizzle/db.ts"; import pkg from "~/package.json" with { type: "json" }; import { rebuildIndexCommand } from "./index/rebuild.ts"; import { refetchInstanceCommand } from "./instance/refetch.ts"; diff --git a/cli/index/rebuild.ts b/cli/index/rebuild.ts index a99ec2f5..4209e8c3 100644 --- a/cli/index/rebuild.ts +++ b/cli/index/rebuild.ts @@ -1,3 +1,4 @@ +import { config } from "@versia-server/config"; // @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"; @@ -6,7 +7,6 @@ import { SonicIndexType, searchManager, } from "~/classes/search/search-manager.ts"; -import { config } from "~/config.ts"; export const rebuildIndexCommand = defineCommand( { diff --git a/cli/instance/refetch.ts b/cli/instance/refetch.ts index 6f63b40a..52ef8456 100644 --- a/cli/instance/refetch.ts +++ b/cli/instance/refetch.ts @@ -1,11 +1,11 @@ +import { Instance } from "@versia/kit/db"; +import { Instances } from "@versia/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 { Instance } from "~/classes/database/instance.ts"; import { FetchJobType, fetchQueue } from "~/classes/queues/fetch.ts"; -import { Instances } from "~/drizzle/schema.ts"; export const refetchInstanceCommand = defineCommand( { diff --git a/cli/user/create.ts b/cli/user/create.ts index 8340c521..d3ba13fc 100644 --- a/cli/user/create.ts +++ b/cli/user/create.ts @@ -1,12 +1,12 @@ +import { User } from "@versia/kit/db"; +import { Users } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; 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 { and, eq, isNull } from "drizzle-orm"; import { renderUnicodeCompact } from "uqr"; -import { User } from "~/classes/database/user"; -import { config } from "~/config"; -import { Users } from "~/drizzle/schema"; export const createUserCommand = defineCommand( { diff --git a/cli/user/refetch.ts b/cli/user/refetch.ts index 39bc1279..b84fb460 100644 --- a/cli/user/refetch.ts +++ b/cli/user/refetch.ts @@ -1,9 +1,9 @@ +import { User } from "@versia/kit/db"; 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 ora from "ora"; -import { User } from "~/classes/database/user.ts"; import { retrieveUser } from "../utils.ts"; export const refetchUserCommand = defineCommand( diff --git a/cli/user/token.ts b/cli/user/token.ts index 083a1b9f..55e73237 100644 --- a/cli/user/token.ts +++ b/cli/user/token.ts @@ -1,10 +1,10 @@ +import { Token } from "@versia/kit/db"; import { randomUUIDv7 } from "bun"; 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 { randomString } from "@/math.ts"; -import { Token } from "~/classes/database/token.ts"; import { retrieveUser } from "../utils.ts"; export const generateTokenCommand = defineCommand( diff --git a/cli/utils.ts b/cli/utils.ts index 1c7c3688..9ccc08f5 100644 --- a/cli/utils.ts +++ b/cli/utils.ts @@ -1,8 +1,7 @@ +import { Instance, User } from "@versia/kit/db"; +import { Users } from "@versia/kit/tables"; import { and, eq, isNull } from "drizzle-orm"; import { parseUserAddress } from "@/api"; -import { Instance } from "~/classes/database/instance"; -import { User } from "~/classes/database/user"; -import { Users } from "~/drizzle/schema"; export const retrieveUser = async ( usernameOrHandle: string, diff --git a/drizzle.config.ts b/drizzle.config.ts index f1b48f49..49d2ec86 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -1,5 +1,5 @@ +import { config } from "@versia-server/config"; import type { Config } from "drizzle-kit"; -import { config } from "~/config.ts"; /** * Drizzle can't properly resolve imports with top-level await, so uncomment diff --git a/entrypoints/worker/index.ts b/entrypoints/worker/index.ts deleted file mode 100644 index 95e2656d..00000000 --- a/entrypoints/worker/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -import process from "node:process"; -import { getLogger } from "@logtape/logtape"; -import chalk from "chalk"; -import { sentry } from "@/sentry"; -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"; - -process.on("SIGINT", () => { - process.exit(); -}); - -await import("~/entrypoints/worker/setup.ts"); -sentry?.captureMessage("Server started", "info"); - -const serverLogger = getLogger("server"); - -serverLogger.info`Starting Fetch Worker...`; -getFetchWorker(); -serverLogger.info`${chalk.green("✔")} Fetch Worker started`; - -serverLogger.info`Starting Delivery Worker...`; -getDeliveryWorker(); -serverLogger.info`${chalk.green("✔")} Delivery Worker started`; - -serverLogger.info`Starting Inbox Worker...`; -getInboxWorker(); -serverLogger.info`${chalk.green("✔")} Inbox Worker started`; - -serverLogger.info`Starting Push Worker...`; -getPushWorker(); -serverLogger.info`${chalk.green("✔")} Push Worker started`; - -serverLogger.info`Starting Media Worker...`; -getMediaWorker(); -serverLogger.info`${chalk.green("✔")} Media Worker started`; - -serverLogger.info`Starting Relationship Worker...`; -getRelationshipWorker(); -serverLogger.info`${chalk.green("✔")} Relationship Worker started`; - -serverLogger.info`${chalk.green("✔✔✔✔✔✔")} All workers started`; diff --git a/index.ts b/index.ts deleted file mode 100644 index 6ba16223..00000000 --- a/index.ts +++ /dev/null @@ -1 +0,0 @@ -await import("~/entrypoints/api/index.ts"); diff --git a/package.json b/package.json index 4ff7b7f7..185c1903 100644 --- a/package.json +++ b/package.json @@ -20,9 +20,87 @@ "activitypub", "bun" ], - "workspaces": [ - "packages/*" - ], + "workspaces": { + "packages": [ + "packages/*" + ], + "catalog": { + "@biomejs/biome": "2.0.0-beta.5", + "@types/bun": "^1.2.16", + "@types/html-to-text": "^9.0.4", + "@types/markdown-it-container": "^2.0.10", + "@types/mime-types": "^3.0.1", + "@types/qs": "^6.14.0", + "@types/web-push": "^3.6.4", + "bun-bagel": "^1.2.0", + "drizzle-kit": "^0.31.1", + "mitt": "^3.0.1", + "markdown-it-image-figures": "^2.1.1", + "ts-prune": "^0.10.3", + "typescript": "^5.8.3", + "vitepress": "^1.6.3", + "vitepress-plugin-tabs": "^0.7.1", + "vitepress-sidebar": "^1.31.1", + "vue": "^3.5.16", + "zod-to-json-schema": "^3.24.5", + "@bull-board/api": "^6.10.1", + "@bull-board/hono": "^6.10.1", + "@clerc/plugin-completions": "^0.44.0", + "@clerc/plugin-friendly-error": "^0.44.0", + "@clerc/plugin-help": "^0.44.0", + "@clerc/plugin-not-found": "^0.44.0", + "@clerc/plugin-version": "^0.44.0", + "@hackmd/markdown-it-task-lists": "^2.1.4", + "@hono/zod-validator": "^0.7.0", + "@inquirer/confirm": "^5.1.12", + "@logtape/file": "^0.12.0", + "@logtape/logtape": "^0.12.0", + "@scalar/hono-api-reference": "^0.9.4", + "@sentry/bun": "^9.29.0", + "altcha-lib": "^1.3.0", + "blurhash": "^2.0.5", + "bullmq": "^5.53.3", + "chalk": "^5.4.1", + "clerc": "^0.44.0", + "confbox": "^0.2.2", + "drizzle-orm": "^0.44.2", + "feed": "^5.1.0", + "hono": "^4.7.11", + "hono-openapi": "^0.4.8", + "hono-rate-limiter": "^0.4.2", + "html-to-text": "^9.0.5", + "ioredis": "^5.6.1", + "ip-matching": "^2.1.2", + "iso-639-1": "^3.1.5", + "jose": "^6.0.11", + "linkify-html": "^4.3.1", + "linkify-string": "^4.3.1", + "linkifyjs": "^4.3.1", + "magic-regexp": "^0.10.0", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^9.2.0", + "markdown-it-container": "^4.0.0", + "markdown-it-mathjax3": "^4.3.2", + "markdown-it-toc-done-right": "^4.2.0", + "mime-types": "^3.0.1", + "mitata": "^1.0.34", + "oauth4webapi": "^3.5.2", + "ora": "^8.2.0", + "qs": "^6.14.0", + "sharp": "^0.34.2", + "sonic-channel": "^1.3.1", + "string-comparison": "^1.3.0", + "stringify-entities": "^4.0.4", + "unicode-emoji-json": "^0.8.0", + "uqr": "^0.1.2", + "web-push": "^3.6.7", + "xss": "^1.0.15", + "youch": "^4.1.0-beta.7", + "zod": "^3.25.64", + "zod-openapi": "^4.2.4", + "zod-validation-error": "^3.5.0" + } + }, "maintainers": [ { "email": "contact@cpluspatch.com", @@ -36,21 +114,14 @@ }, "private": true, "scripts": { - "dev": "bun run --hot index.ts", - "start": "NODE_ENV=production bun run dist/index.js --prod", "lint": "biome check .", - "build": "bun run build.ts", - "build:worker": "bun run build-worker.ts", "cloc": "cloc . --exclude-dir node_modules,dist,.output,.nuxt,meta,logs --exclude-ext sql,log,pem", "wc": "find server database *.ts docs packages types utils drizzle tests -type f -print0 | wc -m --files0-from=-", "cli": "bun run cli/index.ts", - "prune": "ts-prune | grep -v server/ | grep -v dist/ | grep -v '(used in module)'", - "schema:generate": "bun run classes/config/to-json-schema.ts > config/config.schema.json && bun run packages/plugin-kit/json-schema.ts > packages/plugin-kit/manifest.schema.json", "check": "bunx tsc -p .", "test": "bun test", - "docs:dev": "vitepress dev docs", - "docs:build": "vitepress build docs", - "docs:preview": "vitepress preview docs" + "run-api": "bun run packages/api/build.ts && cd dist && ln -s ../config config && bun run packages/api/index.js", + "run-worker": "bun run packages/worker/build.ts && cd dist && ln -s ../config config && bun run packages/worker/index.js" }, "trustedDependencies": [ "@biomejs/biome", @@ -60,83 +131,83 @@ "sharp" ], "devDependencies": { - "@biomejs/biome": "2.0.0-beta.5", - "@types/bun": "^1.2.16", - "@types/html-to-text": "^9.0.4", - "@types/markdown-it-container": "^2.0.10", - "@types/mime-types": "^3.0.1", - "@types/qs": "^6.14.0", - "@types/web-push": "^3.6.4", - "bun-bagel": "^1.2.0", - "drizzle-kit": "^0.31.1", - "markdown-it-image-figures": "^2.1.1", - "ts-prune": "^0.10.3", - "typescript": "^5.8.3", - "vitepress": "^1.6.3", - "vitepress-plugin-tabs": "^0.7.1", - "vitepress-sidebar": "^1.31.1", - "vue": "^3.5.16", - "zod-to-json-schema": "^3.24.5" + "@types/bun": "catalog:", + "@types/html-to-text": "catalog:", + "@types/markdown-it-container": "catalog:", + "@types/mime-types": "catalog:", + "@types/qs": "catalog:", + "@types/web-push": "catalog:", + "bun-bagel": "catalog:", + "drizzle-kit": "catalog:", + "markdown-it-image-figures": "catalog:", + "ts-prune": "catalog:", + "typescript": "catalog:", + "vitepress": "catalog:", + "vitepress-plugin-tabs": "catalog:", + "vitepress-sidebar": "catalog:", + "vue": "catalog:", + "zod-to-json-schema": "catalog:" }, "dependencies": { - "@bull-board/api": "^6.10.1", - "@bull-board/hono": "^6.10.1", - "@clerc/plugin-completions": "^0.44.0", - "@clerc/plugin-friendly-error": "^0.44.0", - "@clerc/plugin-help": "^0.44.0", - "@clerc/plugin-not-found": "^0.44.0", - "@clerc/plugin-version": "^0.44.0", - "@hackmd/markdown-it-task-lists": "^2.1.4", - "@hono/zod-validator": "^0.7.0", - "@inquirer/confirm": "^5.1.12", - "@logtape/file": "^0.12.0", - "@logtape/logtape": "^0.12.0", - "@scalar/hono-api-reference": "^0.9.4", - "@sentry/bun": "^9.29.0", + "@bull-board/api": "catalog:", + "@bull-board/hono": "catalog:", + "@clerc/plugin-completions": "catalog:", + "@clerc/plugin-friendly-error": "catalog:", + "@clerc/plugin-help": "catalog:", + "@clerc/plugin-not-found": "catalog:", + "@clerc/plugin-version": "catalog:", + "@hackmd/markdown-it-task-lists": "catalog:", + "@hono/zod-validator": "catalog:", + "@inquirer/confirm": "catalog:", + "@logtape/file": "catalog:", + "@logtape/logtape": "catalog:", + "@scalar/hono-api-reference": "catalog:", + "@sentry/bun": "catalog:", "@versia/client": "workspace:*", "@versia/kit": "workspace:*", "@versia/sdk": "workspace:*", - "altcha-lib": "^1.3.0", - "blurhash": "^2.0.5", - "bullmq": "^5.53.3", - "chalk": "^5.4.1", - "clerc": "^0.44.0", - "confbox": "^0.2.2", - "drizzle-orm": "^0.44.2", - "feed": "^5.1.0", - "hono": "^4.7.11", - "hono-openapi": "^0.4.8", - "hono-rate-limiter": "^0.4.2", - "html-to-text": "^9.0.5", - "ioredis": "^5.6.1", - "ip-matching": "^2.1.2", + "@versia-server/config": "workspace:*", + "altcha-lib": "catalog:", + "blurhash": "catalog:", + "bullmq": "catalog:", + "chalk": "catalog:", + "clerc": "catalog:", + "confbox": "catalog:", + "drizzle-orm": "catalog:", + "feed": "catalog:", + "hono": "catalog:", + "hono-openapi": "catalog:", + "hono-rate-limiter": "catalog:", + "html-to-text": "catalog:", + "ioredis": "catalog:", + "ip-matching": "catalog:", "iso-639-1": "^3.1.5", - "jose": "^6.0.11", - "linkify-html": "^4.3.1", - "linkify-string": "^4.3.1", - "linkifyjs": "^4.3.1", - "magic-regexp": "^0.10.0", - "markdown-it": "^14.1.0", - "markdown-it-anchor": "^9.2.0", - "markdown-it-container": "^4.0.0", - "markdown-it-mathjax3": "^4.3.2", - "markdown-it-toc-done-right": "^4.2.0", - "mime-types": "^3.0.1", - "mitata": "^1.0.34", - "oauth4webapi": "^3.5.2", - "ora": "^8.2.0", - "qs": "^6.14.0", - "sharp": "^0.34.2", - "sonic-channel": "^1.3.1", - "string-comparison": "^1.3.0", - "stringify-entities": "^4.0.4", - "unicode-emoji-json": "^0.8.0", - "uqr": "^0.1.2", - "web-push": "^3.6.7", - "xss": "^1.0.15", - "youch": "^4.1.0-beta.7", - "zod": "^3.25.64", - "zod-openapi": "^4.2.4", - "zod-validation-error": "^3.5.0" + "jose": "catalog:", + "linkify-html": "catalog:", + "linkify-string": "catalog:", + "linkifyjs": "catalog:", + "magic-regexp": "catalog:", + "markdown-it": "catalog:", + "markdown-it-anchor": "catalog:", + "markdown-it-container": "catalog:", + "markdown-it-mathjax3": "catalog:", + "markdown-it-toc-done-right": "catalog:", + "mime-types": "catalog:", + "mitata": "catalog:", + "oauth4webapi": "catalog:", + "ora": "catalog:", + "qs": "catalog:", + "sharp": "catalog:", + "sonic-channel": "catalog:", + "string-comparison": "catalog:", + "stringify-entities": "catalog:", + "unicode-emoji-json": "catalog:", + "uqr": "catalog:", + "web-push": "catalog:", + "xss": "catalog:", + "youch": "catalog:", + "zod": "catalog:", + "zod-openapi": "catalog:", + "zod-validation-error": "catalog:" } } diff --git a/app.ts b/packages/api/app.ts similarity index 96% rename from app.ts rename to packages/api/app.ts index 7afdca5a..3035344c 100644 --- a/app.ts +++ b/packages/api/app.ts @@ -1,6 +1,8 @@ import { resolve } from "node:path"; import { getLogger } from "@logtape/logtape"; import { Scalar } from "@scalar/hono-api-reference"; +import { ApiError } from "@versia/kit"; +import { config } from "@versia-server/config"; import chalk from "chalk"; import { Hono } from "hono"; import { serveStatic } from "hono/bun"; @@ -13,17 +15,15 @@ import { Youch } from "youch"; import { applyToHono } from "@/bull-board.ts"; import { configureLoggers } from "@/loggers"; import { sentry } from "@/sentry"; -import { config } from "~/config.ts"; import pkg from "~/package.json" with { type: "application/json" }; -import { ApiError } from "./classes/errors/api-error.ts"; -import { PluginLoader } from "./classes/plugin/loader.ts"; +import { PluginLoader } from "../../classes/plugin/loader.ts"; +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 { routes } from "./routes.ts"; -import type { ApiRouteExports, HonoEnv } from "./types/api.ts"; // Extends Zod with OpenAPI schema generation import "zod-openapi/extend"; diff --git a/build.ts b/packages/api/build.ts similarity index 78% rename from build.ts rename to packages/api/build.ts index f02a3d15..05659774 100644 --- a/build.ts +++ b/packages/api/build.ts @@ -1,6 +1,6 @@ import { readdir } from "node:fs/promises"; import { $, build } from "bun"; -import { routes } from "~/routes"; +import { routes } from "~/packages/api/routes"; console.log("Building..."); @@ -11,9 +11,9 @@ const pluginDirs = await readdir("plugins", { withFileTypes: true }); await build({ entrypoints: [ - "index.ts", + "packages/api/index.ts", // HACK: Include to avoid cyclical import errors - "config.ts", + "packages/config/index.ts", "cli/index.ts", // Force Bun to include endpoints ...Object.values(routes), @@ -31,8 +31,12 @@ await build({ console.log("Copying files..."); -// Copy Drizzle migrations to dist -await $`cp -r drizzle dist/drizzle`; +// Fix Bun build mistake +await $`sed -i 's/ProxiableUrl, url, sensitiveString, keyPair, exportedConfig/url, sensitiveString, keyPair, exportedConfig/g' dist/packages/config/*.js`; + +// Copy Drizzle stuff +await $`mkdir -p dist/packages/plugin-kit/tables`; +await $`cp -rL packages/plugin-kit/tables/migrations dist/packages/plugin-kit/tables`; // Copy plugin manifests await $`cp plugins/openid/manifest.json dist/plugins/openid/manifest.json`; diff --git a/entrypoints/api/index.ts b/packages/api/index.ts similarity index 78% rename from entrypoints/api/index.ts rename to packages/api/index.ts index 0ebcafdc..150d1f0d 100644 --- a/entrypoints/api/index.ts +++ b/packages/api/index.ts @@ -1,9 +1,9 @@ import process from "node:process"; +import { config } from "@versia-server/config"; import { Youch } from "youch"; import { sentry } from "@/sentry"; import { createServer } from "@/server"; -import { appFactory } from "~/app"; -import { config } from "~/config.ts"; +import { appFactory } from "./app.ts"; process.on("SIGINT", () => { process.exit(); @@ -15,7 +15,7 @@ process.on("uncaughtException", async (error) => { console.error(await youch.toANSI(error)); }); -await import("~/entrypoints/api/setup.ts"); +await import("./setup.ts"); sentry?.captureMessage("Server started", "info"); createServer(config, await appFactory()); diff --git a/middlewares/agent-bans.ts b/packages/api/middlewares/agent-bans.ts similarity index 81% rename from middlewares/agent-bans.ts rename to packages/api/middlewares/agent-bans.ts index 7de10db0..ed0f9518 100644 --- a/middlewares/agent-bans.ts +++ b/packages/api/middlewares/agent-bans.ts @@ -1,6 +1,6 @@ +import { ApiError } from "@versia/kit"; +import { config } from "@versia-server/config"; import { createMiddleware } from "hono/factory"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; export const agentBans = createMiddleware(async (context, next) => { // Check for banned user agents (regex) diff --git a/middlewares/boundary-check.ts b/packages/api/middlewares/boundary-check.ts similarity index 93% rename from middlewares/boundary-check.ts rename to packages/api/middlewares/boundary-check.ts index 66fcd223..cb324089 100644 --- a/middlewares/boundary-check.ts +++ b/packages/api/middlewares/boundary-check.ts @@ -1,5 +1,5 @@ +import { ApiError } from "@versia/kit"; import { createMiddleware } from "hono/factory"; -import { ApiError } from "~/classes/errors/api-error"; export const boundaryCheck = createMiddleware(async (context, next) => { // Checks that FormData boundary is present diff --git a/middlewares/ip-bans.ts b/packages/api/middlewares/ip-bans.ts similarity index 91% rename from middlewares/ip-bans.ts rename to packages/api/middlewares/ip-bans.ts index ba170fcf..0bf4ec90 100644 --- a/middlewares/ip-bans.ts +++ b/packages/api/middlewares/ip-bans.ts @@ -1,10 +1,10 @@ import { getLogger } from "@logtape/logtape"; +import { ApiError } from "@versia/kit"; +import { config } from "@versia-server/config"; import type { SocketAddress } from "bun"; import { createMiddleware } from "hono/factory"; import { matches } from "ip-matching"; import { sentry } from "@/sentry"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; export const ipBans = createMiddleware(async (context, next) => { // Check for banned IPs diff --git a/middlewares/logger.ts b/packages/api/middlewares/logger.ts similarity index 96% rename from middlewares/logger.ts rename to packages/api/middlewares/logger.ts index 21e604cf..eff6bd55 100644 --- a/middlewares/logger.ts +++ b/packages/api/middlewares/logger.ts @@ -1,8 +1,8 @@ import { getLogger } from "@logtape/logtape"; +import { config } from "@versia-server/config"; import { SHA256 } from "bun"; import chalk from "chalk"; import { createMiddleware } from "hono/factory"; -import { config } from "~/config.ts"; export const logger = createMiddleware(async (context, next) => { if (config.logging.types.requests) { diff --git a/middlewares/rate-limit.ts b/packages/api/middlewares/rate-limit.ts similarity index 95% rename from middlewares/rate-limit.ts rename to packages/api/middlewares/rate-limit.ts index bddb1d72..49259beb 100644 --- a/middlewares/rate-limit.ts +++ b/packages/api/middlewares/rate-limit.ts @@ -1,8 +1,8 @@ +import type { ApiError } from "@versia/kit"; import { env } from "bun"; import type { MiddlewareHandler } from "hono"; import { rateLimiter } from "hono-rate-limiter"; import type { z } from "zod"; -import type { ApiError } from "~/classes/errors/api-error"; import type { HonoEnv } from "~/types/api"; // Not exported by hono-rate-limiter diff --git a/middlewares/url-check.ts b/packages/api/middlewares/url-check.ts similarity index 91% rename from middlewares/url-check.ts rename to packages/api/middlewares/url-check.ts index c405b890..f4e323bc 100644 --- a/middlewares/url-check.ts +++ b/packages/api/middlewares/url-check.ts @@ -1,5 +1,5 @@ +import { config } from "@versia-server/config"; import { createMiddleware } from "hono/factory"; -import { config } from "~/config.ts"; export const urlCheck = createMiddleware(async (context, next) => { // Check that request URL matches base_url diff --git a/packages/api/package.json b/packages/api/package.json new file mode 100644 index 00000000..edc4424f --- /dev/null +++ b/packages/api/package.json @@ -0,0 +1,67 @@ +{ + "name": "@versia-server/api", + "module": "index.ts", + "type": "module", + "version": "0.9.0-alpha.0", + "description": "Powerful, configurable and modular federated server using the Versia Protocol.", + "homepage": "https://versia.pub", + "author": { + "email": "contact@cpluspatch.com", + "name": "Jesse Wierzbinski", + "url": "https://cpluspatch.com" + }, + "bugs": { + "url": "https://github.com/versia-pub/server/issues" + }, + "icon": "https://cdn.versia.pub/branding/icon.svg", + "license": "AGPL-3.0-or-later", + "keywords": [ + "federated", + "activitypub", + "bun" + ], + "maintainers": [ + { + "email": "contact@cpluspatch.com", + "name": "Jesse Wierzbinski", + "url": "https://cpluspatch.com" + } + ], + "repository": { + "type": "git", + "url": "git+https://github.com/versia-pub/server.git", + "directory": "packages/api" + }, + "private": true, + "scripts": { + "dev": "bun run --hot index.ts", + "build": "bun run build.ts", + "schema:generate": "bun run classes/config/to-json-schema.ts > config/config.schema.json && bun run packages/plugin-kit/json-schema.ts > packages/plugin-kit/manifest.schema.json", + "docs:dev": "vitepress dev docs", + "docs:build": "vitepress build docs", + "docs:preview": "vitepress preview docs" + }, + "dependencies": { + "@versia-server/config": "workspace:*", + "@versia/kit": "workspace:*", + "@versia/client": "workspace:*", + "@versia/sdk": "workspace:*", + "@logtape/logtape": "catalog:", + "youch": "catalog:", + "hono": "catalog:", + "hono-openapi": "catalog:", + "zod": "catalog:", + "drizzle-orm": "catalog:", + "string-comparison": "catalog:", + "bun-bagel": "catalog:", + "chalk": "catalog:", + "unicode-emoji-json": "catalog:", + "sharp": "catalog:", + "iso-639-1": "catalog:", + "jose": "catalog:", + "zod-openapi": "catalog:", + "@scalar/hono-api-reference": "catalog:", + "hono-rate-limiter": "catalog:", + "ip-matching": "catalog:" + } +} diff --git a/routes.ts b/packages/api/routes.ts similarity index 92% rename from routes.ts rename to packages/api/routes.ts index aa0a7f3a..085c982c 100644 --- a/routes.ts +++ b/packages/api/routes.ts @@ -2,7 +2,7 @@ import { FileSystemRouter } from "bun"; // Returns the route filesystem path when given a URL export const routeMatcher = new FileSystemRouter({ style: "nextjs", - dir: "api", + dir: "packages/api/routes", fileExtensions: [".ts", ".js"], }); diff --git a/api/api/auth/login/index.test.ts b/packages/api/routes/api/auth/login/index.test.ts similarity index 99% rename from api/api/auth/login/index.test.ts rename to packages/api/routes/api/auth/login/index.test.ts index 69c591bf..c96cff4e 100644 --- a/api/api/auth/login/index.test.ts +++ b/packages/api/routes/api/auth/login/index.test.ts @@ -1,8 +1,8 @@ import { afterAll, describe, expect, test } from "bun:test"; import { Application } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import { randomUUIDv7 } from "bun"; import { randomString } from "@/math"; -import { config } from "~/config.ts"; import { fakeRequest, getTestUsers } from "~/tests/utils"; const { users, deleteUsers, passwords } = await getTestUsers(1); diff --git a/api/api/auth/login/index.ts b/packages/api/routes/api/auth/login/index.ts similarity index 98% rename from api/api/auth/login/index.ts rename to packages/api/routes/api/auth/login/index.ts index 3913547a..120191bf 100644 --- a/api/api/auth/login/index.ts +++ b/packages/api/routes/api/auth/login/index.ts @@ -1,5 +1,7 @@ +import { ApiError } from "@versia/kit"; import { Application, User } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { password as bunPassword } from "bun"; import { eq, or } from "drizzle-orm"; import type { Context } from "hono"; @@ -9,8 +11,6 @@ import { validator } from "hono-openapi/zod"; import { SignJWT } from "jose"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; const returnError = ( context: Context, diff --git a/api/api/auth/redirect/index.ts b/packages/api/routes/api/auth/redirect/index.ts similarity index 98% rename from api/api/auth/redirect/index.ts rename to packages/api/routes/api/auth/redirect/index.ts index 7dc95a6f..cccdfdbf 100644 --- a/api/api/auth/redirect/index.ts +++ b/packages/api/routes/api/auth/redirect/index.ts @@ -1,11 +1,11 @@ import { db } from "@versia/kit/db"; import { Applications, Tokens } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { and, eq } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { config } from "~/config.ts"; /** * OAuth Code flow diff --git a/api/api/auth/reset/index.test.ts b/packages/api/routes/api/auth/reset/index.test.ts similarity index 98% rename from api/api/auth/reset/index.test.ts rename to packages/api/routes/api/auth/reset/index.test.ts index d61eeae0..b2e4e47f 100644 --- a/api/api/auth/reset/index.test.ts +++ b/packages/api/routes/api/auth/reset/index.test.ts @@ -1,8 +1,8 @@ import { afterAll, describe, expect, test } from "bun:test"; import { Application } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import { randomUUIDv7 } from "bun"; import { randomString } from "@/math"; -import { config } from "~/config.ts"; import { fakeRequest, getTestUsers } from "~/tests/utils"; const { users, deleteUsers, passwords } = await getTestUsers(1); diff --git a/api/api/auth/reset/index.ts b/packages/api/routes/api/auth/reset/index.ts similarity index 97% rename from api/api/auth/reset/index.ts rename to packages/api/routes/api/auth/reset/index.ts index 86dc15dd..ce69c426 100644 --- a/api/api/auth/reset/index.ts +++ b/packages/api/routes/api/auth/reset/index.ts @@ -1,5 +1,6 @@ import { User } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { password as bunPassword } from "bun"; import { eq } from "drizzle-orm"; import type { Context } from "hono"; @@ -7,7 +8,6 @@ import { describeRoute } from "hono-openapi"; import { validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { config } from "~/config.ts"; const returnError = ( context: Context, diff --git a/api/api/v1/accounts/[id]/block.test.ts b/packages/api/routes/api/v1/accounts/[id]/block.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/block.test.ts rename to packages/api/routes/api/v1/accounts/[id]/block.test.ts diff --git a/api/api/v1/accounts/[id]/block.ts b/packages/api/routes/api/v1/accounts/[id]/block.ts similarity index 97% rename from api/api/v1/accounts/[id]/block.ts rename to packages/api/routes/api/v1/accounts/[id]/block.ts index 2b1c22e0..1985973a 100644 --- a/api/api/v1/accounts/[id]/block.ts +++ b/packages/api/routes/api/v1/accounts/[id]/block.ts @@ -2,11 +2,11 @@ import { Relationship as RelationshipSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Relationship } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/accounts/[id]/feed.atom.ts b/packages/api/routes/api/v1/accounts/[id]/feed.atom.ts similarity index 97% rename from api/api/v1/accounts/[id]/feed.atom.ts rename to packages/api/routes/api/v1/accounts/[id]/feed.atom.ts index 55eb3868..1a59947a 100644 --- a/api/api/v1/accounts/[id]/feed.atom.ts +++ b/packages/api/routes/api/v1/accounts/[id]/feed.atom.ts @@ -1,10 +1,10 @@ import { RolePermission } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, withUserParam } from "@/api"; import { getFeed } from "@/rss"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/accounts/[id]/feed.rss.ts b/packages/api/routes/api/v1/accounts/[id]/feed.rss.ts similarity index 97% rename from api/api/v1/accounts/[id]/feed.rss.ts rename to packages/api/routes/api/v1/accounts/[id]/feed.rss.ts index 5e9bc314..920138a9 100644 --- a/api/api/v1/accounts/[id]/feed.rss.ts +++ b/packages/api/routes/api/v1/accounts/[id]/feed.rss.ts @@ -1,10 +1,10 @@ import { RolePermission } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, withUserParam } from "@/api"; import { getFeed } from "@/rss"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/accounts/[id]/follow.test.ts b/packages/api/routes/api/v1/accounts/[id]/follow.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/follow.test.ts rename to packages/api/routes/api/v1/accounts/[id]/follow.test.ts diff --git a/api/api/v1/accounts/[id]/follow.ts b/packages/api/routes/api/v1/accounts/[id]/follow.ts similarity index 98% rename from api/api/v1/accounts/[id]/follow.ts rename to packages/api/routes/api/v1/accounts/[id]/follow.ts index ae2c7da0..6528ccac 100644 --- a/api/api/v1/accounts/[id]/follow.ts +++ b/packages/api/routes/api/v1/accounts/[id]/follow.ts @@ -3,12 +3,12 @@ import { Relationship as RelationshipSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Relationship } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/accounts/[id]/followers.test.ts b/packages/api/routes/api/v1/accounts/[id]/followers.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/followers.test.ts rename to packages/api/routes/api/v1/accounts/[id]/followers.test.ts diff --git a/api/api/v1/accounts/[id]/followers.ts b/packages/api/routes/api/v1/accounts/[id]/followers.ts similarity index 98% rename from api/api/v1/accounts/[id]/followers.ts rename to packages/api/routes/api/v1/accounts/[id]/followers.ts index 225d5238..dba9c5d7 100644 --- a/api/api/v1/accounts/[id]/followers.ts +++ b/packages/api/routes/api/v1/accounts/[id]/followers.ts @@ -2,6 +2,7 @@ import { Account as AccountSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Timeline } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; @@ -9,7 +10,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/accounts/[id]/following.test.ts b/packages/api/routes/api/v1/accounts/[id]/following.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/following.test.ts rename to packages/api/routes/api/v1/accounts/[id]/following.test.ts diff --git a/api/api/v1/accounts/[id]/following.ts b/packages/api/routes/api/v1/accounts/[id]/following.ts similarity index 98% rename from api/api/v1/accounts/[id]/following.ts rename to packages/api/routes/api/v1/accounts/[id]/following.ts index c39cbafe..f11b5381 100644 --- a/api/api/v1/accounts/[id]/following.ts +++ b/packages/api/routes/api/v1/accounts/[id]/following.ts @@ -2,6 +2,7 @@ import { Account as AccountSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Timeline } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; @@ -9,7 +10,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/accounts/[id]/index.test.ts b/packages/api/routes/api/v1/accounts/[id]/index.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/index.test.ts rename to packages/api/routes/api/v1/accounts/[id]/index.test.ts diff --git a/api/api/v1/accounts/[id]/index.ts b/packages/api/routes/api/v1/accounts/[id]/index.ts similarity index 96% rename from api/api/v1/accounts/[id]/index.ts rename to packages/api/routes/api/v1/accounts/[id]/index.ts index 3eca1fb7..b8e6dd3e 100644 --- a/api/api/v1/accounts/[id]/index.ts +++ b/packages/api/routes/api/v1/accounts/[id]/index.ts @@ -2,10 +2,10 @@ import { Account as AccountSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/accounts/[id]/mute.test.ts b/packages/api/routes/api/v1/accounts/[id]/mute.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/mute.test.ts rename to packages/api/routes/api/v1/accounts/[id]/mute.test.ts diff --git a/api/api/v1/accounts/[id]/mute.ts b/packages/api/routes/api/v1/accounts/[id]/mute.ts similarity index 98% rename from api/api/v1/accounts/[id]/mute.ts rename to packages/api/routes/api/v1/accounts/[id]/mute.ts index ab2680ca..bdd73375 100644 --- a/api/api/v1/accounts/[id]/mute.ts +++ b/packages/api/routes/api/v1/accounts/[id]/mute.ts @@ -2,12 +2,12 @@ import { Relationship as RelationshipSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Relationship } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; import { RelationshipJobType, relationshipQueue, diff --git a/api/api/v1/accounts/[id]/note.test.ts b/packages/api/routes/api/v1/accounts/[id]/note.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/note.test.ts rename to packages/api/routes/api/v1/accounts/[id]/note.test.ts diff --git a/api/api/v1/accounts/[id]/note.ts b/packages/api/routes/api/v1/accounts/[id]/note.ts similarity index 97% rename from api/api/v1/accounts/[id]/note.ts rename to packages/api/routes/api/v1/accounts/[id]/note.ts index 04f44bcd..1ceb2666 100644 --- a/api/api/v1/accounts/[id]/note.ts +++ b/packages/api/routes/api/v1/accounts/[id]/note.ts @@ -2,12 +2,12 @@ import { Relationship as RelationshipSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Relationship } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/accounts/[id]/pin.test.ts b/packages/api/routes/api/v1/accounts/[id]/pin.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/pin.test.ts rename to packages/api/routes/api/v1/accounts/[id]/pin.test.ts diff --git a/api/api/v1/accounts/[id]/pin.ts b/packages/api/routes/api/v1/accounts/[id]/pin.ts similarity index 100% rename from api/api/v1/accounts/[id]/pin.ts rename to packages/api/routes/api/v1/accounts/[id]/pin.ts diff --git a/api/api/v1/accounts/[id]/refetch.ts b/packages/api/routes/api/v1/accounts/[id]/refetch.ts similarity index 94% rename from api/api/v1/accounts/[id]/refetch.ts rename to packages/api/routes/api/v1/accounts/[id]/refetch.ts index 825380ac..91f1e0ff 100644 --- a/api/api/v1/accounts/[id]/refetch.ts +++ b/packages/api/routes/api/v1/accounts/[id]/refetch.ts @@ -2,11 +2,11 @@ import { Account as AccountSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; +import { User } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withUserParam } from "@/api"; -import { User } from "~/classes/database/user"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/accounts/[id]/remove_from_followers.test.ts b/packages/api/routes/api/v1/accounts/[id]/remove_from_followers.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/remove_from_followers.test.ts rename to packages/api/routes/api/v1/accounts/[id]/remove_from_followers.test.ts diff --git a/api/api/v1/accounts/[id]/remove_from_followers.ts b/packages/api/routes/api/v1/accounts/[id]/remove_from_followers.ts similarity index 97% rename from api/api/v1/accounts/[id]/remove_from_followers.ts rename to packages/api/routes/api/v1/accounts/[id]/remove_from_followers.ts index f76adc3c..e9fdabf6 100644 --- a/api/api/v1/accounts/[id]/remove_from_followers.ts +++ b/packages/api/routes/api/v1/accounts/[id]/remove_from_followers.ts @@ -2,11 +2,11 @@ import { Relationship as RelationshipSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Relationship } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/accounts/[id]/roles/[role_id]/index.test.ts b/packages/api/routes/api/v1/accounts/[id]/roles/[role_id]/index.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/roles/[role_id]/index.test.ts rename to packages/api/routes/api/v1/accounts/[id]/roles/[role_id]/index.test.ts diff --git a/api/api/v1/accounts/[id]/roles/[role_id]/index.ts b/packages/api/routes/api/v1/accounts/[id]/roles/[role_id]/index.ts similarity index 98% rename from api/api/v1/accounts/[id]/roles/[role_id]/index.ts rename to packages/api/routes/api/v1/accounts/[id]/roles/[role_id]/index.ts index d7cdad92..99c11e0f 100644 --- a/api/api/v1/accounts/[id]/roles/[role_id]/index.ts +++ b/packages/api/routes/api/v1/accounts/[id]/roles/[role_id]/index.ts @@ -3,12 +3,12 @@ import { RolePermission, Role as RoleSchema, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Role } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => { app.post( diff --git a/api/api/v1/accounts/[id]/roles/index.test.ts b/packages/api/routes/api/v1/accounts/[id]/roles/index.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/roles/index.test.ts rename to packages/api/routes/api/v1/accounts/[id]/roles/index.test.ts diff --git a/api/api/v1/accounts/[id]/roles/index.ts b/packages/api/routes/api/v1/accounts/[id]/roles/index.ts similarity index 100% rename from api/api/v1/accounts/[id]/roles/index.ts rename to packages/api/routes/api/v1/accounts/[id]/roles/index.ts diff --git a/api/api/v1/accounts/[id]/statuses.test.ts b/packages/api/routes/api/v1/accounts/[id]/statuses.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/statuses.test.ts rename to packages/api/routes/api/v1/accounts/[id]/statuses.test.ts diff --git a/api/api/v1/accounts/[id]/statuses.ts b/packages/api/routes/api/v1/accounts/[id]/statuses.ts similarity index 99% rename from api/api/v1/accounts/[id]/statuses.ts rename to packages/api/routes/api/v1/accounts/[id]/statuses.ts index fbce144f..b5bf9a2f 100644 --- a/api/api/v1/accounts/[id]/statuses.ts +++ b/packages/api/routes/api/v1/accounts/[id]/statuses.ts @@ -3,6 +3,7 @@ import { Status as StatusSchema, zBoolean, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Timeline } from "@versia/kit/db"; import { Notes } from "@versia/kit/tables"; import { and, eq, gt, gte, inArray, isNull, lt, or, sql } from "drizzle-orm"; @@ -10,7 +11,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/accounts/[id]/unblock.test.ts b/packages/api/routes/api/v1/accounts/[id]/unblock.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/unblock.test.ts rename to packages/api/routes/api/v1/accounts/[id]/unblock.test.ts diff --git a/api/api/v1/accounts/[id]/unblock.ts b/packages/api/routes/api/v1/accounts/[id]/unblock.ts similarity index 97% rename from api/api/v1/accounts/[id]/unblock.ts rename to packages/api/routes/api/v1/accounts/[id]/unblock.ts index 3a3215bb..d96fbde2 100644 --- a/api/api/v1/accounts/[id]/unblock.ts +++ b/packages/api/routes/api/v1/accounts/[id]/unblock.ts @@ -2,11 +2,11 @@ import { Relationship as RelationshipSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Relationship } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/accounts/[id]/unfollow.test.ts b/packages/api/routes/api/v1/accounts/[id]/unfollow.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/unfollow.test.ts rename to packages/api/routes/api/v1/accounts/[id]/unfollow.test.ts diff --git a/api/api/v1/accounts/[id]/unfollow.ts b/packages/api/routes/api/v1/accounts/[id]/unfollow.ts similarity index 97% rename from api/api/v1/accounts/[id]/unfollow.ts rename to packages/api/routes/api/v1/accounts/[id]/unfollow.ts index 8791adec..faaf9dc5 100644 --- a/api/api/v1/accounts/[id]/unfollow.ts +++ b/packages/api/routes/api/v1/accounts/[id]/unfollow.ts @@ -2,11 +2,11 @@ import { Relationship as RelationshipSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Relationship } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/accounts/[id]/unmute.test.ts b/packages/api/routes/api/v1/accounts/[id]/unmute.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/unmute.test.ts rename to packages/api/routes/api/v1/accounts/[id]/unmute.test.ts diff --git a/api/api/v1/accounts/[id]/unmute.ts b/packages/api/routes/api/v1/accounts/[id]/unmute.ts similarity index 97% rename from api/api/v1/accounts/[id]/unmute.ts rename to packages/api/routes/api/v1/accounts/[id]/unmute.ts index 3abc7b9a..4c2d966d 100644 --- a/api/api/v1/accounts/[id]/unmute.ts +++ b/packages/api/routes/api/v1/accounts/[id]/unmute.ts @@ -2,11 +2,11 @@ import { Relationship as RelationshipSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Relationship } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/accounts/[id]/unpin.test.ts b/packages/api/routes/api/v1/accounts/[id]/unpin.test.ts similarity index 100% rename from api/api/v1/accounts/[id]/unpin.test.ts rename to packages/api/routes/api/v1/accounts/[id]/unpin.test.ts diff --git a/api/api/v1/accounts/[id]/unpin.ts b/packages/api/routes/api/v1/accounts/[id]/unpin.ts similarity index 97% rename from api/api/v1/accounts/[id]/unpin.ts rename to packages/api/routes/api/v1/accounts/[id]/unpin.ts index 91af9ba3..e3ea20ea 100644 --- a/api/api/v1/accounts/[id]/unpin.ts +++ b/packages/api/routes/api/v1/accounts/[id]/unpin.ts @@ -2,11 +2,11 @@ import { Relationship as RelationshipSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Relationship } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withUserParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/accounts/familiar_followers/index.test.ts b/packages/api/routes/api/v1/accounts/familiar_followers/index.test.ts similarity index 100% rename from api/api/v1/accounts/familiar_followers/index.test.ts rename to packages/api/routes/api/v1/accounts/familiar_followers/index.test.ts diff --git a/api/api/v1/accounts/familiar_followers/index.ts b/packages/api/routes/api/v1/accounts/familiar_followers/index.ts similarity index 97% rename from api/api/v1/accounts/familiar_followers/index.ts rename to packages/api/routes/api/v1/accounts/familiar_followers/index.ts index 77147b22..ba089824 100644 --- a/api/api/v1/accounts/familiar_followers/index.ts +++ b/packages/api/routes/api/v1/accounts/familiar_followers/index.ts @@ -3,6 +3,7 @@ import { FamiliarFollowers as FamiliarFollowersSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { db, User } from "@versia/kit/db"; import type { Users } from "@versia/kit/tables"; import { type InferSelectModel, sql } from "drizzle-orm"; @@ -10,8 +11,7 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, qsQuery } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { rateLimit } from "~/middlewares/rate-limit"; +import { rateLimit } from "../../../../../middlewares/rate-limit.ts"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/accounts/index.get.test.ts b/packages/api/routes/api/v1/accounts/index.get.test.ts similarity index 100% rename from api/api/v1/accounts/index.get.test.ts rename to packages/api/routes/api/v1/accounts/index.get.test.ts diff --git a/api/api/v1/accounts/index.post.test.ts b/packages/api/routes/api/v1/accounts/index.post.test.ts similarity index 100% rename from api/api/v1/accounts/index.post.test.ts rename to packages/api/routes/api/v1/accounts/index.post.test.ts diff --git a/api/api/v1/accounts/index.ts b/packages/api/routes/api/v1/accounts/index.ts similarity index 99% rename from api/api/v1/accounts/index.ts rename to packages/api/routes/api/v1/accounts/index.ts index 6db5f327..7ef05fb7 100644 --- a/api/api/v1/accounts/index.ts +++ b/packages/api/routes/api/v1/accounts/index.ts @@ -1,6 +1,8 @@ import { Account as AccountSchema, zBoolean } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { User } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { and, eq, isNull } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; @@ -8,9 +10,7 @@ import ISO6391 from "iso-639-1"; import { z } from "zod"; import { apiRoute, auth, handleZodError, jsonOrForm, qsQuery } from "@/api"; import { tempmailDomains } from "@/tempmail"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; -import { rateLimit } from "~/middlewares/rate-limit"; +import { rateLimit } from "../../../../middlewares/rate-limit.ts"; const schema = z.object({ username: z.string().openapi({ diff --git a/api/api/v1/accounts/lookup/index.test.ts b/packages/api/routes/api/v1/accounts/lookup/index.test.ts similarity index 100% rename from api/api/v1/accounts/lookup/index.test.ts rename to packages/api/routes/api/v1/accounts/lookup/index.test.ts diff --git a/api/api/v1/accounts/lookup/index.ts b/packages/api/routes/api/v1/accounts/lookup/index.ts similarity index 95% rename from api/api/v1/accounts/lookup/index.ts rename to packages/api/routes/api/v1/accounts/lookup/index.ts index 7869002b..c9d7bef6 100644 --- a/api/api/v1/accounts/lookup/index.ts +++ b/packages/api/routes/api/v1/accounts/lookup/index.ts @@ -2,16 +2,16 @@ import { Account as AccountSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Instance, User } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { and, eq, isNull } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, parseUserAddress } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; -import { rateLimit } from "~/middlewares/rate-limit"; +import { rateLimit } from "../../../../../middlewares/rate-limit.ts"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/accounts/relationships/index.test.ts b/packages/api/routes/api/v1/accounts/relationships/index.test.ts similarity index 100% rename from api/api/v1/accounts/relationships/index.test.ts rename to packages/api/routes/api/v1/accounts/relationships/index.test.ts diff --git a/api/api/v1/accounts/relationships/index.ts b/packages/api/routes/api/v1/accounts/relationships/index.ts similarity index 96% rename from api/api/v1/accounts/relationships/index.ts rename to packages/api/routes/api/v1/accounts/relationships/index.ts index 7704361b..f89e586e 100644 --- a/api/api/v1/accounts/relationships/index.ts +++ b/packages/api/routes/api/v1/accounts/relationships/index.ts @@ -4,13 +4,13 @@ import { RolePermission, zBoolean, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Relationship } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, qsQuery } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { rateLimit } from "~/middlewares/rate-limit"; +import { rateLimit } from "../../../../../middlewares/rate-limit.ts"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/accounts/search/index.test.ts b/packages/api/routes/api/v1/accounts/search/index.test.ts similarity index 100% rename from api/api/v1/accounts/search/index.test.ts rename to packages/api/routes/api/v1/accounts/search/index.test.ts diff --git a/api/api/v1/accounts/search/index.ts b/packages/api/routes/api/v1/accounts/search/index.ts similarity index 97% rename from api/api/v1/accounts/search/index.ts rename to packages/api/routes/api/v1/accounts/search/index.ts index 5edd1a38..ca6455a1 100644 --- a/api/api/v1/accounts/search/index.ts +++ b/packages/api/routes/api/v1/accounts/search/index.ts @@ -3,6 +3,7 @@ import { RolePermission, zBoolean, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { User } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; import { eq, ilike, not, or, sql } from "drizzle-orm"; @@ -11,8 +12,7 @@ import { resolver, validator } from "hono-openapi/zod"; import stringComparison from "string-comparison"; import { z } from "zod"; import { apiRoute, auth, handleZodError, parseUserAddress } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { rateLimit } from "~/middlewares/rate-limit"; +import { rateLimit } from "../../../../../middlewares/rate-limit.ts"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/accounts/update_credentials/index.test.ts b/packages/api/routes/api/v1/accounts/update_credentials/index.test.ts similarity index 97% rename from api/api/v1/accounts/update_credentials/index.test.ts rename to packages/api/routes/api/v1/accounts/update_credentials/index.test.ts index ee2264a5..c07c5801 100644 --- a/api/api/v1/accounts/update_credentials/index.test.ts +++ b/packages/api/routes/api/v1/accounts/update_credentials/index.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { config } from "~/config.ts"; +import { config } from "@versia-server/config"; import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(1); diff --git a/api/api/v1/accounts/update_credentials/index.ts b/packages/api/routes/api/v1/accounts/update_credentials/index.ts similarity index 98% rename from api/api/v1/accounts/update_credentials/index.ts rename to packages/api/routes/api/v1/accounts/update_credentials/index.ts index 6c48c04f..394343d9 100644 --- a/api/api/v1/accounts/update_credentials/index.ts +++ b/packages/api/routes/api/v1/accounts/update_credentials/index.ts @@ -3,8 +3,11 @@ import { RolePermission, zBoolean, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Emoji, Media, User } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { config } from "@versia-server/config"; import { and, eq, isNull } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; @@ -12,11 +15,8 @@ import { z } from "zod"; import { apiRoute, auth, handleZodError, jsonOrForm } from "@/api"; import { mergeAndDeduplicate } from "@/lib"; import { sanitizedHtmlStrip } from "@/sanitization"; -import { ApiError } from "~/classes/errors/api-error"; import { contentToHtml } from "~/classes/functions/status"; -import { config } from "~/config.ts"; -import { rateLimit } from "~/middlewares/rate-limit"; -import * as VersiaEntities from "~/packages/sdk/entities"; +import { rateLimit } from "../../../../../middlewares/rate-limit.ts"; export default apiRoute((app) => app.patch( diff --git a/api/api/v1/accounts/verify_credentials/index.test.ts b/packages/api/routes/api/v1/accounts/verify_credentials/index.test.ts similarity index 98% rename from api/api/v1/accounts/verify_credentials/index.test.ts rename to packages/api/routes/api/v1/accounts/verify_credentials/index.test.ts index 79b015f4..ee11ef47 100644 --- a/api/api/v1/accounts/verify_credentials/index.test.ts +++ b/packages/api/routes/api/v1/accounts/verify_credentials/index.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { config } from "~/config"; +import { config } from "@versia-server/config"; import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(1); diff --git a/api/api/v1/accounts/verify_credentials/index.ts b/packages/api/routes/api/v1/accounts/verify_credentials/index.ts similarity index 96% rename from api/api/v1/accounts/verify_credentials/index.ts rename to packages/api/routes/api/v1/accounts/verify_credentials/index.ts index d2f016e8..33e595c9 100644 --- a/api/api/v1/accounts/verify_credentials/index.ts +++ b/packages/api/routes/api/v1/accounts/verify_credentials/index.ts @@ -1,8 +1,8 @@ import { Account } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/apps/index.ts b/packages/api/routes/api/v1/apps/index.ts similarity index 96% rename from api/api/v1/apps/index.ts rename to packages/api/routes/api/v1/apps/index.ts index 593f3f2d..0726cb1a 100644 --- a/api/api/v1/apps/index.ts +++ b/packages/api/routes/api/v1/apps/index.ts @@ -2,6 +2,7 @@ import { Application as ApplicationSchema, CredentialApplication as CredentialApplicationSchema, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Application } from "@versia/kit/db"; import { randomUUIDv7 } from "bun"; import { describeRoute } from "hono-openapi"; @@ -9,8 +10,7 @@ import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError, jsonOrForm } from "@/api"; import { randomString } from "@/math"; -import { ApiError } from "~/classes/errors/api-error"; -import { rateLimit } from "~/middlewares/rate-limit"; +import { rateLimit } from "../../../../middlewares/rate-limit.ts"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/apps/verify_credentials/index.ts b/packages/api/routes/api/v1/apps/verify_credentials/index.ts similarity index 96% rename from api/api/v1/apps/verify_credentials/index.ts rename to packages/api/routes/api/v1/apps/verify_credentials/index.ts index 30e77bb9..ad7f0489 100644 --- a/api/api/v1/apps/verify_credentials/index.ts +++ b/packages/api/routes/api/v1/apps/verify_credentials/index.ts @@ -2,11 +2,11 @@ import { Application as ApplicationSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Application } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/blocks/index.test.ts b/packages/api/routes/api/v1/blocks/index.test.ts similarity index 100% rename from api/api/v1/blocks/index.test.ts rename to packages/api/routes/api/v1/blocks/index.test.ts diff --git a/api/api/v1/blocks/index.ts b/packages/api/routes/api/v1/blocks/index.ts similarity index 98% rename from api/api/v1/blocks/index.ts rename to packages/api/routes/api/v1/blocks/index.ts index dd2b6512..1e5a088d 100644 --- a/api/api/v1/blocks/index.ts +++ b/packages/api/routes/api/v1/blocks/index.ts @@ -2,6 +2,7 @@ import { Account as AccountSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Timeline } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; @@ -9,7 +10,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/challenges/index.test.ts b/packages/api/routes/api/v1/challenges/index.test.ts similarity index 100% rename from api/api/v1/challenges/index.test.ts rename to packages/api/routes/api/v1/challenges/index.test.ts diff --git a/api/api/v1/challenges/index.ts b/packages/api/routes/api/v1/challenges/index.ts similarity index 94% rename from api/api/v1/challenges/index.ts rename to packages/api/routes/api/v1/challenges/index.ts index 87cf76ac..b1f255fb 100644 --- a/api/api/v1/challenges/index.ts +++ b/packages/api/routes/api/v1/challenges/index.ts @@ -1,10 +1,10 @@ import { Challenge } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth } from "@/api"; import { generateChallenge } from "@/challenges"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/custom_emojis/index.test.ts b/packages/api/routes/api/v1/custom_emojis/index.test.ts similarity index 100% rename from api/api/v1/custom_emojis/index.test.ts rename to packages/api/routes/api/v1/custom_emojis/index.test.ts diff --git a/api/api/v1/custom_emojis/index.ts b/packages/api/routes/api/v1/custom_emojis/index.ts similarity index 97% rename from api/api/v1/custom_emojis/index.ts rename to packages/api/routes/api/v1/custom_emojis/index.ts index f1e3d256..7eadfde2 100644 --- a/api/api/v1/custom_emojis/index.ts +++ b/packages/api/routes/api/v1/custom_emojis/index.ts @@ -2,6 +2,7 @@ import { CustomEmoji as CustomEmojiSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Emoji } from "@versia/kit/db"; import { Emojis } from "@versia/kit/tables"; import { and, eq, isNull, or } from "drizzle-orm"; @@ -9,7 +10,6 @@ import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/emojis/[id]/index.test.ts b/packages/api/routes/api/v1/emojis/[id]/index.test.ts similarity index 100% rename from api/api/v1/emojis/[id]/index.test.ts rename to packages/api/routes/api/v1/emojis/[id]/index.test.ts diff --git a/api/api/v1/emojis/[id]/index.ts b/packages/api/routes/api/v1/emojis/[id]/index.ts similarity index 98% rename from api/api/v1/emojis/[id]/index.ts rename to packages/api/routes/api/v1/emojis/[id]/index.ts index bb8e022a..341b8253 100644 --- a/api/api/v1/emojis/[id]/index.ts +++ b/packages/api/routes/api/v1/emojis/[id]/index.ts @@ -2,6 +2,8 @@ import { CustomEmoji as CustomEmojiSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; @@ -13,8 +15,6 @@ import { withEmojiParam, } from "@/api"; import { mimeLookup } from "@/content_types"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; export default apiRoute((app) => { app.get( diff --git a/api/api/v1/emojis/index.test.ts b/packages/api/routes/api/v1/emojis/index.test.ts similarity index 100% rename from api/api/v1/emojis/index.test.ts rename to packages/api/routes/api/v1/emojis/index.test.ts diff --git a/api/api/v1/emojis/index.ts b/packages/api/routes/api/v1/emojis/index.ts similarity index 98% rename from api/api/v1/emojis/index.ts rename to packages/api/routes/api/v1/emojis/index.ts index 141e6b3a..919b5e02 100644 --- a/api/api/v1/emojis/index.ts +++ b/packages/api/routes/api/v1/emojis/index.ts @@ -2,8 +2,10 @@ import { CustomEmoji as CustomEmojiSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Emoji, Media } from "@versia/kit/db"; import { Emojis } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { randomUUIDv7 } from "bun"; import { and, eq, isNull, or } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; @@ -11,8 +13,6 @@ import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, jsonOrForm } from "@/api"; import { mimeLookup } from "@/content_types"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/favourites/index.ts b/packages/api/routes/api/v1/favourites/index.ts similarity index 98% rename from api/api/v1/favourites/index.ts rename to packages/api/routes/api/v1/favourites/index.ts index 3cfadbd4..ce0bab5b 100644 --- a/api/api/v1/favourites/index.ts +++ b/packages/api/routes/api/v1/favourites/index.ts @@ -1,4 +1,5 @@ import { RolePermission, Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Timeline } from "@versia/kit/db"; import { Notes } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; @@ -6,7 +7,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/follow_requests/[account_id]/authorize.ts b/packages/api/routes/api/v1/follow_requests/[account_id]/authorize.ts similarity index 97% rename from api/api/v1/follow_requests/[account_id]/authorize.ts rename to packages/api/routes/api/v1/follow_requests/[account_id]/authorize.ts index 4073571e..c3e052a2 100644 --- a/api/api/v1/follow_requests/[account_id]/authorize.ts +++ b/packages/api/routes/api/v1/follow_requests/[account_id]/authorize.ts @@ -3,12 +3,12 @@ import { Relationship as RelationshipSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Relationship, User } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/follow_requests/[account_id]/reject.ts b/packages/api/routes/api/v1/follow_requests/[account_id]/reject.ts similarity index 97% rename from api/api/v1/follow_requests/[account_id]/reject.ts rename to packages/api/routes/api/v1/follow_requests/[account_id]/reject.ts index 4a00502a..686f0df9 100644 --- a/api/api/v1/follow_requests/[account_id]/reject.ts +++ b/packages/api/routes/api/v1/follow_requests/[account_id]/reject.ts @@ -3,12 +3,12 @@ import { Relationship as RelationshipSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Relationship, User } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/follow_requests/index.ts b/packages/api/routes/api/v1/follow_requests/index.ts similarity index 98% rename from api/api/v1/follow_requests/index.ts rename to packages/api/routes/api/v1/follow_requests/index.ts index 664f03e3..ba36990f 100644 --- a/api/api/v1/follow_requests/index.ts +++ b/packages/api/routes/api/v1/follow_requests/index.ts @@ -2,6 +2,7 @@ import { Account as AccountSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Timeline } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; @@ -9,7 +10,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/frontend/config/index.ts b/packages/api/routes/api/v1/frontend/config/index.ts similarity index 94% rename from api/api/v1/frontend/config/index.ts rename to packages/api/routes/api/v1/frontend/config/index.ts index 2383af47..a0a0e417 100644 --- a/api/api/v1/frontend/config/index.ts +++ b/packages/api/routes/api/v1/frontend/config/index.ts @@ -1,8 +1,8 @@ +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute } from "@/api"; -import { config } from "~/config.ts"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/instance/extended_description.test.ts b/packages/api/routes/api/v1/instance/extended_description.test.ts similarity index 100% rename from api/api/v1/instance/extended_description.test.ts rename to packages/api/routes/api/v1/instance/extended_description.test.ts diff --git a/api/api/v1/instance/extended_description.ts b/packages/api/routes/api/v1/instance/extended_description.ts similarity index 97% rename from api/api/v1/instance/extended_description.ts rename to packages/api/routes/api/v1/instance/extended_description.ts index d01985d4..b49815df 100644 --- a/api/api/v1/instance/extended_description.ts +++ b/packages/api/routes/api/v1/instance/extended_description.ts @@ -1,9 +1,9 @@ import { ExtendedDescription as ExtendedDescriptionSchema } from "@versia/client/schemas"; +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute } from "@/api"; import { markdownParse } from "~/classes/functions/status"; -import { config } from "~/config.ts"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/instance/index.ts b/packages/api/routes/api/v1/instance/index.ts similarity index 99% rename from api/api/v1/instance/index.ts rename to packages/api/routes/api/v1/instance/index.ts index 36ed1655..d2154271 100644 --- a/api/api/v1/instance/index.ts +++ b/packages/api/routes/api/v1/instance/index.ts @@ -1,13 +1,13 @@ import { InstanceV1 as InstanceV1Schema } from "@versia/client/schemas"; import { Instance, Note, User } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { and, eq, isNull } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import type { z } from "zod"; import { apiRoute } from "@/api"; import { markdownParse } from "~/classes/functions/status"; -import { config } from "~/config.ts"; import manifest from "~/package.json" with { type: "json" }; export default apiRoute((app) => diff --git a/api/api/v1/instance/privacy_policy.test.ts b/packages/api/routes/api/v1/instance/privacy_policy.test.ts similarity index 100% rename from api/api/v1/instance/privacy_policy.test.ts rename to packages/api/routes/api/v1/instance/privacy_policy.test.ts diff --git a/api/api/v1/instance/privacy_policy.ts b/packages/api/routes/api/v1/instance/privacy_policy.ts similarity index 96% rename from api/api/v1/instance/privacy_policy.ts rename to packages/api/routes/api/v1/instance/privacy_policy.ts index 6af7596d..6320fbb5 100644 --- a/api/api/v1/instance/privacy_policy.ts +++ b/packages/api/routes/api/v1/instance/privacy_policy.ts @@ -1,9 +1,9 @@ import { PrivacyPolicy as PrivacyPolicySchema } from "@versia/client/schemas"; +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute } from "@/api"; import { markdownParse } from "~/classes/functions/status"; -import { config } from "~/config.ts"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/instance/rules.test.ts b/packages/api/routes/api/v1/instance/rules.test.ts similarity index 92% rename from api/api/v1/instance/rules.test.ts rename to packages/api/routes/api/v1/instance/rules.test.ts index bdd84da9..017b0c53 100644 --- a/api/api/v1/instance/rules.test.ts +++ b/packages/api/routes/api/v1/instance/rules.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test"; -import { config } from "~/config.ts"; +import { config } from "@versia-server/config"; import { generateClient } from "~/tests/utils"; // /api/v1/instance/rules diff --git a/api/api/v1/instance/rules.ts b/packages/api/routes/api/v1/instance/rules.ts similarity index 96% rename from api/api/v1/instance/rules.ts rename to packages/api/routes/api/v1/instance/rules.ts index 783ec424..bf5de671 100644 --- a/api/api/v1/instance/rules.ts +++ b/packages/api/routes/api/v1/instance/rules.ts @@ -1,9 +1,9 @@ import { Rule as RuleSchema } from "@versia/client/schemas"; +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute } from "@/api"; -import { config } from "~/config.ts"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/instance/terms_of_service.test.ts b/packages/api/routes/api/v1/instance/terms_of_service.test.ts similarity index 100% rename from api/api/v1/instance/terms_of_service.test.ts rename to packages/api/routes/api/v1/instance/terms_of_service.test.ts diff --git a/api/api/v1/instance/terms_of_service.ts b/packages/api/routes/api/v1/instance/terms_of_service.ts similarity index 96% rename from api/api/v1/instance/terms_of_service.ts rename to packages/api/routes/api/v1/instance/terms_of_service.ts index 91e0a781..c3cd8e7e 100644 --- a/api/api/v1/instance/terms_of_service.ts +++ b/packages/api/routes/api/v1/instance/terms_of_service.ts @@ -1,9 +1,9 @@ import { TermsOfService as TermsOfServiceSchema } from "@versia/client/schemas"; +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute } from "@/api"; import { markdownParse } from "~/classes/functions/status"; -import { config } from "~/config.ts"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/markers/index.test.ts b/packages/api/routes/api/v1/markers/index.test.ts similarity index 100% rename from api/api/v1/markers/index.test.ts rename to packages/api/routes/api/v1/markers/index.test.ts diff --git a/api/api/v1/markers/index.ts b/packages/api/routes/api/v1/markers/index.ts similarity index 99% rename from api/api/v1/markers/index.ts rename to packages/api/routes/api/v1/markers/index.ts index 354831fb..c1960674 100644 --- a/api/api/v1/markers/index.ts +++ b/packages/api/routes/api/v1/markers/index.ts @@ -4,6 +4,7 @@ import { RolePermission, Status as StatusSchema, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { db } from "@versia/kit/db"; import { Markers } from "@versia/kit/tables"; import { randomUUIDv7 } from "bun"; @@ -12,7 +13,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; const MarkerResponseSchema = z.object({ notifications: MarkerSchema.optional(), diff --git a/api/api/v1/media/[id]/index.ts b/packages/api/routes/api/v1/media/[id]/index.ts similarity index 98% rename from api/api/v1/media/[id]/index.ts rename to packages/api/routes/api/v1/media/[id]/index.ts index 947dc701..fca9de5a 100644 --- a/api/api/v1/media/[id]/index.ts +++ b/packages/api/routes/api/v1/media/[id]/index.ts @@ -2,13 +2,13 @@ import { Attachment as AttachmentSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Media } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config"; export default apiRoute((app) => { app.get( diff --git a/api/api/v1/media/index.ts b/packages/api/routes/api/v1/media/index.ts similarity index 97% rename from api/api/v1/media/index.ts rename to packages/api/routes/api/v1/media/index.ts index 711a2fe1..e4f32b7d 100644 --- a/api/api/v1/media/index.ts +++ b/packages/api/routes/api/v1/media/index.ts @@ -2,13 +2,13 @@ import { Attachment as AttachmentSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Media } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/mutes/index.test.ts b/packages/api/routes/api/v1/mutes/index.test.ts similarity index 100% rename from api/api/v1/mutes/index.test.ts rename to packages/api/routes/api/v1/mutes/index.test.ts diff --git a/api/api/v1/mutes/index.ts b/packages/api/routes/api/v1/mutes/index.ts similarity index 98% rename from api/api/v1/mutes/index.ts rename to packages/api/routes/api/v1/mutes/index.ts index 4f34f57b..30ac4ec7 100644 --- a/api/api/v1/mutes/index.ts +++ b/packages/api/routes/api/v1/mutes/index.ts @@ -2,6 +2,7 @@ import { Account as AccountSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Timeline } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; @@ -9,7 +10,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/notifications/[id]/dismiss.test.ts b/packages/api/routes/api/v1/notifications/[id]/dismiss.test.ts similarity index 100% rename from api/api/v1/notifications/[id]/dismiss.test.ts rename to packages/api/routes/api/v1/notifications/[id]/dismiss.test.ts diff --git a/api/api/v1/notifications/[id]/dismiss.ts b/packages/api/routes/api/v1/notifications/[id]/dismiss.ts similarity index 97% rename from api/api/v1/notifications/[id]/dismiss.ts rename to packages/api/routes/api/v1/notifications/[id]/dismiss.ts index 5fbedd60..bec02ca2 100644 --- a/api/api/v1/notifications/[id]/dismiss.ts +++ b/packages/api/routes/api/v1/notifications/[id]/dismiss.ts @@ -2,12 +2,12 @@ import { Notification as NotificationSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Notification } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/notifications/[id]/index.test.ts b/packages/api/routes/api/v1/notifications/[id]/index.test.ts similarity index 100% rename from api/api/v1/notifications/[id]/index.test.ts rename to packages/api/routes/api/v1/notifications/[id]/index.test.ts diff --git a/api/api/v1/notifications/[id]/index.ts b/packages/api/routes/api/v1/notifications/[id]/index.ts similarity index 97% rename from api/api/v1/notifications/[id]/index.ts rename to packages/api/routes/api/v1/notifications/[id]/index.ts index 255c3d32..00407f62 100644 --- a/api/api/v1/notifications/[id]/index.ts +++ b/packages/api/routes/api/v1/notifications/[id]/index.ts @@ -2,12 +2,12 @@ import { Notification as NotificationSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Notification } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/notifications/clear/index.test.ts b/packages/api/routes/api/v1/notifications/clear/index.test.ts similarity index 100% rename from api/api/v1/notifications/clear/index.test.ts rename to packages/api/routes/api/v1/notifications/clear/index.test.ts diff --git a/api/api/v1/notifications/clear/index.ts b/packages/api/routes/api/v1/notifications/clear/index.ts similarity index 95% rename from api/api/v1/notifications/clear/index.ts rename to packages/api/routes/api/v1/notifications/clear/index.ts index 747a03ba..d229af50 100644 --- a/api/api/v1/notifications/clear/index.ts +++ b/packages/api/routes/api/v1/notifications/clear/index.ts @@ -1,7 +1,7 @@ import { RolePermission } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { apiRoute, auth } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/notifications/destroy_multiple/index.test.ts b/packages/api/routes/api/v1/notifications/destroy_multiple/index.test.ts similarity index 100% rename from api/api/v1/notifications/destroy_multiple/index.test.ts rename to packages/api/routes/api/v1/notifications/destroy_multiple/index.test.ts diff --git a/api/api/v1/notifications/destroy_multiple/index.ts b/packages/api/routes/api/v1/notifications/destroy_multiple/index.ts similarity index 95% rename from api/api/v1/notifications/destroy_multiple/index.ts rename to packages/api/routes/api/v1/notifications/destroy_multiple/index.ts index 9a17213f..4d7d4958 100644 --- a/api/api/v1/notifications/destroy_multiple/index.ts +++ b/packages/api/routes/api/v1/notifications/destroy_multiple/index.ts @@ -1,9 +1,9 @@ import { RolePermission } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, qsQuery } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.delete( diff --git a/api/api/v1/notifications/index.test.ts b/packages/api/routes/api/v1/notifications/index.test.ts similarity index 100% rename from api/api/v1/notifications/index.test.ts rename to packages/api/routes/api/v1/notifications/index.test.ts diff --git a/api/api/v1/notifications/index.ts b/packages/api/routes/api/v1/notifications/index.ts similarity index 99% rename from api/api/v1/notifications/index.ts rename to packages/api/routes/api/v1/notifications/index.ts index 362974af..4bd79467 100644 --- a/api/api/v1/notifications/index.ts +++ b/packages/api/routes/api/v1/notifications/index.ts @@ -4,6 +4,7 @@ import { RolePermission, zBoolean, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Timeline } from "@versia/kit/db"; import { Notifications } from "@versia/kit/tables"; import { and, eq, gt, gte, inArray, lt, not, sql } from "drizzle-orm"; @@ -11,7 +12,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/profile/avatar.test.ts b/packages/api/routes/api/v1/profile/avatar.test.ts similarity index 100% rename from api/api/v1/profile/avatar.test.ts rename to packages/api/routes/api/v1/profile/avatar.test.ts diff --git a/api/api/v1/profile/avatar.ts b/packages/api/routes/api/v1/profile/avatar.ts similarity index 96% rename from api/api/v1/profile/avatar.ts rename to packages/api/routes/api/v1/profile/avatar.ts index 06038c51..4ca65bb8 100644 --- a/api/api/v1/profile/avatar.ts +++ b/packages/api/routes/api/v1/profile/avatar.ts @@ -1,8 +1,8 @@ import { Account, RolePermission } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.delete( diff --git a/api/api/v1/profile/header.test.ts b/packages/api/routes/api/v1/profile/header.test.ts similarity index 100% rename from api/api/v1/profile/header.test.ts rename to packages/api/routes/api/v1/profile/header.test.ts diff --git a/api/api/v1/profile/header.ts b/packages/api/routes/api/v1/profile/header.ts similarity index 96% rename from api/api/v1/profile/header.ts rename to packages/api/routes/api/v1/profile/header.ts index facaa7df..bad6938f 100644 --- a/api/api/v1/profile/header.ts +++ b/packages/api/routes/api/v1/profile/header.ts @@ -1,8 +1,8 @@ import { Account, RolePermission } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.delete( diff --git a/api/api/v1/push/subscription/index.delete.ts b/packages/api/routes/api/v1/push/subscription/index.delete.ts similarity index 96% rename from api/api/v1/push/subscription/index.delete.ts rename to packages/api/routes/api/v1/push/subscription/index.delete.ts index 773274be..dfc31a1b 100644 --- a/api/api/v1/push/subscription/index.delete.ts +++ b/packages/api/routes/api/v1/push/subscription/index.delete.ts @@ -1,10 +1,10 @@ import { RolePermission } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { PushSubscription } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.delete( diff --git a/api/api/v1/push/subscription/index.get.ts b/packages/api/routes/api/v1/push/subscription/index.get.ts similarity index 96% rename from api/api/v1/push/subscription/index.get.ts rename to packages/api/routes/api/v1/push/subscription/index.get.ts index 84705032..b484029a 100644 --- a/api/api/v1/push/subscription/index.get.ts +++ b/packages/api/routes/api/v1/push/subscription/index.get.ts @@ -2,11 +2,11 @@ import { RolePermission, WebPushSubscription as WebPushSubscriptionSchema, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { PushSubscription } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/push/subscription/index.post.ts b/packages/api/routes/api/v1/push/subscription/index.post.ts similarity index 98% rename from api/api/v1/push/subscription/index.post.ts rename to packages/api/routes/api/v1/push/subscription/index.post.ts index 814b8ee5..f8bd3ddc 100644 --- a/api/api/v1/push/subscription/index.post.ts +++ b/packages/api/routes/api/v1/push/subscription/index.post.ts @@ -3,12 +3,12 @@ import { WebPushSubscriptionInput, WebPushSubscription as WebPushSubscriptionSchema, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { PushSubscription } from "@versia/kit/db"; import { randomUUIDv7 } from "bun"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { apiRoute, auth, handleZodError, jsonOrForm } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/push/subscription/index.put.ts b/packages/api/routes/api/v1/push/subscription/index.put.ts similarity index 98% rename from api/api/v1/push/subscription/index.put.ts rename to packages/api/routes/api/v1/push/subscription/index.put.ts index 9952f326..6a21a3d0 100644 --- a/api/api/v1/push/subscription/index.put.ts +++ b/packages/api/routes/api/v1/push/subscription/index.put.ts @@ -3,11 +3,11 @@ import { WebPushSubscriptionInput, WebPushSubscription as WebPushSubscriptionSchema, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { PushSubscription } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { apiRoute, auth, handleZodError, jsonOrForm } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.put( diff --git a/api/api/v1/push/subscription/index.test.ts b/packages/api/routes/api/v1/push/subscription/index.test.ts similarity index 100% rename from api/api/v1/push/subscription/index.test.ts rename to packages/api/routes/api/v1/push/subscription/index.test.ts diff --git a/api/api/v1/roles/[id]/index.test.ts b/packages/api/routes/api/v1/roles/[id]/index.test.ts similarity index 100% rename from api/api/v1/roles/[id]/index.test.ts rename to packages/api/routes/api/v1/roles/[id]/index.test.ts diff --git a/api/api/v1/roles/[id]/index.ts b/packages/api/routes/api/v1/roles/[id]/index.ts similarity index 99% rename from api/api/v1/roles/[id]/index.ts rename to packages/api/routes/api/v1/roles/[id]/index.ts index 6890e435..3a8ce0c8 100644 --- a/api/api/v1/roles/[id]/index.ts +++ b/packages/api/routes/api/v1/roles/[id]/index.ts @@ -1,10 +1,10 @@ import { RolePermission, Role as RoleSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Role } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => { app.get( diff --git a/api/api/v1/roles/index.test.ts b/packages/api/routes/api/v1/roles/index.test.ts similarity index 98% rename from api/api/v1/roles/index.test.ts rename to packages/api/routes/api/v1/roles/index.test.ts index ae8cf568..75832ec0 100644 --- a/api/api/v1/roles/index.test.ts +++ b/packages/api/routes/api/v1/roles/index.test.ts @@ -1,8 +1,8 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { RolePermission } from "@versia/client/schemas"; import { Role } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import { randomUUIDv7 } from "bun"; -import { config } from "~/config.ts"; import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(1); diff --git a/api/api/v1/roles/index.ts b/packages/api/routes/api/v1/roles/index.ts similarity index 98% rename from api/api/v1/roles/index.ts rename to packages/api/routes/api/v1/roles/index.ts index cf229f8f..c59b98a0 100644 --- a/api/api/v1/roles/index.ts +++ b/packages/api/routes/api/v1/roles/index.ts @@ -1,11 +1,11 @@ import { RolePermission, Role as RoleSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Role } from "@versia/kit/db"; import { randomUUIDv7 } from "bun"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => { app.get( diff --git a/api/api/v1/statuses/[id]/context.test.ts b/packages/api/routes/api/v1/statuses/[id]/context.test.ts similarity index 100% rename from api/api/v1/statuses/[id]/context.test.ts rename to packages/api/routes/api/v1/statuses/[id]/context.test.ts diff --git a/api/api/v1/statuses/[id]/context.ts b/packages/api/routes/api/v1/statuses/[id]/context.ts similarity index 97% rename from api/api/v1/statuses/[id]/context.ts rename to packages/api/routes/api/v1/statuses/[id]/context.ts index 298edc05..df51fbaa 100644 --- a/api/api/v1/statuses/[id]/context.ts +++ b/packages/api/routes/api/v1/statuses/[id]/context.ts @@ -2,10 +2,10 @@ import { Context as ContextSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withNoteParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/statuses/[id]/favourite.test.ts b/packages/api/routes/api/v1/statuses/[id]/favourite.test.ts similarity index 100% rename from api/api/v1/statuses/[id]/favourite.test.ts rename to packages/api/routes/api/v1/statuses/[id]/favourite.test.ts diff --git a/api/api/v1/statuses/[id]/favourite.ts b/packages/api/routes/api/v1/statuses/[id]/favourite.ts similarity index 96% rename from api/api/v1/statuses/[id]/favourite.ts rename to packages/api/routes/api/v1/statuses/[id]/favourite.ts index 2ba66ab8..fc7db499 100644 --- a/api/api/v1/statuses/[id]/favourite.ts +++ b/packages/api/routes/api/v1/statuses/[id]/favourite.ts @@ -1,8 +1,8 @@ import { RolePermission, Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withNoteParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/statuses/[id]/favourited_by.test.ts b/packages/api/routes/api/v1/statuses/[id]/favourited_by.test.ts similarity index 100% rename from api/api/v1/statuses/[id]/favourited_by.test.ts rename to packages/api/routes/api/v1/statuses/[id]/favourited_by.test.ts diff --git a/api/api/v1/statuses/[id]/favourited_by.ts b/packages/api/routes/api/v1/statuses/[id]/favourited_by.ts similarity index 98% rename from api/api/v1/statuses/[id]/favourited_by.ts rename to packages/api/routes/api/v1/statuses/[id]/favourited_by.ts index ed8b31fd..0c8e0b9b 100644 --- a/api/api/v1/statuses/[id]/favourited_by.ts +++ b/packages/api/routes/api/v1/statuses/[id]/favourited_by.ts @@ -2,6 +2,7 @@ import { Account as AccountSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Timeline } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; @@ -9,7 +10,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, withNoteParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/statuses/[id]/index.test.ts b/packages/api/routes/api/v1/statuses/[id]/index.test.ts similarity index 100% rename from api/api/v1/statuses/[id]/index.test.ts rename to packages/api/routes/api/v1/statuses/[id]/index.test.ts diff --git a/api/api/v1/statuses/[id]/index.ts b/packages/api/routes/api/v1/statuses/[id]/index.ts similarity index 98% rename from api/api/v1/statuses/[id]/index.ts rename to packages/api/routes/api/v1/statuses/[id]/index.ts index 350a2862..57797999 100644 --- a/api/api/v1/statuses/[id]/index.ts +++ b/packages/api/routes/api/v1/statuses/[id]/index.ts @@ -6,7 +6,10 @@ import { StatusSource as StatusSourceSchema, zBoolean, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Emoji, Media } from "@versia/kit/db"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; @@ -18,10 +21,7 @@ import { withNoteParam, } from "@/api"; import { sanitizedHtmlStrip } from "@/sanitization"; -import { ApiError } from "~/classes/errors/api-error"; import { contentToHtml, parseTextMentions } from "~/classes/functions/status"; -import { config } from "~/config.ts"; -import * as VersiaEntities from "~/packages/sdk/entities"; const schema = z .object({ diff --git a/api/api/v1/statuses/[id]/pin.ts b/packages/api/routes/api/v1/statuses/[id]/pin.ts similarity index 97% rename from api/api/v1/statuses/[id]/pin.ts rename to packages/api/routes/api/v1/statuses/[id]/pin.ts index 3b9e9fa6..b9f89db6 100644 --- a/api/api/v1/statuses/[id]/pin.ts +++ b/packages/api/routes/api/v1/statuses/[id]/pin.ts @@ -1,10 +1,10 @@ import { RolePermission, Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { db } from "@versia/kit/db"; import { and, eq, type SQL } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withNoteParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/statuses/[id]/reactions/[name].test.ts b/packages/api/routes/api/v1/statuses/[id]/reactions/[name].test.ts similarity index 98% rename from api/api/v1/statuses/[id]/reactions/[name].test.ts rename to packages/api/routes/api/v1/statuses/[id]/reactions/[name].test.ts index e2042e10..7a274016 100644 --- a/api/api/v1/statuses/[id]/reactions/[name].test.ts +++ b/packages/api/routes/api/v1/statuses/[id]/reactions/[name].test.ts @@ -1,7 +1,6 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; +import { Emoji, Media } from "@versia/kit/db"; import { randomUUIDv7 } from "bun"; -import { Emoji } from "~/classes/database/emoji"; -import { Media } from "~/classes/database/media"; import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(3); diff --git a/api/api/v1/statuses/[id]/reactions/[name].ts b/packages/api/routes/api/v1/statuses/[id]/reactions/[name].ts similarity index 99% rename from api/api/v1/statuses/[id]/reactions/[name].ts rename to packages/api/routes/api/v1/statuses/[id]/reactions/[name].ts index 4070637b..5b89cad2 100644 --- a/api/api/v1/statuses/[id]/reactions/[name].ts +++ b/packages/api/routes/api/v1/statuses/[id]/reactions/[name].ts @@ -1,4 +1,5 @@ import { RolePermission, Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Emoji } from "@versia/kit/db"; import { Emojis } from "@versia/kit/tables"; import { and, eq, isNull } from "drizzle-orm"; @@ -9,7 +10,6 @@ import emojis from "unicode-emoji-json/data-ordered-emoji.json" with { }; import { z } from "zod"; import { apiRoute, auth, handleZodError, withNoteParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => { app.put( diff --git a/api/api/v1/statuses/[id]/reactions/index.test.ts b/packages/api/routes/api/v1/statuses/[id]/reactions/index.test.ts similarity index 100% rename from api/api/v1/statuses/[id]/reactions/index.test.ts rename to packages/api/routes/api/v1/statuses/[id]/reactions/index.test.ts diff --git a/api/api/v1/statuses/[id]/reactions/index.ts b/packages/api/routes/api/v1/statuses/[id]/reactions/index.ts similarity index 96% rename from api/api/v1/statuses/[id]/reactions/index.ts rename to packages/api/routes/api/v1/statuses/[id]/reactions/index.ts index e1b372f9..2527b14e 100644 --- a/api/api/v1/statuses/[id]/reactions/index.ts +++ b/packages/api/routes/api/v1/statuses/[id]/reactions/index.ts @@ -2,11 +2,11 @@ import { NoteReactionWithAccounts, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, withNoteParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/statuses/[id]/reblog.test.ts b/packages/api/routes/api/v1/statuses/[id]/reblog.test.ts similarity index 100% rename from api/api/v1/statuses/[id]/reblog.test.ts rename to packages/api/routes/api/v1/statuses/[id]/reblog.test.ts diff --git a/api/api/v1/statuses/[id]/reblog.ts b/packages/api/routes/api/v1/statuses/[id]/reblog.ts similarity index 97% rename from api/api/v1/statuses/[id]/reblog.ts rename to packages/api/routes/api/v1/statuses/[id]/reblog.ts index bd6185bd..aaadfa29 100644 --- a/api/api/v1/statuses/[id]/reblog.ts +++ b/packages/api/routes/api/v1/statuses/[id]/reblog.ts @@ -1,9 +1,9 @@ import { RolePermission, Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, jsonOrForm, withNoteParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/statuses/[id]/reblogged_by.test.ts b/packages/api/routes/api/v1/statuses/[id]/reblogged_by.test.ts similarity index 100% rename from api/api/v1/statuses/[id]/reblogged_by.test.ts rename to packages/api/routes/api/v1/statuses/[id]/reblogged_by.test.ts diff --git a/api/api/v1/statuses/[id]/reblogged_by.ts b/packages/api/routes/api/v1/statuses/[id]/reblogged_by.ts similarity index 98% rename from api/api/v1/statuses/[id]/reblogged_by.ts rename to packages/api/routes/api/v1/statuses/[id]/reblogged_by.ts index 3d0aee6f..cd09bccf 100644 --- a/api/api/v1/statuses/[id]/reblogged_by.ts +++ b/packages/api/routes/api/v1/statuses/[id]/reblogged_by.ts @@ -2,6 +2,7 @@ import { Account as AccountSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Timeline } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; @@ -9,7 +10,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, withNoteParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/statuses/[id]/source.ts b/packages/api/routes/api/v1/statuses/[id]/source.ts similarity index 96% rename from api/api/v1/statuses/[id]/source.ts rename to packages/api/routes/api/v1/statuses/[id]/source.ts index c5a9f69c..2760d874 100644 --- a/api/api/v1/statuses/[id]/source.ts +++ b/packages/api/routes/api/v1/statuses/[id]/source.ts @@ -2,10 +2,10 @@ import { RolePermission, StatusSource as StatusSourceSchema, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withNoteParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/statuses/[id]/unfavourite.test.ts b/packages/api/routes/api/v1/statuses/[id]/unfavourite.test.ts similarity index 100% rename from api/api/v1/statuses/[id]/unfavourite.test.ts rename to packages/api/routes/api/v1/statuses/[id]/unfavourite.test.ts diff --git a/api/api/v1/statuses/[id]/unfavourite.ts b/packages/api/routes/api/v1/statuses/[id]/unfavourite.ts similarity index 96% rename from api/api/v1/statuses/[id]/unfavourite.ts rename to packages/api/routes/api/v1/statuses/[id]/unfavourite.ts index 49f569cb..608103b5 100644 --- a/api/api/v1/statuses/[id]/unfavourite.ts +++ b/packages/api/routes/api/v1/statuses/[id]/unfavourite.ts @@ -1,8 +1,8 @@ import { RolePermission, Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withNoteParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/statuses/[id]/unpin.ts b/packages/api/routes/api/v1/statuses/[id]/unpin.ts similarity index 97% rename from api/api/v1/statuses/[id]/unpin.ts rename to packages/api/routes/api/v1/statuses/[id]/unpin.ts index f47ced42..f05c1098 100644 --- a/api/api/v1/statuses/[id]/unpin.ts +++ b/packages/api/routes/api/v1/statuses/[id]/unpin.ts @@ -1,8 +1,8 @@ import { RolePermission, Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withNoteParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/statuses/[id]/unreblog.test.ts b/packages/api/routes/api/v1/statuses/[id]/unreblog.test.ts similarity index 100% rename from api/api/v1/statuses/[id]/unreblog.test.ts rename to packages/api/routes/api/v1/statuses/[id]/unreblog.test.ts diff --git a/api/api/v1/statuses/[id]/unreblog.ts b/packages/api/routes/api/v1/statuses/[id]/unreblog.ts similarity index 96% rename from api/api/v1/statuses/[id]/unreblog.ts rename to packages/api/routes/api/v1/statuses/[id]/unreblog.ts index 37f2d8eb..5627d7df 100644 --- a/api/api/v1/statuses/[id]/unreblog.ts +++ b/packages/api/routes/api/v1/statuses/[id]/unreblog.ts @@ -1,9 +1,9 @@ import { RolePermission, Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Note } from "@versia/kit/db"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute, auth, withNoteParam } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.post( diff --git a/api/api/v1/statuses/index.test.ts b/packages/api/routes/api/v1/statuses/index.test.ts similarity index 99% rename from api/api/v1/statuses/index.test.ts rename to packages/api/routes/api/v1/statuses/index.test.ts index a1f7008a..552e9a52 100644 --- a/api/api/v1/statuses/index.test.ts +++ b/packages/api/routes/api/v1/statuses/index.test.ts @@ -2,10 +2,10 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import type { Status } from "@versia/client/schemas"; import { db, Media } from "@versia/kit/db"; import { Emojis } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { randomUUIDv7 } from "bun"; import { eq } from "drizzle-orm"; import type { z } from "zod"; -import { config } from "~/config.ts"; import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(5); diff --git a/api/api/v1/statuses/index.ts b/packages/api/routes/api/v1/statuses/index.ts similarity index 98% rename from api/api/v1/statuses/index.ts rename to packages/api/routes/api/v1/statuses/index.ts index 7bcc0dd5..3e968042 100644 --- a/api/api/v1/statuses/index.ts +++ b/packages/api/routes/api/v1/statuses/index.ts @@ -6,17 +6,17 @@ import { StatusSource as StatusSourceSchema, zBoolean, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Emoji, Media, Note } from "@versia/kit/db"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { config } from "@versia-server/config"; import { randomUUIDv7 } from "bun"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, jsonOrForm } from "@/api"; import { sanitizedHtmlStrip } from "@/sanitization"; -import { ApiError } from "~/classes/errors/api-error"; import { contentToHtml, parseTextMentions } from "~/classes/functions/status"; -import { config } from "~/config.ts"; -import * as VersiaEntities from "~/packages/sdk/entities"; const schema = z .object({ diff --git a/api/api/v1/timelines/home.test.ts b/packages/api/routes/api/v1/timelines/home.test.ts similarity index 99% rename from api/api/v1/timelines/home.test.ts rename to packages/api/routes/api/v1/timelines/home.test.ts index 4b39cd9f..ca240f6a 100644 --- a/api/api/v1/timelines/home.test.ts +++ b/packages/api/routes/api/v1/timelines/home.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { config } from "~/config.ts"; +import { config } from "@versia-server/config"; import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(5); diff --git a/api/api/v1/timelines/home.ts b/packages/api/routes/api/v1/timelines/home.ts similarity index 99% rename from api/api/v1/timelines/home.ts rename to packages/api/routes/api/v1/timelines/home.ts index 24214226..4d96660c 100644 --- a/api/api/v1/timelines/home.ts +++ b/packages/api/routes/api/v1/timelines/home.ts @@ -1,4 +1,5 @@ import { RolePermission, Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Timeline } from "@versia/kit/db"; import { Notes } from "@versia/kit/tables"; import { and, eq, gt, gte, inArray, lt, or, sql } from "drizzle-orm"; @@ -6,7 +7,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v1/timelines/public.test.ts b/packages/api/routes/api/v1/timelines/public.test.ts similarity index 99% rename from api/api/v1/timelines/public.test.ts rename to packages/api/routes/api/v1/timelines/public.test.ts index 677c509a..2d05b535 100644 --- a/api/api/v1/timelines/public.test.ts +++ b/packages/api/routes/api/v1/timelines/public.test.ts @@ -1,5 +1,5 @@ import { afterAll, describe, expect, test } from "bun:test"; -import { config } from "~/config.ts"; +import { config } from "@versia-server/config"; import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(5); diff --git a/api/api/v1/timelines/public.ts b/packages/api/routes/api/v1/timelines/public.ts similarity index 99% rename from api/api/v1/timelines/public.ts rename to packages/api/routes/api/v1/timelines/public.ts index 9cd4c257..1b9bfcc1 100644 --- a/api/api/v1/timelines/public.ts +++ b/packages/api/routes/api/v1/timelines/public.ts @@ -3,6 +3,7 @@ import { Status as StatusSchema, zBoolean, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Timeline } from "@versia/kit/db"; import { Notes } from "@versia/kit/tables"; import { and, eq, gt, gte, inArray, lt, or, sql } from "drizzle-orm"; @@ -10,7 +11,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/api/v2/filters/[id]/index.test.ts b/packages/api/routes/api/v2/filters/[id]/index.test.ts similarity index 100% rename from api/api/v2/filters/[id]/index.test.ts rename to packages/api/routes/api/v2/filters/[id]/index.test.ts diff --git a/api/api/v2/filters/[id]/index.ts b/packages/api/routes/api/v2/filters/[id]/index.ts similarity index 99% rename from api/api/v2/filters/[id]/index.ts rename to packages/api/routes/api/v2/filters/[id]/index.ts index 5cf1fdaf..bd4a96bc 100644 --- a/api/api/v2/filters/[id]/index.ts +++ b/packages/api/routes/api/v2/filters/[id]/index.ts @@ -4,6 +4,7 @@ import { RolePermission, zBoolean, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { db } from "@versia/kit/db"; import { FilterKeywords, Filters } from "@versia/kit/tables"; import { and, eq, inArray, type SQL } from "drizzle-orm"; @@ -11,7 +12,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, jsonOrForm } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => { app.get( diff --git a/api/api/v2/filters/index.test.ts b/packages/api/routes/api/v2/filters/index.test.ts similarity index 100% rename from api/api/v2/filters/index.test.ts rename to packages/api/routes/api/v2/filters/index.test.ts diff --git a/api/api/v2/filters/index.ts b/packages/api/routes/api/v2/filters/index.ts similarity index 99% rename from api/api/v2/filters/index.ts rename to packages/api/routes/api/v2/filters/index.ts index 84797a38..c0a16b2a 100644 --- a/api/api/v2/filters/index.ts +++ b/packages/api/routes/api/v2/filters/index.ts @@ -3,6 +3,7 @@ import { Filter as FilterSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { db } from "@versia/kit/db"; import { FilterKeywords, Filters } from "@versia/kit/tables"; import { randomUUIDv7 } from "bun"; @@ -11,7 +12,6 @@ import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, jsonOrForm } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => { app.get( diff --git a/api/api/v2/instance/index.test.ts b/packages/api/routes/api/v2/instance/index.test.ts similarity index 100% rename from api/api/v2/instance/index.test.ts rename to packages/api/routes/api/v2/instance/index.test.ts diff --git a/api/api/v2/instance/index.ts b/packages/api/routes/api/v2/instance/index.ts similarity index 99% rename from api/api/v2/instance/index.ts rename to packages/api/routes/api/v2/instance/index.ts index 9ff4cddd..224718d1 100644 --- a/api/api/v2/instance/index.ts +++ b/packages/api/routes/api/v2/instance/index.ts @@ -1,11 +1,11 @@ import { Instance as InstanceSchema } from "@versia/client/schemas"; import { User } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { and, eq, isNull } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute } from "@/api"; -import { config } from "~/config.ts"; import pkg from "~/package.json" with { type: "json" }; export default apiRoute((app) => diff --git a/api/api/v2/media/index.ts b/packages/api/routes/api/v2/media/index.ts similarity index 98% rename from api/api/v2/media/index.ts rename to packages/api/routes/api/v2/media/index.ts index 9f42a6ee..49741dd0 100644 --- a/api/api/v2/media/index.ts +++ b/packages/api/routes/api/v2/media/index.ts @@ -2,13 +2,13 @@ import { Attachment as AttachmentSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Media } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config"; export default apiRoute((app) => app.post( diff --git a/api/api/v2/search/index.ts b/packages/api/routes/api/v2/search/index.ts similarity index 99% rename from api/api/v2/search/index.ts rename to packages/api/routes/api/v2/search/index.ts index 1e24cbd7..daaea8c8 100644 --- a/api/api/v2/search/index.ts +++ b/packages/api/routes/api/v2/search/index.ts @@ -6,16 +6,16 @@ import { userAddressRegex, zBoolean, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { db, Note, User } from "@versia/kit/db"; import { Instances, Notes, Users } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { and, eq, inArray, isNull, sql } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, auth, handleZodError, parseUserAddress } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; import { searchManager } from "~/classes/search/search-manager"; -import { config } from "~/config.ts"; export default apiRoute((app) => app.get( diff --git a/api/inbox/index.test.ts b/packages/api/routes/inbox/index.test.ts similarity index 97% rename from api/inbox/index.test.ts rename to packages/api/routes/inbox/index.test.ts index 329b8334..225dcf89 100644 --- a/api/inbox/index.test.ts +++ b/packages/api/routes/inbox/index.test.ts @@ -1,4 +1,9 @@ import { afterAll, describe, expect, test } from "bun:test"; +import { Instance, Note, Reaction, User } from "@versia/kit/db"; +import { Notes, Reactions, Users } from "@versia/kit/tables"; +import { sign } from "@versia/sdk/crypto"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { config } from "@versia-server/config"; import { randomUUIDv7, sleep } from "bun"; import { clearMocks, @@ -7,14 +12,6 @@ import { mock, } from "bun-bagel"; import { and, eq, isNull } from "drizzle-orm"; -import { Instance } from "~/classes/database/instance"; -import { Note } from "~/classes/database/note"; -import { Reaction } from "~/classes/database/reaction"; -import { User } from "~/classes/database/user"; -import { config } from "~/config"; -import { Notes, Reactions, Users } from "~/drizzle/schema"; -import { sign } from "~/packages/sdk/crypto"; -import * as VersiaEntities from "~/packages/sdk/entities"; import { fakeRequest, generateClient, getTestUsers } from "~/tests/utils"; const instanceUrl = new URL("https://versia.example.com"); diff --git a/api/inbox/index.ts b/packages/api/routes/inbox/index.ts similarity index 100% rename from api/inbox/index.ts rename to packages/api/routes/inbox/index.ts diff --git a/api/likes/[uuid]/index.ts b/packages/api/routes/likes/[uuid]/index.ts similarity index 95% rename from api/likes/[uuid]/index.ts rename to packages/api/routes/likes/[uuid]/index.ts index 4ecea34e..c94be1bc 100644 --- a/api/likes/[uuid]/index.ts +++ b/packages/api/routes/likes/[uuid]/index.ts @@ -1,14 +1,14 @@ import { Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Like, User } from "@versia/kit/db"; import { Likes } from "@versia/kit/tables"; +import { LikeSchema } from "@versia/sdk/schemas"; +import { config } from "@versia-server/config"; import { and, eq, sql } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; -import { LikeSchema } from "~/packages/sdk/schemas"; export default apiRoute((app) => app.get( diff --git a/api/media/[hash]/[name]/index.ts b/packages/api/routes/media/[hash]/[name]/index.ts similarity index 97% rename from api/media/[hash]/[name]/index.ts rename to packages/api/routes/media/[hash]/[name]/index.ts index a5e69a9a..2ea7b57c 100644 --- a/api/media/[hash]/[name]/index.ts +++ b/packages/api/routes/media/[hash]/[name]/index.ts @@ -1,9 +1,9 @@ +import { ApiError } from "@versia/kit"; import { file as bunFile } from "bun"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; export default apiRoute((app) => app.get( diff --git a/api/media/proxy/[id].ts b/packages/api/routes/media/proxy/[id].ts similarity index 97% rename from api/media/proxy/[id].ts rename to packages/api/routes/media/proxy/[id].ts index 41b2c489..725a6572 100644 --- a/api/media/proxy/[id].ts +++ b/packages/api/routes/media/proxy/[id].ts @@ -1,11 +1,11 @@ +import { ApiError } from "@versia/kit"; +import { config } from "@versia-server/config"; import { proxy } from "hono/proxy"; import type { ContentfulStatusCode, StatusCode } from "hono/utils/http-status"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; export default apiRoute((app) => app.get( diff --git a/api/messaging/index.ts b/packages/api/routes/messaging/index.ts similarity index 100% rename from api/messaging/index.ts rename to packages/api/routes/messaging/index.ts diff --git a/api/notes/[uuid]/index.ts b/packages/api/routes/notes/[uuid]/index.ts similarity index 94% rename from api/notes/[uuid]/index.ts rename to packages/api/routes/notes/[uuid]/index.ts index 6c6a3781..34bd00e0 100644 --- a/api/notes/[uuid]/index.ts +++ b/packages/api/routes/notes/[uuid]/index.ts @@ -1,14 +1,14 @@ import { Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Note } from "@versia/kit/db"; import { Notes } from "@versia/kit/tables"; +import { NoteSchema } from "@versia/sdk/schemas"; +import { config } from "@versia-server/config"; import { and, eq, inArray } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; -import { NoteSchema } from "~/packages/sdk/schemas"; export default apiRoute((app) => app.get( diff --git a/api/notes/[uuid]/quotes.ts b/packages/api/routes/notes/[uuid]/quotes.ts similarity index 95% rename from api/notes/[uuid]/quotes.ts rename to packages/api/routes/notes/[uuid]/quotes.ts index ec65d503..2901754a 100644 --- a/api/notes/[uuid]/quotes.ts +++ b/packages/api/routes/notes/[uuid]/quotes.ts @@ -1,15 +1,15 @@ import { Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { db, Note } from "@versia/kit/db"; import { Notes } from "@versia/kit/tables"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { URICollectionSchema } from "@versia/sdk/schemas"; +import { config } from "@versia-server/config"; import { and, eq, inArray } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; -import * as VersiaEntities from "~/packages/sdk/entities"; -import { URICollectionSchema } from "~/packages/sdk/schemas"; export default apiRoute((app) => app.get( diff --git a/api/notes/[uuid]/replies.ts b/packages/api/routes/notes/[uuid]/replies.ts similarity index 95% rename from api/notes/[uuid]/replies.ts rename to packages/api/routes/notes/[uuid]/replies.ts index 49465e5a..715a06f3 100644 --- a/api/notes/[uuid]/replies.ts +++ b/packages/api/routes/notes/[uuid]/replies.ts @@ -1,15 +1,15 @@ import { Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { db, Note } from "@versia/kit/db"; import { Notes } from "@versia/kit/tables"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { URICollectionSchema } from "@versia/sdk/schemas"; +import { config } from "@versia-server/config"; import { and, eq, inArray } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; -import * as VersiaEntities from "~/packages/sdk/entities"; -import { URICollectionSchema } from "~/packages/sdk/schemas"; export default apiRoute((app) => app.get( diff --git a/api/notes/[uuid]/shares.ts b/packages/api/routes/notes/[uuid]/shares.ts similarity index 96% rename from api/notes/[uuid]/shares.ts rename to packages/api/routes/notes/[uuid]/shares.ts index 3bf131af..bdc57ed9 100644 --- a/api/notes/[uuid]/shares.ts +++ b/packages/api/routes/notes/[uuid]/shares.ts @@ -1,15 +1,15 @@ import { Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { db, Note } from "@versia/kit/db"; import { Notes } from "@versia/kit/tables"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { URICollectionSchema } from "@versia/sdk/schemas"; +import { config } from "@versia-server/config"; import { and, eq, inArray } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; -import * as VersiaEntities from "~/packages/sdk/entities"; -import { URICollectionSchema } from "~/packages/sdk/schemas"; export default apiRoute((app) => app.get( diff --git a/api/shares/[uuid]/index.ts b/packages/api/routes/shares/[uuid]/index.ts similarity index 94% rename from api/shares/[uuid]/index.ts rename to packages/api/routes/shares/[uuid]/index.ts index 84023fd1..7ef0c43e 100644 --- a/api/shares/[uuid]/index.ts +++ b/packages/api/routes/shares/[uuid]/index.ts @@ -1,14 +1,14 @@ import { Status as StatusSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Note } from "@versia/kit/db"; import { Notes } from "@versia/kit/tables"; +import { ShareSchema } from "@versia/sdk/schemas"; +import { config } from "@versia-server/config"; import { and, eq, inArray } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; -import { ShareSchema } from "~/packages/sdk/schemas"; export default apiRoute((app) => app.get( diff --git a/api/users/[uuid]/inbox/index.ts b/packages/api/routes/users/[uuid]/inbox/index.ts similarity index 98% rename from api/users/[uuid]/inbox/index.ts rename to packages/api/routes/users/[uuid]/inbox/index.ts index 34106569..0ae1ea0a 100644 --- a/api/users/[uuid]/inbox/index.ts +++ b/packages/api/routes/users/[uuid]/inbox/index.ts @@ -1,8 +1,8 @@ +import { ApiError } from "@versia/kit"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; import { InboxJobType, inboxQueue } from "~/classes/queues/inbox"; export default apiRoute((app) => diff --git a/api/users/[uuid]/index.ts b/packages/api/routes/users/[uuid]/index.ts similarity index 95% rename from api/users/[uuid]/index.ts rename to packages/api/routes/users/[uuid]/index.ts index dc1aea76..b7c08dc2 100644 --- a/api/users/[uuid]/index.ts +++ b/packages/api/routes/users/[uuid]/index.ts @@ -1,10 +1,10 @@ +import { ApiError } from "@versia/kit"; import { User } from "@versia/kit/db"; +import { UserSchema } from "@versia/sdk/schemas"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { UserSchema } from "~/packages/sdk/schemas"; export default apiRoute((app) => app.get( diff --git a/api/users/[uuid]/outbox/index.ts b/packages/api/routes/users/[uuid]/outbox/index.ts similarity index 95% rename from api/users/[uuid]/outbox/index.ts rename to packages/api/routes/users/[uuid]/outbox/index.ts index 2094c7aa..01baa18f 100644 --- a/api/users/[uuid]/outbox/index.ts +++ b/packages/api/routes/users/[uuid]/outbox/index.ts @@ -1,14 +1,14 @@ +import { ApiError } from "@versia/kit"; import { db, Note, User } from "@versia/kit/db"; import { Notes } from "@versia/kit/tables"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { CollectionSchema, NoteSchema } from "@versia/sdk/schemas"; +import { config } from "@versia-server/config"; import { and, eq, inArray } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; -import * as VersiaEntities from "~/packages/sdk/entities"; -import { CollectionSchema, NoteSchema } from "~/packages/sdk/schemas"; const NOTES_PER_PAGE = 20; diff --git a/api/well-known/host-meta/index.ts b/packages/api/routes/well-known/host-meta/index.ts similarity index 96% rename from api/well-known/host-meta/index.ts rename to packages/api/routes/well-known/host-meta/index.ts index 6531e3d2..13e9cf13 100644 --- a/api/well-known/host-meta/index.ts +++ b/packages/api/routes/well-known/host-meta/index.ts @@ -1,8 +1,8 @@ +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute } from "@/api"; -import { config } from "~/config.ts"; export default apiRoute((app) => app.get( diff --git a/api/well-known/nodeinfo/2.0/index.ts b/packages/api/routes/well-known/nodeinfo/2.0/index.ts similarity index 98% rename from api/well-known/nodeinfo/2.0/index.ts rename to packages/api/routes/well-known/nodeinfo/2.0/index.ts index e046432f..9956ce1a 100644 --- a/api/well-known/nodeinfo/2.0/index.ts +++ b/packages/api/routes/well-known/nodeinfo/2.0/index.ts @@ -1,9 +1,9 @@ import { Note, User } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute } from "@/api"; -import { config } from "~/config.ts"; import manifest from "~/package.json" with { type: "json" }; export default apiRoute((app) => diff --git a/api/well-known/nodeinfo/index.ts b/packages/api/routes/well-known/nodeinfo/index.ts similarity index 96% rename from api/well-known/nodeinfo/index.ts rename to packages/api/routes/well-known/nodeinfo/index.ts index 2ef92880..4a60a204 100644 --- a/api/well-known/nodeinfo/index.ts +++ b/packages/api/routes/well-known/nodeinfo/index.ts @@ -1,8 +1,8 @@ +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute } from "@/api"; -import { config } from "~/config.ts"; export default apiRoute((app) => app.get( diff --git a/api/well-known/openid-configuration/index.ts b/packages/api/routes/well-known/openid-configuration/index.ts similarity index 98% rename from api/well-known/openid-configuration/index.ts rename to packages/api/routes/well-known/openid-configuration/index.ts index 225063fe..fb1add0e 100644 --- a/api/well-known/openid-configuration/index.ts +++ b/packages/api/routes/well-known/openid-configuration/index.ts @@ -1,8 +1,8 @@ +import { config } from "@versia-server/config"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { z } from "zod"; import { apiRoute } from "@/api"; -import { config } from "~/config.ts"; export default apiRoute((app) => app.get( diff --git a/api/well-known/versia.ts b/packages/api/routes/well-known/versia.ts similarity index 96% rename from api/well-known/versia.ts rename to packages/api/routes/well-known/versia.ts index 03c5a251..28f593cd 100644 --- a/api/well-known/versia.ts +++ b/packages/api/routes/well-known/versia.ts @@ -1,13 +1,13 @@ import { User } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; +import { InstanceMetadataSchema } from "@versia/sdk/schemas"; +import { config } from "@versia-server/config"; import { asc } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver } from "hono-openapi/zod"; import { apiRoute } from "@/api"; import { urlToContentFormat } from "@/content_types"; -import { config } from "~/config.ts"; import pkg from "~/package.json" with { type: "json" }; -import { InstanceMetadataSchema } from "~/packages/sdk/schemas"; export default apiRoute((app) => app.get( diff --git a/api/well-known/webfinger/index.ts b/packages/api/routes/well-known/webfinger/index.ts similarity index 96% rename from api/well-known/webfinger/index.ts rename to packages/api/routes/well-known/webfinger/index.ts index 03e712d7..2212ba11 100644 --- a/api/well-known/webfinger/index.ts +++ b/packages/api/routes/well-known/webfinger/index.ts @@ -1,7 +1,10 @@ import { getLogger } from "@logtape/logtape"; +import { ApiError } from "@versia/kit"; import { User } from "@versia/kit/db"; import { Users } from "@versia/kit/tables"; import { FederationRequester } from "@versia/sdk/http"; +import { WebFingerSchema } from "@versia/sdk/schemas"; +import { config } from "@versia-server/config"; import { and, eq, isNull } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; @@ -13,9 +16,6 @@ import { parseUserAddress, webfingerMention, } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; -import { config } from "~/config.ts"; -import { WebFingerSchema } from "~/packages/sdk/schemas"; export default apiRoute((app) => app.get( diff --git a/entrypoints/api/setup.ts b/packages/api/setup.ts similarity index 92% rename from entrypoints/api/setup.ts rename to packages/api/setup.ts index f2daf095..1c44afd4 100644 --- a/entrypoints/api/setup.ts +++ b/packages/api/setup.ts @@ -1,9 +1,8 @@ import { getLogger } from "@logtape/logtape"; -import { Note } from "@versia/kit/db"; +import { Note, setupDatabase } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import { configureLoggers } from "@/loggers"; import { connection } from "@/redis.ts"; -import { config } from "~/config.ts"; -import { setupDatabase } from "~/drizzle/db"; import { searchManager } from "../../classes/search/search-manager.ts"; const timeAtStart = performance.now(); diff --git a/packages/client/package.json b/packages/client/package.json index e8a5c44e..652dc49b 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -64,9 +64,9 @@ "packageManager": "bun@1.2.5", "dependencies": { "@badgateway/oauth2-client": "^3.0.0", - "iso-639-1": "^3.1.5", - "magic-regexp": "^0.10.0", - "zod": "^3.24.2", - "zod-openapi": "^4.2.4" + "iso-639-1": "catalog:", + "magic-regexp": "catalog:", + "zod": "catalog:", + "zod-openapi": "catalog:" } } diff --git a/config.ts b/packages/config/index.ts similarity index 78% rename from config.ts rename to packages/config/index.ts index 429019f2..ae380eba 100644 --- a/config.ts +++ b/packages/config/index.ts @@ -1,16 +1,9 @@ -/** - * @file config.ts - * @summary Config system to retrieve and modify system configuration - * @description Can read from a hand-written file, config.toml, or from a machine-saved file, config.internal.toml - * Fuses both and provides a way to retrieve individual values - */ - import { env, file } from "bun"; import chalk from "chalk"; import { parseTOML } from "confbox"; import type { z } from "zod"; import { fromZodError } from "zod-validation-error"; -import { ConfigSchema } from "./classes/config/schema.ts"; +import { ConfigSchema } from "./schema.ts"; const CONFIG_LOCATION = env.CONFIG_LOCATION ?? "./config/config.toml"; const configFile = file(CONFIG_LOCATION); @@ -45,4 +38,5 @@ if (!parsed.success) { const exportedConfig = parsed.data; +export { ProxiableUrl } from "./url.ts"; export { exportedConfig as config }; diff --git a/packages/config/package.json b/packages/config/package.json new file mode 100644 index 00000000..5dc26f86 --- /dev/null +++ b/packages/config/package.json @@ -0,0 +1,28 @@ +{ + "name": "@versia-server/config", + "module": "index.ts", + "type": "module", + "version": "0.0.1", + "private": true, + "exports": { + ".": { + "import": "./index.ts", + "default": "./index.ts" + }, + "./schema": { + "import": "./schema.ts", + "default": "./schema.ts" + } + }, + "dependencies": { + "chalk": "catalog:", + "zod": "catalog:", + "zod-validation-error": "catalog:", + "confbox": "catalog:", + "web-push": "catalog:", + "iso-639-1": "catalog:", + "mime-types": "catalog:", + "@versia/client": "workspace:*", + "zod-to-json-schema": "catalog:" + } +} diff --git a/classes/config/schema.ts b/packages/config/schema.ts similarity index 99% rename from classes/config/schema.ts rename to packages/config/schema.ts index ed73ad00..18a19000 100644 --- a/classes/config/schema.ts +++ b/packages/config/schema.ts @@ -1,10 +1,10 @@ +import { RolePermission } from "@versia/client/schemas"; import { type BunFile, env, file } from "bun"; import ISO6391 from "iso-639-1"; import { types as mimeTypes } from "mime-types"; import { generateVAPIDKeys } from "web-push"; import { z } from "zod"; -import { ProxiableUrl } from "~/classes/media/url.ts"; -import { RolePermission } from "~/packages/client/schemas/permissions.ts"; +import { ProxiableUrl } from "./url.ts"; export const DEFAULT_ROLES = [ RolePermission.ManageOwnNotes, diff --git a/packages/config/to-json-schema.ts b/packages/config/to-json-schema.ts new file mode 100644 index 00000000..6af0d8ff --- /dev/null +++ b/packages/config/to-json-schema.ts @@ -0,0 +1,6 @@ +import { zodToJsonSchema } from "zod-to-json-schema"; +import { ConfigSchema } from "./schema.ts"; + +const jsonSchema = zodToJsonSchema(ConfigSchema, {}); + +console.write(`${JSON.stringify(jsonSchema, null, 4)}\n`); diff --git a/classes/media/url.ts b/packages/config/url.ts similarity index 94% rename from classes/media/url.ts rename to packages/config/url.ts index bd0e3302..ae5a6093 100644 --- a/classes/media/url.ts +++ b/packages/config/url.ts @@ -1,4 +1,4 @@ -import { config } from "~/config.ts"; +import { config } from "./index.ts"; export class ProxiableUrl extends URL { private isAllowedOrigin(): boolean { diff --git a/classes/errors/api-error.ts b/packages/plugin-kit/api-error.ts similarity index 100% rename from classes/errors/api-error.ts rename to packages/plugin-kit/api-error.ts diff --git a/classes/database/application.ts b/packages/plugin-kit/db/application.ts similarity index 100% rename from classes/database/application.ts rename to packages/plugin-kit/db/application.ts diff --git a/classes/database/base.ts b/packages/plugin-kit/db/base.ts similarity index 100% rename from classes/database/base.ts rename to packages/plugin-kit/db/base.ts diff --git a/classes/database/emoji.ts b/packages/plugin-kit/db/emoji.ts similarity index 97% rename from classes/database/emoji.ts rename to packages/plugin-kit/db/emoji.ts index 00715305..c1298d32 100644 --- a/classes/database/emoji.ts +++ b/packages/plugin-kit/db/emoji.ts @@ -5,6 +5,8 @@ import { } from "@versia/client/schemas"; import { db, type Instance, Media } from "@versia/kit/db"; import { Emojis, type Instances, type Medias } from "@versia/kit/tables"; +import * as VersiaEntities from "@versia/sdk/entities"; +import type { ImageContentFormatSchema } from "@versia/sdk/schemas"; import { randomUUIDv7 } from "bun"; import { and, @@ -17,8 +19,6 @@ import { type SQL, } from "drizzle-orm"; import type { z } from "zod"; -import * as VersiaEntities from "~/packages/sdk/entities/index.ts"; -import type { ImageContentFormatSchema } from "~/packages/sdk/schemas/index.ts"; import { BaseInterface } from "./base.ts"; type EmojiType = InferSelectModel & { diff --git a/packages/plugin-kit/db/index.ts b/packages/plugin-kit/db/index.ts new file mode 100644 index 00000000..1cc2359d --- /dev/null +++ b/packages/plugin-kit/db/index.ts @@ -0,0 +1,15 @@ +export { db, setupDatabase } from "../tables/db.ts"; +export { Application } from "./application.ts"; +export { Emoji } from "./emoji.ts"; +export { Instance } from "./instance.ts"; +export { Like } from "./like.ts"; +export { Media } from "./media.ts"; +export { Note } from "./note.ts"; +export { Notification } from "./notification.ts"; +export { PushSubscription } from "./pushsubscription.ts"; +export { Reaction } from "./reaction.ts"; +export { Relationship } from "./relationship.ts"; +export { Role } from "./role.ts"; +export { Timeline } from "./timeline.ts"; +export { Token } from "./token.ts"; +export { User } from "./user.ts"; diff --git a/classes/database/instance.ts b/packages/plugin-kit/db/instance.ts similarity index 98% rename from classes/database/instance.ts rename to packages/plugin-kit/db/instance.ts index 7033b5e7..4806f2e2 100644 --- a/classes/database/instance.ts +++ b/packages/plugin-kit/db/instance.ts @@ -1,6 +1,9 @@ import { getLogger } from "@logtape/logtape"; +import { ApiError } from "@versia/kit"; import { db } from "@versia/kit/db"; import { Instances } from "@versia/kit/tables"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { config } from "@versia-server/config"; import { randomUUIDv7 } from "bun"; import chalk from "chalk"; import { @@ -11,9 +14,6 @@ import { inArray, type SQL, } from "drizzle-orm"; -import { config } from "~/config.ts"; -import * as VersiaEntities from "~/packages/sdk/entities/index.ts"; -import { ApiError } from "../errors/api-error.ts"; import { BaseInterface } from "./base.ts"; import { User } from "./user.ts"; diff --git a/classes/database/like.ts b/packages/plugin-kit/db/like.ts similarity index 97% rename from classes/database/like.ts rename to packages/plugin-kit/db/like.ts index 9dc42277..9c5f5788 100644 --- a/classes/database/like.ts +++ b/packages/plugin-kit/db/like.ts @@ -5,6 +5,8 @@ import { Notifications, type Users, } from "@versia/kit/tables"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { config } from "@versia-server/config"; import { and, desc, @@ -14,8 +16,6 @@ import { inArray, type SQL, } from "drizzle-orm"; -import { config } from "~/config.ts"; -import * as VersiaEntities from "~/packages/sdk/entities/index.ts"; import { BaseInterface } from "./base.ts"; import { User } from "./user.ts"; diff --git a/classes/database/media.ts b/packages/plugin-kit/db/media.ts similarity index 97% rename from classes/database/media.ts rename to packages/plugin-kit/db/media.ts index ae398c1d..3485a0ef 100644 --- a/classes/database/media.ts +++ b/packages/plugin-kit/db/media.ts @@ -1,7 +1,15 @@ import { join } from "node:path"; import type { Attachment as AttachmentSchema } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { db } from "@versia/kit/db"; import { Medias } from "@versia/kit/tables"; +import * as VersiaEntities from "@versia/sdk/entities"; +import type { + ContentFormatSchema, + ImageContentFormatSchema, +} from "@versia/sdk/schemas"; +import { config, ProxiableUrl } from "@versia-server/config"; +import { MediaBackendType } from "@versia-server/config/schema"; import { randomUUIDv7, S3Client, SHA256, write } from "bun"; import { desc, @@ -14,17 +22,8 @@ import { import sharp from "sharp"; import type { z } from "zod"; import { mimeLookup } from "@/content_types.ts"; -import { MediaBackendType } from "~/classes/config/schema.ts"; -import { config } from "~/config.ts"; -import * as VersiaEntities from "~/packages/sdk/entities/index.ts"; -import type { - ContentFormatSchema, - ImageContentFormatSchema, -} from "~/packages/sdk/schemas/index.ts"; -import { ApiError } from "../errors/api-error.ts"; -import { getMediaHash } from "../media/media-hasher.ts"; -import { ProxiableUrl } from "../media/url.ts"; -import { MediaJobType, mediaQueue } from "../queues/media.ts"; +import { getMediaHash } from "../../../classes/media/media-hasher.ts"; +import { MediaJobType, mediaQueue } from "../../../classes/queues/media.ts"; import { BaseInterface } from "./base.ts"; type MediaType = InferSelectModel; diff --git a/classes/database/note.ts b/packages/plugin-kit/db/note.ts similarity index 99% rename from classes/database/note.ts rename to packages/plugin-kit/db/note.ts index 25fa185b..5144ff20 100644 --- a/classes/database/note.ts +++ b/packages/plugin-kit/db/note.ts @@ -8,6 +8,9 @@ import { NoteToMentions, Users, } from "@versia/kit/tables"; +import * as VersiaEntities from "@versia/sdk/entities"; +import type { NonTextContentFormatSchema } from "@versia/sdk/schemas"; +import { config } from "@versia-server/config"; import { randomUUIDv7 } from "bun"; import { and, @@ -27,10 +30,10 @@ import { idValidator } from "@/api"; import { mergeAndDeduplicate } from "@/lib.ts"; import { sanitizedHtmlStrip } from "@/sanitization"; import { contentToHtml, findManyNotes } from "~/classes/functions/status"; -import { config } from "~/config.ts"; -import * as VersiaEntities from "~/packages/sdk/entities/index.ts"; -import type { NonTextContentFormatSchema } from "~/packages/sdk/schemas/contentformat.ts"; -import { DeliveryJobType, deliveryQueue } from "../queues/delivery.ts"; +import { + DeliveryJobType, + deliveryQueue, +} from "../../../classes/queues/delivery.ts"; import { Application } from "./application.ts"; import { BaseInterface } from "./base.ts"; import { Emoji } from "./emoji.ts"; diff --git a/classes/database/notification.ts b/packages/plugin-kit/db/notification.ts similarity index 99% rename from classes/database/notification.ts rename to packages/plugin-kit/db/notification.ts index bfaecf5f..a90f5afa 100644 --- a/classes/database/notification.ts +++ b/packages/plugin-kit/db/notification.ts @@ -13,7 +13,7 @@ import type { z } from "zod"; import { transformOutputToUserWithRelations, userRelations, -} from "../functions/user.ts"; +} from "../../../classes/functions/user.ts"; import { BaseInterface } from "./base.ts"; export type NotificationType = InferSelectModel & { diff --git a/classes/database/pushsubscription.ts b/packages/plugin-kit/db/pushsubscription.ts similarity index 100% rename from classes/database/pushsubscription.ts rename to packages/plugin-kit/db/pushsubscription.ts diff --git a/classes/database/reaction.ts b/packages/plugin-kit/db/reaction.ts similarity index 98% rename from classes/database/reaction.ts rename to packages/plugin-kit/db/reaction.ts index e08d73c6..fbb9363b 100644 --- a/classes/database/reaction.ts +++ b/packages/plugin-kit/db/reaction.ts @@ -1,5 +1,7 @@ import { db, Emoji, Instance, type Note, User } from "@versia/kit/db"; import { type Notes, Reactions, type Users } from "@versia/kit/tables"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { config } from "@versia-server/config"; import { randomUUIDv7 } from "bun"; import { and, @@ -11,8 +13,6 @@ import { isNull, type SQL, } from "drizzle-orm"; -import { config } from "~/config.ts"; -import * as VersiaEntities from "~/packages/sdk/entities/index.ts"; import { BaseInterface } from "./base.ts"; type ReactionType = InferSelectModel & { diff --git a/classes/database/relationship.ts b/packages/plugin-kit/db/relationship.ts similarity index 100% rename from classes/database/relationship.ts rename to packages/plugin-kit/db/relationship.ts diff --git a/classes/database/role.ts b/packages/plugin-kit/db/role.ts similarity index 98% rename from classes/database/role.ts rename to packages/plugin-kit/db/role.ts index 356040ee..bd9089ab 100644 --- a/classes/database/role.ts +++ b/packages/plugin-kit/db/role.ts @@ -4,6 +4,7 @@ import type { } from "@versia/client/schemas"; import { db } from "@versia/kit/db"; import { Roles, RoleToUsers } from "@versia/kit/tables"; +import { config, ProxiableUrl } from "@versia-server/config"; import { and, desc, @@ -14,8 +15,6 @@ import { type SQL, } from "drizzle-orm"; import type { z } from "zod"; -import { config } from "~/config.ts"; -import { ProxiableUrl } from "../media/url.ts"; import { BaseInterface } from "./base.ts"; type RoleType = InferSelectModel; diff --git a/classes/database/timeline.ts b/packages/plugin-kit/db/timeline.ts similarity index 99% rename from classes/database/timeline.ts rename to packages/plugin-kit/db/timeline.ts index 3d529b1a..e446afb3 100644 --- a/classes/database/timeline.ts +++ b/packages/plugin-kit/db/timeline.ts @@ -1,6 +1,6 @@ import { Notes, Notifications, Users } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { gt, type SQL } from "drizzle-orm"; -import { config } from "~/config.ts"; import { Note } from "./note.ts"; import { Notification } from "./notification.ts"; import { User } from "./user.ts"; diff --git a/classes/database/token.ts b/packages/plugin-kit/db/token.ts similarity index 100% rename from classes/database/token.ts rename to packages/plugin-kit/db/token.ts diff --git a/classes/database/user.ts b/packages/plugin-kit/db/user.ts similarity index 98% rename from classes/database/user.ts rename to packages/plugin-kit/db/user.ts index 3486b548..16fe1c58 100644 --- a/classes/database/user.ts +++ b/packages/plugin-kit/db/user.ts @@ -23,6 +23,11 @@ import { Users, UserToPinnedNotes, } from "@versia/kit/tables"; +import { sign } from "@versia/sdk/crypto"; +import * as VersiaEntities from "@versia/sdk/entities"; +import { FederationRequester } from "@versia/sdk/http"; +import type { ImageContentFormatSchema } from "@versia/sdk/schemas"; +import { config, ProxiableUrl } from "@versia-server/config"; import { password as bunPassword, randomUUIDv7 } from "bun"; import chalk from "chalk"; import { @@ -47,15 +52,12 @@ import { randomString } from "@/math"; import { sentry } from "@/sentry"; import { findManyUsers } from "~/classes/functions/user"; import { searchManager } from "~/classes/search/search-manager"; -import { config } from "~/config.ts"; -import { sign } from "~/packages/sdk/crypto.ts"; -import * as VersiaEntities from "~/packages/sdk/entities/index.ts"; -import { FederationRequester } from "~/packages/sdk/http.ts"; -import type { ImageContentFormatSchema } from "~/packages/sdk/schemas/index.ts"; import type { HttpVerb, KnownEntity } from "~/types/api.ts"; -import { ProxiableUrl } from "../media/url.ts"; -import { DeliveryJobType, deliveryQueue } from "../queues/delivery.ts"; -import { PushJobType, pushQueue } from "../queues/push.ts"; +import { + DeliveryJobType, + deliveryQueue, +} from "../../../classes/queues/delivery.ts"; +import { PushJobType, pushQueue } from "../../../classes/queues/push.ts"; import { BaseInterface } from "./base.ts"; import { Emoji } from "./emoji.ts"; import { Instance } from "./instance.ts"; diff --git a/packages/plugin-kit/exports/db.ts b/packages/plugin-kit/exports/db.ts deleted file mode 100644 index 7754d60a..00000000 --- a/packages/plugin-kit/exports/db.ts +++ /dev/null @@ -1,15 +0,0 @@ -export { Application } from "~/classes/database/application.ts"; -export { Emoji } from "~/classes/database/emoji.ts"; -export { Instance } from "~/classes/database/instance.ts"; -export { Like } from "~/classes/database/like.ts"; -export { Media } from "~/classes/database/media"; -export { Note } from "~/classes/database/note.ts"; -export { Notification } from "~/classes/database/notification.ts"; -export { PushSubscription } from "~/classes/database/pushsubscription.ts"; -export { Reaction } from "~/classes/database/reaction.ts"; -export { Relationship } from "~/classes/database/relationship.ts"; -export { Role } from "~/classes/database/role.ts"; -export { Timeline } from "~/classes/database/timeline.ts"; -export { Token } from "~/classes/database/token.ts"; -export { User } from "~/classes/database/user.ts"; -export { db } from "~/drizzle/db.ts"; diff --git a/packages/plugin-kit/exports/drizzle.ts b/packages/plugin-kit/exports/drizzle.ts deleted file mode 100644 index 5ac1e878..00000000 --- a/packages/plugin-kit/exports/drizzle.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "drizzle-orm"; diff --git a/packages/plugin-kit/exports/tables.ts b/packages/plugin-kit/exports/tables.ts deleted file mode 100644 index 8d1685fe..00000000 --- a/packages/plugin-kit/exports/tables.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "~/drizzle/schema"; diff --git a/packages/plugin-kit/index.ts b/packages/plugin-kit/index.ts index b992d990..a25e611b 100644 --- a/packages/plugin-kit/index.ts +++ b/packages/plugin-kit/index.ts @@ -1,3 +1,4 @@ +export { ApiError } from "./api-error.ts"; export { Hooks } from "./hooks.ts"; export { Plugin } from "./plugin.ts"; -export type { Manifest } from "./schema.ts"; +export { type Manifest, manifestSchema } from "./schema.ts"; diff --git a/packages/plugin-kit/package.json b/packages/plugin-kit/package.json index 07a6c60f..3e3ef6d1 100644 --- a/packages/plugin-kit/package.json +++ b/packages/plugin-kit/package.json @@ -32,29 +32,38 @@ }, "private": true, "dependencies": { - "drizzle-orm": "^0.44.2", - "hono": "^4.7.7", - "mitt": "^3.0.1", - "zod": "^3.24.2", - "zod-to-json-schema": "^3.24.5", - "zod-validation-error": "^3.4.0" + "drizzle-orm": "catalog:", + "hono": "catalog:", + "mitt": "catalog:", + "zod": "catalog:", + "zod-to-json-schema": "catalog:", + "zod-validation-error": "catalog:", + "chalk": "catalog:", + "@versia/client": "workspace:*", + "@versia-server/config": "workspace:*", + "@versia/sdk": "workspace:*", + "html-to-text": "catalog:", + "@logtape/logtape": "catalog:", + "sharp": "catalog:", + "magic-regexp": "catalog:", + "altcha-lib": "catalog:", + "hono-openapi": "catalog:" }, + "files": [ + "tables/migrations" + ], "exports": { ".": { "import": "./index.ts", "default": "./index.ts" }, "./db": { - "import": "./exports/db.ts", - "default": "./exports/db.ts" - }, - "./drizzle": { - "import": "./exports/drizzle.ts", - "default": "./exports/drizzle.ts" + "import": "./db/index.ts", + "default": "./db/index.ts" }, "./tables": { - "import": "./exports/tables.ts", - "default": "./exports/tables.ts" + "import": "./tables/schema.ts", + "default": "./tables/schema.ts" } } } diff --git a/drizzle/db.ts b/packages/plugin-kit/tables/db.ts similarity index 95% rename from drizzle/db.ts rename to packages/plugin-kit/tables/db.ts index d0d4e7fc..8b554839 100644 --- a/drizzle/db.ts +++ b/packages/plugin-kit/tables/db.ts @@ -1,10 +1,10 @@ import { getLogger } from "@logtape/logtape"; +import { config } from "@versia-server/config"; import { SQL } from "bun"; import chalk from "chalk"; import { type BunSQLDatabase, drizzle } from "drizzle-orm/bun-sql"; import { withReplicas } from "drizzle-orm/pg-core"; import { migrate } from "drizzle-orm/postgres-js/migrator"; -import { config } from "~/config.ts"; import * as schema from "./schema.ts"; const primaryDb = new SQL({ @@ -69,7 +69,7 @@ export const setupDatabase = async (info = true): Promise => { try { await migrate(db, { - migrationsFolder: "./drizzle/migrations", + migrationsFolder: "./packages/plugin-kit/tables/migrations", }); } catch (e) { logger.fatal`Failed to migrate database. Please check your configuration.`; diff --git a/drizzle/migrations/0000_illegal_living_lightning.sql b/packages/plugin-kit/tables/migrations/0000_illegal_living_lightning.sql similarity index 100% rename from drizzle/migrations/0000_illegal_living_lightning.sql rename to packages/plugin-kit/tables/migrations/0000_illegal_living_lightning.sql diff --git a/drizzle/migrations/0001_salty_night_thrasher.sql b/packages/plugin-kit/tables/migrations/0001_salty_night_thrasher.sql similarity index 100% rename from drizzle/migrations/0001_salty_night_thrasher.sql rename to packages/plugin-kit/tables/migrations/0001_salty_night_thrasher.sql diff --git a/drizzle/migrations/0002_stiff_ares.sql b/packages/plugin-kit/tables/migrations/0002_stiff_ares.sql similarity index 100% rename from drizzle/migrations/0002_stiff_ares.sql rename to packages/plugin-kit/tables/migrations/0002_stiff_ares.sql diff --git a/drizzle/migrations/0003_spicy_arachne.sql b/packages/plugin-kit/tables/migrations/0003_spicy_arachne.sql similarity index 100% rename from drizzle/migrations/0003_spicy_arachne.sql rename to packages/plugin-kit/tables/migrations/0003_spicy_arachne.sql diff --git a/drizzle/migrations/0004_burly_lockjaw.sql b/packages/plugin-kit/tables/migrations/0004_burly_lockjaw.sql similarity index 100% rename from drizzle/migrations/0004_burly_lockjaw.sql rename to packages/plugin-kit/tables/migrations/0004_burly_lockjaw.sql diff --git a/drizzle/migrations/0005_sleepy_puma.sql b/packages/plugin-kit/tables/migrations/0005_sleepy_puma.sql similarity index 100% rename from drizzle/migrations/0005_sleepy_puma.sql rename to packages/plugin-kit/tables/migrations/0005_sleepy_puma.sql diff --git a/drizzle/migrations/0006_messy_network.sql b/packages/plugin-kit/tables/migrations/0006_messy_network.sql similarity index 100% rename from drizzle/migrations/0006_messy_network.sql rename to packages/plugin-kit/tables/migrations/0006_messy_network.sql diff --git a/drizzle/migrations/0007_naive_sleeper.sql b/packages/plugin-kit/tables/migrations/0007_naive_sleeper.sql similarity index 100% rename from drizzle/migrations/0007_naive_sleeper.sql rename to packages/plugin-kit/tables/migrations/0007_naive_sleeper.sql diff --git a/drizzle/migrations/0008_flawless_brother_voodoo.sql b/packages/plugin-kit/tables/migrations/0008_flawless_brother_voodoo.sql similarity index 100% rename from drizzle/migrations/0008_flawless_brother_voodoo.sql rename to packages/plugin-kit/tables/migrations/0008_flawless_brother_voodoo.sql diff --git a/drizzle/migrations/0009_easy_slyde.sql b/packages/plugin-kit/tables/migrations/0009_easy_slyde.sql similarity index 100% rename from drizzle/migrations/0009_easy_slyde.sql rename to packages/plugin-kit/tables/migrations/0009_easy_slyde.sql diff --git a/drizzle/migrations/0010_daffy_frightful_four.sql b/packages/plugin-kit/tables/migrations/0010_daffy_frightful_four.sql similarity index 100% rename from drizzle/migrations/0010_daffy_frightful_four.sql rename to packages/plugin-kit/tables/migrations/0010_daffy_frightful_four.sql diff --git a/drizzle/migrations/0011_special_the_fury.sql b/packages/plugin-kit/tables/migrations/0011_special_the_fury.sql similarity index 100% rename from drizzle/migrations/0011_special_the_fury.sql rename to packages/plugin-kit/tables/migrations/0011_special_the_fury.sql diff --git a/drizzle/migrations/0012_certain_thor_girl.sql b/packages/plugin-kit/tables/migrations/0012_certain_thor_girl.sql similarity index 100% rename from drizzle/migrations/0012_certain_thor_girl.sql rename to packages/plugin-kit/tables/migrations/0012_certain_thor_girl.sql diff --git a/drizzle/migrations/0013_wandering_celestials.sql b/packages/plugin-kit/tables/migrations/0013_wandering_celestials.sql similarity index 100% rename from drizzle/migrations/0013_wandering_celestials.sql rename to packages/plugin-kit/tables/migrations/0013_wandering_celestials.sql diff --git a/drizzle/migrations/0014_wonderful_sandman.sql b/packages/plugin-kit/tables/migrations/0014_wonderful_sandman.sql similarity index 100% rename from drizzle/migrations/0014_wonderful_sandman.sql rename to packages/plugin-kit/tables/migrations/0014_wonderful_sandman.sql diff --git a/drizzle/migrations/0015_easy_mojo.sql b/packages/plugin-kit/tables/migrations/0015_easy_mojo.sql similarity index 100% rename from drizzle/migrations/0015_easy_mojo.sql rename to packages/plugin-kit/tables/migrations/0015_easy_mojo.sql diff --git a/drizzle/migrations/0016_keen_mindworm.sql b/packages/plugin-kit/tables/migrations/0016_keen_mindworm.sql similarity index 100% rename from drizzle/migrations/0016_keen_mindworm.sql rename to packages/plugin-kit/tables/migrations/0016_keen_mindworm.sql diff --git a/drizzle/migrations/0017_dusty_black_knight.sql b/packages/plugin-kit/tables/migrations/0017_dusty_black_knight.sql similarity index 100% rename from drizzle/migrations/0017_dusty_black_knight.sql rename to packages/plugin-kit/tables/migrations/0017_dusty_black_knight.sql diff --git a/drizzle/migrations/0018_rapid_hairball.sql b/packages/plugin-kit/tables/migrations/0018_rapid_hairball.sql similarity index 100% rename from drizzle/migrations/0018_rapid_hairball.sql rename to packages/plugin-kit/tables/migrations/0018_rapid_hairball.sql diff --git a/drizzle/migrations/0019_mushy_lorna_dane.sql b/packages/plugin-kit/tables/migrations/0019_mushy_lorna_dane.sql similarity index 100% rename from drizzle/migrations/0019_mushy_lorna_dane.sql rename to packages/plugin-kit/tables/migrations/0019_mushy_lorna_dane.sql diff --git a/drizzle/migrations/0020_giant_the_stranger.sql b/packages/plugin-kit/tables/migrations/0020_giant_the_stranger.sql similarity index 100% rename from drizzle/migrations/0020_giant_the_stranger.sql rename to packages/plugin-kit/tables/migrations/0020_giant_the_stranger.sql diff --git a/drizzle/migrations/0021_wise_stephen_strange.sql b/packages/plugin-kit/tables/migrations/0021_wise_stephen_strange.sql similarity index 100% rename from drizzle/migrations/0021_wise_stephen_strange.sql rename to packages/plugin-kit/tables/migrations/0021_wise_stephen_strange.sql diff --git a/drizzle/migrations/0022_curly_the_call.sql b/packages/plugin-kit/tables/migrations/0022_curly_the_call.sql similarity index 100% rename from drizzle/migrations/0022_curly_the_call.sql rename to packages/plugin-kit/tables/migrations/0022_curly_the_call.sql diff --git a/drizzle/migrations/0023_lazy_wolfsbane.sql b/packages/plugin-kit/tables/migrations/0023_lazy_wolfsbane.sql similarity index 100% rename from drizzle/migrations/0023_lazy_wolfsbane.sql rename to packages/plugin-kit/tables/migrations/0023_lazy_wolfsbane.sql diff --git a/drizzle/migrations/0024_lush_aaron_stack.sql b/packages/plugin-kit/tables/migrations/0024_lush_aaron_stack.sql similarity index 100% rename from drizzle/migrations/0024_lush_aaron_stack.sql rename to packages/plugin-kit/tables/migrations/0024_lush_aaron_stack.sql diff --git a/drizzle/migrations/0025_violet_susan_delgado.sql b/packages/plugin-kit/tables/migrations/0025_violet_susan_delgado.sql similarity index 100% rename from drizzle/migrations/0025_violet_susan_delgado.sql rename to packages/plugin-kit/tables/migrations/0025_violet_susan_delgado.sql diff --git a/drizzle/migrations/0026_neat_stranger.sql b/packages/plugin-kit/tables/migrations/0026_neat_stranger.sql similarity index 100% rename from drizzle/migrations/0026_neat_stranger.sql rename to packages/plugin-kit/tables/migrations/0026_neat_stranger.sql diff --git a/drizzle/migrations/0027_peaceful_whistler.sql b/packages/plugin-kit/tables/migrations/0027_peaceful_whistler.sql similarity index 100% rename from drizzle/migrations/0027_peaceful_whistler.sql rename to packages/plugin-kit/tables/migrations/0027_peaceful_whistler.sql diff --git a/drizzle/migrations/0028_unique_fat_cobra.sql b/packages/plugin-kit/tables/migrations/0028_unique_fat_cobra.sql similarity index 100% rename from drizzle/migrations/0028_unique_fat_cobra.sql rename to packages/plugin-kit/tables/migrations/0028_unique_fat_cobra.sql diff --git a/drizzle/migrations/0029_shiny_korvac.sql b/packages/plugin-kit/tables/migrations/0029_shiny_korvac.sql similarity index 100% rename from drizzle/migrations/0029_shiny_korvac.sql rename to packages/plugin-kit/tables/migrations/0029_shiny_korvac.sql diff --git a/drizzle/migrations/0030_curvy_vulture.sql b/packages/plugin-kit/tables/migrations/0030_curvy_vulture.sql similarity index 100% rename from drizzle/migrations/0030_curvy_vulture.sql rename to packages/plugin-kit/tables/migrations/0030_curvy_vulture.sql diff --git a/drizzle/migrations/0031_mature_demogoblin.sql b/packages/plugin-kit/tables/migrations/0031_mature_demogoblin.sql similarity index 100% rename from drizzle/migrations/0031_mature_demogoblin.sql rename to packages/plugin-kit/tables/migrations/0031_mature_demogoblin.sql diff --git a/drizzle/migrations/0032_ambiguous_sue_storm.sql b/packages/plugin-kit/tables/migrations/0032_ambiguous_sue_storm.sql similarity index 100% rename from drizzle/migrations/0032_ambiguous_sue_storm.sql rename to packages/plugin-kit/tables/migrations/0032_ambiguous_sue_storm.sql diff --git a/drizzle/migrations/0033_panoramic_sister_grimm.sql b/packages/plugin-kit/tables/migrations/0033_panoramic_sister_grimm.sql similarity index 100% rename from drizzle/migrations/0033_panoramic_sister_grimm.sql rename to packages/plugin-kit/tables/migrations/0033_panoramic_sister_grimm.sql diff --git a/drizzle/migrations/0034_jittery_proemial_gods.sql b/packages/plugin-kit/tables/migrations/0034_jittery_proemial_gods.sql similarity index 100% rename from drizzle/migrations/0034_jittery_proemial_gods.sql rename to packages/plugin-kit/tables/migrations/0034_jittery_proemial_gods.sql diff --git a/drizzle/migrations/0035_pretty_whiplash.sql b/packages/plugin-kit/tables/migrations/0035_pretty_whiplash.sql similarity index 100% rename from drizzle/migrations/0035_pretty_whiplash.sql rename to packages/plugin-kit/tables/migrations/0035_pretty_whiplash.sql diff --git a/drizzle/migrations/0036_cuddly_ironclad.sql b/packages/plugin-kit/tables/migrations/0036_cuddly_ironclad.sql similarity index 100% rename from drizzle/migrations/0036_cuddly_ironclad.sql rename to packages/plugin-kit/tables/migrations/0036_cuddly_ironclad.sql diff --git a/drizzle/migrations/0037_condemned_talisman.sql b/packages/plugin-kit/tables/migrations/0037_condemned_talisman.sql similarity index 100% rename from drizzle/migrations/0037_condemned_talisman.sql rename to packages/plugin-kit/tables/migrations/0037_condemned_talisman.sql diff --git a/drizzle/migrations/0038_friendly_supernaut.sql b/packages/plugin-kit/tables/migrations/0038_friendly_supernaut.sql similarity index 100% rename from drizzle/migrations/0038_friendly_supernaut.sql rename to packages/plugin-kit/tables/migrations/0038_friendly_supernaut.sql diff --git a/drizzle/migrations/0039_special_serpent_society.sql b/packages/plugin-kit/tables/migrations/0039_special_serpent_society.sql similarity index 100% rename from drizzle/migrations/0039_special_serpent_society.sql rename to packages/plugin-kit/tables/migrations/0039_special_serpent_society.sql diff --git a/drizzle/migrations/0040_good_nocturne.sql b/packages/plugin-kit/tables/migrations/0040_good_nocturne.sql similarity index 100% rename from drizzle/migrations/0040_good_nocturne.sql rename to packages/plugin-kit/tables/migrations/0040_good_nocturne.sql diff --git a/drizzle/migrations/0041_bright_doctor_spectrum.sql b/packages/plugin-kit/tables/migrations/0041_bright_doctor_spectrum.sql similarity index 100% rename from drizzle/migrations/0041_bright_doctor_spectrum.sql rename to packages/plugin-kit/tables/migrations/0041_bright_doctor_spectrum.sql diff --git a/drizzle/migrations/0042_swift_the_phantom.sql b/packages/plugin-kit/tables/migrations/0042_swift_the_phantom.sql similarity index 100% rename from drizzle/migrations/0042_swift_the_phantom.sql rename to packages/plugin-kit/tables/migrations/0042_swift_the_phantom.sql diff --git a/drizzle/migrations/0043_mute_jigsaw.sql b/packages/plugin-kit/tables/migrations/0043_mute_jigsaw.sql similarity index 100% rename from drizzle/migrations/0043_mute_jigsaw.sql rename to packages/plugin-kit/tables/migrations/0043_mute_jigsaw.sql diff --git a/drizzle/migrations/0044_quiet_jasper_sitwell.sql b/packages/plugin-kit/tables/migrations/0044_quiet_jasper_sitwell.sql similarity index 100% rename from drizzle/migrations/0044_quiet_jasper_sitwell.sql rename to packages/plugin-kit/tables/migrations/0044_quiet_jasper_sitwell.sql diff --git a/drizzle/migrations/0045_polite_mikhail_rasputin.sql b/packages/plugin-kit/tables/migrations/0045_polite_mikhail_rasputin.sql similarity index 100% rename from drizzle/migrations/0045_polite_mikhail_rasputin.sql rename to packages/plugin-kit/tables/migrations/0045_polite_mikhail_rasputin.sql diff --git a/drizzle/migrations/0046_wooden_electro.sql b/packages/plugin-kit/tables/migrations/0046_wooden_electro.sql similarity index 100% rename from drizzle/migrations/0046_wooden_electro.sql rename to packages/plugin-kit/tables/migrations/0046_wooden_electro.sql diff --git a/drizzle/migrations/0047_black_vermin.sql b/packages/plugin-kit/tables/migrations/0047_black_vermin.sql similarity index 100% rename from drizzle/migrations/0047_black_vermin.sql rename to packages/plugin-kit/tables/migrations/0047_black_vermin.sql diff --git a/drizzle/migrations/0048_chilly_vector.sql b/packages/plugin-kit/tables/migrations/0048_chilly_vector.sql similarity index 100% rename from drizzle/migrations/0048_chilly_vector.sql rename to packages/plugin-kit/tables/migrations/0048_chilly_vector.sql diff --git a/drizzle/migrations/0049_graceful_iron_man.sql b/packages/plugin-kit/tables/migrations/0049_graceful_iron_man.sql similarity index 100% rename from drizzle/migrations/0049_graceful_iron_man.sql rename to packages/plugin-kit/tables/migrations/0049_graceful_iron_man.sql diff --git a/drizzle/migrations/0050_thick_lester.sql b/packages/plugin-kit/tables/migrations/0050_thick_lester.sql similarity index 100% rename from drizzle/migrations/0050_thick_lester.sql rename to packages/plugin-kit/tables/migrations/0050_thick_lester.sql diff --git a/drizzle/migrations/meta/0000_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0000_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0000_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0000_snapshot.json diff --git a/drizzle/migrations/meta/0001_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0001_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0001_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0001_snapshot.json diff --git a/drizzle/migrations/meta/0002_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0002_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0002_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0002_snapshot.json diff --git a/drizzle/migrations/meta/0003_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0003_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0003_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0003_snapshot.json diff --git a/drizzle/migrations/meta/0004_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0004_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0004_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0004_snapshot.json diff --git a/drizzle/migrations/meta/0005_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0005_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0005_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0005_snapshot.json diff --git a/drizzle/migrations/meta/0006_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0006_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0006_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0006_snapshot.json diff --git a/drizzle/migrations/meta/0007_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0007_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0007_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0007_snapshot.json diff --git a/drizzle/migrations/meta/0008_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0008_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0008_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0008_snapshot.json diff --git a/drizzle/migrations/meta/0009_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0009_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0009_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0009_snapshot.json diff --git a/drizzle/migrations/meta/0010_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0010_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0010_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0010_snapshot.json diff --git a/drizzle/migrations/meta/0011_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0011_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0011_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0011_snapshot.json diff --git a/drizzle/migrations/meta/0012_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0012_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0012_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0012_snapshot.json diff --git a/drizzle/migrations/meta/0013_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0013_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0013_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0013_snapshot.json diff --git a/drizzle/migrations/meta/0014_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0014_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0014_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0014_snapshot.json diff --git a/drizzle/migrations/meta/0015_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0015_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0015_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0015_snapshot.json diff --git a/drizzle/migrations/meta/0016_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0016_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0016_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0016_snapshot.json diff --git a/drizzle/migrations/meta/0017_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0017_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0017_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0017_snapshot.json diff --git a/drizzle/migrations/meta/0018_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0018_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0018_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0018_snapshot.json diff --git a/drizzle/migrations/meta/0019_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0019_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0019_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0019_snapshot.json diff --git a/drizzle/migrations/meta/0020_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0020_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0020_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0020_snapshot.json diff --git a/drizzle/migrations/meta/0021_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0021_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0021_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0021_snapshot.json diff --git a/drizzle/migrations/meta/0022_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0022_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0022_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0022_snapshot.json diff --git a/drizzle/migrations/meta/0023_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0023_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0023_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0023_snapshot.json diff --git a/drizzle/migrations/meta/0024_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0024_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0024_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0024_snapshot.json diff --git a/drizzle/migrations/meta/0025_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0025_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0025_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0025_snapshot.json diff --git a/drizzle/migrations/meta/0026_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0026_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0026_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0026_snapshot.json diff --git a/drizzle/migrations/meta/0027_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0027_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0027_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0027_snapshot.json diff --git a/drizzle/migrations/meta/0028_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0028_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0028_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0028_snapshot.json diff --git a/drizzle/migrations/meta/0029_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0029_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0029_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0029_snapshot.json diff --git a/drizzle/migrations/meta/0030_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0030_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0030_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0030_snapshot.json diff --git a/drizzle/migrations/meta/0031_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0031_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0031_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0031_snapshot.json diff --git a/drizzle/migrations/meta/0032_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0032_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0032_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0032_snapshot.json diff --git a/drizzle/migrations/meta/0033_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0033_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0033_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0033_snapshot.json diff --git a/drizzle/migrations/meta/0034_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0034_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0034_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0034_snapshot.json diff --git a/drizzle/migrations/meta/0035_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0035_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0035_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0035_snapshot.json diff --git a/drizzle/migrations/meta/0036_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0036_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0036_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0036_snapshot.json diff --git a/drizzle/migrations/meta/0037_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0037_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0037_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0037_snapshot.json diff --git a/drizzle/migrations/meta/0038_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0038_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0038_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0038_snapshot.json diff --git a/drizzle/migrations/meta/0039_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0039_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0039_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0039_snapshot.json diff --git a/drizzle/migrations/meta/0040_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0040_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0040_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0040_snapshot.json diff --git a/drizzle/migrations/meta/0041_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0041_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0041_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0041_snapshot.json diff --git a/drizzle/migrations/meta/0042_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0042_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0042_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0042_snapshot.json diff --git a/drizzle/migrations/meta/0043_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0043_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0043_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0043_snapshot.json diff --git a/drizzle/migrations/meta/0044_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0044_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0044_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0044_snapshot.json diff --git a/drizzle/migrations/meta/0045_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0045_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0045_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0045_snapshot.json diff --git a/drizzle/migrations/meta/0046_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0046_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0046_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0046_snapshot.json diff --git a/drizzle/migrations/meta/0047_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0047_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0047_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0047_snapshot.json diff --git a/drizzle/migrations/meta/0048_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0048_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0048_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0048_snapshot.json diff --git a/drizzle/migrations/meta/0049_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0049_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0049_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0049_snapshot.json diff --git a/drizzle/migrations/meta/0050_snapshot.json b/packages/plugin-kit/tables/migrations/meta/0050_snapshot.json similarity index 100% rename from drizzle/migrations/meta/0050_snapshot.json rename to packages/plugin-kit/tables/migrations/meta/0050_snapshot.json diff --git a/drizzle/migrations/meta/_journal.json b/packages/plugin-kit/tables/migrations/meta/_journal.json similarity index 100% rename from drizzle/migrations/meta/_journal.json rename to packages/plugin-kit/tables/migrations/meta/_journal.json diff --git a/drizzle/schema.ts b/packages/plugin-kit/tables/schema.ts similarity index 99% rename from drizzle/schema.ts rename to packages/plugin-kit/tables/schema.ts index b174f359..de246312 100644 --- a/drizzle/schema.ts +++ b/packages/plugin-kit/tables/schema.ts @@ -4,6 +4,13 @@ import type { Source, Status as StatusSchema, } from "@versia/client/schemas"; +import type { + ContentFormatSchema, + ImageContentFormatSchema, + InstanceMetadataSchema, + NonTextContentFormatSchema, + TextContentFormatSchema, +} from "@versia/sdk/schemas"; import type { Challenge } from "altcha-lib/types"; import { relations, sql } from "drizzle-orm"; import { @@ -19,13 +26,6 @@ import { uuid, } from "drizzle-orm/pg-core"; import type { z } from "zod"; -import type { - ContentFormatSchema, - ImageContentFormatSchema, - InstanceMetadataSchema, - NonTextContentFormatSchema, - TextContentFormatSchema, -} from "~/packages/sdk/schemas"; const createdAt = () => timestamp("created_at", { precision: 3, mode: "string" }) diff --git a/packages/sdk/inbox-processor.ts b/packages/sdk/inbox-processor.ts index 6c6e000a..40bc24b9 100644 --- a/packages/sdk/inbox-processor.ts +++ b/packages/sdk/inbox-processor.ts @@ -52,3 +52,5 @@ export class EntitySorter { } } } + +export type { JSONObject } from "./types.ts"; diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 2ef017cb..172416d7 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -71,10 +71,9 @@ "typescript", "sdk" ], - "packageManager": "bun@1.2.5", "dependencies": { - "magic-regexp": "^0.10.0", - "mime-types": "^3.0.1", - "zod": "^3.24.2" + "magic-regexp": "catalog:", + "mime-types": "catalog:", + "zod": "catalog:" } } diff --git a/build-worker.ts b/packages/worker/build.ts similarity index 62% rename from build-worker.ts rename to packages/worker/build.ts index 748349a2..4f436ab8 100644 --- a/build-worker.ts +++ b/packages/worker/build.ts @@ -6,9 +6,10 @@ await $`rm -rf dist && mkdir dist`; await build({ entrypoints: [ - "worker.ts", + "packages/worker/index.ts", // HACK: Include to avoid cyclical import errors - "config.ts", + "packages/config/index.ts", + "cli/index.ts", ], outdir: "dist", target: "bun", @@ -18,8 +19,12 @@ await build({ console.log("Copying files..."); -// Copy Drizzle migrations to dist -await $`cp -rL drizzle dist/drizzle`; +// Fix Bun build mistake +await $`sed -i 's/ProxiableUrl, exportedConfig/exportedConfig/g' dist/packages/config/*.js`; + +// Copy Drizzle stuff +await $`mkdir -p dist/packages/plugin-kit/tables`; +await $`cp -rL packages/plugin-kit/tables/migrations dist/packages/plugin-kit/tables`; // Copy Sharp to dist await $`mkdir -p dist/node_modules/@img`; diff --git a/packages/worker/index.ts b/packages/worker/index.ts new file mode 100644 index 00000000..ef958fc5 --- /dev/null +++ b/packages/worker/index.ts @@ -0,0 +1,22 @@ +import process from "node:process"; +import { getLogger } from "@logtape/logtape"; +import chalk from "chalk"; +import { sentry } from "@/sentry"; +import { workers } from "./workers.ts"; + +process.on("SIGINT", () => { + process.exit(); +}); + +await import("./setup.ts"); +sentry?.captureMessage("Server started", "info"); + +const serverLogger = getLogger("server"); + +for (const [worker, fn] of Object.entries(workers)) { + serverLogger.info`Starting ${worker} Worker...`; + fn(); + serverLogger.info`${chalk.green("✔")} ${worker} Worker started`; +} + +serverLogger.info`${chalk.green("✔✔✔✔✔✔")} All workers started`; diff --git a/packages/worker/package.json b/packages/worker/package.json new file mode 100644 index 00000000..9fb7f96e --- /dev/null +++ b/packages/worker/package.json @@ -0,0 +1,46 @@ +{ + "name": "@versia-server/worker", + "module": "index.ts", + "type": "module", + "version": "0.9.0-alpha.0", + "description": "Powerful, configurable and modular federated server using the Versia Protocol.", + "homepage": "https://versia.pub", + "author": { + "email": "contact@cpluspatch.com", + "name": "Jesse Wierzbinski", + "url": "https://cpluspatch.com" + }, + "bugs": { + "url": "https://github.com/versia-pub/server/issues" + }, + "icon": "https://cdn.versia.pub/branding/icon.svg", + "license": "AGPL-3.0-or-later", + "keywords": [ + "federated", + "activitypub", + "bun" + ], + "maintainers": [ + { + "email": "contact@cpluspatch.com", + "name": "Jesse Wierzbinski", + "url": "https://cpluspatch.com" + } + ], + "repository": { + "type": "git", + "url": "git+https://github.com/versia-pub/server.git", + "directory": "packages/worker" + }, + "private": true, + "scripts": { + "dev": "bun run --hot index.ts", + "build": "bun run build-worker.ts" + }, + "dependencies": { + "@versia-server/config": "workspace:*", + "@versia/kit": "workspace:*", + "chalk": "catalog:", + "@logtape/logtape": "catalog:" + } +} diff --git a/entrypoints/worker/setup.ts b/packages/worker/setup.ts similarity index 93% rename from entrypoints/worker/setup.ts rename to packages/worker/setup.ts index f51c2e70..ea668dce 100644 --- a/entrypoints/worker/setup.ts +++ b/packages/worker/setup.ts @@ -1,10 +1,9 @@ import { getLogger } from "@logtape/logtape"; -import { Note } from "@versia/kit/db"; +import { Note, setupDatabase } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import chalk from "chalk"; import { configureLoggers } from "@/loggers"; import { connection } from "@/redis.ts"; -import { config } from "~/config.ts"; -import { setupDatabase } from "~/drizzle/db"; import { searchManager } from "../../classes/search/search-manager.ts"; const timeAtStart = performance.now(); diff --git a/packages/worker/workers.ts b/packages/worker/workers.ts new file mode 100644 index 00000000..6dbb140c --- /dev/null +++ b/packages/worker/workers.ts @@ -0,0 +1,15 @@ +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"; + +export const workers = { + fetch: getFetchWorker, + delivery: getDeliveryWorker, + inbox: getInboxWorker, + push: getPushWorker, + media: getMediaWorker, + relationship: getRelationshipWorker, +} as const; diff --git a/plugins/openid/index.ts b/plugins/openid/index.ts index 5bfaf555..1d92549a 100644 --- a/plugins/openid/index.ts +++ b/plugins/openid/index.ts @@ -1,12 +1,11 @@ import { RolePermission } from "@versia/client/schemas"; -import { Hooks, Plugin } from "@versia/kit"; +import { ApiError, Hooks, Plugin } from "@versia/kit"; import { User } from "@versia/kit/db"; +import { keyPair, sensitiveString, url } from "@versia-server/config/schema"; import { getCookie } from "hono/cookie"; import { jwtVerify } from "jose"; import { JOSEError, JWTExpired } from "jose/errors"; import { z } from "zod"; -import { keyPair, sensitiveString, url } from "~/classes/config/schema.ts"; -import { ApiError } from "~/classes/errors/api-error.ts"; import authorizeRoute from "./routes/authorize.ts"; import jwksRoute from "./routes/jwks.ts"; import ssoLoginCallbackRoute from "./routes/oauth/callback.ts"; diff --git a/plugins/openid/routes/authorize.test.ts b/plugins/openid/routes/authorize.test.ts index 22a62ccd..7d045945 100644 --- a/plugins/openid/routes/authorize.test.ts +++ b/plugins/openid/routes/authorize.test.ts @@ -1,10 +1,10 @@ import { afterAll, describe, expect, test } from "bun:test"; import { RolePermission } from "@versia/client/schemas"; import { Application } from "@versia/kit/db"; +import { config } from "@versia-server/config"; import { randomUUIDv7 } from "bun"; import { SignJWT } from "jose"; import { randomString } from "@/math"; -import { config } from "~/config.ts"; import { fakeRequest, getTestUsers } from "~/tests/utils"; const { deleteUsers, tokens, users } = await getTestUsers(1); diff --git a/plugins/openid/routes/oauth/callback.ts b/plugins/openid/routes/oauth/callback.ts index a73bd9d8..5683a60e 100644 --- a/plugins/openid/routes/oauth/callback.ts +++ b/plugins/openid/routes/oauth/callback.ts @@ -2,10 +2,11 @@ import { Account as AccountSchema, RolePermission, } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { db, Media, Token, User } from "@versia/kit/db"; -import { and, eq, isNull, type SQL } from "@versia/kit/drizzle"; import { OpenIdAccounts, Users } from "@versia/kit/tables"; import { randomUUIDv7 } from "bun"; +import { and, eq, isNull, type SQL } from "drizzle-orm"; import { setCookie } from "hono/cookie"; import { describeRoute } from "hono-openapi"; import { validator } from "hono-openapi/zod"; @@ -13,7 +14,6 @@ import { SignJWT } from "jose"; import { z } from "zod"; import { handleZodError } from "@/api"; import { randomString } from "@/math.ts"; -import { ApiError } from "~/classes/errors/api-error.ts"; import type { PluginType } from "../../index.ts"; import { automaticOidcFlow } from "../../utils.ts"; diff --git a/plugins/openid/routes/oauth/revoke.ts b/plugins/openid/routes/oauth/revoke.ts index d9480e7c..da0a4ab9 100644 --- a/plugins/openid/routes/oauth/revoke.ts +++ b/plugins/openid/routes/oauth/revoke.ts @@ -1,6 +1,6 @@ import { db, Token } from "@versia/kit/db"; -import { and, eq } from "@versia/kit/drizzle"; import { Tokens } from "@versia/kit/tables"; +import { and, eq } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; diff --git a/plugins/openid/routes/oauth/token.ts b/plugins/openid/routes/oauth/token.ts index 636832ee..a2585fcd 100644 --- a/plugins/openid/routes/oauth/token.ts +++ b/plugins/openid/routes/oauth/token.ts @@ -1,6 +1,6 @@ import { Application, Token } from "@versia/kit/db"; -import { and, eq } from "@versia/kit/drizzle"; import { Tokens } from "@versia/kit/tables"; +import { and, eq } from "drizzle-orm"; import { describeRoute } from "hono-openapi"; import { resolver, validator } from "hono-openapi/zod"; import { z } from "zod"; diff --git a/plugins/openid/routes/sso/:id/index.ts b/plugins/openid/routes/sso/:id/index.ts index 85c152fe..d08fc0b8 100644 --- a/plugins/openid/routes/sso/:id/index.ts +++ b/plugins/openid/routes/sso/:id/index.ts @@ -1,12 +1,12 @@ import { RolePermission } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { db } from "@versia/kit/db"; -import { and, eq, type SQL } from "@versia/kit/drizzle"; import { OpenIdAccounts } from "@versia/kit/tables"; +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 { auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error"; import type { PluginType } from "~/plugins/openid"; export default (plugin: PluginType): void => { diff --git a/plugins/openid/routes/sso/index.ts b/plugins/openid/routes/sso/index.ts index 00d3942c..0f09dbff 100644 --- a/plugins/openid/routes/sso/index.ts +++ b/plugins/openid/routes/sso/index.ts @@ -1,4 +1,5 @@ import { RolePermission } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Application, db } from "@versia/kit/db"; import { OpenIdLoginFlows } from "@versia/kit/tables"; import { randomUUIDv7 } from "bun"; @@ -10,7 +11,6 @@ import { } from "oauth4webapi"; import { z } from "zod"; import { auth, handleZodError } from "@/api"; -import { ApiError } from "~/classes/errors/api-error.ts"; import type { PluginType } from "../../index.ts"; import { oauthDiscoveryRequest, oauthRedirectUri } from "../../utils.ts"; diff --git a/plugins/openid/utils.ts b/plugins/openid/utils.ts index b924088d..82d8b7ac 100644 --- a/plugins/openid/utils.ts +++ b/plugins/openid/utils.ts @@ -1,6 +1,6 @@ import { type Application, db } from "@versia/kit/db"; -import { eq, type InferSelectModel, type SQL } from "@versia/kit/drizzle"; import type { OpenIdLoginFlows } from "@versia/kit/tables"; +import { eq, type InferSelectModel, type SQL } from "drizzle-orm"; import { type AuthorizationResponseError, type AuthorizationServer, diff --git a/tests/setup.ts b/tests/setup.ts index 8c374279..517a7f9d 100644 --- a/tests/setup.ts +++ b/tests/setup.ts @@ -1,8 +1,8 @@ -import { setupDatabase } from "~/drizzle/db"; +import { setupDatabase } from "@versia/kit/db"; import { deleteOldTestUsers } from "./utils.ts"; await setupDatabase(); await deleteOldTestUsers(); // Start workers -await import("~/worker.ts"); +await import("~/packages/worker/index.ts"); diff --git a/tests/utils.ts b/tests/utils.ts index 410906c3..432c5798 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -1,16 +1,15 @@ import { mock } from "bun:test"; import { Client as VersiaClient } from "@versia/client"; -import { db, Note, Token, User } from "@versia/kit/db"; +import { db, Note, setupDatabase, Token, User } from "@versia/kit/db"; import { Notes, Users } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { solveChallenge } from "altcha-lib"; import { env, randomUUIDv7 } from "bun"; import { asc, type InferSelectModel, inArray, like } from "drizzle-orm"; import { generateChallenge } from "@/challenges"; import { randomString } from "@/math"; -import { appFactory } from "~/app"; import { searchManager } from "~/classes/search/search-manager"; -import { config } from "~/config.ts"; -import { setupDatabase } from "~/drizzle/db"; +import { appFactory } from "~/packages/api/app"; env.DISABLE_RATE_LIMIT = "true"; await setupDatabase(); diff --git a/types/api.ts b/types/api.ts index 3e976c69..494d582e 100644 --- a/types/api.ts +++ b/types/api.ts @@ -1,10 +1,10 @@ +import type * as VersiaEntities from "@versia/sdk/entities"; +import type { ConfigSchema } from "@versia-server/config/schema"; import type { SocketAddress } from "bun"; import type { Hono } from "hono"; import type { RouterRoute } from "hono/types"; import type { z } from "zod"; -import type { ConfigSchema } from "~/classes/config/schema"; import type { AuthData } from "~/classes/functions/user"; -import type * as VersiaEntities from "~/packages/sdk/entities"; export type HttpVerb = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS"; diff --git a/utils/api.ts b/utils/api.ts index 7842b16a..a325469b 100644 --- a/utils/api.ts +++ b/utils/api.ts @@ -1,8 +1,10 @@ import type { Hook } from "@hono/zod-validator"; import { getLogger } from "@logtape/logtape"; import type { RolePermission } from "@versia/client/schemas"; +import { ApiError } from "@versia/kit"; import { Application, db, Emoji, Note, Token, User } from "@versia/kit/db"; import { Challenges } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { extractParams, verifySolution } from "altcha-lib"; import { SHA256 } from "bun"; import chalk from "chalk"; @@ -26,9 +28,7 @@ import { import { type ParsedQs, parse } from "qs"; import { type ZodAny, type ZodError, z } from "zod"; import { fromZodError } from "zod-validation-error"; -import { ApiError } from "~/classes/errors/api-error"; import type { AuthData } from "~/classes/functions/user"; -import { config } from "~/config.ts"; import type { HonoEnv } from "~/types/api"; export const apiRoute = (fn: (app: Hono) => void): typeof fn => fn; diff --git a/utils/bull-board.ts b/utils/bull-board.ts index 5eff479a..e69b60ab 100644 --- a/utils/bull-board.ts +++ b/utils/bull-board.ts @@ -1,6 +1,7 @@ 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 type { Hono } from "hono"; import { serveStatic } from "hono/bun"; import { deliveryQueue } from "~/classes/queues/delivery"; @@ -9,7 +10,6 @@ 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 { config } from "~/config.ts"; import pkg from "~/package.json" with { type: "json" }; import type { HonoEnv } from "~/types/api"; @@ -43,6 +43,5 @@ export const applyToHono = (app: Hono): void => { }); serverAdapter.setBasePath("/admin/queues"); - // @ts-expect-error idk why it's like this app.route("/admin/queues", serverAdapter.registerPlugin()); }; diff --git a/utils/challenges.ts b/utils/challenges.ts index 919cd033..f9f39d83 100644 --- a/utils/challenges.ts +++ b/utils/challenges.ts @@ -1,9 +1,9 @@ import { db } from "@versia/kit/db"; import { Challenges } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { createChallenge } from "altcha-lib"; import type { Challenge } from "altcha-lib/types"; import { randomUUIDv7 } from "bun"; -import { config } from "~/config.ts"; export const generateChallenge = async ( maxNumber?: number, diff --git a/utils/content_types.ts b/utils/content_types.ts index f1f0daa1..7d78e1c9 100644 --- a/utils/content_types.ts +++ b/utils/content_types.ts @@ -1,8 +1,8 @@ +import type { ContentFormatSchema } from "@versia/sdk/schemas"; +import { config } from "@versia-server/config"; import { htmlToText as htmlToTextLib } from "html-to-text"; import { lookup } from "mime-types"; import type { z } from "zod"; -import { config } from "~/config.ts"; -import type { ContentFormatSchema } from "~/packages/sdk/schemas"; export const getBestContentType = ( content?: z.infer | null, diff --git a/utils/loggers.ts b/utils/loggers.ts index d2ec074f..f4f66679 100644 --- a/utils/loggers.ts +++ b/utils/loggers.ts @@ -8,8 +8,8 @@ import { type LogLevel, type LogRecord, } from "@logtape/logtape"; +import { config } from "@versia-server/config"; import chalk from "chalk"; -import { config } from "~/config.ts"; // config.logging.log_file_path is a path to a file, create the directory if it doesn't exist await mkdir(dirname(config.logging.log_file_path), { recursive: true }); diff --git a/utils/redis.ts b/utils/redis.ts index 09ab1bac..fdda66d5 100644 --- a/utils/redis.ts +++ b/utils/redis.ts @@ -1,5 +1,5 @@ +import { config } from "@versia-server/config"; import IORedis from "ioredis"; -import { config } from "~/config.ts"; export const connection = new IORedis({ host: config.redis.queue.host, diff --git a/utils/rss.ts b/utils/rss.ts index 3a07ba78..f794b77d 100644 --- a/utils/rss.ts +++ b/utils/rss.ts @@ -1,10 +1,8 @@ +import { Media, Note, type User } from "@versia/kit/db"; +import { Notes } from "@versia/kit/tables"; +import { config } from "@versia-server/config"; import { and, eq, inArray } from "drizzle-orm"; import { Feed } from "feed"; -import { Media } from "~/classes/database/media"; -import { Note } from "~/classes/database/note"; -import type { User } from "~/classes/database/user"; -import { config } from "~/config"; -import { Notes } from "~/drizzle/schema"; export const getFeed = async (user: User, page = 0): Promise => { const notes = await Note.manyFromSql( diff --git a/utils/sanitization.ts b/utils/sanitization.ts index 857ef17f..1ad1a755 100644 --- a/utils/sanitization.ts +++ b/utils/sanitization.ts @@ -1,6 +1,6 @@ +import { ProxiableUrl } from "@versia-server/config"; import { stringifyEntitiesLight } from "stringify-entities"; import xss, { type IFilterXSSOptions } from "xss"; -import { ProxiableUrl } from "~/classes/media/url.ts"; export const sanitizedHtmlStrip = (html: string): Promise => { return sanitizeHtml(html, { diff --git a/utils/sentry.ts b/utils/sentry.ts index 460bc5a5..df9716a7 100644 --- a/utils/sentry.ts +++ b/utils/sentry.ts @@ -1,6 +1,6 @@ import * as Sentry from "@sentry/bun"; +import { config } from "@versia-server/config"; import { env } from "bun"; -import { config } from "~/config.ts"; import pkg from "~/package.json" with { type: "json" }; const sentryInstance = diff --git a/utils/server.ts b/utils/server.ts index 0c1b0fac..d5979633 100644 --- a/utils/server.ts +++ b/utils/server.ts @@ -1,7 +1,7 @@ +import type { ConfigSchema } from "@versia-server/config/schema"; import { type Server, serve } from "bun"; import type { Hono } from "hono"; import type { z } from "zod"; -import type { ConfigSchema } from "~/classes/config/schema.ts"; import type { HonoEnv } from "~/types/api"; import { debugResponse } from "./api.ts"; diff --git a/worker.ts b/worker.ts deleted file mode 100644 index f41845e0..00000000 --- a/worker.ts +++ /dev/null @@ -1 +0,0 @@ -await import("~/entrypoints/worker/index.ts");