refactor(api): 🔥 Remove old @versia/client version

This commit is contained in:
Jesse Wierzbinski 2025-03-22 18:04:47 +01:00
parent 54e282b03c
commit 8d1af1b0cd
No known key found for this signature in database
121 changed files with 649 additions and 756 deletions

View file

@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship } from "@versia/kit/db"; import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
const route = createRoute({ const route = createRoute({
method: "post", method: "post",
@ -28,8 +28,8 @@ const route = createRoute({
auth: true, auth: true,
scopes: ["write:blocks"], scopes: ["write:blocks"],
permissions: [ permissions: [
RolePermissions.ManageOwnBlocks, RolePermission.ManageOwnBlocks,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
}), }),
withUserParam, withUserParam,

View file

@ -10,9 +10,9 @@ import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
iso631, iso631,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship } from "@versia/kit/db"; import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ErrorSchema } from "~/types/api"; import { ErrorSchema } from "~/types/api";
const route = createRoute({ const route = createRoute({
@ -30,8 +30,8 @@ const route = createRoute({
auth: true, auth: true,
scopes: ["write:follows"], scopes: ["write:follows"],
permissions: [ permissions: [
RolePermissions.ManageOwnFollows, RolePermission.ManageOwnFollows,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
}), }),
withUserParam, withUserParam,

View file

@ -6,9 +6,10 @@ import {
withUserParam, withUserParam,
} from "@/api"; } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Account as AccountSchema } from "@versia/client-ng/schemas"; import { Account as AccountSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Timeline } from "@versia/kit/db"; import { Timeline } from "@versia/kit/db";
import { RolePermissions, Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { and, gt, gte, lt, sql } from "drizzle-orm"; import { and, gt, gte, lt, sql } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
@ -26,8 +27,8 @@ const route = createRoute({
auth: false, auth: false,
scopes: ["read:accounts"], scopes: ["read:accounts"],
permissions: [ permissions: [
RolePermissions.ViewAccountFollows, RolePermission.ViewAccountFollows,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
}), }),
withUserParam, withUserParam,

View file

@ -6,11 +6,11 @@ import {
withUserParam, withUserParam,
} from "@/api"; } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Account as AccountSchema } from "@versia/client-ng/schemas"; import { Account as AccountSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Timeline } from "@versia/kit/db"; import { Timeline } from "@versia/kit/db";
import { RolePermissions, Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { and, gt, gte, lt, sql } from "drizzle-orm"; import { and, gt, gte, lt, sql } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
method: "get", method: "get",
path: "/api/v1/accounts/{id}/following", path: "/api/v1/accounts/{id}/following",
@ -26,8 +26,8 @@ const route = createRoute({
auth: false, auth: false,
scopes: ["read:accounts"], scopes: ["read:accounts"],
permissions: [ permissions: [
RolePermissions.ViewAccountFollows, RolePermission.ViewAccountFollows,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
}), }),
withUserParam, withUserParam,

View file

@ -1,5 +1,4 @@
import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { afterAll, beforeAll, describe, expect, test } from "bun:test";
import type { Account as ApiAccount } from "@versia/client/types";
import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils";
const { users, deleteUsers } = await getTestUsers(5); const { users, deleteUsers } = await getTestUsers(5);
@ -68,6 +67,6 @@ describe("/api/v1/accounts/:id", () => {
visible: false, visible: false,
}), }),
]), ]),
} satisfies ApiAccount); });
}); });
}); });

View file

@ -6,8 +6,8 @@ import {
withUserParam, withUserParam,
} from "@/api"; } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Account as AccountSchema } from "@versia/client-ng/schemas"; import { Account as AccountSchema } from "@versia/client/schemas";
import { RolePermissions } from "@versia/kit/tables"; import { RolePermission } from "@versia/client/schemas";
const route = createRoute({ const route = createRoute({
method: "get", method: "get",
@ -21,7 +21,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: false, auth: false,
permissions: [RolePermissions.ViewAccounts], permissions: [RolePermission.ViewAccounts],
}), }),
withUserParam, withUserParam,
] as const, ] as const,

View file

@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship } from "@versia/kit/db"; import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
const route = createRoute({ const route = createRoute({
method: "post", method: "post",
@ -28,8 +28,8 @@ const route = createRoute({
auth: true, auth: true,
scopes: ["write:mutes"], scopes: ["write:mutes"],
permissions: [ permissions: [
RolePermissions.ManageOwnMutes, RolePermission.ManageOwnMutes,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
}), }),
withUserParam, withUserParam,

View file

@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship } from "@versia/kit/db"; import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
const route = createRoute({ const route = createRoute({
method: "post", method: "post",
@ -27,8 +27,8 @@ const route = createRoute({
auth: true, auth: true,
scopes: ["write:accounts"], scopes: ["write:accounts"],
permissions: [ permissions: [
RolePermissions.ManageOwnAccount, RolePermission.ManageOwnAccount,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
}), }),
withUserParam, withUserParam,

View file

@ -3,9 +3,9 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship } from "@versia/kit/db"; import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
const route = createRoute({ const route = createRoute({
method: "post", method: "post",
@ -22,8 +22,8 @@ const route = createRoute({
auth: true, auth: true,
scopes: ["write:accounts"], scopes: ["write:accounts"],
permissions: [ permissions: [
RolePermissions.ManageOwnAccount, RolePermission.ManageOwnAccount,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
}), }),
withUserParam, withUserParam,

View file

@ -6,8 +6,8 @@ import {
withUserParam, withUserParam,
} from "@/api"; } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Account as AccountSchema } from "@versia/client-ng/schemas"; import { Account as AccountSchema } from "@versia/client/schemas";
import { RolePermissions } from "@versia/kit/tables"; import { RolePermission } from "@versia/client/schemas";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { ErrorSchema } from "~/types/api"; import { ErrorSchema } from "~/types/api";
@ -21,7 +21,7 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
scopes: ["write:accounts"], scopes: ["write:accounts"],
permissions: [RolePermissions.ViewAccounts], permissions: [RolePermission.ViewAccounts],
}), }),
withUserParam, withUserParam,
] as const, ] as const,

View file

@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship } from "@versia/kit/db"; import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
const route = createRoute({ const route = createRoute({
method: "post", method: "post",
@ -27,8 +27,8 @@ const route = createRoute({
auth: true, auth: true,
scopes: ["write:follows"], scopes: ["write:follows"],
permissions: [ permissions: [
RolePermissions.ManageOwnFollows, RolePermission.ManageOwnFollows,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
}), }),
withUserParam, withUserParam,

View file

@ -1,6 +1,6 @@
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 { Role } from "@versia/kit/db"; import { Role } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { generateClient, getTestUsers } from "~/tests/utils"; import { generateClient, getTestUsers } from "~/tests/utils";
const { users, deleteUsers } = await getTestUsers(2); const { users, deleteUsers } = await getTestUsers(2);
@ -11,7 +11,7 @@ beforeAll(async () => {
// Create new role // Create new role
role = await Role.insert({ role = await Role.insert({
name: "test", name: "test",
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
priority: 2, priority: 2,
description: "test", description: "test",
visible: true, visible: true,
@ -25,7 +25,7 @@ beforeAll(async () => {
// Create a role with higher priority than the user's role // Create a role with higher priority than the user's role
higherPriorityRole = await Role.insert({ higherPriorityRole = await Role.insert({
name: "higherPriorityRole", name: "higherPriorityRole",
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
priority: 3, // Higher priority than the user's role priority: 3, // Higher priority than the user's role
description: "Higher priority role", description: "Higher priority role",
visible: true, visible: true,

View file

@ -3,9 +3,9 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Role as RoleSchema, Role as RoleSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Role } from "@versia/kit/db"; import { Role } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { ErrorSchema } from "~/types/api"; import { ErrorSchema } from "~/types/api";
@ -17,7 +17,7 @@ const routePost = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
}), }),
withUserParam, withUserParam,
] as const, ] as const,
@ -57,7 +57,7 @@ const routeDelete = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
}), }),
withUserParam, withUserParam,
] as const, ] as const,

View file

@ -1,6 +1,6 @@
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 { Role } from "@versia/kit/db"; import { Role } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { generateClient, getTestUsers } from "~/tests/utils"; import { generateClient, getTestUsers } from "~/tests/utils";
const { users, deleteUsers } = await getTestUsers(2); const { users, deleteUsers } = await getTestUsers(2);
@ -10,7 +10,7 @@ beforeAll(async () => {
// Create new role // Create new role
role = await Role.insert({ role = await Role.insert({
name: "test", name: "test",
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
priority: 2, priority: 2,
description: "test", description: "test",
visible: true, visible: true,
@ -52,7 +52,7 @@ describe("/api/v1/accounts/:id/roles", () => {
expect(data).toContainEqual({ expect(data).toContainEqual({
id: role.id, id: role.id,
name: "test", name: "test",
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
priority: 2, priority: 2,
description: "test", description: "test",
visible: true, visible: true,

View file

@ -3,7 +3,7 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Role as RoleSchema, Role as RoleSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { Role } from "@versia/kit/db"; import { Role } from "@versia/kit/db";
const route = createRoute({ const route = createRoute({

View file

@ -10,9 +10,10 @@ import {
Account as AccountSchema, Account as AccountSchema,
Status as StatusSchema, Status as StatusSchema,
zBoolean, zBoolean,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Timeline } from "@versia/kit/db"; import { Timeline } from "@versia/kit/db";
import { Notes, RolePermissions } from "@versia/kit/tables"; import { Notes } from "@versia/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";
const route = createRoute({ const route = createRoute({
@ -28,8 +29,8 @@ const route = createRoute({
auth({ auth({
auth: false, auth: false,
permissions: [ permissions: [
RolePermissions.ViewNotes, RolePermission.ViewNotes,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
scopes: ["read:statuses"], scopes: ["read:statuses"],
}), }),

View file

@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship } from "@versia/kit/db"; import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
const route = createRoute({ const route = createRoute({
method: "post", method: "post",
@ -27,8 +27,8 @@ const route = createRoute({
auth: true, auth: true,
scopes: ["write:blocks"], scopes: ["write:blocks"],
permissions: [ permissions: [
RolePermissions.ManageOwnBlocks, RolePermission.ManageOwnBlocks,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
}), }),
withUserParam, withUserParam,

View file

@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship } from "@versia/kit/db"; import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
const route = createRoute({ const route = createRoute({
method: "post", method: "post",
@ -27,8 +27,8 @@ const route = createRoute({
auth: true, auth: true,
scopes: ["write:follows"], scopes: ["write:follows"],
permissions: [ permissions: [
RolePermissions.ManageOwnFollows, RolePermission.ManageOwnFollows,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
}), }),
withUserParam, withUserParam,

View file

@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship } from "@versia/kit/db"; import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
const route = createRoute({ const route = createRoute({
method: "post", method: "post",
@ -27,8 +27,8 @@ const route = createRoute({
auth: true, auth: true,
scopes: ["write:mutes"], scopes: ["write:mutes"],
permissions: [ permissions: [
RolePermissions.ManageOwnMutes, RolePermission.ManageOwnMutes,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
}), }),
withUserParam, withUserParam,

View file

@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship } from "@versia/kit/db"; import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
const route = createRoute({ const route = createRoute({
method: "post", method: "post",
@ -27,8 +27,8 @@ const route = createRoute({
auth: true, auth: true,
scopes: ["write:accounts"], scopes: ["write:accounts"],
permissions: [ permissions: [
RolePermissions.ManageOwnAccount, RolePermission.ManageOwnAccount,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
], ],
}), }),
withUserParam, withUserParam,

View file

@ -3,9 +3,10 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
FamiliarFollowers as FamiliarFollowersSchema, FamiliarFollowers as FamiliarFollowersSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { User, db } from "@versia/kit/db"; import { User, db } from "@versia/kit/db";
import { RolePermissions, type Users } from "@versia/kit/tables"; import type { Users } from "@versia/kit/tables";
import { type InferSelectModel, sql } from "drizzle-orm"; import { type InferSelectModel, sql } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
@ -22,7 +23,7 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
scopes: ["read:follows"], scopes: ["read:follows"],
permissions: [RolePermissions.ManageOwnFollows], permissions: [RolePermission.ManageOwnFollows],
}), }),
qsQuery(), qsQuery(),
] as const, ] as const,

View file

@ -1,7 +1,7 @@
import { apiRoute, auth, jsonOrForm, reusedResponses } from "@/api"; import { apiRoute, auth, jsonOrForm, reusedResponses } from "@/api";
import { tempmailDomains } from "@/tempmail"; import { tempmailDomains } from "@/tempmail";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { zBoolean } from "@versia/client-ng/schemas"; import { zBoolean } from "@versia/client/schemas";
import { User } from "@versia/kit/db"; import { User } from "@versia/kit/db";
import { Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { and, eq, isNull } from "drizzle-orm"; import { and, eq, isNull } from "drizzle-orm";

View file

@ -6,9 +6,10 @@ import {
reusedResponses, reusedResponses,
} from "@/api"; } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Account as AccountSchema } from "@versia/client-ng/schemas"; import { Account as AccountSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Instance, User } from "@versia/kit/db"; import { Instance, User } from "@versia/kit/db";
import { RolePermissions, Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { and, eq, isNull } from "drizzle-orm"; import { and, eq, isNull } from "drizzle-orm";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { config } from "~/config.ts"; import { config } from "~/config.ts";
@ -22,7 +23,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: false, auth: false,
permissions: [RolePermissions.Search], permissions: [RolePermission.Search],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -4,9 +4,9 @@ import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
zBoolean, zBoolean,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship } from "@versia/kit/db"; import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
const route = createRoute({ const route = createRoute({
method: "get", method: "get",
@ -22,7 +22,7 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
scopes: ["read:follows"], scopes: ["read:follows"],
permissions: [RolePermissions.ManageOwnFollows], permissions: [RolePermission.ManageOwnFollows],
}), }),
qsQuery(), qsQuery(),
] as const, ] as const,

View file

@ -1,8 +1,9 @@
import { apiRoute, auth, parseUserAddress } from "@/api"; import { apiRoute, auth, parseUserAddress } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Account as AccountSchema, zBoolean } from "@versia/client-ng/schemas"; import { Account as AccountSchema, zBoolean } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { User } from "@versia/kit/db"; import { User } from "@versia/kit/db";
import { RolePermissions, Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { eq, ilike, not, or, sql } from "drizzle-orm"; import { eq, ilike, not, or, sql } from "drizzle-orm";
import stringComparison from "string-comparison"; import stringComparison from "string-comparison";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
@ -19,7 +20,7 @@ export const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: false, auth: false,
permissions: [RolePermissions.Search, RolePermissions.ViewAccounts], permissions: [RolePermission.Search, RolePermission.ViewAccounts],
scopes: ["read:accounts"], scopes: ["read:accounts"],
}), }),
] as const, ] as const,

View file

@ -2,9 +2,10 @@ import { apiRoute, auth, jsonOrForm, reusedResponses } from "@/api";
import { mergeAndDeduplicate } from "@/lib"; import { mergeAndDeduplicate } from "@/lib";
import { sanitizedHtmlStrip } from "@/sanitization"; import { sanitizedHtmlStrip } from "@/sanitization";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Account as AccountSchema, zBoolean } from "@versia/client-ng/schemas"; import { Account as AccountSchema, zBoolean } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Emoji, User } from "@versia/kit/db"; import { Emoji, User } from "@versia/kit/db";
import { RolePermissions, Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { and, eq, isNull } from "drizzle-orm"; import { and, eq, isNull } from "drizzle-orm";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { contentToHtml } from "~/classes/functions/status"; import { contentToHtml } from "~/classes/functions/status";
@ -22,7 +23,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnAccount], permissions: [RolePermission.ManageOwnAccount],
scopes: ["write:accounts"], scopes: ["write:accounts"],
}), }),
jsonOrForm(), jsonOrForm(),

View file

@ -1,6 +1,6 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute } from "@hono/zod-openapi"; import { createRoute } from "@hono/zod-openapi";
import { Account } from "@versia/client-ng/schemas"; import { Account } from "@versia/client/schemas";
const route = createRoute({ const route = createRoute({
method: "get", method: "get",

View file

@ -4,7 +4,7 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Application as ApplicationSchema, Application as ApplicationSchema,
CredentialApplication as CredentialApplicationSchema, CredentialApplication as CredentialApplicationSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { Application } from "@versia/kit/db"; import { Application } from "@versia/kit/db";
const route = createRoute({ const route = createRoute({

View file

@ -1,8 +1,8 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute } from "@hono/zod-openapi"; import { createRoute } from "@hono/zod-openapi";
import { Application as ApplicationSchema } from "@versia/client-ng/schemas"; import { Application as ApplicationSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Application } from "@versia/kit/db"; import { Application } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
const route = createRoute({ const route = createRoute({
@ -17,7 +17,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnApps], permissions: [RolePermission.ManageOwnApps],
}), }),
] as const, ] as const,
responses: { responses: {

View file

@ -1,10 +1,10 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Account as AccountSchema } from "@versia/client-ng/schemas"; import { Account as AccountSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Timeline } from "@versia/kit/db"; import { Timeline } from "@versia/kit/db";
import { RolePermissions, Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { and, gt, gte, lt, sql } from "drizzle-orm"; import { and, gt, gte, lt, sql } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
method: "get", method: "get",
path: "/api/v1/blocks", path: "/api/v1/blocks",
@ -18,7 +18,7 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
scopes: ["read:blocks"], scopes: ["read:blocks"],
permissions: [RolePermissions.ManageOwnBlocks], permissions: [RolePermission.ManageOwnBlocks],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -1,7 +1,7 @@
import { apiRoute, auth } from "@/api"; import { apiRoute, auth } from "@/api";
import { generateChallenge } from "@/challenges"; import { generateChallenge } from "@/challenges";
import { createRoute } from "@hono/zod-openapi"; import { createRoute } from "@hono/zod-openapi";
import { Challenge } from "@versia/client-ng/schemas"; import { Challenge } from "@versia/client/schemas";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { config } from "~/config.ts"; import { config } from "~/config.ts";
import { ErrorSchema } from "~/types/api"; import { ErrorSchema } from "~/types/api";

View file

@ -1,8 +1,9 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { CustomEmoji as CustomEmojiSchema } from "@versia/client-ng/schemas"; import { CustomEmoji as CustomEmojiSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Emoji } from "@versia/kit/db"; import { Emoji } from "@versia/kit/db";
import { Emojis, RolePermissions } from "@versia/kit/tables"; import { Emojis } from "@versia/kit/tables";
import { and, eq, isNull, or } from "drizzle-orm"; import { and, eq, isNull, or } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
@ -17,7 +18,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: false, auth: false,
permissions: [RolePermissions.ViewEmojis], permissions: [RolePermission.ViewEmojis],
}), }),
] as const, ] as const,
responses: { responses: {

View file

@ -7,8 +7,8 @@ import {
} from "@/api"; } from "@/api";
import { mimeLookup } from "@/content_types"; import { mimeLookup } from "@/content_types";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { CustomEmoji as CustomEmojiSchema } from "@versia/client-ng/schemas"; import { CustomEmoji as CustomEmojiSchema } from "@versia/client/schemas";
import { RolePermissions } from "@versia/kit/tables"; import { RolePermission } from "@versia/client/schemas";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { config } from "~/config.ts"; import { config } from "~/config.ts";
import { ErrorSchema } from "~/types/api"; import { ErrorSchema } from "~/types/api";
@ -50,7 +50,7 @@ const routeGet = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ViewEmojis], permissions: [RolePermission.ViewEmojis],
}), }),
withEmojiParam, withEmojiParam,
] as const, ] as const,
@ -90,8 +90,8 @@ const routePatch = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnEmojis, RolePermission.ManageOwnEmojis,
RolePermissions.ViewEmojis, RolePermission.ViewEmojis,
], ],
}), }),
jsonOrForm(), jsonOrForm(),
@ -154,8 +154,8 @@ const routeDelete = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnEmojis, RolePermission.ManageOwnEmojis,
RolePermissions.ViewEmojis, RolePermission.ViewEmojis,
], ],
}), }),
withEmojiParam, withEmojiParam,
@ -187,7 +187,7 @@ export default apiRoute((app) => {
// Don't leak non-global emojis to non-admins // Don't leak non-global emojis to non-admins
if ( if (
!user.hasPermission(RolePermissions.ManageEmojis) && !user.hasPermission(RolePermission.ManageEmojis) &&
emoji.data.ownerId !== user.data.id emoji.data.ownerId !== user.data.id
) { ) {
throw new ApiError(404, "Emoji not found"); throw new ApiError(404, "Emoji not found");
@ -202,13 +202,13 @@ export default apiRoute((app) => {
// Check if user is admin // Check if user is admin
if ( if (
!user.hasPermission(RolePermissions.ManageEmojis) && !user.hasPermission(RolePermission.ManageEmojis) &&
emoji.data.ownerId !== user.data.id emoji.data.ownerId !== user.data.id
) { ) {
throw new ApiError( throw new ApiError(
403, 403,
"Cannot modify emoji not owned by you", "Cannot modify emoji not owned by you",
`This emoji is either global (and you do not have the '${RolePermissions.ManageEmojis}' permission) or not owned by you`, `This emoji is either global (and you do not have the '${RolePermission.ManageEmojis}' permission) or not owned by you`,
); );
} }
@ -220,11 +220,11 @@ export default apiRoute((app) => {
shortcode, shortcode,
} = context.req.valid("json"); } = context.req.valid("json");
if (!user.hasPermission(RolePermissions.ManageEmojis) && emojiGlobal) { if (!user.hasPermission(RolePermission.ManageEmojis) && emojiGlobal) {
throw new ApiError( throw new ApiError(
401, 401,
"Missing permissions", "Missing permissions",
`'${RolePermissions.ManageEmojis}' permission is needed to upload global emojis`, `'${RolePermission.ManageEmojis}' permission is needed to upload global emojis`,
); );
} }
@ -271,13 +271,13 @@ export default apiRoute((app) => {
// Check if user is admin // Check if user is admin
if ( if (
!user.hasPermission(RolePermissions.ManageEmojis) && !user.hasPermission(RolePermission.ManageEmojis) &&
emoji.data.ownerId !== user.data.id emoji.data.ownerId !== user.data.id
) { ) {
throw new ApiError( throw new ApiError(
403, 403,
"Cannot delete emoji not owned by you", "Cannot delete emoji not owned by you",
`This emoji is either global (and you do not have the '${RolePermissions.ManageEmojis}' permission) or not owned by you`, `This emoji is either global (and you do not have the '${RolePermission.ManageEmojis}' permission) or not owned by you`,
); );
} }

View file

@ -1,13 +1,13 @@
import { apiRoute, auth, jsonOrForm, reusedResponses } from "@/api"; import { apiRoute, auth, jsonOrForm, reusedResponses } from "@/api";
import { mimeLookup } from "@/content_types"; import { mimeLookup } from "@/content_types";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { CustomEmoji as CustomEmojiSchema } from "@versia/client-ng/schemas"; import { CustomEmoji as CustomEmojiSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Emoji, Media } from "@versia/kit/db"; import { Emoji, Media } from "@versia/kit/db";
import { Emojis, RolePermissions } from "@versia/kit/tables"; import { Emojis } from "@versia/kit/tables";
import { and, eq, isNull, or } from "drizzle-orm"; import { and, eq, isNull, or } from "drizzle-orm";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { config } from "~/config.ts"; import { config } from "~/config.ts";
const schema = z.object({ const schema = z.object({
shortcode: CustomEmojiSchema.shape.shortcode, shortcode: CustomEmojiSchema.shape.shortcode,
element: z element: z
@ -43,8 +43,8 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnEmojis, RolePermission.ManageOwnEmojis,
RolePermissions.ViewEmojis, RolePermission.ViewEmojis,
], ],
}), }),
jsonOrForm(), jsonOrForm(),
@ -83,11 +83,11 @@ export default apiRoute((app) =>
context.req.valid("json"); context.req.valid("json");
const { user } = context.get("auth"); const { user } = context.get("auth");
if (!user.hasPermission(RolePermissions.ManageEmojis) && global) { if (!user.hasPermission(RolePermission.ManageEmojis) && global) {
throw new ApiError( throw new ApiError(
401, 401,
"Missing permissions", "Missing permissions",
`Only users with the '${RolePermissions.ManageEmojis}' permission can upload global emojis`, `Only users with the '${RolePermission.ManageEmojis}' permission can upload global emojis`,
); );
} }

View file

@ -1,8 +1,9 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Status as StatusSchema } from "@versia/client-ng/schemas"; import { Status as StatusSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Timeline } from "@versia/kit/db"; import { Timeline } from "@versia/kit/db";
import { Notes, RolePermissions } from "@versia/kit/tables"; import { Notes } from "@versia/kit/tables";
import { and, gt, gte, lt, sql } from "drizzle-orm"; import { and, gt, gte, lt, sql } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
@ -17,7 +18,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnLikes], permissions: [RolePermission.ManageOwnLikes],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -3,9 +3,9 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship, User } from "@versia/kit/db"; import { Relationship, User } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
const route = createRoute({ const route = createRoute({
@ -19,7 +19,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnFollows], permissions: [RolePermission.ManageOwnFollows],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -3,9 +3,9 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Relationship as RelationshipSchema, Relationship as RelationshipSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Relationship, User } from "@versia/kit/db"; import { Relationship, User } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
const route = createRoute({ const route = createRoute({
@ -19,7 +19,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnFollows], permissions: [RolePermission.ManageOwnFollows],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -1,8 +1,9 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Account as AccountSchema } from "@versia/client-ng/schemas"; import { Account as AccountSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Timeline } from "@versia/kit/db"; import { Timeline } from "@versia/kit/db";
import { RolePermissions, Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { and, gt, gte, lt, sql } from "drizzle-orm"; import { and, gt, gte, lt, sql } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
@ -17,7 +18,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnFollows], permissions: [RolePermission.ManageOwnFollows],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -1,6 +1,6 @@
import { apiRoute } from "@/api"; import { apiRoute } from "@/api";
import { createRoute } from "@hono/zod-openapi"; import { createRoute } from "@hono/zod-openapi";
import { ExtendedDescription as ExtendedDescriptionSchema } from "@versia/client-ng/schemas"; import { ExtendedDescription as ExtendedDescriptionSchema } from "@versia/client/schemas";
import { markdownParse } from "~/classes/functions/status"; import { markdownParse } from "~/classes/functions/status";
import { config } from "~/config.ts"; import { config } from "~/config.ts";

View file

@ -1,7 +1,7 @@
import { apiRoute, auth } from "@/api"; import { apiRoute, auth } from "@/api";
import { proxyUrl } from "@/response"; import { proxyUrl } from "@/response";
import { createRoute, type z } from "@hono/zod-openapi"; import { createRoute, type z } from "@hono/zod-openapi";
import { InstanceV1 as InstanceV1Schema } from "@versia/client-ng/schemas"; import { InstanceV1 as InstanceV1Schema } from "@versia/client/schemas";
import { Instance, Note, User } from "@versia/kit/db"; import { Instance, Note, User } from "@versia/kit/db";
import { Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { and, eq, isNull } from "drizzle-orm"; import { and, eq, isNull } from "drizzle-orm";

View file

@ -1,6 +1,6 @@
import { apiRoute, auth } from "@/api"; import { apiRoute, auth } from "@/api";
import { createRoute } from "@hono/zod-openapi"; import { createRoute } from "@hono/zod-openapi";
import { PrivacyPolicy as PrivacyPolicySchema } from "@versia/client-ng/schemas"; import { PrivacyPolicy as PrivacyPolicySchema } from "@versia/client/schemas";
import { markdownParse } from "~/classes/functions/status"; import { markdownParse } from "~/classes/functions/status";
import { config } from "~/config.ts"; import { config } from "~/config.ts";

View file

@ -1,6 +1,6 @@
import { apiRoute, auth } from "@/api"; import { apiRoute, auth } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Rule as RuleSchema } from "@versia/client-ng/schemas"; import { Rule as RuleSchema } from "@versia/client/schemas";
import { config } from "~/config.ts"; import { config } from "~/config.ts";
const route = createRoute({ const route = createRoute({

View file

@ -1,6 +1,6 @@
import { apiRoute, auth } from "@/api"; import { apiRoute, auth } from "@/api";
import { createRoute } from "@hono/zod-openapi"; import { createRoute } from "@hono/zod-openapi";
import { TermsOfService as TermsOfServiceSchema } from "@versia/client-ng/schemas"; import { TermsOfService as TermsOfServiceSchema } from "@versia/client/schemas";
import { markdownParse } from "~/classes/functions/status"; import { markdownParse } from "~/classes/functions/status";
import { config } from "~/config.ts"; import { config } from "~/config.ts";

View file

@ -4,9 +4,10 @@ import {
Marker as MarkerSchema, Marker as MarkerSchema,
Notification as NotificationSchema, Notification as NotificationSchema,
Status as StatusSchema, Status as StatusSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { db } from "@versia/kit/db"; import { db } from "@versia/kit/db";
import { Markers, RolePermissions } from "@versia/kit/tables"; import { Markers } from "@versia/kit/tables";
import { type SQL, and, eq } from "drizzle-orm"; import { type SQL, and, eq } from "drizzle-orm";
const MarkerResponseSchema = z.object({ const MarkerResponseSchema = z.object({
@ -26,7 +27,7 @@ const routeGet = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnAccount], permissions: [RolePermission.ManageOwnAccount],
}), }),
] as const, ] as const,
request: { request: {
@ -67,7 +68,7 @@ const routePost = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnAccount], permissions: [RolePermission.ManageOwnAccount],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -1,8 +1,8 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Attachment as AttachmentSchema } from "@versia/client-ng/schemas"; import { Attachment as AttachmentSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Media } from "@versia/kit/db"; import { Media } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { ErrorSchema } from "~/types/api"; import { ErrorSchema } from "~/types/api";
@ -20,7 +20,7 @@ const routePut = createRoute({
auth({ auth({
auth: true, auth: true,
scopes: ["write:media"], scopes: ["write:media"],
permissions: [RolePermissions.ManageOwnMedia], permissions: [RolePermission.ManageOwnMedia],
}), }),
] as const, ] as const,
request: { request: {
@ -84,7 +84,7 @@ const routeGet = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnMedia], permissions: [RolePermission.ManageOwnMedia],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -1,8 +1,8 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Attachment as AttachmentSchema } from "@versia/client-ng/schemas"; import { Attachment as AttachmentSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Media } from "@versia/kit/db"; import { Media } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ErrorSchema } from "~/types/api"; import { ErrorSchema } from "~/types/api";
const route = createRoute({ const route = createRoute({
@ -20,7 +20,7 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
scopes: ["write:media"], scopes: ["write:media"],
permissions: [RolePermissions.ManageOwnMedia], permissions: [RolePermission.ManageOwnMedia],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -1,8 +1,9 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Account as AccountSchema } from "@versia/client-ng/schemas"; import { Account as AccountSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Timeline } from "@versia/kit/db"; import { Timeline } from "@versia/kit/db";
import { RolePermissions, Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { and, gt, gte, lt, sql } from "drizzle-orm"; import { and, gt, gte, lt, sql } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
@ -18,7 +19,7 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
scopes: ["read:mutes"], scopes: ["read:mutes"],
permissions: [RolePermissions.ManageOwnMutes], permissions: [RolePermission.ManageOwnMutes],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -1,6 +1,6 @@
import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { afterAll, beforeAll, describe, expect, test } from "bun:test";
import type { z } from "@hono/zod-openapi"; import type { z } from "@hono/zod-openapi";
import type { Notification } from "@versia/client-ng/schemas"; import type { Notification } from "@versia/client/schemas";
import { generateClient, getTestUsers } from "~/tests/utils"; import { generateClient, getTestUsers } from "~/tests/utils";
const { users, deleteUsers } = await getTestUsers(2); const { users, deleteUsers } = await getTestUsers(2);

View file

@ -1,8 +1,8 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Notification as NotificationSchema } from "@versia/client-ng/schemas"; import { Notification as NotificationSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Notification } from "@versia/kit/db"; import { Notification } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
const route = createRoute({ const route = createRoute({
@ -18,7 +18,7 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
scopes: ["write:notifications"], scopes: ["write:notifications"],
permissions: [RolePermissions.ManageOwnNotifications], permissions: [RolePermission.ManageOwnNotifications],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -1,6 +1,6 @@
import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { afterAll, beforeAll, describe, expect, test } from "bun:test";
import type { z } from "@hono/zod-openapi"; import type { z } from "@hono/zod-openapi";
import type { Notification } from "@versia/client-ng/schemas"; import type { Notification } from "@versia/client/schemas";
import { generateClient, getTestUsers } from "~/tests/utils"; import { generateClient, getTestUsers } from "~/tests/utils";
const { users, deleteUsers } = await getTestUsers(2); const { users, deleteUsers } = await getTestUsers(2);

View file

@ -1,8 +1,8 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Notification as NotificationSchema } from "@versia/client-ng/schemas"; import { Notification as NotificationSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Notification } from "@versia/kit/db"; import { Notification } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { ErrorSchema } from "~/types/api"; import { ErrorSchema } from "~/types/api";
@ -18,7 +18,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnNotifications], permissions: [RolePermission.ManageOwnNotifications],
scopes: ["read:notifications"], scopes: ["read:notifications"],
}), }),
] as const, ] as const,

View file

@ -1,6 +1,6 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute } from "@hono/zod-openapi"; import { createRoute } from "@hono/zod-openapi";
import { RolePermissions } from "@versia/kit/tables"; import { RolePermission } from "@versia/client/schemas";
const route = createRoute({ const route = createRoute({
method: "post", method: "post",
@ -14,7 +14,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnNotifications], permissions: [RolePermission.ManageOwnNotifications],
scopes: ["write:notifications"], scopes: ["write:notifications"],
}), }),
] as const, ] as const,

View file

@ -1,6 +1,6 @@
import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { afterAll, beforeAll, describe, expect, test } from "bun:test";
import type { z } from "@hono/zod-openapi"; import type { z } from "@hono/zod-openapi";
import type { Notification } from "@versia/client-ng/schemas"; import type { Notification } from "@versia/client/schemas";
import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils"; import { generateClient, getTestStatuses, getTestUsers } from "~/tests/utils";
const { users, deleteUsers } = await getTestUsers(2); const { users, deleteUsers } = await getTestUsers(2);

View file

@ -1,6 +1,6 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { RolePermissions } from "@versia/kit/tables"; import { RolePermission } from "@versia/client/schemas";
const schemas = { const schemas = {
query: z.object({ query: z.object({
@ -15,7 +15,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnNotifications], permissions: [RolePermission.ManageOwnNotifications],
scopes: ["write:notifications"], scopes: ["write:notifications"],
}), }),
] as const, ] as const,

View file

@ -4,9 +4,10 @@ import {
Account as AccountSchema, Account as AccountSchema,
Notification as NotificationSchema, Notification as NotificationSchema,
zBoolean, zBoolean,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Timeline } from "@versia/kit/db"; import { Timeline } from "@versia/kit/db";
import { Notifications, RolePermissions } from "@versia/kit/tables"; import { Notifications } from "@versia/kit/tables";
import { and, eq, gt, gte, inArray, lt, not, sql } from "drizzle-orm"; import { and, eq, gt, gte, inArray, lt, not, sql } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
@ -21,8 +22,8 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnNotifications, RolePermission.ManageOwnNotifications,
RolePermissions.ViewPrivateTimelines, RolePermission.ViewPrivateTimelines,
], ],
}), }),
] as const, ] as const,

View file

@ -1,7 +1,7 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute } from "@hono/zod-openapi"; import { createRoute } from "@hono/zod-openapi";
import { Account } from "@versia/client-ng/schemas"; import { Account } from "@versia/client/schemas";
import { RolePermissions } from "@versia/kit/tables"; import { RolePermission } from "@versia/client/schemas";
const route = createRoute({ const route = createRoute({
method: "delete", method: "delete",
@ -15,7 +15,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnAccount], permissions: [RolePermission.ManageOwnAccount],
scopes: ["write:account"], scopes: ["write:account"],
}), }),
] as const, ] as const,

View file

@ -1,7 +1,7 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute } from "@hono/zod-openapi"; import { createRoute } from "@hono/zod-openapi";
import { Account } from "@versia/client-ng/schemas"; import { Account } from "@versia/client/schemas";
import { RolePermissions } from "@versia/kit/tables"; import { RolePermission } from "@versia/client/schemas";
const route = createRoute({ const route = createRoute({
method: "delete", method: "delete",
@ -15,7 +15,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnAccount], permissions: [RolePermission.ManageOwnAccount],
scopes: ["write:account"], scopes: ["write:account"],
}), }),
] as const, ] as const,

View file

@ -1,8 +1,8 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { RolePermission } from "@versia/client/schemas";
import { PushSubscription } from "@versia/kit/db"; import { PushSubscription } from "@versia/kit/db";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { RolePermissions } from "~/drizzle/schema";
export default apiRoute((app) => export default apiRoute((app) =>
app.openapi( app.openapi(
@ -18,7 +18,7 @@ export default apiRoute((app) =>
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.UsePushNotifications], permissions: [RolePermission.UsePushNotifications],
scopes: ["push"], scopes: ["push"],
}), }),
] as const, ] as const,

View file

@ -1,9 +1,9 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute } from "@hono/zod-openapi"; import { createRoute } from "@hono/zod-openapi";
import { WebPushSubscription as WebPushSubscriptionSchema } from "@versia/client-ng/schemas"; import { WebPushSubscription as WebPushSubscriptionSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { PushSubscription } from "@versia/kit/db"; import { PushSubscription } from "@versia/kit/db";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { RolePermissions } from "~/drizzle/schema";
export default apiRoute((app) => export default apiRoute((app) =>
app.openapi( app.openapi(
@ -20,7 +20,7 @@ export default apiRoute((app) =>
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.UsePushNotifications], permissions: [RolePermission.UsePushNotifications],
scopes: ["push"], scopes: ["push"],
}), }),
] as const, ] as const,

View file

@ -4,9 +4,9 @@ import { createRoute } from "@hono/zod-openapi";
import { import {
WebPushSubscriptionInput, WebPushSubscriptionInput,
WebPushSubscription as WebPushSubscriptionSchema, WebPushSubscription as WebPushSubscriptionSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { PushSubscription } from "@versia/kit/db"; import { PushSubscription } from "@versia/kit/db";
import { RolePermissions } from "~/drizzle/schema";
export default apiRoute((app) => export default apiRoute((app) =>
app.openapi( app.openapi(
@ -23,7 +23,7 @@ export default apiRoute((app) =>
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.UsePushNotifications], permissions: [RolePermission.UsePushNotifications],
scopes: ["push"], scopes: ["push"],
}), }),
jsonOrForm(), jsonOrForm(),
@ -56,7 +56,7 @@ export default apiRoute((app) =>
if ( if (
data.alerts["admin.report"] && data.alerts["admin.report"] &&
!user.hasPermission(RolePermissions.ManageReports) !user.hasPermission(RolePermission.ManageReports)
) { ) {
// This shouldn't throw an error in mastodon either // This shouldn't throw an error in mastodon either
data.alerts["admin.report"] = false; data.alerts["admin.report"] = false;
@ -64,7 +64,7 @@ export default apiRoute((app) =>
if ( if (
data.alerts["admin.sign_up"] && data.alerts["admin.sign_up"] &&
!user.hasPermission(RolePermissions.ManageAccounts) !user.hasPermission(RolePermission.ManageAccounts)
) { ) {
data.alerts["admin.sign_up"] = false; data.alerts["admin.sign_up"] = false;
} }

View file

@ -3,10 +3,10 @@ import { createRoute } from "@hono/zod-openapi";
import { import {
WebPushSubscriptionInput, WebPushSubscriptionInput,
WebPushSubscription as WebPushSubscriptionSchema, WebPushSubscription as WebPushSubscriptionSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { PushSubscription } from "@versia/kit/db"; import { PushSubscription } from "@versia/kit/db";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { RolePermissions } from "~/drizzle/schema";
export default apiRoute((app) => export default apiRoute((app) =>
app.openapi( app.openapi(
@ -23,7 +23,7 @@ export default apiRoute((app) =>
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.UsePushNotifications], permissions: [RolePermission.UsePushNotifications],
scopes: ["push"], scopes: ["push"],
}), }),
jsonOrForm(), jsonOrForm(),
@ -67,7 +67,7 @@ export default apiRoute((app) =>
if ( if (
data.alerts["admin.report"] && data.alerts["admin.report"] &&
!user.hasPermission(RolePermissions.ManageReports) !user.hasPermission(RolePermission.ManageReports)
) { ) {
// This shouldn't throw an error in mastodon either // This shouldn't throw an error in mastodon either
data.alerts["admin.report"] = false; data.alerts["admin.report"] = false;
@ -75,7 +75,7 @@ export default apiRoute((app) =>
if ( if (
data.alerts["admin.sign_up"] && data.alerts["admin.sign_up"] &&
!user.hasPermission(RolePermissions.ManageAccounts) !user.hasPermission(RolePermission.ManageAccounts)
) { ) {
data.alerts["admin.sign_up"] = false; data.alerts["admin.sign_up"] = false;
} }

View file

@ -1,6 +1,6 @@
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 { Role } from "@versia/kit/db"; import { Role } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { generateClient, getTestUsers } from "~/tests/utils"; import { generateClient, getTestUsers } from "~/tests/utils";
const { users, deleteUsers } = await getTestUsers(2); const { users, deleteUsers } = await getTestUsers(2);
@ -11,7 +11,7 @@ beforeAll(async () => {
// Create new role // Create new role
role = await Role.insert({ role = await Role.insert({
name: "test", name: "test",
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
priority: 2, priority: 2,
description: "test", description: "test",
visible: true, visible: true,
@ -25,7 +25,7 @@ beforeAll(async () => {
// Create a role with higher priority than the user's role // Create a role with higher priority than the user's role
higherPriorityRole = await Role.insert({ higherPriorityRole = await Role.insert({
name: "higherPriorityRole", name: "higherPriorityRole",
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
priority: 3, // Higher priority than the user's role priority: 3, // Higher priority than the user's role
description: "Higher priority role", description: "Higher priority role",
visible: true, visible: true,
@ -141,7 +141,7 @@ describe("/api/v1/roles/:id", () => {
await using client = await generateClient(users[0]); await using client = await generateClient(users[0]);
const { data, ok, raw } = await client.updateRole(role.id, { const { data, ok, raw } = await client.updateRole(role.id, {
permissions: [RolePermissions.Impersonate], permissions: [RolePermission.Impersonate],
}); });
expect(ok).toBe(false); expect(ok).toBe(false);
@ -175,7 +175,7 @@ describe("/api/v1/roles/:id", () => {
test("should delete role", async () => { test("should delete role", async () => {
const newRole = await Role.insert({ const newRole = await Role.insert({
name: "test2", name: "test2",
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
priority: 2, priority: 2,
description: "test", description: "test",
visible: true, visible: true,

View file

@ -1,8 +1,8 @@
import { apiRoute, auth } from "@/api"; import { apiRoute, auth } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Role as RoleSchema } from "@versia/client-ng/schemas"; import { Role as RoleSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Role } from "@versia/kit/db"; import { Role } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { ErrorSchema } from "~/types/api"; import { ErrorSchema } from "~/types/api";
@ -48,7 +48,7 @@ const routePatch = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
}), }),
] as const, ] as const,
request: { request: {
@ -94,7 +94,7 @@ const routeDelete = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
}), }),
] as const, ] as const,
request: { request: {
@ -170,7 +170,7 @@ export default apiRoute((app) => {
if (permissions) { if (permissions) {
const userPermissions = user.getAllPermissions(); const userPermissions = user.getAllPermissions();
const hasPermissions = ( const hasPermissions = (
permissions as unknown as RolePermissions[] permissions as unknown as RolePermission[]
).every((p) => userPermissions.includes(p)); ).every((p) => userPermissions.includes(p));
if (!hasPermissions) { if (!hasPermissions) {
@ -183,7 +183,7 @@ export default apiRoute((app) => {
} }
await role.update({ await role.update({
permissions: permissions as unknown as RolePermissions[], permissions: permissions as unknown as RolePermission[],
priority, priority,
description, description,
icon, icon,

View file

@ -1,6 +1,6 @@
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 { Role } from "@versia/kit/db"; import { Role } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { config } from "~/config.ts"; import { config } from "~/config.ts";
import { generateClient, getTestUsers } from "~/tests/utils"; import { generateClient, getTestUsers } from "~/tests/utils";
@ -11,7 +11,7 @@ beforeAll(async () => {
// Create new role // Create new role
role = await Role.insert({ role = await Role.insert({
name: "test", name: "test",
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
priority: 10, priority: 10,
description: "test", description: "test",
visible: true, visible: true,
@ -48,7 +48,7 @@ describe("/api/v1/roles", () => {
expect(ok).toBe(true); expect(ok).toBe(true);
expect(data).toContainEqual({ expect(data).toContainEqual({
name: "test", name: "test",
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
priority: 10, priority: 10,
description: "test", description: "test",
visible: true, visible: true,
@ -70,7 +70,7 @@ describe("/api/v1/roles", () => {
await using client = await generateClient(users[0]); await using client = await generateClient(users[0]);
const { ok, data } = await client.createRole("newRole", { const { ok, data } = await client.createRole("newRole", {
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
priority: 1, priority: 1,
description: "newRole", description: "newRole",
visible: true, visible: true,
@ -80,7 +80,7 @@ describe("/api/v1/roles", () => {
expect(ok).toBe(true); expect(ok).toBe(true);
expect(data).toMatchObject({ expect(data).toMatchObject({
name: "newRole", name: "newRole",
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
priority: 1, priority: 1,
description: "newRole", description: "newRole",
visible: true, visible: true,
@ -99,7 +99,7 @@ describe("/api/v1/roles", () => {
await using client = await generateClient(users[0]); await using client = await generateClient(users[0]);
const { data, ok, raw } = await client.createRole("newRole", { const { data, ok, raw } = await client.createRole("newRole", {
permissions: [RolePermissions.ManageBlocks], permissions: [RolePermission.ManageBlocks],
priority: 11, priority: 11,
description: "newRole", description: "newRole",
visible: true, visible: true,
@ -117,7 +117,7 @@ describe("/api/v1/roles", () => {
await using client = await generateClient(users[0]); await using client = await generateClient(users[0]);
const { data, ok, raw } = await client.createRole("newRole", { const { data, ok, raw } = await client.createRole("newRole", {
permissions: [RolePermissions.Impersonate], permissions: [RolePermission.Impersonate],
priority: 1, priority: 1,
description: "newRole", description: "newRole",
visible: true, visible: true,

View file

@ -1,9 +1,9 @@
import { apiRoute, auth } from "@/api"; import { apiRoute, auth } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Role as RoleSchema } from "@versia/client-ng/schemas"; import { Role as RoleSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Role } from "@versia/kit/db"; import { Role } from "@versia/kit/db";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { RolePermissions } from "~/drizzle/schema";
import { ErrorSchema } from "~/types/api"; import { ErrorSchema } from "~/types/api";
const routeGet = createRoute({ const routeGet = createRoute({
@ -34,7 +34,7 @@ const routePost = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageRoles], permissions: [RolePermission.ManageRoles],
}), }),
] as const, ] as const,
request: { request: {
@ -100,7 +100,7 @@ export default apiRoute((app) => {
if (permissions) { if (permissions) {
const userPermissions = user.getAllPermissions(); const userPermissions = user.getAllPermissions();
const hasPermissions = ( const hasPermissions = (
permissions as unknown as RolePermissions[] permissions as unknown as RolePermission[]
).every((p) => userPermissions.includes(p)); ).every((p) => userPermissions.includes(p));
if (!hasPermissions) { if (!hasPermissions) {
@ -116,7 +116,7 @@ export default apiRoute((app) => {
description, description,
icon, icon,
name, name,
permissions: permissions as unknown as RolePermissions[], permissions: permissions as unknown as RolePermission[],
priority, priority,
visible, visible,
}); });

View file

@ -9,8 +9,8 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Context as ContextSchema, Context as ContextSchema,
Status as StatusSchema, Status as StatusSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermissions } from "@versia/kit/tables"; import { RolePermission } from "@versia/client/schemas";
const route = createRoute({ const route = createRoute({
method: "get", method: "get",
@ -24,7 +24,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: false, auth: false,
permissions: [RolePermissions.ViewNotes], permissions: [RolePermission.ViewNotes],
}), }),
withNoteParam, withNoteParam,
] as const, ] as const,

View file

@ -6,8 +6,8 @@ import {
withNoteParam, withNoteParam,
} from "@/api"; } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Status as StatusSchema } from "@versia/client-ng/schemas"; import { Status as StatusSchema } from "@versia/client/schemas";
import { RolePermissions } from "@versia/kit/tables"; import { RolePermission } from "@versia/client/schemas";
const route = createRoute({ const route = createRoute({
method: "post", method: "post",
@ -22,8 +22,8 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnLikes, RolePermission.ManageOwnLikes,
RolePermissions.ViewNotes, RolePermission.ViewNotes,
], ],
}), }),
withNoteParam, withNoteParam,

View file

@ -9,9 +9,10 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Status as StatusSchema, Status as StatusSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Timeline } from "@versia/kit/db"; import { Timeline } from "@versia/kit/db";
import { RolePermissions, Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { and, gt, gte, lt, sql } from "drizzle-orm"; import { and, gt, gte, lt, sql } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
@ -27,8 +28,8 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ViewNotes, RolePermission.ViewNotes,
RolePermissions.ViewNoteLikes, RolePermission.ViewNoteLikes,
], ],
}), }),
withNoteParam, withNoteParam,

View file

@ -13,9 +13,9 @@ import {
Status as StatusSchema, Status as StatusSchema,
StatusSource as StatusSourceSchema, StatusSource as StatusSourceSchema,
zBoolean, zBoolean,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Media } from "@versia/kit/db"; import { Media } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { config } from "~/config.ts"; import { config } from "~/config.ts";
@ -91,7 +91,7 @@ const routeGet = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: false, auth: false,
permissions: [RolePermissions.ViewNotes], permissions: [RolePermission.ViewNotes],
}), }),
withNoteParam, withNoteParam,
] as const, ] as const,
@ -126,8 +126,8 @@ const routeDelete = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnNotes, RolePermission.ManageOwnNotes,
RolePermissions.ViewNotes, RolePermission.ViewNotes,
], ],
}), }),
withNoteParam, withNoteParam,
@ -166,8 +166,8 @@ const routePut = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnNotes, RolePermission.ManageOwnNotes,
RolePermissions.ViewNotes, RolePermission.ViewNotes,
], ],
}), }),
jsonOrForm(), jsonOrForm(),

View file

@ -6,9 +6,9 @@ import {
withNoteParam, withNoteParam,
} from "@/api"; } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Status as StatusSchema } from "@versia/client-ng/schemas"; import { Status as StatusSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { db } from "@versia/kit/db"; import { db } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import type { SQL } from "drizzle-orm"; import type { SQL } from "drizzle-orm";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
@ -26,8 +26,8 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnNotes, RolePermission.ManageOwnNotes,
RolePermissions.ViewNotes, RolePermission.ViewNotes,
], ],
}), }),
withNoteParam, withNoteParam,

View file

@ -7,9 +7,10 @@ import {
withNoteParam, withNoteParam,
} from "@/api"; } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Status as StatusSchema } from "@versia/client-ng/schemas"; import { Status as StatusSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Note } from "@versia/kit/db"; import { Note } from "@versia/kit/db";
import { Notes, RolePermissions } from "@versia/kit/tables"; import { Notes } from "@versia/kit/tables";
import { and, eq } from "drizzle-orm"; import { and, eq } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
@ -25,8 +26,8 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnBoosts, RolePermission.ManageOwnBoosts,
RolePermissions.ViewNotes, RolePermission.ViewNotes,
], ],
}), }),
jsonOrForm(), jsonOrForm(),

View file

@ -9,9 +9,10 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Account as AccountSchema, Account as AccountSchema,
Status as StatusSchema, Status as StatusSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Timeline } from "@versia/kit/db"; import { Timeline } from "@versia/kit/db";
import { RolePermissions, Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { and, gt, gte, lt, sql } from "drizzle-orm"; import { and, gt, gte, lt, sql } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
@ -27,8 +28,8 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ViewNotes, RolePermission.ViewNotes,
RolePermissions.ViewNoteBoosts, RolePermission.ViewNoteBoosts,
], ],
}), }),
withNoteParam, withNoteParam,

View file

@ -9,8 +9,8 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
Status as StatusSchema, Status as StatusSchema,
StatusSource as StatusSourceSchema, StatusSource as StatusSourceSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermissions } from "@versia/kit/tables"; import { RolePermission } from "@versia/client/schemas";
const route = createRoute({ const route = createRoute({
method: "get", method: "get",
@ -26,8 +26,8 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnNotes, RolePermission.ManageOwnNotes,
RolePermissions.ViewNotes, RolePermission.ViewNotes,
], ],
}), }),
withNoteParam, withNoteParam,

View file

@ -6,8 +6,8 @@ import {
withNoteParam, withNoteParam,
} from "@/api"; } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Status as StatusSchema } from "@versia/client-ng/schemas"; import { Status as StatusSchema } from "@versia/client/schemas";
import { RolePermissions } from "@versia/kit/tables"; import { RolePermission } from "@versia/client/schemas";
const route = createRoute({ const route = createRoute({
method: "post", method: "post",
@ -22,8 +22,8 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnNotes, RolePermission.ManageOwnNotes,
RolePermissions.ViewNotes, RolePermission.ViewNotes,
], ],
}), }),
withNoteParam, withNoteParam,

View file

@ -6,8 +6,8 @@ import {
withNoteParam, withNoteParam,
} from "@/api"; } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Status as StatusSchema } from "@versia/client-ng/schemas"; import { Status as StatusSchema } from "@versia/client/schemas";
import { RolePermissions } from "@versia/kit/tables"; import { RolePermission } from "@versia/client/schemas";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
const route = createRoute({ const route = createRoute({
@ -23,8 +23,8 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnNotes, RolePermission.ManageOwnNotes,
RolePermissions.ViewNotes, RolePermission.ViewNotes,
], ],
}), }),
withNoteParam, withNoteParam,

View file

@ -6,9 +6,10 @@ import {
withNoteParam, withNoteParam,
} from "@/api"; } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Status as StatusSchema } from "@versia/client-ng/schemas"; import { Status as StatusSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Note } from "@versia/kit/db"; import { Note } from "@versia/kit/db";
import { Notes, RolePermissions } from "@versia/kit/tables"; import { Notes } from "@versia/kit/tables";
import { and, eq } from "drizzle-orm"; import { and, eq } from "drizzle-orm";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
@ -25,8 +26,8 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnNotes, RolePermission.ManageOwnNotes,
RolePermissions.ViewNotes, RolePermission.ViewNotes,
], ],
}), }),
withNoteParam, withNoteParam,

View file

@ -1,6 +1,6 @@
import { afterAll, beforeAll, describe, expect, test } from "bun:test"; import { afterAll, beforeAll, describe, expect, test } from "bun:test";
import type { z } from "@hono/zod-openapi"; import type { z } from "@hono/zod-openapi";
import type { Status } from "@versia/client-ng/schemas"; import type { Status } from "@versia/client/schemas";
import { Media, db } from "@versia/kit/db"; import { Media, db } from "@versia/kit/db";
import { Emojis } from "@versia/kit/tables"; import { Emojis } from "@versia/kit/tables";
import { eq } from "drizzle-orm"; import { eq } from "drizzle-orm";

View file

@ -6,9 +6,9 @@ import {
Status as StatusSchema, Status as StatusSchema,
StatusSource as StatusSourceSchema, StatusSource as StatusSourceSchema,
zBoolean, zBoolean,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Media, Note } from "@versia/kit/db"; import { Media, Note } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { config } from "~/config.ts"; import { config } from "~/config.ts";
@ -113,7 +113,7 @@ const route = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnNotes], permissions: [RolePermission.ManageOwnNotes],
}), }),
jsonOrForm(), jsonOrForm(),
] as const, ] as const,

View file

@ -1,8 +1,9 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Status as StatusSchema } from "@versia/client-ng/schemas"; import { Status as StatusSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Timeline } from "@versia/kit/db"; import { Timeline } from "@versia/kit/db";
import { Notes, RolePermissions } from "@versia/kit/tables"; import { Notes } from "@versia/kit/tables";
import { and, eq, gt, gte, inArray, lt, or, sql } from "drizzle-orm"; import { and, eq, gt, gte, inArray, lt, or, sql } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
@ -18,10 +19,10 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
permissions: [ permissions: [
RolePermissions.ManageOwnNotes, RolePermission.ManageOwnNotes,
RolePermissions.ViewNotes, RolePermission.ViewNotes,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
RolePermissions.ViewPrivateTimelines, RolePermission.ViewPrivateTimelines,
], ],
}), }),
] as const, ] as const,

View file

@ -1,8 +1,9 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Status as StatusSchema, zBoolean } from "@versia/client-ng/schemas"; import { Status as StatusSchema, zBoolean } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Timeline } from "@versia/kit/db"; import { Timeline } from "@versia/kit/db";
import { Notes, RolePermissions } from "@versia/kit/tables"; import { Notes } from "@versia/kit/tables";
import { and, eq, gt, gte, inArray, lt, or, sql } from "drizzle-orm"; import { and, eq, gt, gte, inArray, lt, or, sql } from "drizzle-orm";
const route = createRoute({ const route = createRoute({
@ -18,9 +19,9 @@ const route = createRoute({
auth({ auth({
auth: false, auth: false,
permissions: [ permissions: [
RolePermissions.ViewNotes, RolePermission.ViewNotes,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
RolePermissions.ViewPublicTimelines, RolePermission.ViewPublicTimelines,
], ],
}), }),
] as const, ] as const,

View file

@ -4,9 +4,10 @@ import {
FilterKeyword as FilterKeywordSchema, FilterKeyword as FilterKeywordSchema,
Filter as FilterSchema, Filter as FilterSchema,
zBoolean, zBoolean,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { db } from "@versia/kit/db"; import { db } from "@versia/kit/db";
import { FilterKeywords, Filters, RolePermissions } from "@versia/kit/tables"; import { FilterKeywords, Filters } from "@versia/kit/tables";
import { type SQL, and, eq, inArray } from "drizzle-orm"; import { type SQL, and, eq, inArray } from "drizzle-orm";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { ErrorSchema } from "~/types/api"; import { ErrorSchema } from "~/types/api";
@ -22,7 +23,7 @@ const routeGet = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnFilters], permissions: [RolePermission.ManageOwnFilters],
}), }),
] as const, ] as const,
request: { request: {
@ -63,7 +64,7 @@ const routePut = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnFilters], permissions: [RolePermission.ManageOwnFilters],
}), }),
jsonOrForm(), jsonOrForm(),
] as const, ] as const,
@ -144,7 +145,7 @@ const routeDelete = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnFilters], permissions: [RolePermission.ManageOwnFilters],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -3,9 +3,10 @@ import { createRoute, z } from "@hono/zod-openapi";
import { import {
FilterKeyword as FilterKeywordSchema, FilterKeyword as FilterKeywordSchema,
Filter as FilterSchema, Filter as FilterSchema,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { db } from "@versia/kit/db"; import { db } from "@versia/kit/db";
import { FilterKeywords, Filters, RolePermissions } from "@versia/kit/tables"; import { FilterKeywords, Filters } from "@versia/kit/tables";
import type { SQL } from "drizzle-orm"; import type { SQL } from "drizzle-orm";
const routeGet = createRoute({ const routeGet = createRoute({
@ -20,7 +21,7 @@ const routeGet = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnFilters], permissions: [RolePermission.ManageOwnFilters],
}), }),
jsonOrForm(), jsonOrForm(),
] as const, ] as const,
@ -49,7 +50,7 @@ const routePost = createRoute({
middleware: [ middleware: [
auth({ auth({
auth: true, auth: true,
permissions: [RolePermissions.ManageOwnFilters], permissions: [RolePermission.ManageOwnFilters],
}), }),
jsonOrForm(), jsonOrForm(),
] as const, ] as const,

View file

@ -1,7 +1,7 @@
import { apiRoute } from "@/api"; import { apiRoute } from "@/api";
import { proxyUrl } from "@/response"; import { proxyUrl } from "@/response";
import { createRoute } from "@hono/zod-openapi"; import { createRoute } from "@hono/zod-openapi";
import { Instance as InstanceSchema } from "@versia/client-ng/schemas"; import { Instance as InstanceSchema } from "@versia/client/schemas";
import { User } from "@versia/kit/db"; import { User } from "@versia/kit/db";
import { Users } from "@versia/kit/tables"; import { Users } from "@versia/kit/tables";
import { and, eq, isNull } from "drizzle-orm"; import { and, eq, isNull } from "drizzle-orm";

View file

@ -1,8 +1,8 @@
import { apiRoute, auth, reusedResponses } from "@/api"; import { apiRoute, auth, reusedResponses } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Attachment as AttachmentSchema } from "@versia/client-ng/schemas"; import { Attachment as AttachmentSchema } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Media } from "@versia/kit/db"; import { Media } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ErrorSchema } from "~/types/api"; import { ErrorSchema } from "~/types/api";
const route = createRoute({ const route = createRoute({
@ -19,7 +19,7 @@ const route = createRoute({
auth({ auth({
auth: true, auth: true,
scopes: ["write:media"], scopes: ["write:media"],
permissions: [RolePermissions.ManageOwnMedia], permissions: [RolePermission.ManageOwnMedia],
}), }),
] as const, ] as const,
request: { request: {

View file

@ -11,9 +11,10 @@ import {
Id, Id,
Search as SearchSchema, Search as SearchSchema,
zBoolean, zBoolean,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { RolePermission } from "@versia/client/schemas";
import { Note, User, db } from "@versia/kit/db"; import { Note, User, db } from "@versia/kit/db";
import { Instances, Notes, RolePermissions, Users } from "@versia/kit/tables"; import { Instances, Notes, Users } from "@versia/kit/tables";
import { and, eq, inArray, isNull, sql } from "drizzle-orm"; import { and, eq, inArray, isNull, sql } from "drizzle-orm";
import { ApiError } from "~/classes/errors/api-error"; import { ApiError } from "~/classes/errors/api-error";
import { searchManager } from "~/classes/search/search-manager"; import { searchManager } from "~/classes/search/search-manager";
@ -33,9 +34,9 @@ const route = createRoute({
auth: false, auth: false,
scopes: ["read:search"], scopes: ["read:search"],
permissions: [ permissions: [
RolePermissions.Search, RolePermission.Search,
RolePermissions.ViewAccounts, RolePermission.ViewAccounts,
RolePermissions.ViewNotes, RolePermission.ViewNotes,
], ],
}), }),
] as const, ] as const,

View file

@ -1,6 +1,6 @@
import { apiRoute } from "@/api"; import { apiRoute } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Status as StatusSchema } from "@versia/client-ng/schemas"; import { Status as StatusSchema } from "@versia/client/schemas";
import { Note as NoteSchema } from "@versia/federation/schemas"; import { Note as NoteSchema } from "@versia/federation/schemas";
import { Note } from "@versia/kit/db"; import { Note } from "@versia/kit/db";
import { Notes } from "@versia/kit/tables"; import { Notes } from "@versia/kit/tables";

View file

@ -1,6 +1,6 @@
import { apiRoute } from "@/api"; import { apiRoute } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Status as StatusSchema } from "@versia/client-ng/schemas"; import { Status as StatusSchema } from "@versia/client/schemas";
import { URICollection as URICollectionSchema } from "@versia/federation/schemas"; import { URICollection as URICollectionSchema } from "@versia/federation/schemas";
import type { URICollection } from "@versia/federation/types"; import type { URICollection } from "@versia/federation/types";
import { Note, db } from "@versia/kit/db"; import { Note, db } from "@versia/kit/db";

View file

@ -1,6 +1,6 @@
import { apiRoute } from "@/api"; import { apiRoute } from "@/api";
import { createRoute, z } from "@hono/zod-openapi"; import { createRoute, z } from "@hono/zod-openapi";
import { Status as StatusSchema } from "@versia/client-ng/schemas"; import { Status as StatusSchema } from "@versia/client/schemas";
import { URICollection as URICollectionSchema } from "@versia/federation/schemas"; import { URICollection as URICollectionSchema } from "@versia/federation/schemas";
import type { URICollection } from "@versia/federation/types"; import type { URICollection } from "@versia/federation/types";
import { Note, db } from "@versia/kit/db"; import { Note, db } from "@versia/kit/db";

View file

@ -1,5 +1,6 @@
import { configureLoggers } from "@/loggers"; import { configureLoggers } from "@/loggers";
import type { Status as ApiStatus } from "@versia/client/types"; import type { z } from "@hono/zod-openapi";
import type { Status } from "@versia/client/schemas";
import { bench, run } from "mitata"; import { bench, run } from "mitata";
import { fakeRequest, getTestStatuses, getTestUsers } from "~/tests/utils"; import { fakeRequest, getTestStatuses, getTestUsers } from "~/tests/utils";
@ -15,7 +16,7 @@ const testTimeline = async (): Promise<void> => {
}, },
}); });
const objects = (await response.json()) as ApiStatus[]; const objects = (await response.json()) as z.infer<typeof Status>[];
if (objects.length !== 20) { if (objects.length !== 20) {
throw new Error("Invalid response (not 20 objects)"); throw new Error("Invalid response (not 20 objects)");

153
bun.lock
View file

@ -4,90 +4,89 @@
"": { "": {
"name": "versia-server", "name": "versia-server",
"dependencies": { "dependencies": {
"@bull-board/api": "latest", "@bull-board/api": "^6.7.10",
"@bull-board/hono": "latest", "@bull-board/hono": "^6.7.10",
"@clerc/plugin-completions": "latest", "@clerc/plugin-completions": "^0.44.0",
"@clerc/plugin-friendly-error": "latest", "@clerc/plugin-friendly-error": "^0.44.0",
"@clerc/plugin-help": "latest", "@clerc/plugin-help": "^0.44.0",
"@clerc/plugin-not-found": "latest", "@clerc/plugin-not-found": "^0.44.0",
"@clerc/plugin-version": "latest", "@clerc/plugin-version": "^0.44.0",
"@hackmd/markdown-it-task-lists": "latest", "@hackmd/markdown-it-task-lists": "^2.1.4",
"@hono/prometheus": "latest", "@hono/prometheus": "^1.0.1",
"@hono/swagger-ui": "latest", "@hono/swagger-ui": "^0.5.1",
"@hono/zod-openapi": "latest", "@hono/zod-openapi": "0.19.2",
"@hono/zod-validator": "latest", "@hono/zod-validator": "^0.4.3",
"@inquirer/confirm": "latest", "@inquirer/confirm": "^5.1.8",
"@logtape/file": "latest", "@logtape/file": "^0.9.0",
"@logtape/logtape": "latest", "@logtape/logtape": "^0.9.0",
"@sentry/bun": "latest", "@sentry/bun": "^9.8.0",
"@versia/client": "latest", "@versia/client"workspace:*",
"@versia/client-ng": "workspace:*", "@versia/federation": "^0.2.1",
"@versia/federation": "latest",
"@versia/kit": "workspace:*", "@versia/kit": "workspace:*",
"altcha-lib": "latest", "altcha-lib": "^1.2.0",
"blurhash": "latest", "blurhash": "^2.0.5",
"bullmq": "latest", "bullmq": "^5.44.2",
"c12": "latest", "c12": "^3.0.2",
"chalk": "latest", "chalk": "^5.4.1",
"clerc": "latest", "clerc": "^0.44.0",
"confbox": "latest", "confbox": "^0.2.1",
"drizzle-orm": "latest", "drizzle-orm": "^0.41.0",
"hono": "latest", "hono": "^4.7.5",
"html-to-text": "latest", "html-to-text": "^9.0.5",
"ioredis": "latest", "ioredis": "^5.6.0",
"ip-matching": "latest", "ip-matching": "^2.1.2",
"iso-639-1": "latest", "iso-639-1": "^3.1.5",
"jose": "latest", "jose": "^6.0.10",
"linkify-html": "latest", "linkify-html": "^4.2.0",
"linkify-string": "latest", "linkify-string": "^4.2.0",
"linkifyjs": "latest", "linkifyjs": "^4.2.0",
"magic-regexp": "latest", "magic-regexp": "^0.8.0",
"markdown-it": "latest", "markdown-it": "^14.1.0",
"markdown-it-anchor": "latest", "markdown-it-anchor": "^9.2.0",
"markdown-it-container": "latest", "markdown-it-container": "^4.0.0",
"markdown-it-toc-done-right": "latest", "markdown-it-toc-done-right": "^4.2.0",
"mime-types": "latest", "mime-types": "^2.1.35",
"mitata": "latest", "mitata": "^1.0.34",
"oauth4webapi": "latest", "oauth4webapi": "^3.3.1",
"ora": "latest", "ora": "^8.2.0",
"pg": "latest", "pg": "^8.14.1",
"qs": "latest", "qs": "^6.14.0",
"sharp": "latest", "sharp": "^0.33.5",
"sonic-channel": "latest", "sonic-channel": "^1.3.1",
"string-comparison": "latest", "string-comparison": "^1.3.0",
"stringify-entities": "latest", "stringify-entities": "^4.0.4",
"uqr": "latest", "uqr": "^0.1.2",
"web-push": "latest", "web-push": "^3.6.7",
"xss": "latest", "xss": "^1.0.15",
"zod": "latest", "zod": "^3.24.2",
"zod-validation-error": "latest", "zod-validation-error": "^3.4.0",
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "latest", "@biomejs/biome": "^1.9.4",
"@types/bun": "latest", "@types/bun": "^1.2.5",
"@types/html-to-text": "latest", "@types/html-to-text": "^9.0.4",
"@types/markdown-it-container": "latest", "@types/markdown-it-container": "^2.0.10",
"@types/mime-types": "latest", "@types/mime-types": "^2.1.4",
"@types/pg": "latest", "@types/pg": "^8.11.11",
"@types/qs": "latest", "@types/qs": "^6.9.18",
"@types/web-push": "latest", "@types/web-push": "^3.6.4",
"drizzle-kit": "latest", "drizzle-kit": "^0.30.5",
"markdown-it-image-figures": "latest", "markdown-it-image-figures": "^2.1.1",
"markdown-it-mathjax3": "latest", "markdown-it-mathjax3": "^4.3.2",
"ts-prune": "latest", "ts-prune": "^0.10.3",
"typescript": "latest", "typescript": "^5.8.2",
"vitepress": "latest", "vitepress": "^1.6.3",
"vitepress-plugin-tabs": "latest", "vitepress-plugin-tabs": "^0.6.0",
"vitepress-sidebar": "latest", "vitepress-sidebar": "^1.31.1",
"vue": "latest", "vue": "^3.5.13",
"zod-to-json-schema": "latest", "zod-to-json-schema": "^3.24.5",
}, },
"peerDependencies": { "peerDependencies": {
"typescript": "^5.7.2", "typescript": "^5.7.2",
}, },
}, },
"packages/client": { "packages/client": {
"name": "@versia/client-ng", "name": "@versia/client
"version": "0.2.0-alpha.1", "version": "0.2.0-alpha.1",
"dependencies": { "dependencies": {
"@badgateway/oauth2-client": "^2.4.2", "@badgateway/oauth2-client": "^2.4.2",
@ -544,9 +543,7 @@
"@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="],
"@versia/client": ["@versia/client@0.1.5", "", { "dependencies": { "@badgateway/oauth2-client": "^2.4.2", "zod": "^3.24.1" } }, "sha512-POD2/IT98EZZ32kWEPc3XUY2zApX94tuBftNWIMyoT04Sp7CPuvv1TT2fxM2kmgrC6kgbh4I6yirPpzVY+FpSA=="], "@versia/client["@ve@versia/clientpace:packages/client"],
"@versia/client-ng": ["@versia/client-ng@workspace:packages/client"],
"@versia/federation": ["@versia/federation@0.2.1", "", { "dependencies": { "magic-regexp": "^0.8.0", "mime-types": "^2.1.35", "zod": "^3.24.1", "zod-validation-error": "^3.4.0" } }, "sha512-FTo3VGNJBGmCi0ZEQMzqFZBbcfbX81kmg0UgY4cKamr1dJWgEf72IAZnEDgrBffFjYtreLGdEjFkkcq3JfS8oQ=="], "@versia/federation": ["@versia/federation@0.2.1", "", { "dependencies": { "magic-regexp": "^0.8.0", "mime-types": "^2.1.35", "zod": "^3.24.1", "zod-validation-error": "^3.4.0" } }, "sha512-FTo3VGNJBGmCi0ZEQMzqFZBbcfbX81kmg0UgY4cKamr1dJWgEf72IAZnEDgrBffFjYtreLGdEjFkkcq3JfS8oQ=="],

View file

@ -1,15 +1,65 @@
import { z } from "@hono/zod-openapi"; import { z } from "@hono/zod-openapi";
import {
ADMIN_ROLES,
DEFAULT_ROLES,
RolePermissions,
} from "@versia/kit/tables";
import { type BunFile, file } from "bun"; import { type BunFile, file } from "bun";
import ISO6391 from "iso-639-1"; import ISO6391 from "iso-639-1";
import { types as mimeTypes } from "mime-types"; import { types as mimeTypes } from "mime-types";
import { generateVAPIDKeys } from "web-push"; import { generateVAPIDKeys } from "web-push";
import { ZodError } from "zod"; import { ZodError } from "zod";
import { fromZodError } from "zod-validation-error"; import { fromZodError } from "zod-validation-error";
import { RolePermission } from "~/packages/client/schemas/permissions.ts";
export const DEFAULT_ROLES = [
RolePermission.ManageOwnNotes,
RolePermission.ViewNotes,
RolePermission.ViewNoteLikes,
RolePermission.ViewNoteBoosts,
RolePermission.ManageOwnAccount,
RolePermission.ViewAccountFollows,
RolePermission.ManageOwnLikes,
RolePermission.ManageOwnBoosts,
RolePermission.ViewAccounts,
RolePermission.ManageOwnEmojis,
RolePermission.ViewReactions,
RolePermission.ManageOwnReactions,
RolePermission.ViewEmojis,
RolePermission.ManageOwnMedia,
RolePermission.ManageOwnBlocks,
RolePermission.ManageOwnFilters,
RolePermission.ManageOwnMutes,
RolePermission.ManageOwnReports,
RolePermission.ManageOwnSettings,
RolePermission.ManageOwnNotifications,
RolePermission.ManageOwnFollows,
RolePermission.ManageOwnApps,
RolePermission.Search,
RolePermission.UsePushNotifications,
RolePermission.ViewPublicTimelines,
RolePermission.ViewPrivateTimelines,
RolePermission.OAuth,
];
export const ADMIN_ROLES = [
...DEFAULT_ROLES,
RolePermission.ManageNotes,
RolePermission.ManageAccounts,
RolePermission.ManageLikes,
RolePermission.ManageBoosts,
RolePermission.ManageEmojis,
RolePermission.ManageReactions,
RolePermission.ManageMedia,
RolePermission.ManageBlocks,
RolePermission.ManageFilters,
RolePermission.ManageMutes,
RolePermission.ManageReports,
RolePermission.ManageSettings,
RolePermission.ManageRoles,
RolePermission.ManageNotifications,
RolePermission.ManageFollows,
RolePermission.Impersonate,
RolePermission.IgnoreRateLimits,
RolePermission.ManageInstance,
RolePermission.ManageInstanceFederation,
RolePermission.ManageInstanceSettings,
];
export enum MediaBackendType { export enum MediaBackendType {
Local = "local", Local = "local",
@ -667,12 +717,12 @@ export const ConfigSchema = z
}), }),
permissions: z.strictObject({ permissions: z.strictObject({
anonymous: z anonymous: z
.array(z.nativeEnum(RolePermissions)) .array(z.nativeEnum(RolePermission))
.default(DEFAULT_ROLES), .default(DEFAULT_ROLES),
default: z default: z
.array(z.nativeEnum(RolePermissions)) .array(z.nativeEnum(RolePermission))
.default(DEFAULT_ROLES), .default(DEFAULT_ROLES),
admin: z.array(z.nativeEnum(RolePermissions)).default(ADMIN_ROLES), admin: z.array(z.nativeEnum(RolePermission)).default(ADMIN_ROLES),
}), }),
logging: z.strictObject({ logging: z.strictObject({
types: z.record( types: z.record(

View file

@ -2,7 +2,7 @@ import type { z } from "@hono/zod-openapi";
import type { import type {
Application as ApplicationSchema, Application as ApplicationSchema,
CredentialApplication, CredentialApplication,
} from "@versia/client-ng/schemas"; } from "@versia/client/schemas";
import { Token, db } from "@versia/kit/db"; import { Token, db } from "@versia/kit/db";
import { Applications } from "@versia/kit/tables"; import { Applications } from "@versia/kit/tables";
import { import {

View file

@ -1,7 +1,7 @@
import { emojiValidatorWithColons, emojiValidatorWithIdentifiers } from "@/api"; import { emojiValidatorWithColons, emojiValidatorWithIdentifiers } from "@/api";
import { proxyUrl } from "@/response"; import { proxyUrl } from "@/response";
import type { z } from "@hono/zod-openapi"; import type { z } from "@hono/zod-openapi";
import type { CustomEmoji } from "@versia/client-ng/schemas"; import type { CustomEmoji } from "@versia/client/schemas";
import type { CustomEmojiExtension } from "@versia/federation/types"; import type { CustomEmojiExtension } from "@versia/federation/types";
import { type Instance, Media, db } from "@versia/kit/db"; import { type Instance, Media, db } from "@versia/kit/db";
import { Emojis, type Instances, type Medias } from "@versia/kit/tables"; import { Emojis, type Instances, type Medias } from "@versia/kit/tables";

View file

@ -1,5 +1,3 @@
import { z } from "@hono/zod-openapi";
import { RolePermission } from "@versia/client/types";
import type { Delete, LikeExtension } from "@versia/federation/types"; import type { Delete, LikeExtension } from "@versia/federation/types";
import { db } from "@versia/kit/db"; import { db } from "@versia/kit/db";
import { import {
@ -27,16 +25,6 @@ type LikeType = InferSelectModel<typeof Likes> & {
}; };
export class Like extends BaseInterface<typeof Likes, LikeType> { export class Like extends BaseInterface<typeof Likes, LikeType> {
public static schema = z.object({
id: z.string(),
name: z.string(),
permissions: z.array(z.nativeEnum(RolePermission)),
priority: z.number(),
description: z.string().nullable(),
visible: z.boolean(),
icon: z.string().nullable(),
});
public static $type: LikeType; public static $type: LikeType;
public async reload(): Promise<void> { public async reload(): Promise<void> {

View file

@ -2,7 +2,7 @@ import { join } from "node:path";
import { mimeLookup } from "@/content_types.ts"; import { mimeLookup } from "@/content_types.ts";
import { proxyUrl } from "@/response"; import { proxyUrl } from "@/response";
import type { z } from "@hono/zod-openapi"; import type { z } from "@hono/zod-openapi";
import type { Attachment as AttachmentSchema } from "@versia/client-ng/schemas"; import type { Attachment as AttachmentSchema } from "@versia/client/schemas";
import type { ContentFormat } from "@versia/federation/types"; import type { ContentFormat } from "@versia/federation/types";
import { db } from "@versia/kit/db"; import { db } from "@versia/kit/db";
import { Medias } from "@versia/kit/tables"; import { Medias } from "@versia/kit/tables";

View file

@ -4,7 +4,7 @@ import { sanitizedHtmlStrip } from "@/sanitization";
import { sentry } from "@/sentry"; import { sentry } from "@/sentry";
import type { z } from "@hono/zod-openapi"; import type { z } from "@hono/zod-openapi";
import { getLogger } from "@logtape/logtape"; import { getLogger } from "@logtape/logtape";
import type { Status, Status as StatusSchema } from "@versia/client-ng/schemas"; import type { Status, Status as StatusSchema } from "@versia/client/schemas";
import { EntityValidator } from "@versia/federation"; import { EntityValidator } from "@versia/federation";
import type { import type {
ContentFormat, ContentFormat,
@ -825,7 +825,6 @@ export class Note extends BaseInterface<typeof Notes, NoteTypeWithRelations> {
pinned: data.pinned, pinned: data.pinned,
// TODO: Add polls // TODO: Add polls
poll: null, poll: null,
// @ts-expect-error broken recursive types
reblog: data.reblog reblog: data.reblog
? await new Note(data.reblog as NoteTypeWithRelations).toApi( ? await new Note(data.reblog as NoteTypeWithRelations).toApi(
userFetching, userFetching,
@ -841,7 +840,6 @@ export class Note extends BaseInterface<typeof Notes, NoteTypeWithRelations> {
visibility: data.visibility, visibility: data.visibility,
url: data.uri || this.getMastoUri().toString(), url: data.uri || this.getMastoUri().toString(),
bookmarked: false, bookmarked: false,
// @ts-expect-error broken recursive types
quote: data.quotingId quote: data.quotingId
? ((await Note.fromId(data.quotingId, userFetching?.id).then( ? ((await Note.fromId(data.quotingId, userFetching?.id).then(
(n) => n?.toApi(userFetching), (n) => n?.toApi(userFetching),
@ -850,8 +848,8 @@ export class Note extends BaseInterface<typeof Notes, NoteTypeWithRelations> {
edited_at: data.updatedAt edited_at: data.updatedAt
? new Date(data.updatedAt).toISOString() ? new Date(data.updatedAt).toISOString()
: null, : null,
emoji_reactions: [], reactions: [],
plain_content: data.contentSource, text: data.contentSource,
}; };
} }

View file

@ -1,5 +1,5 @@
import type { z } from "@hono/zod-openapi"; import type { z } from "@hono/zod-openapi";
import type { Notification as NotificationSchema } from "@versia/client-ng/schemas"; import type { Notification as NotificationSchema } from "@versia/client/schemas";
import { Note, User, db } from "@versia/kit/db"; import { Note, User, db } from "@versia/kit/db";
import { Notifications } from "@versia/kit/tables"; import { Notifications } from "@versia/kit/tables";
import { import {

View file

@ -1,5 +1,5 @@
import type { z } from "@hono/zod-openapi"; import type { z } from "@hono/zod-openapi";
import type { WebPushSubscription as WebPushSubscriptionSchema } from "@versia/client-ng/schemas"; import type { WebPushSubscription as WebPushSubscriptionSchema } from "@versia/client/schemas";
import { type Token, type User, db } from "@versia/kit/db"; import { type Token, type User, db } from "@versia/kit/db";
import { PushSubscriptions, Tokens } from "@versia/kit/tables"; import { PushSubscriptions, Tokens } from "@versia/kit/tables";
import { import {

View file

@ -1,5 +1,5 @@
import { z } from "@hono/zod-openapi"; import { z } from "@hono/zod-openapi";
import type { Relationship as RelationshipSchema } from "@versia/client-ng/schemas"; import type { Relationship as RelationshipSchema } from "@versia/client/schemas";
import { db } from "@versia/kit/db"; import { db } from "@versia/kit/db";
import { Relationships } from "@versia/kit/tables"; import { Relationships } from "@versia/kit/tables";
import { import {

View file

@ -1,8 +1,7 @@
import { proxyUrl } from "@/response"; import { proxyUrl } from "@/response";
import type { import type { z } from "@hono/zod-openapi";
VersiaRole as APIRole, import type { Role as RoleSchema } from "@versia/client/schemas";
RolePermission, import type { RolePermission } from "@versia/client/schemas";
} from "@versia/client/types";
import { db } from "@versia/kit/db"; import { db } from "@versia/kit/db";
import { RoleToUsers, Roles } from "@versia/kit/tables"; import { RoleToUsers, Roles } from "@versia/kit/tables";
import { import {
@ -16,7 +15,6 @@ import {
} from "drizzle-orm"; } from "drizzle-orm";
import { config } from "~/config.ts"; import { config } from "~/config.ts";
import { BaseInterface } from "./base.ts"; import { BaseInterface } from "./base.ts";
type RoleType = InferSelectModel<typeof Roles>; type RoleType = InferSelectModel<typeof Roles>;
export class Role extends BaseInterface<typeof Roles> { export class Role extends BaseInterface<typeof Roles> {
@ -208,7 +206,7 @@ export class Role extends BaseInterface<typeof Roles> {
return this.data.id; return this.data.id;
} }
public toApi(): APIRole { public toApi(): z.infer<typeof RoleSchema> {
return { return {
id: this.id, id: this.id,
name: this.data.name, name: this.data.name,

Some files were not shown because too many files have changed in this diff Show more