mirror of
https://github.com/versia-pub/server.git
synced 2025-12-06 08:28:19 +01:00
Compare commits
4 commits
a211772309
...
1f03017327
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f03017327 | ||
|
|
3798e170d0 | ||
|
|
5cae547f8d | ||
|
|
fde70fa61a |
2
.github/copilot-instructions.md
vendored
2
.github/copilot-instructions.md
vendored
|
|
@ -13,4 +13,4 @@ const add = (a: number, b: number): number => a + b;
|
||||||
|
|
||||||
We always write TypeScript with double quotes and four spaces for indentation, so when your responses include TypeScript code, please follow those conventions.
|
We always write TypeScript with double quotes and four spaces for indentation, so when your responses include TypeScript code, please follow those conventions.
|
||||||
|
|
||||||
Our codebase uses Drizzle as an ORM, with custom abstractions in `classes/database/` for interacting with the database. The `@versia/kit/db` and `@versia/kit/tables` packages are aliases for these abstractions.
|
Our codebase uses Drizzle as an ORM, with custom abstractions in `classes/database/` for interacting with the database. The `@versia-server/kit/db` and `@versia-server/kit/tables` packages are aliases for these abstractions.
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,12 @@
|
||||||
import type { Status } from "@versia/client/schemas";
|
import type { Status } from "@versia/client/schemas";
|
||||||
|
import {
|
||||||
|
fakeRequest,
|
||||||
|
getTestStatuses,
|
||||||
|
getTestUsers,
|
||||||
|
} from "@versia-server/tests";
|
||||||
import { bench, run } from "mitata";
|
import { bench, run } from "mitata";
|
||||||
import type { z } from "zod";
|
import type { z } from "zod";
|
||||||
import { configureLoggers } from "@/loggers";
|
import { configureLoggers } from "@/loggers";
|
||||||
import { fakeRequest, getTestStatuses, getTestUsers } from "~/tests/utils";
|
|
||||||
|
|
||||||
await configureLoggers(true);
|
await configureLoggers(true);
|
||||||
|
|
||||||
|
|
|
||||||
60
bun.lock
60
bun.lock
|
|
@ -19,8 +19,9 @@
|
||||||
"@scalar/hono-api-reference": "catalog:",
|
"@scalar/hono-api-reference": "catalog:",
|
||||||
"@sentry/bun": "catalog:",
|
"@sentry/bun": "catalog:",
|
||||||
"@versia-server/config": "workspace:*",
|
"@versia-server/config": "workspace:*",
|
||||||
|
"@versia-server/kit": "workspace:*",
|
||||||
|
"@versia-server/tests": "workspace:*",
|
||||||
"@versia/client": "workspace:*",
|
"@versia/client": "workspace:*",
|
||||||
"@versia/kit": "workspace:*",
|
|
||||||
"@versia/sdk": "workspace:*",
|
"@versia/sdk": "workspace:*",
|
||||||
"altcha-lib": "catalog:",
|
"altcha-lib": "catalog:",
|
||||||
"blurhash": "catalog:",
|
"blurhash": "catalog:",
|
||||||
|
|
@ -66,6 +67,7 @@
|
||||||
"zod-validation-error": "catalog:",
|
"zod-validation-error": "catalog:",
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@biomejs/biome": "catalog:",
|
||||||
"@types/bun": "catalog:",
|
"@types/bun": "catalog:",
|
||||||
"@types/html-to-text": "catalog:",
|
"@types/html-to-text": "catalog:",
|
||||||
"@types/markdown-it-container": "catalog:",
|
"@types/markdown-it-container": "catalog:",
|
||||||
|
|
@ -88,12 +90,15 @@
|
||||||
"name": "@versia-server/api",
|
"name": "@versia-server/api",
|
||||||
"version": "0.9.0-alpha.0",
|
"version": "0.9.0-alpha.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@hono/zod-validator": "catalog:",
|
||||||
"@logtape/logtape": "catalog:",
|
"@logtape/logtape": "catalog:",
|
||||||
"@scalar/hono-api-reference": "catalog:",
|
"@scalar/hono-api-reference": "catalog:",
|
||||||
"@versia-server/config": "workspace:*",
|
"@versia-server/config": "workspace:*",
|
||||||
|
"@versia-server/kit": "workspace:*",
|
||||||
|
"@versia-server/tests": "workspace:*",
|
||||||
"@versia/client": "workspace:*",
|
"@versia/client": "workspace:*",
|
||||||
"@versia/kit": "workspace:*",
|
|
||||||
"@versia/sdk": "workspace:*",
|
"@versia/sdk": "workspace:*",
|
||||||
|
"altcha-lib": "catalog:",
|
||||||
"bun-bagel": "catalog:",
|
"bun-bagel": "catalog:",
|
||||||
"chalk": "catalog:",
|
"chalk": "catalog:",
|
||||||
"drizzle-orm": "catalog:",
|
"drizzle-orm": "catalog:",
|
||||||
|
|
@ -103,12 +108,15 @@
|
||||||
"ip-matching": "catalog:",
|
"ip-matching": "catalog:",
|
||||||
"iso-639-1": "catalog:",
|
"iso-639-1": "catalog:",
|
||||||
"jose": "catalog:",
|
"jose": "catalog:",
|
||||||
|
"magic-regexp": "catalog:",
|
||||||
|
"qs": "catalog:",
|
||||||
"sharp": "catalog:",
|
"sharp": "catalog:",
|
||||||
"string-comparison": "catalog:",
|
"string-comparison": "catalog:",
|
||||||
"unicode-emoji-json": "catalog:",
|
"unicode-emoji-json": "catalog:",
|
||||||
"youch": "catalog:",
|
"youch": "catalog:",
|
||||||
"zod": "catalog:",
|
"zod": "catalog:",
|
||||||
"zod-openapi": "catalog:",
|
"zod-openapi": "catalog:",
|
||||||
|
"zod-validation-error": "catalog:",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"packages/client": {
|
"packages/client": {
|
||||||
|
|
@ -138,9 +146,11 @@
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"packages/plugin-kit": {
|
"packages/plugin-kit": {
|
||||||
"name": "@versia/kit",
|
"name": "@versia-server/kit",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@hackmd/markdown-it-task-lists": "catalog:",
|
||||||
|
"@hono/zod-validator": "catalog:",
|
||||||
"@logtape/logtape": "catalog:",
|
"@logtape/logtape": "catalog:",
|
||||||
"@versia-server/config": "workspace:*",
|
"@versia-server/config": "workspace:*",
|
||||||
"@versia/client": "workspace:*",
|
"@versia/client": "workspace:*",
|
||||||
|
|
@ -151,8 +161,14 @@
|
||||||
"hono": "catalog:",
|
"hono": "catalog:",
|
||||||
"hono-openapi": "catalog:",
|
"hono-openapi": "catalog:",
|
||||||
"html-to-text": "catalog:",
|
"html-to-text": "catalog:",
|
||||||
|
"ioredis": "catalog:",
|
||||||
|
"linkify-html": "catalog:",
|
||||||
"magic-regexp": "catalog:",
|
"magic-regexp": "catalog:",
|
||||||
|
"markdown-it": "catalog:",
|
||||||
|
"markdown-it-container": "catalog:",
|
||||||
|
"markdown-it-toc-done-right": "catalog:",
|
||||||
"mitt": "catalog:",
|
"mitt": "catalog:",
|
||||||
|
"qs": "catalog:",
|
||||||
"sharp": "catalog:",
|
"sharp": "catalog:",
|
||||||
"zod": "catalog:",
|
"zod": "catalog:",
|
||||||
"zod-to-json-schema": "catalog:",
|
"zod-to-json-schema": "catalog:",
|
||||||
|
|
@ -168,13 +184,24 @@
|
||||||
"zod": "catalog:",
|
"zod": "catalog:",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"packages/tests": {
|
||||||
|
"name": "@versia-server/tests",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"dependencies": {
|
||||||
|
"@versia-server/config": "workspace:*",
|
||||||
|
"@versia-server/kit": "workspace:*",
|
||||||
|
"@versia/client": "workspace:*",
|
||||||
|
"altcha-lib": "catalog:",
|
||||||
|
"drizzle-orm": "catalog:",
|
||||||
|
},
|
||||||
|
},
|
||||||
"packages/worker": {
|
"packages/worker": {
|
||||||
"name": "@versia-server/worker",
|
"name": "@versia-server/worker",
|
||||||
"version": "0.9.0-alpha.0",
|
"version": "0.9.0-alpha.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@logtape/logtape": "catalog:",
|
"@logtape/logtape": "catalog:",
|
||||||
"@versia-server/config": "workspace:*",
|
"@versia-server/config": "workspace:*",
|
||||||
"@versia/kit": "workspace:*",
|
"@versia-server/kit": "workspace:*",
|
||||||
"chalk": "catalog:",
|
"chalk": "catalog:",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -182,6 +209,7 @@
|
||||||
"trustedDependencies": [
|
"trustedDependencies": [
|
||||||
"sharp",
|
"sharp",
|
||||||
"esbuild",
|
"esbuild",
|
||||||
|
"@biomejs/biome",
|
||||||
"msgpackr-extract",
|
"msgpackr-extract",
|
||||||
],
|
],
|
||||||
"catalog": {
|
"catalog": {
|
||||||
|
|
@ -311,6 +339,24 @@
|
||||||
|
|
||||||
"@badgateway/oauth2-client": ["@badgateway/oauth2-client@3.2.0", "", {}, "sha512-EHsoV6oLHot7HeYkIoSxCZApNgBjwNo1OTV9kXIDnmijGAshlVkJreVAAtexFn+sfDKPE0JW5SCPYJV1y4IoMg=="],
|
"@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/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=="],
|
"@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=="],
|
||||||
|
|
@ -693,12 +739,14 @@
|
||||||
|
|
||||||
"@versia-server/config": ["@versia-server/config@workspace:packages/config"],
|
"@versia-server/config": ["@versia-server/config@workspace:packages/config"],
|
||||||
|
|
||||||
|
"@versia-server/kit": ["@versia-server/kit@workspace:packages/plugin-kit"],
|
||||||
|
|
||||||
|
"@versia-server/tests": ["@versia-server/tests@workspace:packages/tests"],
|
||||||
|
|
||||||
"@versia-server/worker": ["@versia-server/worker@workspace:packages/worker"],
|
"@versia-server/worker": ["@versia-server/worker@workspace:packages/worker"],
|
||||||
|
|
||||||
"@versia/client": ["@versia/client@workspace:packages/client"],
|
"@versia/client": ["@versia/client@workspace:packages/client"],
|
||||||
|
|
||||||
"@versia/kit": ["@versia/kit@workspace:packages/plugin-kit"],
|
|
||||||
|
|
||||||
"@versia/sdk": ["@versia/sdk@workspace:packages/sdk"],
|
"@versia/sdk": ["@versia/sdk@workspace:packages/sdk"],
|
||||||
|
|
||||||
"@vitejs/plugin-vue": ["@vitejs/plugin-vue@5.2.3", "", { "peerDependencies": { "vite": "^5.0.0 || ^6.0.0", "vue": "^3.2.25" } }, "sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg=="],
|
"@vitejs/plugin-vue": ["@vitejs/plugin-vue@5.2.3", "", { "peerDependencies": { "vite": "^5.0.0 || ^6.0.0", "vue": "^3.2.25" } }, "sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg=="],
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,4 @@
|
||||||
"@jsr" = "https://npm.jsr.io"
|
"@jsr" = "https://npm.jsr.io"
|
||||||
|
|
||||||
[test]
|
[test]
|
||||||
preload = ["./tests/setup.ts"]
|
preload = ["./packages/tests/setup.ts"]
|
||||||
|
|
|
||||||
|
|
@ -1,359 +0,0 @@
|
||||||
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 {
|
|
||||||
anyOf,
|
|
||||||
charIn,
|
|
||||||
createRegExp,
|
|
||||||
digit,
|
|
||||||
exactly,
|
|
||||||
global,
|
|
||||||
letter,
|
|
||||||
} from "magic-regexp";
|
|
||||||
import MarkdownIt from "markdown-it";
|
|
||||||
import markdownItContainer from "markdown-it-container";
|
|
||||||
import markdownItTocDoneRight from "markdown-it-toc-done-right";
|
|
||||||
import { mentionValidator } from "@/api";
|
|
||||||
import { sanitizeHtml, sanitizeHtmlInline } from "@/sanitization";
|
|
||||||
import { transformOutputToUserWithRelations, userRelations } from "./user.ts";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrapper against the Status object to make it easier to work with
|
|
||||||
* @param query
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
export const findManyNotes = async (
|
|
||||||
query: Parameters<typeof db.query.Notes.findMany>[0],
|
|
||||||
userId?: string,
|
|
||||||
): Promise<(typeof Note.$type)[]> => {
|
|
||||||
const output = await db.query.Notes.findMany({
|
|
||||||
...query,
|
|
||||||
with: {
|
|
||||||
...query?.with,
|
|
||||||
attachments: {
|
|
||||||
with: {
|
|
||||||
media: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
reactions: {
|
|
||||||
with: {
|
|
||||||
emoji: {
|
|
||||||
with: {
|
|
||||||
instance: true,
|
|
||||||
media: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
emojis: {
|
|
||||||
with: {
|
|
||||||
emoji: {
|
|
||||||
with: {
|
|
||||||
instance: true,
|
|
||||||
media: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
author: {
|
|
||||||
with: {
|
|
||||||
...userRelations,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
mentions: {
|
|
||||||
with: {
|
|
||||||
user: {
|
|
||||||
with: {
|
|
||||||
instance: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
reblog: {
|
|
||||||
with: {
|
|
||||||
attachments: {
|
|
||||||
with: {
|
|
||||||
media: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
reactions: {
|
|
||||||
with: {
|
|
||||||
emoji: {
|
|
||||||
with: {
|
|
||||||
instance: true,
|
|
||||||
media: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
emojis: {
|
|
||||||
with: {
|
|
||||||
emoji: {
|
|
||||||
with: {
|
|
||||||
instance: true,
|
|
||||||
media: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
likes: true,
|
|
||||||
application: true,
|
|
||||||
mentions: {
|
|
||||||
with: {
|
|
||||||
user: {
|
|
||||||
with: userRelations,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
author: {
|
|
||||||
with: {
|
|
||||||
...userRelations,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
extras: {
|
|
||||||
pinned: userId
|
|
||||||
? sql`EXISTS (SELECT 1 FROM "UserToPinnedNotes" WHERE "UserToPinnedNotes"."noteId" = "Notes_reblog".id AND "UserToPinnedNotes"."userId" = ${userId})`.as(
|
|
||||||
"pinned",
|
|
||||||
)
|
|
||||||
: sql`false`.as("pinned"),
|
|
||||||
reblogged: userId
|
|
||||||
? sql`EXISTS (SELECT 1 FROM "Notes" WHERE "Notes"."authorId" = ${userId} AND "Notes"."reblogId" = "Notes_reblog".id)`.as(
|
|
||||||
"reblogged",
|
|
||||||
)
|
|
||||||
: sql`false`.as("reblogged"),
|
|
||||||
muted: userId
|
|
||||||
? sql`EXISTS (SELECT 1 FROM "Relationships" WHERE "Relationships"."ownerId" = ${userId} AND "Relationships"."subjectId" = "Notes_reblog"."authorId" AND "Relationships"."muting" = true)`.as(
|
|
||||||
"muted",
|
|
||||||
)
|
|
||||||
: sql`false`.as("muted"),
|
|
||||||
liked: userId
|
|
||||||
? sql`EXISTS (SELECT 1 FROM "Likes" WHERE "Likes"."likedId" = "Notes_reblog".id AND "Likes"."likerId" = ${userId})`.as(
|
|
||||||
"liked",
|
|
||||||
)
|
|
||||||
: sql`false`.as("liked"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
reply: true,
|
|
||||||
quote: true,
|
|
||||||
},
|
|
||||||
extras: {
|
|
||||||
pinned: userId
|
|
||||||
? sql`EXISTS (SELECT 1 FROM "UserToPinnedNotes" WHERE "UserToPinnedNotes"."noteId" = "Notes".id AND "UserToPinnedNotes"."userId" = ${userId})`.as(
|
|
||||||
"pinned",
|
|
||||||
)
|
|
||||||
: sql`false`.as("pinned"),
|
|
||||||
reblogged: userId
|
|
||||||
? sql`EXISTS (SELECT 1 FROM "Notes" WHERE "Notes"."authorId" = ${userId} AND "Notes"."reblogId" = "Notes".id)`.as(
|
|
||||||
"reblogged",
|
|
||||||
)
|
|
||||||
: sql`false`.as("reblogged"),
|
|
||||||
muted: userId
|
|
||||||
? sql`EXISTS (SELECT 1 FROM "Relationships" WHERE "Relationships"."ownerId" = ${userId} AND "Relationships"."subjectId" = "Notes"."authorId" AND "Relationships"."muting" = true)`.as(
|
|
||||||
"muted",
|
|
||||||
)
|
|
||||||
: sql`false`.as("muted"),
|
|
||||||
liked: userId
|
|
||||||
? sql`EXISTS (SELECT 1 FROM "Likes" WHERE "Likes"."likedId" = "Notes".id AND "Likes"."likerId" = ${userId})`.as(
|
|
||||||
"liked",
|
|
||||||
)
|
|
||||||
: sql`false`.as("liked"),
|
|
||||||
...query?.extras,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return output.map((post) => ({
|
|
||||||
...post,
|
|
||||||
author: transformOutputToUserWithRelations(post.author),
|
|
||||||
mentions: post.mentions.map((mention) => ({
|
|
||||||
...mention.user,
|
|
||||||
endpoints: mention.user.endpoints,
|
|
||||||
})),
|
|
||||||
attachments: post.attachments.map((attachment) => attachment.media),
|
|
||||||
emojis: (post.emojis ?? []).map((emoji) => emoji.emoji),
|
|
||||||
reblog: post.reblog && {
|
|
||||||
...post.reblog,
|
|
||||||
author: transformOutputToUserWithRelations(post.reblog.author),
|
|
||||||
mentions: post.reblog.mentions.map((mention) => ({
|
|
||||||
...mention.user,
|
|
||||||
endpoints: mention.user.endpoints,
|
|
||||||
})),
|
|
||||||
attachments: post.reblog.attachments.map(
|
|
||||||
(attachment) => attachment.media,
|
|
||||||
),
|
|
||||||
emojis: (post.reblog.emojis ?? []).map((emoji) => emoji.emoji),
|
|
||||||
pinned: Boolean(post.reblog.pinned),
|
|
||||||
reblogged: Boolean(post.reblog.reblogged),
|
|
||||||
muted: Boolean(post.reblog.muted),
|
|
||||||
liked: Boolean(post.reblog.liked),
|
|
||||||
},
|
|
||||||
pinned: Boolean(post.pinned),
|
|
||||||
reblogged: Boolean(post.reblogged),
|
|
||||||
muted: Boolean(post.muted),
|
|
||||||
liked: Boolean(post.liked),
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get people mentioned in the content (match @username or @username@domain.com mentions)
|
|
||||||
* @param text The text to parse mentions from.
|
|
||||||
* @returns An array of users mentioned in the text.
|
|
||||||
*/
|
|
||||||
export const parseTextMentions = async (text: string): Promise<User[]> => {
|
|
||||||
const mentionedPeople = [...text.matchAll(mentionValidator)];
|
|
||||||
if (mentionedPeople.length === 0) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
const baseUrlHost = config.http.base_url.host;
|
|
||||||
const isLocal = (host?: string): boolean => host === baseUrlHost || !host;
|
|
||||||
|
|
||||||
// Find local and matching users
|
|
||||||
const foundUsers = await db
|
|
||||||
.select({
|
|
||||||
id: Users.id,
|
|
||||||
username: Users.username,
|
|
||||||
baseUrl: Instances.baseUrl,
|
|
||||||
})
|
|
||||||
.from(Users)
|
|
||||||
.leftJoin(Instances, eq(Users.instanceId, Instances.id))
|
|
||||||
.where(
|
|
||||||
or(
|
|
||||||
...mentionedPeople.map((person) =>
|
|
||||||
and(
|
|
||||||
eq(Users.username, person[1] ?? ""),
|
|
||||||
isLocal(person[2])
|
|
||||||
? isNull(Users.instanceId)
|
|
||||||
: eq(Instances.baseUrl, person[2] ?? ""),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
// Separate found and unresolved users
|
|
||||||
const finalList = await User.manyFromSql(
|
|
||||||
inArray(
|
|
||||||
Users.id,
|
|
||||||
foundUsers.map((u) => u.id),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
// Every remote user that isn't in database
|
|
||||||
const notFoundRemoteUsers = mentionedPeople.filter(
|
|
||||||
(p) =>
|
|
||||||
!(
|
|
||||||
foundUsers.some(
|
|
||||||
(user) => user.username === p[1] && user.baseUrl === p[2],
|
|
||||||
) || isLocal(p[2])
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
// Resolve remote mentions not in database
|
|
||||||
for (const person of notFoundRemoteUsers) {
|
|
||||||
const url = await FederationRequester.resolveWebFinger(
|
|
||||||
person[1] ?? "",
|
|
||||||
person[2] ?? "",
|
|
||||||
);
|
|
||||||
|
|
||||||
if (url) {
|
|
||||||
const user = await User.resolve(url);
|
|
||||||
|
|
||||||
if (user) {
|
|
||||||
finalList.push(user);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return finalList;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const replaceTextMentions = (text: string, mentions: User[]): string => {
|
|
||||||
return mentions.reduce((finalText, mention) => {
|
|
||||||
const { username, instance } = mention.data;
|
|
||||||
const { uri } = mention;
|
|
||||||
const baseHost = config.http.base_url.host;
|
|
||||||
const linkTemplate = (displayText: string): string =>
|
|
||||||
`<a class="u-url mention" rel="nofollow noopener noreferrer" target="_blank" href="${uri}">${displayText}</a>`;
|
|
||||||
|
|
||||||
if (mention.remote) {
|
|
||||||
return finalText.replaceAll(
|
|
||||||
`@${username}@${instance?.baseUrl}`,
|
|
||||||
linkTemplate(`@${username}@${instance?.baseUrl}`),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return finalText.replace(
|
|
||||||
createRegExp(
|
|
||||||
exactly(
|
|
||||||
exactly(`@${username}`)
|
|
||||||
.notBefore(anyOf(letter, digit, charIn("@")))
|
|
||||||
.notAfter(anyOf(letter, digit, charIn("@"))),
|
|
||||||
).or(exactly(`@${username}@${baseHost}`)),
|
|
||||||
[global],
|
|
||||||
),
|
|
||||||
linkTemplate(`@${username}@${baseHost}`),
|
|
||||||
);
|
|
||||||
}, text);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const contentToHtml = async (
|
|
||||||
content: VersiaEntities.TextContentFormat,
|
|
||||||
mentions: User[] = [],
|
|
||||||
inline = false,
|
|
||||||
): Promise<string> => {
|
|
||||||
const sanitizer = inline ? sanitizeHtmlInline : sanitizeHtml;
|
|
||||||
let htmlContent = "";
|
|
||||||
|
|
||||||
if (content.data["text/html"]) {
|
|
||||||
htmlContent = await sanitizer(content.data["text/html"].content);
|
|
||||||
} else if (content.data["text/markdown"]) {
|
|
||||||
htmlContent = await sanitizer(
|
|
||||||
await markdownParse(content.data["text/markdown"].content),
|
|
||||||
);
|
|
||||||
} else if (content.data["text/plain"]?.content) {
|
|
||||||
htmlContent = (await sanitizer(content.data["text/plain"].content))
|
|
||||||
.split("\n")
|
|
||||||
.map((line) => `<p>${line}</p>`)
|
|
||||||
.join("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
htmlContent = replaceTextMentions(htmlContent, mentions);
|
|
||||||
|
|
||||||
return linkifyHtml(htmlContent, {
|
|
||||||
defaultProtocol: "https",
|
|
||||||
validate: { email: (): false => false },
|
|
||||||
target: "_blank",
|
|
||||||
rel: "nofollow noopener noreferrer",
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const markdownParse = async (content: string): Promise<string> => {
|
|
||||||
return (await getMarkdownRenderer()).render(content);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getMarkdownRenderer = (): MarkdownIt => {
|
|
||||||
const renderer = MarkdownIt({
|
|
||||||
html: true,
|
|
||||||
linkify: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
renderer.use(markdownItTocDoneRight, {
|
|
||||||
containerClass: "toc",
|
|
||||||
level: [1, 2, 3, 4],
|
|
||||||
listType: "ul",
|
|
||||||
listClass: "toc-list",
|
|
||||||
itemClass: "toc-item",
|
|
||||||
linkClass: "toc-link",
|
|
||||||
});
|
|
||||||
|
|
||||||
renderer.use(markdownItTaskLists);
|
|
||||||
|
|
||||||
renderer.use(markdownItContainer);
|
|
||||||
|
|
||||||
return renderer;
|
|
||||||
};
|
|
||||||
|
|
@ -1,101 +0,0 @@
|
||||||
import {
|
|
||||||
type Application,
|
|
||||||
db,
|
|
||||||
type Emoji,
|
|
||||||
type Instance,
|
|
||||||
type Media,
|
|
||||||
type Role,
|
|
||||||
type Token,
|
|
||||||
type User,
|
|
||||||
} from "@versia/kit/db";
|
|
||||||
import type { Users } from "@versia/kit/tables";
|
|
||||||
import type { InferSelectModel } from "drizzle-orm";
|
|
||||||
|
|
||||||
export const userRelations = {
|
|
||||||
instance: true,
|
|
||||||
emojis: {
|
|
||||||
with: {
|
|
||||||
emoji: {
|
|
||||||
with: {
|
|
||||||
instance: true,
|
|
||||||
media: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
avatar: true,
|
|
||||||
header: true,
|
|
||||||
roles: {
|
|
||||||
with: {
|
|
||||||
role: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
export interface AuthData {
|
|
||||||
user: User | null;
|
|
||||||
token: Token | null;
|
|
||||||
application: Application | null;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const transformOutputToUserWithRelations = (
|
|
||||||
user: Omit<InferSelectModel<typeof Users>, "endpoints"> & {
|
|
||||||
followerCount: unknown;
|
|
||||||
followingCount: unknown;
|
|
||||||
statusCount: unknown;
|
|
||||||
avatar: typeof Media.$type | null;
|
|
||||||
header: typeof Media.$type | null;
|
|
||||||
emojis: {
|
|
||||||
userId: string;
|
|
||||||
emojiId: string;
|
|
||||||
emoji?: typeof Emoji.$type;
|
|
||||||
}[];
|
|
||||||
instance: typeof Instance.$type | null;
|
|
||||||
roles: {
|
|
||||||
userId: string;
|
|
||||||
roleId: string;
|
|
||||||
role?: typeof Role.$type;
|
|
||||||
}[];
|
|
||||||
endpoints: unknown;
|
|
||||||
},
|
|
||||||
): typeof User.$type => {
|
|
||||||
return {
|
|
||||||
...user,
|
|
||||||
followerCount: Number(user.followerCount),
|
|
||||||
followingCount: Number(user.followingCount),
|
|
||||||
statusCount: Number(user.statusCount),
|
|
||||||
endpoints:
|
|
||||||
user.endpoints ??
|
|
||||||
({} as Partial<{
|
|
||||||
dislikes: string;
|
|
||||||
featured: string;
|
|
||||||
likes: string;
|
|
||||||
followers: string;
|
|
||||||
following: string;
|
|
||||||
inbox: string;
|
|
||||||
outbox: string;
|
|
||||||
}>),
|
|
||||||
emojis: user.emojis.map(
|
|
||||||
(emoji) =>
|
|
||||||
(emoji as unknown as Record<string, object>)
|
|
||||||
.emoji as typeof Emoji.$type,
|
|
||||||
),
|
|
||||||
roles: user.roles
|
|
||||||
.map((role) => role.role)
|
|
||||||
.filter(Boolean) as (typeof Role.$type)[],
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export const findManyUsers = async (
|
|
||||||
query: Parameters<typeof db.query.Users.findMany>[0],
|
|
||||||
): Promise<(typeof User.$type)[]> => {
|
|
||||||
const output = await db.query.Users.findMany({
|
|
||||||
...query,
|
|
||||||
with: {
|
|
||||||
...userRelations,
|
|
||||||
...query?.with,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return output.map((user) => transformOutputToUserWithRelations(user));
|
|
||||||
};
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
import { getLogger, type Logger } from "@logtape/logtape";
|
import { getLogger, type Logger } from "@logtape/logtape";
|
||||||
import { ApiError } from "@versia/kit";
|
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 { ApiError } from "@versia-server/kit";
|
||||||
import {
|
import {
|
||||||
type Instance,
|
type Instance,
|
||||||
Like,
|
Like,
|
||||||
|
|
@ -7,12 +11,8 @@ import {
|
||||||
Reaction,
|
Reaction,
|
||||||
Relationship,
|
Relationship,
|
||||||
User,
|
User,
|
||||||
} from "@versia/kit/db";
|
} from "@versia-server/kit/db";
|
||||||
import { Likes, Notes } from "@versia/kit/tables";
|
import { Likes, Notes } from "@versia-server/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 type { SocketAddress } from "bun";
|
||||||
import { Glob } from "bun";
|
import { Glob } from "bun";
|
||||||
import chalk from "chalk";
|
import chalk from "chalk";
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { describe, expect, it } from "bun:test";
|
import { describe, expect, it } from "bun:test";
|
||||||
|
import { mockModule } from "@versia-server/tests";
|
||||||
import sharp from "sharp";
|
import sharp from "sharp";
|
||||||
import { mockModule } from "~/tests/utils.ts";
|
|
||||||
import { calculateBlurhash } from "./blurhash.ts";
|
import { calculateBlurhash } from "./blurhash.ts";
|
||||||
|
|
||||||
describe("BlurhashPreprocessor", () => {
|
describe("BlurhashPreprocessor", () => {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { readdir } from "node:fs/promises";
|
import { readdir } from "node:fs/promises";
|
||||||
import { getLogger, type Logger } from "@logtape/logtape";
|
import { getLogger, type Logger } from "@logtape/logtape";
|
||||||
import { type Manifest, manifestSchema, Plugin } from "@versia/kit";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { type Manifest, manifestSchema, Plugin } from "@versia-server/kit";
|
||||||
import { file, sleep } from "bun";
|
import { file, sleep } from "bun";
|
||||||
import chalk from "chalk";
|
import chalk from "chalk";
|
||||||
import { parseJSON5, parseJSONC } from "confbox";
|
import { parseJSON5, parseJSONC } from "confbox";
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
import { User } from "@versia/kit/db";
|
|
||||||
import type { JSONObject } from "@versia/sdk";
|
import type { JSONObject } from "@versia/sdk";
|
||||||
import * as VersiaEntities from "@versia/sdk/entities";
|
import * as VersiaEntities from "@versia/sdk/entities";
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { User } from "@versia-server/kit/db";
|
||||||
|
import { connection } from "@versia-server/kit/redis";
|
||||||
import { Queue, Worker } from "bullmq";
|
import { Queue, Worker } from "bullmq";
|
||||||
import chalk from "chalk";
|
import chalk from "chalk";
|
||||||
import { connection } from "~/utils/redis.ts";
|
|
||||||
|
|
||||||
export enum DeliveryJobType {
|
export enum DeliveryJobType {
|
||||||
FederateEntity = "federateEntity",
|
FederateEntity = "federateEntity",
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import { Instance } from "@versia/kit/db";
|
|
||||||
import { Instances } from "@versia/kit/tables";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { Instance } from "@versia-server/kit/db";
|
||||||
|
import { connection } from "@versia-server/kit/redis";
|
||||||
|
import { Instances } from "@versia-server/kit/tables";
|
||||||
import { Queue, Worker } from "bullmq";
|
import { Queue, Worker } from "bullmq";
|
||||||
import { eq } from "drizzle-orm";
|
import { eq } from "drizzle-orm";
|
||||||
import { connection } from "~/utils/redis.ts";
|
|
||||||
|
|
||||||
export enum FetchJobType {
|
export enum FetchJobType {
|
||||||
Instance = "instance",
|
Instance = "instance",
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
import { getLogger } from "@logtape/logtape";
|
import { getLogger } from "@logtape/logtape";
|
||||||
import { ApiError } from "@versia/kit";
|
|
||||||
import { Instance, User } from "@versia/kit/db";
|
|
||||||
import type { JSONObject } from "@versia/sdk";
|
import type { JSONObject } from "@versia/sdk";
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { ApiError } from "@versia-server/kit";
|
||||||
|
import { Instance, User } from "@versia-server/kit/db";
|
||||||
|
import { connection } from "@versia-server/kit/redis";
|
||||||
import { Queue, Worker } from "bullmq";
|
import { Queue, Worker } from "bullmq";
|
||||||
import type { SocketAddress } from "bun";
|
import type { SocketAddress } from "bun";
|
||||||
import { connection } from "~/utils/redis.ts";
|
|
||||||
import { InboxProcessor } from "../inbox/processor.ts";
|
import { InboxProcessor } from "../inbox/processor.ts";
|
||||||
|
|
||||||
export enum InboxJobType {
|
export enum InboxJobType {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { Media } from "@versia/kit/db";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { Media } from "@versia-server/kit/db";
|
||||||
|
import { connection } from "@versia-server/kit/redis";
|
||||||
import { Queue, Worker } from "bullmq";
|
import { Queue, Worker } from "bullmq";
|
||||||
import { connection } from "~/utils/redis.ts";
|
|
||||||
import { calculateBlurhash } from "../media/preprocessors/blurhash.ts";
|
import { calculateBlurhash } from "../media/preprocessors/blurhash.ts";
|
||||||
import { convertImage } from "../media/preprocessors/image-conversion.ts";
|
import { convertImage } from "../media/preprocessors/image-conversion.ts";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import { Note, PushSubscription, Token, User } from "@versia/kit/db";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { Note, PushSubscription, Token, User } from "@versia-server/kit/db";
|
||||||
|
import { connection } from "@versia-server/kit/redis";
|
||||||
import { Queue, Worker } from "bullmq";
|
import { Queue, Worker } from "bullmq";
|
||||||
import { sendNotification } from "web-push";
|
import { sendNotification } from "web-push";
|
||||||
import { htmlToText } from "@/content_types.ts";
|
import { htmlToText } from "@/content_types.ts";
|
||||||
import { connection } from "~/utils/redis.ts";
|
|
||||||
|
|
||||||
export enum PushJobType {
|
export enum PushJobType {
|
||||||
Notify = "notify",
|
Notify = "notify",
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { Relationship, User } from "@versia/kit/db";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { Relationship, User } from "@versia-server/kit/db";
|
||||||
|
import { connection } from "@versia-server/kit/redis";
|
||||||
import { Queue, Worker } from "bullmq";
|
import { Queue, Worker } from "bullmq";
|
||||||
import { connection } from "~/utils/redis.ts";
|
|
||||||
|
|
||||||
export enum RelationshipJobType {
|
export enum RelationshipJobType {
|
||||||
Unmute = "unmute",
|
Unmute = "unmute",
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { getLogger } from "@logtape/logtape";
|
import { getLogger } from "@logtape/logtape";
|
||||||
import { db, Note, User } from "@versia/kit/db";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { db, Note, User } from "@versia-server/kit/db";
|
||||||
import type { SQL, ValueOrArray } from "drizzle-orm";
|
import type { SQL, ValueOrArray } from "drizzle-orm";
|
||||||
import {
|
import {
|
||||||
Ingest as SonicChannelIngest,
|
Ingest as SonicChannelIngest,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import { friendlyErrorPlugin } from "@clerc/plugin-friendly-error";
|
||||||
import { helpPlugin } from "@clerc/plugin-help";
|
import { helpPlugin } from "@clerc/plugin-help";
|
||||||
import { notFoundPlugin } from "@clerc/plugin-not-found";
|
import { notFoundPlugin } from "@clerc/plugin-not-found";
|
||||||
import { versionPlugin } from "@clerc/plugin-version";
|
import { versionPlugin } from "@clerc/plugin-version";
|
||||||
import { setupDatabase } from "@versia/kit/db";
|
import { setupDatabase } from "@versia-server/kit/db";
|
||||||
import { Clerc } from "clerc";
|
import { Clerc } from "clerc";
|
||||||
import { searchManager } from "~/classes/search/search-manager.ts";
|
import { searchManager } from "~/classes/search/search-manager.ts";
|
||||||
import pkg from "~/package.json" with { type: "json" };
|
import pkg from "~/package.json" with { type: "json" };
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { Instance } from "@versia/kit/db";
|
import { Instance } from "@versia-server/kit/db";
|
||||||
import { Instances } from "@versia/kit/tables";
|
import { Instances } from "@versia-server/kit/tables";
|
||||||
import chalk from "chalk";
|
import chalk from "chalk";
|
||||||
// @ts-expect-error - Root import is required or the Clec type definitions won't work
|
// @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
|
// biome-ignore lint/correctness/noUnusedImports: Root import is required or the Clec type definitions won't work
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { User } from "@versia/kit/db";
|
|
||||||
import { Users } from "@versia/kit/tables";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { User } from "@versia-server/kit/db";
|
||||||
|
import { Users } from "@versia-server/kit/tables";
|
||||||
import chalk from "chalk";
|
import chalk from "chalk";
|
||||||
// @ts-expect-error - Root import is required or the Clec type definitions won't work
|
// @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
|
// biome-ignore lint/correctness/noUnusedImports: Root import is required or the Clec type definitions won't work
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { User } from "@versia/kit/db";
|
import { User } from "@versia-server/kit/db";
|
||||||
import chalk from "chalk";
|
import chalk from "chalk";
|
||||||
// @ts-expect-error - Root import is required or the Clec type definitions won't work
|
// @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
|
// biome-ignore lint/correctness/noUnusedImports: Root import is required or the Clec type definitions won't work
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Token } from "@versia/kit/db";
|
import { Token } from "@versia-server/kit/db";
|
||||||
import { randomUUIDv7 } from "bun";
|
import { randomUUIDv7 } from "bun";
|
||||||
import chalk from "chalk";
|
import chalk from "chalk";
|
||||||
// @ts-expect-error - Root import is required or the Clec type definitions won't work
|
// @ts-expect-error - Root import is required or the Clec type definitions won't work
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { Instance, User } from "@versia/kit/db";
|
import { Instance, User } from "@versia-server/kit/db";
|
||||||
import { Users } from "@versia/kit/tables";
|
import { parseUserAddress } from "@versia-server/kit/parsers";
|
||||||
|
import { Users } from "@versia-server/kit/tables";
|
||||||
import { and, eq, isNull } from "drizzle-orm";
|
import { and, eq, isNull } from "drizzle-orm";
|
||||||
import { parseUserAddress } from "@/api";
|
|
||||||
|
|
||||||
export const retrieveUser = async (
|
export const retrieveUser = async (
|
||||||
usernameOrHandle: string,
|
usernameOrHandle: string,
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1744536153,
|
"lastModified": 1749903597,
|
||||||
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
|
"narHash": "sha256-jp0D4vzBcRKwNZwfY4BcWHemLGUs4JrS3X9w5k/JYDA=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
|
"rev": "41da1e3ea8e23e094e5e3eeb1e6b830468a7399e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ in
|
||||||
|
|
||||||
pnpmDeps = pnpm.fetchDeps {
|
pnpmDeps = pnpm.fetchDeps {
|
||||||
inherit (finalAttrs) pname version src pnpmInstallFlags;
|
inherit (finalAttrs) pname version src pnpmInstallFlags;
|
||||||
hash = "sha256-6lcsXcMEh7UbB5aLJzgJKUzynZbSZPgdj6l9E7RVx7c=";
|
hash = "sha256-nC1bYW+It2N0Mp8+Yh1uk3MOj8DABOCNP5E3LbMuCEQ=";
|
||||||
};
|
};
|
||||||
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,9 @@
|
||||||
"check": "bunx tsc -p .",
|
"check": "bunx tsc -p .",
|
||||||
"test": "bun test",
|
"test": "bun test",
|
||||||
"run-api": "bun run packages/api/build.ts && cd dist && ln -s ../config config && bun run packages/api/index.js",
|
"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"
|
"run-worker": "bun run packages/worker/build.ts && cd dist && ln -s ../config config && bun run packages/worker/index.js",
|
||||||
|
"dev": "bun run --hot packages/api/index.ts",
|
||||||
|
"worker:dev": "bun run --hot packages/worker/index.ts"
|
||||||
},
|
},
|
||||||
"trustedDependencies": [
|
"trustedDependencies": [
|
||||||
"@biomejs/biome",
|
"@biomejs/biome",
|
||||||
|
|
@ -131,6 +133,7 @@
|
||||||
"sharp"
|
"sharp"
|
||||||
],
|
],
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@biomejs/biome": "catalog:",
|
||||||
"@types/bun": "catalog:",
|
"@types/bun": "catalog:",
|
||||||
"@types/html-to-text": "catalog:",
|
"@types/html-to-text": "catalog:",
|
||||||
"@types/markdown-it-container": "catalog:",
|
"@types/markdown-it-container": "catalog:",
|
||||||
|
|
@ -164,8 +167,9 @@
|
||||||
"@scalar/hono-api-reference": "catalog:",
|
"@scalar/hono-api-reference": "catalog:",
|
||||||
"@sentry/bun": "catalog:",
|
"@sentry/bun": "catalog:",
|
||||||
"@versia/client": "workspace:*",
|
"@versia/client": "workspace:*",
|
||||||
"@versia/kit": "workspace:*",
|
"@versia-server/kit": "workspace:*",
|
||||||
"@versia/sdk": "workspace:*",
|
"@versia/sdk": "workspace:*",
|
||||||
|
"@versia-server/tests": "workspace:*",
|
||||||
"@versia-server/config": "workspace:*",
|
"@versia-server/config": "workspace:*",
|
||||||
"altcha-lib": "catalog:",
|
"altcha-lib": "catalog:",
|
||||||
"blurhash": "catalog:",
|
"blurhash": "catalog:",
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import { resolve } from "node:path";
|
import { resolve } from "node:path";
|
||||||
import { getLogger } from "@logtape/logtape";
|
import { getLogger } from "@logtape/logtape";
|
||||||
import { Scalar } from "@scalar/hono-api-reference";
|
import { Scalar } from "@scalar/hono-api-reference";
|
||||||
import { ApiError } from "@versia/kit";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { ApiError } from "@versia-server/kit";
|
||||||
import chalk from "chalk";
|
import chalk from "chalk";
|
||||||
import { Hono } from "hono";
|
import { Hono } from "hono";
|
||||||
import { serveStatic } from "hono/bun";
|
import { serveStatic } from "hono/bun";
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { readdir } from "node:fs/promises";
|
import { readdir } from "node:fs/promises";
|
||||||
import { $, build } from "bun";
|
import { $, build } from "bun";
|
||||||
import { routes } from "~/packages/api/routes";
|
import { routes } from "./routes.ts";
|
||||||
|
|
||||||
console.log("Building...");
|
console.log("Building...");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { ApiError } from "@versia/kit";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { createMiddleware } from "hono/factory";
|
import { createMiddleware } from "hono/factory";
|
||||||
|
|
||||||
export const agentBans = createMiddleware(async (context, next) => {
|
export const agentBans = createMiddleware(async (context, next) => {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { createMiddleware } from "hono/factory";
|
import { createMiddleware } from "hono/factory";
|
||||||
|
|
||||||
export const boundaryCheck = createMiddleware(async (context, next) => {
|
export const boundaryCheck = createMiddleware(async (context, next) => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { getLogger } from "@logtape/logtape";
|
import { getLogger } from "@logtape/logtape";
|
||||||
import { ApiError } from "@versia/kit";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { ApiError } from "@versia-server/kit";
|
||||||
import type { SocketAddress } from "bun";
|
import type { SocketAddress } from "bun";
|
||||||
import { createMiddleware } from "hono/factory";
|
import { createMiddleware } from "hono/factory";
|
||||||
import { matches } from "ip-matching";
|
import { matches } from "ip-matching";
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import type { ApiError } from "@versia/kit";
|
import type { ApiError } from "@versia-server/kit";
|
||||||
import { env } from "bun";
|
import { env } from "bun";
|
||||||
import type { MiddlewareHandler } from "hono";
|
import type { MiddlewareHandler } from "hono";
|
||||||
import { rateLimiter } from "hono-rate-limiter";
|
import { rateLimiter } from "hono-rate-limiter";
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,8 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@versia-server/config": "workspace:*",
|
"@versia-server/config": "workspace:*",
|
||||||
"@versia/kit": "workspace:*",
|
"@versia-server/tests": "workspace:*",
|
||||||
|
"@versia-server/kit": "workspace:*",
|
||||||
"@versia/client": "workspace:*",
|
"@versia/client": "workspace:*",
|
||||||
"@versia/sdk": "workspace:*",
|
"@versia/sdk": "workspace:*",
|
||||||
"@logtape/logtape": "catalog:",
|
"@logtape/logtape": "catalog:",
|
||||||
|
|
@ -62,6 +63,11 @@
|
||||||
"zod-openapi": "catalog:",
|
"zod-openapi": "catalog:",
|
||||||
"@scalar/hono-api-reference": "catalog:",
|
"@scalar/hono-api-reference": "catalog:",
|
||||||
"hono-rate-limiter": "catalog:",
|
"hono-rate-limiter": "catalog:",
|
||||||
"ip-matching": "catalog:"
|
"ip-matching": "catalog:",
|
||||||
|
"qs": "catalog:",
|
||||||
|
"magic-regexp": "catalog:",
|
||||||
|
"altcha-lib": "catalog:",
|
||||||
|
"@hono/zod-validator": "catalog:",
|
||||||
|
"zod-validation-error": "catalog:"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { Application } from "@versia/kit/db";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { Application } from "@versia-server/kit/db";
|
||||||
|
import { fakeRequest, getTestUsers } from "@versia-server/tests";
|
||||||
import { randomUUIDv7 } from "bun";
|
import { randomUUIDv7 } from "bun";
|
||||||
import { randomString } from "@/math";
|
import { randomString } from "@/math";
|
||||||
import { fakeRequest, getTestUsers } from "~/tests/utils";
|
|
||||||
|
|
||||||
const { users, deleteUsers, passwords } = await getTestUsers(1);
|
const { users, deleteUsers, passwords } = await getTestUsers(1);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
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 { config } from "@versia-server/config";
|
||||||
|
import { ApiError } from "@versia-server/kit";
|
||||||
|
import { apiRoute, handleZodError } from "@versia-server/kit/api";
|
||||||
|
import { Application, User } from "@versia-server/kit/db";
|
||||||
|
import { Users } from "@versia-server/kit/tables";
|
||||||
import { password as bunPassword } from "bun";
|
import { password as bunPassword } from "bun";
|
||||||
import { eq, or } from "drizzle-orm";
|
import { eq, or } from "drizzle-orm";
|
||||||
import type { Context } from "hono";
|
import type { Context } from "hono";
|
||||||
|
|
@ -10,7 +11,6 @@ import { describeRoute } from "hono-openapi";
|
||||||
import { validator } from "hono-openapi/zod";
|
import { validator } from "hono-openapi/zod";
|
||||||
import { SignJWT } from "jose";
|
import { SignJWT } from "jose";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, handleZodError } from "@/api";
|
|
||||||
|
|
||||||
const returnError = (
|
const returnError = (
|
||||||
context: Context,
|
context: Context,
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
import { db } from "@versia/kit/db";
|
|
||||||
import { Applications, Tokens } from "@versia/kit/tables";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { apiRoute, handleZodError } from "@versia-server/kit/api";
|
||||||
|
import { db } from "@versia-server/kit/db";
|
||||||
|
import { Applications, Tokens } from "@versia-server/kit/tables";
|
||||||
import { and, eq } from "drizzle-orm";
|
import { and, eq } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { validator } from "hono-openapi/zod";
|
import { validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, handleZodError } from "@/api";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OAuth Code flow
|
* OAuth Code flow
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { Application } from "@versia/kit/db";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { Application } from "@versia-server/kit/db";
|
||||||
|
import { fakeRequest, getTestUsers } from "@versia-server/tests";
|
||||||
import { randomUUIDv7 } from "bun";
|
import { randomUUIDv7 } from "bun";
|
||||||
import { randomString } from "@/math";
|
import { randomString } from "@/math";
|
||||||
import { fakeRequest, getTestUsers } from "~/tests/utils";
|
|
||||||
|
|
||||||
const { users, deleteUsers, passwords } = await getTestUsers(1);
|
const { users, deleteUsers, passwords } = await getTestUsers(1);
|
||||||
const token = randomString(32, "hex");
|
const token = randomString(32, "hex");
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
import { User } from "@versia/kit/db";
|
|
||||||
import { Users } from "@versia/kit/tables";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { apiRoute, handleZodError } from "@versia-server/kit/api";
|
||||||
|
import { User } from "@versia-server/kit/db";
|
||||||
|
import { Users } from "@versia-server/kit/tables";
|
||||||
import { password as bunPassword } from "bun";
|
import { password as bunPassword } from "bun";
|
||||||
import { eq } from "drizzle-orm";
|
import { eq } from "drizzle-orm";
|
||||||
import type { Context } from "hono";
|
import type { Context } from "hono";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { validator } from "hono-openapi/zod";
|
import { validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, handleZodError } from "@/api";
|
|
||||||
|
|
||||||
const returnError = (
|
const returnError = (
|
||||||
context: Context,
|
context: Context,
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(2);
|
const { users, deleteUsers } = await getTestUsers(2);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ import {
|
||||||
Relationship as RelationshipSchema,
|
Relationship as RelationshipSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Relationship } from "@versia/kit/db";
|
import { apiRoute, auth, withUserParam } from "@versia-server/kit/api";
|
||||||
|
import { Relationship } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { apiRoute, auth, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.post(
|
app.post(
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,14 @@
|
||||||
import { RolePermission } from "@versia/client/schemas";
|
import { RolePermission } from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
|
import {
|
||||||
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
withUserParam,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, withUserParam } from "@/api";
|
|
||||||
import { getFeed } from "@/rss";
|
import { getFeed } from "@/rss";
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,14 @@
|
||||||
import { RolePermission } from "@versia/client/schemas";
|
import { RolePermission } from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
|
import {
|
||||||
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
withUserParam,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, withUserParam } from "@/api";
|
|
||||||
import { getFeed } from "@/rss";
|
import { getFeed } from "@/rss";
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(3);
|
const { users, deleteUsers } = await getTestUsers(3);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,17 @@ import {
|
||||||
Relationship as RelationshipSchema,
|
Relationship as RelationshipSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Relationship } from "@versia/kit/db";
|
import {
|
||||||
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
withUserParam,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
|
import { Relationship } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.post(
|
app.post(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(5);
|
const { users, deleteUsers } = await getTestUsers(5);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,19 @@ import {
|
||||||
Account as AccountSchema,
|
Account as AccountSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Timeline } from "@versia/kit/db";
|
import {
|
||||||
import { Users } from "@versia/kit/tables";
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
withUserParam,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
|
import { Timeline } from "@versia-server/kit/db";
|
||||||
|
import { Users } from "@versia-server/kit/tables";
|
||||||
import { and, gt, gte, lt, sql } from "drizzle-orm";
|
import { and, gt, gte, lt, sql } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.get(
|
app.get(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(5);
|
const { users, deleteUsers } = await getTestUsers(5);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,19 @@ import {
|
||||||
Account as AccountSchema,
|
Account as AccountSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Timeline } from "@versia/kit/db";
|
import {
|
||||||
import { Users } from "@versia/kit/tables";
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
withUserParam,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
|
import { Timeline } from "@versia-server/kit/db";
|
||||||
|
import { Users } from "@versia-server/kit/tables";
|
||||||
import { and, gt, gte, lt, sql } from "drizzle-orm";
|
import { and, gt, gte, lt, sql } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.get(
|
app.get(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils";
|
import {
|
||||||
|
generateClient,
|
||||||
|
getTestStatuses,
|
||||||
|
getTestUsers,
|
||||||
|
} from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(5);
|
const { users, deleteUsers } = await getTestUsers(5);
|
||||||
const timeline = (await getTestStatuses(5, users[0])).toReversed();
|
const timeline = (await getTestStatuses(5, users[0])).toReversed();
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,10 @@ import {
|
||||||
Account as AccountSchema,
|
Account as AccountSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
|
import { apiRoute, auth, withUserParam } from "@versia-server/kit/api";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { apiRoute, auth, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.get(
|
app.get(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(2);
|
const { users, deleteUsers } = await getTestUsers(2);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,17 @@ import {
|
||||||
Relationship as RelationshipSchema,
|
Relationship as RelationshipSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Relationship } from "@versia/kit/db";
|
import {
|
||||||
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
withUserParam,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
|
import { Relationship } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, withUserParam } from "@/api";
|
|
||||||
import {
|
import {
|
||||||
RelationshipJobType,
|
RelationshipJobType,
|
||||||
relationshipQueue,
|
relationshipQueue,
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(2);
|
const { users, deleteUsers } = await getTestUsers(2);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,17 @@ import {
|
||||||
Relationship as RelationshipSchema,
|
Relationship as RelationshipSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Relationship } from "@versia/kit/db";
|
import {
|
||||||
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
withUserParam,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
|
import { Relationship } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.post(
|
app.post(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(2);
|
const { users, deleteUsers } = await getTestUsers(2);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,10 @@ import {
|
||||||
Relationship as RelationshipSchema,
|
Relationship as RelationshipSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { Relationship } from "@versia/kit/db";
|
import { apiRoute, auth, withUserParam } from "@versia-server/kit/api";
|
||||||
|
import { Relationship } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { apiRoute, auth, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.post(
|
app.post(
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ import {
|
||||||
Account as AccountSchema,
|
Account as AccountSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { User } from "@versia/kit/db";
|
import { apiRoute, auth, withUserParam } from "@versia-server/kit/api";
|
||||||
|
import { User } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { apiRoute, auth, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.post(
|
app.post(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(2);
|
const { users, deleteUsers } = await getTestUsers(2);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ import {
|
||||||
Relationship as RelationshipSchema,
|
Relationship as RelationshipSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Relationship } from "@versia/kit/db";
|
import { apiRoute, auth, withUserParam } from "@versia-server/kit/api";
|
||||||
|
import { Relationship } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { apiRoute, auth, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.post(
|
app.post(
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||||
import { RolePermission } from "@versia/client/schemas";
|
import { RolePermission } from "@versia/client/schemas";
|
||||||
import { Role } from "@versia/kit/db";
|
import { Role } from "@versia-server/kit/db";
|
||||||
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
import { randomUUIDv7 } from "bun";
|
import { randomUUIDv7 } from "bun";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(2);
|
const { users, deleteUsers } = await getTestUsers(2);
|
||||||
let role: Role;
|
let role: Role;
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,17 @@ import {
|
||||||
RolePermission,
|
RolePermission,
|
||||||
Role as RoleSchema,
|
Role as RoleSchema,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Role } from "@versia/kit/db";
|
import {
|
||||||
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
withUserParam,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
|
import { Role } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { validator } from "hono-openapi/zod";
|
import { validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) => {
|
export default apiRoute((app) => {
|
||||||
app.post(
|
app.post(
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||||
import { RolePermission } from "@versia/client/schemas";
|
import { RolePermission } from "@versia/client/schemas";
|
||||||
import { Role } from "@versia/kit/db";
|
import { Role } from "@versia-server/kit/db";
|
||||||
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
import { randomUUIDv7 } from "bun";
|
import { randomUUIDv7 } from "bun";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(2);
|
const { users, deleteUsers } = await getTestUsers(2);
|
||||||
let role: Role;
|
let role: Role;
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import { Role as RoleSchema } from "@versia/client/schemas";
|
import { Role as RoleSchema } from "@versia/client/schemas";
|
||||||
import { Role } from "@versia/kit/db";
|
import { apiRoute, auth, withUserParam } from "@versia-server/kit/api";
|
||||||
|
import { Role } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) => {
|
export default apiRoute((app) => {
|
||||||
app.get(
|
app.get(
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import {
|
||||||
generateClient,
|
generateClient,
|
||||||
getTestStatuses,
|
getTestStatuses,
|
||||||
getTestUsers,
|
getTestUsers,
|
||||||
} from "~/tests/utils.ts";
|
} from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(5);
|
const { users, deleteUsers } = await getTestUsers(5);
|
||||||
const timeline = (await getTestStatuses(5, users[1])).toReversed();
|
const timeline = (await getTestStatuses(5, users[1])).toReversed();
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,19 @@ import {
|
||||||
Status as StatusSchema,
|
Status as StatusSchema,
|
||||||
zBoolean,
|
zBoolean,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Timeline } from "@versia/kit/db";
|
import {
|
||||||
import { Notes } from "@versia/kit/tables";
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
withUserParam,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
|
import { Timeline } from "@versia-server/kit/db";
|
||||||
|
import { Notes } from "@versia-server/kit/tables";
|
||||||
import { and, eq, gt, gte, inArray, isNull, lt, or, sql } from "drizzle-orm";
|
import { and, eq, gt, gte, inArray, isNull, lt, or, sql } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.get(
|
app.get(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(2);
|
const { users, deleteUsers } = await getTestUsers(2);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ import {
|
||||||
Relationship as RelationshipSchema,
|
Relationship as RelationshipSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Relationship } from "@versia/kit/db";
|
import { apiRoute, auth, withUserParam } from "@versia-server/kit/api";
|
||||||
|
import { Relationship } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { apiRoute, auth, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.post(
|
app.post(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(3);
|
const { users, deleteUsers } = await getTestUsers(3);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ import {
|
||||||
Relationship as RelationshipSchema,
|
Relationship as RelationshipSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Relationship } from "@versia/kit/db";
|
import { apiRoute, auth, withUserParam } from "@versia-server/kit/api";
|
||||||
|
import { Relationship } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { apiRoute, auth, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.post(
|
app.post(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(2);
|
const { users, deleteUsers } = await getTestUsers(2);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ import {
|
||||||
Relationship as RelationshipSchema,
|
Relationship as RelationshipSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Relationship } from "@versia/kit/db";
|
import { apiRoute, auth, withUserParam } from "@versia-server/kit/api";
|
||||||
|
import { Relationship } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { apiRoute, auth, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.post(
|
app.post(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(2);
|
const { users, deleteUsers } = await getTestUsers(2);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ import {
|
||||||
Relationship as RelationshipSchema,
|
Relationship as RelationshipSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Relationship } from "@versia/kit/db";
|
import { apiRoute, auth, withUserParam } from "@versia-server/kit/api";
|
||||||
|
import { Relationship } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { apiRoute, auth, withUserParam } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.post(
|
app.post(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils.ts";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(5);
|
const { users, deleteUsers } = await getTestUsers(5);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,19 @@ import {
|
||||||
FamiliarFollowers as FamiliarFollowersSchema,
|
FamiliarFollowers as FamiliarFollowersSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { db, User } from "@versia/kit/db";
|
import {
|
||||||
import type { Users } from "@versia/kit/tables";
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
qsQuery,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
|
import { db, User } from "@versia-server/kit/db";
|
||||||
|
import type { Users } from "@versia-server/kit/tables";
|
||||||
import { type InferSelectModel, sql } from "drizzle-orm";
|
import { type InferSelectModel, sql } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, qsQuery } from "@/api";
|
|
||||||
import { rateLimit } from "../../../../../middlewares/rate-limit.ts";
|
import { rateLimit } from "../../../../../middlewares/rate-limit.ts";
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(5);
|
const { users, deleteUsers } = await getTestUsers(5);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import { afterEach, describe, expect, test } from "bun:test";
|
import { afterEach, describe, expect, test } from "bun:test";
|
||||||
import { db } from "@versia/kit/db";
|
import { db } from "@versia-server/kit/db";
|
||||||
import { Users } from "@versia/kit/tables";
|
import { Users } from "@versia-server/kit/tables";
|
||||||
|
import { generateClient, getSolvedChallenge } from "@versia-server/tests";
|
||||||
import { eq } from "drizzle-orm";
|
import { eq } from "drizzle-orm";
|
||||||
import { randomString } from "@/math";
|
import { randomString } from "@/math";
|
||||||
import { generateClient, getSolvedChallenge } from "~/tests/utils";
|
|
||||||
|
|
||||||
const username = randomString(10, "hex");
|
const username = randomString(10, "hex");
|
||||||
const username2 = randomString(10, "hex");
|
const username2 = randomString(10, "hex");
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,20 @@
|
||||||
import { Account as AccountSchema, zBoolean } from "@versia/client/schemas";
|
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 { config } from "@versia-server/config";
|
||||||
|
import { ApiError } from "@versia-server/kit";
|
||||||
|
import {
|
||||||
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
jsonOrForm,
|
||||||
|
qsQuery,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
|
import { User } from "@versia-server/kit/db";
|
||||||
|
import { Users } from "@versia-server/kit/tables";
|
||||||
import { and, eq, isNull } from "drizzle-orm";
|
import { and, eq, isNull } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import ISO6391 from "iso-639-1";
|
import ISO6391 from "iso-639-1";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, jsonOrForm, qsQuery } from "@/api";
|
|
||||||
import { tempmailDomains } from "@/tempmail";
|
import { tempmailDomains } from "@/tempmail";
|
||||||
import { rateLimit } from "../../../../middlewares/rate-limit.ts";
|
import { rateLimit } from "../../../../middlewares/rate-limit.ts";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(5);
|
const { users, deleteUsers } = await getTestUsers(5);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,16 @@ import {
|
||||||
Account as AccountSchema,
|
Account as AccountSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} 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 { config } from "@versia-server/config";
|
||||||
|
import { ApiError } from "@versia-server/kit";
|
||||||
|
import { apiRoute, auth, handleZodError } from "@versia-server/kit/api";
|
||||||
|
import { Instance, User } from "@versia-server/kit/db";
|
||||||
|
import { parseUserAddress } from "@versia-server/kit/parsers";
|
||||||
|
import { Users } from "@versia-server/kit/tables";
|
||||||
import { and, eq, isNull } from "drizzle-orm";
|
import { and, eq, isNull } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, parseUserAddress } from "@/api";
|
|
||||||
import { rateLimit } from "../../../../../middlewares/rate-limit.ts";
|
import { rateLimit } from "../../../../../middlewares/rate-limit.ts";
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||||
import { db } from "@versia/kit/db";
|
import { db } from "@versia-server/kit/db";
|
||||||
import { Users } from "@versia/kit/tables";
|
import { Users } from "@versia-server/kit/tables";
|
||||||
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
import { eq } from "drizzle-orm";
|
import { eq } from "drizzle-orm";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(5);
|
const { users, deleteUsers } = await getTestUsers(5);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,17 @@ import {
|
||||||
RolePermission,
|
RolePermission,
|
||||||
zBoolean,
|
zBoolean,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Relationship } from "@versia/kit/db";
|
import {
|
||||||
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
qsQuery,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
|
import { Relationship } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, qsQuery } from "@/api";
|
|
||||||
import { rateLimit } from "../../../../../middlewares/rate-limit.ts";
|
import { rateLimit } from "../../../../../middlewares/rate-limit.ts";
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(5);
|
const { users, deleteUsers } = await getTestUsers(5);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,15 +3,16 @@ import {
|
||||||
RolePermission,
|
RolePermission,
|
||||||
zBoolean,
|
zBoolean,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { User } from "@versia/kit/db";
|
import { apiRoute, auth, handleZodError } from "@versia-server/kit/api";
|
||||||
import { Users } from "@versia/kit/tables";
|
import { User } from "@versia-server/kit/db";
|
||||||
|
import { parseUserAddress } from "@versia-server/kit/parsers";
|
||||||
|
import { Users } from "@versia-server/kit/tables";
|
||||||
import { eq, ilike, not, or, sql } from "drizzle-orm";
|
import { eq, ilike, not, or, sql } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import stringComparison from "string-comparison";
|
import stringComparison from "string-comparison";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, parseUserAddress } from "@/api";
|
|
||||||
import { rateLimit } from "../../../../../middlewares/rate-limit.ts";
|
import { rateLimit } from "../../../../../middlewares/rate-limit.ts";
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(1);
|
const { users, deleteUsers } = await getTestUsers(1);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,19 +3,24 @@ import {
|
||||||
RolePermission,
|
RolePermission,
|
||||||
zBoolean,
|
zBoolean,
|
||||||
} from "@versia/client/schemas";
|
} 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 * as VersiaEntities from "@versia/sdk/entities";
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { ApiError } from "@versia-server/kit";
|
||||||
|
import {
|
||||||
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
jsonOrForm,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
|
import { Emoji, Media, User } from "@versia-server/kit/db";
|
||||||
|
import { versiaTextToHtml } from "@versia-server/kit/parsers";
|
||||||
|
import { Users } from "@versia-server/kit/tables";
|
||||||
import { and, eq, isNull } from "drizzle-orm";
|
import { and, eq, isNull } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, jsonOrForm } from "@/api";
|
|
||||||
import { mergeAndDeduplicate } from "@/lib";
|
import { mergeAndDeduplicate } from "@/lib";
|
||||||
import { sanitizedHtmlStrip } from "@/sanitization";
|
import { sanitizedHtmlStrip } from "@/sanitization";
|
||||||
import { contentToHtml } from "~/classes/functions/status";
|
|
||||||
import { rateLimit } from "../../../../../middlewares/rate-limit.ts";
|
import { rateLimit } from "../../../../../middlewares/rate-limit.ts";
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
|
|
@ -242,7 +247,7 @@ export default apiRoute((app) =>
|
||||||
|
|
||||||
if (note) {
|
if (note) {
|
||||||
self.source.note = note;
|
self.source.note = note;
|
||||||
self.note = await contentToHtml(
|
self.note = await versiaTextToHtml(
|
||||||
new VersiaEntities.TextContentFormat({
|
new VersiaEntities.TextContentFormat({
|
||||||
"text/markdown": {
|
"text/markdown": {
|
||||||
content: note,
|
content: note,
|
||||||
|
|
@ -329,7 +334,7 @@ export default apiRoute((app) =>
|
||||||
self.source.fields = [];
|
self.source.fields = [];
|
||||||
for (const field of fields_attributes) {
|
for (const field of fields_attributes) {
|
||||||
// Can be Markdown or plaintext, also has emojis
|
// Can be Markdown or plaintext, also has emojis
|
||||||
const parsedName = await contentToHtml(
|
const parsedName = await versiaTextToHtml(
|
||||||
new VersiaEntities.TextContentFormat({
|
new VersiaEntities.TextContentFormat({
|
||||||
"text/markdown": {
|
"text/markdown": {
|
||||||
content: field.name,
|
content: field.name,
|
||||||
|
|
@ -340,7 +345,7 @@ export default apiRoute((app) =>
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
|
|
||||||
const parsedValue = await contentToHtml(
|
const parsedValue = await versiaTextToHtml(
|
||||||
new VersiaEntities.TextContentFormat({
|
new VersiaEntities.TextContentFormat({
|
||||||
"text/markdown": {
|
"text/markdown": {
|
||||||
content: field.value,
|
content: field.value,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(1);
|
const { users, deleteUsers } = await getTestUsers(1);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import { Account } from "@versia/client/schemas";
|
import { Account } from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
|
import { apiRoute, auth } from "@versia-server/kit/api";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { apiRoute, auth } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.get(
|
app.get(
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,13 @@ import {
|
||||||
Application as ApplicationSchema,
|
Application as ApplicationSchema,
|
||||||
CredentialApplication as CredentialApplicationSchema,
|
CredentialApplication as CredentialApplicationSchema,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Application } from "@versia/kit/db";
|
import { apiRoute, handleZodError, jsonOrForm } from "@versia-server/kit/api";
|
||||||
|
import { Application } from "@versia-server/kit/db";
|
||||||
import { randomUUIDv7 } from "bun";
|
import { randomUUIDv7 } from "bun";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, handleZodError, jsonOrForm } from "@/api";
|
|
||||||
import { randomString } from "@/math";
|
import { randomString } from "@/math";
|
||||||
import { rateLimit } from "../../../../middlewares/rate-limit.ts";
|
import { rateLimit } from "../../../../middlewares/rate-limit.ts";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ import {
|
||||||
Application as ApplicationSchema,
|
Application as ApplicationSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Application } from "@versia/kit/db";
|
import { apiRoute, auth } from "@versia-server/kit/api";
|
||||||
|
import { Application } from "@versia-server/kit/db";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { apiRoute, auth } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.get(
|
app.get(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { afterAll, describe, expect, test } from "bun:test";
|
import { afterAll, describe, expect, test } from "bun:test";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(3);
|
const { users, deleteUsers } = await getTestUsers(3);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,14 @@ import {
|
||||||
Account as AccountSchema,
|
Account as AccountSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Timeline } from "@versia/kit/db";
|
import { apiRoute, auth, handleZodError } from "@versia-server/kit/api";
|
||||||
import { Users } from "@versia/kit/tables";
|
import { Timeline } from "@versia-server/kit/db";
|
||||||
|
import { Users } from "@versia-server/kit/tables";
|
||||||
import { and, gt, gte, lt, sql } from "drizzle-orm";
|
import { and, gt, gte, lt, sql } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.get(
|
app.get(
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { describe, expect, test } from "bun:test";
|
import { describe, expect, test } from "bun:test";
|
||||||
import { generateClient } from "~/tests/utils";
|
import { generateClient } from "@versia-server/tests";
|
||||||
|
|
||||||
// /api/v1/challenges
|
// /api/v1/challenges
|
||||||
describe("/api/v1/challenges", () => {
|
describe("/api/v1/challenges", () => {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import { Challenge } from "@versia/client/schemas";
|
import { Challenge } from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
|
import { ApiError } from "@versia-server/kit";
|
||||||
|
import { apiRoute, auth } from "@versia-server/kit/api";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { apiRoute, auth } from "@/api";
|
|
||||||
import { generateChallenge } from "@/challenges";
|
import { generateChallenge } from "@/challenges";
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||||
import { db } from "@versia/kit/db";
|
import { db } from "@versia-server/kit/db";
|
||||||
import { Emojis } from "@versia/kit/tables";
|
import { Emojis } from "@versia-server/kit/tables";
|
||||||
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
import { inArray } from "drizzle-orm";
|
import { inArray } from "drizzle-orm";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(2);
|
const { users, deleteUsers } = await getTestUsers(2);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,14 @@ import {
|
||||||
CustomEmoji as CustomEmojiSchema,
|
CustomEmoji as CustomEmojiSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Emoji } from "@versia/kit/db";
|
import { apiRoute, auth } from "@versia-server/kit/api";
|
||||||
import { Emojis } from "@versia/kit/tables";
|
import { Emoji } from "@versia-server/kit/db";
|
||||||
|
import { Emojis } from "@versia-server/kit/tables";
|
||||||
import { and, eq, isNull, or } from "drizzle-orm";
|
import { and, eq, isNull, or } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver } from "hono-openapi/zod";
|
import { resolver } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.get(
|
app.get(
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||||
import { db } from "@versia/kit/db";
|
import { db } from "@versia-server/kit/db";
|
||||||
import { Emojis } from "@versia/kit/tables";
|
import { Emojis } from "@versia-server/kit/tables";
|
||||||
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
import { inArray } from "drizzle-orm";
|
import { inArray } from "drizzle-orm";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(2);
|
const { users, deleteUsers } = await getTestUsers(2);
|
||||||
let id = "";
|
let id = "";
|
||||||
|
|
|
||||||
|
|
@ -2,18 +2,18 @@ import {
|
||||||
CustomEmoji as CustomEmojiSchema,
|
CustomEmoji as CustomEmojiSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
|
||||||
import { config } from "@versia-server/config";
|
import { config } from "@versia-server/config";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
|
||||||
import { z } from "zod";
|
|
||||||
import {
|
import {
|
||||||
apiRoute,
|
apiRoute,
|
||||||
auth,
|
auth,
|
||||||
handleZodError,
|
handleZodError,
|
||||||
jsonOrForm,
|
jsonOrForm,
|
||||||
withEmojiParam,
|
withEmojiParam,
|
||||||
} from "@/api";
|
} from "@versia-server/kit/api";
|
||||||
|
import { describeRoute } from "hono-openapi";
|
||||||
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
|
import { z } from "zod";
|
||||||
import { mimeLookup } from "@/content_types";
|
import { mimeLookup } from "@/content_types";
|
||||||
|
|
||||||
export default apiRoute((app) => {
|
export default apiRoute((app) => {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
import { afterAll, beforeAll, describe, expect, test } from "bun:test";
|
||||||
import { db } from "@versia/kit/db";
|
import { db } from "@versia-server/kit/db";
|
||||||
import { Emojis } from "@versia/kit/tables";
|
import { Emojis } from "@versia-server/kit/tables";
|
||||||
|
import { generateClient, getTestUsers } from "@versia-server/tests";
|
||||||
import { inArray } from "drizzle-orm";
|
import { inArray } from "drizzle-orm";
|
||||||
import sharp from "sharp";
|
import sharp from "sharp";
|
||||||
import { generateClient, getTestUsers } from "~/tests/utils";
|
|
||||||
|
|
||||||
const { users, deleteUsers } = await getTestUsers(3);
|
const { users, deleteUsers } = await getTestUsers(3);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,16 +2,21 @@ import {
|
||||||
CustomEmoji as CustomEmojiSchema,
|
CustomEmoji as CustomEmojiSchema,
|
||||||
RolePermission,
|
RolePermission,
|
||||||
} from "@versia/client/schemas";
|
} 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 { config } from "@versia-server/config";
|
||||||
|
import { ApiError } from "@versia-server/kit";
|
||||||
|
import {
|
||||||
|
apiRoute,
|
||||||
|
auth,
|
||||||
|
handleZodError,
|
||||||
|
jsonOrForm,
|
||||||
|
} from "@versia-server/kit/api";
|
||||||
|
import { Emoji, Media } from "@versia-server/kit/db";
|
||||||
|
import { Emojis } from "@versia-server/kit/tables";
|
||||||
import { randomUUIDv7 } from "bun";
|
import { randomUUIDv7 } from "bun";
|
||||||
import { and, eq, isNull, or } from "drizzle-orm";
|
import { and, eq, isNull, or } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError, jsonOrForm } from "@/api";
|
|
||||||
import { mimeLookup } from "@/content_types";
|
import { mimeLookup } from "@/content_types";
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
import { RolePermission, Status as StatusSchema } from "@versia/client/schemas";
|
import { RolePermission, Status as StatusSchema } from "@versia/client/schemas";
|
||||||
import { ApiError } from "@versia/kit";
|
import { ApiError } from "@versia-server/kit";
|
||||||
import { Timeline } from "@versia/kit/db";
|
import { apiRoute, auth, handleZodError } from "@versia-server/kit/api";
|
||||||
import { Notes } from "@versia/kit/tables";
|
import { Timeline } from "@versia-server/kit/db";
|
||||||
|
import { Notes } from "@versia-server/kit/tables";
|
||||||
import { and, gt, gte, lt, sql } from "drizzle-orm";
|
import { and, gt, gte, lt, sql } from "drizzle-orm";
|
||||||
import { describeRoute } from "hono-openapi";
|
import { describeRoute } from "hono-openapi";
|
||||||
import { resolver, validator } from "hono-openapi/zod";
|
import { resolver, validator } from "hono-openapi/zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { apiRoute, auth, handleZodError } from "@/api";
|
|
||||||
|
|
||||||
export default apiRoute((app) =>
|
export default apiRoute((app) =>
|
||||||
app.get(
|
app.get(
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue