From 8d1af1b0cd3a6a3934fcc752010945cf8ea52ba0 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Sat, 22 Mar 2025 18:04:47 +0100 Subject: [PATCH] refactor(api): :fire: Remove old @versia/client version --- api/api/v1/accounts/:id/block.ts | 8 +- api/api/v1/accounts/:id/follow.ts | 8 +- api/api/v1/accounts/:id/followers.ts | 9 +- api/api/v1/accounts/:id/following.ts | 10 +- api/api/v1/accounts/:id/index.test.ts | 3 +- api/api/v1/accounts/:id/index.ts | 6 +- api/api/v1/accounts/:id/mute.ts | 8 +- api/api/v1/accounts/:id/note.ts | 8 +- api/api/v1/accounts/:id/pin.ts | 8 +- api/api/v1/accounts/:id/refetch.ts | 6 +- .../v1/accounts/:id/remove_from_followers.ts | 8 +- .../accounts/:id/roles/:role_id/index.test.ts | 6 +- .../v1/accounts/:id/roles/:role_id/index.ts | 8 +- api/api/v1/accounts/:id/roles/index.test.ts | 6 +- api/api/v1/accounts/:id/roles/index.ts | 2 +- api/api/v1/accounts/:id/statuses.ts | 9 +- api/api/v1/accounts/:id/unblock.ts | 8 +- api/api/v1/accounts/:id/unfollow.ts | 8 +- api/api/v1/accounts/:id/unmute.ts | 8 +- api/api/v1/accounts/:id/unpin.ts | 8 +- .../v1/accounts/familiar_followers/index.ts | 7 +- api/api/v1/accounts/index.ts | 2 +- api/api/v1/accounts/lookup/index.ts | 7 +- api/api/v1/accounts/relationships/index.ts | 6 +- api/api/v1/accounts/search/index.ts | 7 +- .../v1/accounts/update_credentials/index.ts | 7 +- .../v1/accounts/verify_credentials/index.ts | 2 +- api/api/v1/apps/index.ts | 2 +- api/api/v1/apps/verify_credentials/index.ts | 6 +- api/api/v1/blocks/index.ts | 8 +- api/api/v1/challenges/index.ts | 2 +- api/api/v1/custom_emojis/index.ts | 7 +- api/api/v1/emojis/:id/index.ts | 28 ++-- api/api/v1/emojis/index.ts | 14 +- api/api/v1/favourites/index.ts | 7 +- .../follow_requests/:account_id/authorize.ts | 6 +- .../v1/follow_requests/:account_id/reject.ts | 6 +- api/api/v1/follow_requests/index.ts | 7 +- api/api/v1/instance/extended_description.ts | 2 +- api/api/v1/instance/index.ts | 2 +- api/api/v1/instance/privacy_policy.ts | 2 +- api/api/v1/instance/rules.ts | 2 +- api/api/v1/instance/terms_of_service.ts | 2 +- api/api/v1/markers/index.ts | 9 +- api/api/v1/media/:id/index.ts | 8 +- api/api/v1/media/index.ts | 6 +- api/api/v1/mutes/index.ts | 7 +- api/api/v1/notifications/:id/dismiss.test.ts | 2 +- api/api/v1/notifications/:id/dismiss.ts | 6 +- api/api/v1/notifications/:id/index.test.ts | 2 +- api/api/v1/notifications/:id/index.ts | 6 +- api/api/v1/notifications/clear/index.ts | 4 +- .../destroy_multiple/index.test.ts | 2 +- .../notifications/destroy_multiple/index.ts | 4 +- api/api/v1/notifications/index.ts | 9 +- api/api/v1/profile/avatar.ts | 6 +- api/api/v1/profile/header.ts | 6 +- api/api/v1/push/subscription/index.delete.ts | 4 +- api/api/v1/push/subscription/index.get.ts | 6 +- api/api/v1/push/subscription/index.post.ts | 10 +- api/api/v1/push/subscription/index.put.ts | 10 +- api/api/v1/roles/:id/index.test.ts | 10 +- api/api/v1/roles/:id/index.ts | 12 +- api/api/v1/roles/index.test.ts | 14 +- api/api/v1/roles/index.ts | 10 +- api/api/v1/statuses/:id/context.ts | 6 +- api/api/v1/statuses/:id/favourite.ts | 8 +- api/api/v1/statuses/:id/favourited_by.ts | 9 +- api/api/v1/statuses/:id/index.ts | 14 +- api/api/v1/statuses/:id/pin.ts | 8 +- api/api/v1/statuses/:id/reblog.ts | 9 +- api/api/v1/statuses/:id/reblogged_by.ts | 9 +- api/api/v1/statuses/:id/source.ts | 8 +- api/api/v1/statuses/:id/unfavourite.ts | 8 +- api/api/v1/statuses/:id/unpin.ts | 8 +- api/api/v1/statuses/:id/unreblog.ts | 9 +- api/api/v1/statuses/index.test.ts | 2 +- api/api/v1/statuses/index.ts | 6 +- api/api/v1/timelines/home.ts | 13 +- api/api/v1/timelines/public.ts | 11 +- api/api/v2/filters/:id/index.ts | 11 +- api/api/v2/filters/index.ts | 9 +- api/api/v2/instance/index.ts | 2 +- api/api/v2/media/index.ts | 6 +- api/api/v2/search/index.ts | 11 +- api/notes/:uuid/index.ts | 2 +- api/notes/:uuid/quotes.ts | 2 +- api/notes/:uuid/replies.ts | 2 +- benchmarks/timeline.ts | 5 +- bun.lock | 153 +++++++++-------- classes/config/schema.ts | 66 +++++++- classes/database/application.ts | 2 +- classes/database/emoji.ts | 2 +- classes/database/like.ts | 12 -- classes/database/media.ts | 2 +- classes/database/note.ts | 8 +- classes/database/notification.ts | 2 +- classes/database/pushsubscription.ts | 2 +- classes/database/relationship.ts | 2 +- classes/database/role.ts | 10 +- classes/database/token.ts | 2 +- classes/database/user.ts | 10 +- drizzle/schema.ts | 116 +------------ package.json | 3 +- packages/client/package.json | 2 +- packages/client/schemas.ts | 9 +- packages/client/schemas/account.ts | 30 ++-- packages/client/schemas/permissions.ts | 56 +++++++ packages/client/schemas/status.ts | 154 ++---------------- packages/client/schemas/versia.ts | 2 +- plugins/openid/index.ts | 6 +- plugins/openid/routes/authorize.test.ts | 4 +- plugins/openid/routes/authorize.ts | 4 +- plugins/openid/routes/oauth/callback.ts | 9 +- plugins/openid/routes/sso/:id/index.ts | 7 +- plugins/openid/routes/sso/index.ts | 7 +- tests/api/accounts.test.ts | 44 +++-- tests/api/statuses.test.ts | 41 +++-- tests/oauth.test.ts | 12 +- tests/utils.ts | 2 +- utils/api.ts | 7 +- 121 files changed, 649 insertions(+), 756 deletions(-) create mode 100644 packages/client/schemas/permissions.ts diff --git a/api/api/v1/accounts/:id/block.ts b/api/api/v1/accounts/:id/block.ts index 9aded87c..05f39dc8 100644 --- a/api/api/v1/accounts/:id/block.ts +++ b/api/api/v1/accounts/:id/block.ts @@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions } from "@versia/kit/tables"; const route = createRoute({ method: "post", @@ -28,8 +28,8 @@ const route = createRoute({ auth: true, scopes: ["write:blocks"], permissions: [ - RolePermissions.ManageOwnBlocks, - RolePermissions.ViewAccounts, + RolePermission.ManageOwnBlocks, + RolePermission.ViewAccounts, ], }), withUserParam, diff --git a/api/api/v1/accounts/:id/follow.ts b/api/api/v1/accounts/:id/follow.ts index 87683bd4..86f0857d 100644 --- a/api/api/v1/accounts/:id/follow.ts +++ b/api/api/v1/accounts/:id/follow.ts @@ -10,9 +10,9 @@ import { Account as AccountSchema, Relationship as RelationshipSchema, iso631, -} from "@versia/client-ng/schemas"; +} from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; import { Relationship } from "@versia/kit/db"; -import { RolePermissions } from "@versia/kit/tables"; import { ErrorSchema } from "~/types/api"; const route = createRoute({ @@ -30,8 +30,8 @@ const route = createRoute({ auth: true, scopes: ["write:follows"], permissions: [ - RolePermissions.ManageOwnFollows, - RolePermissions.ViewAccounts, + RolePermission.ManageOwnFollows, + RolePermission.ViewAccounts, ], }), withUserParam, diff --git a/api/api/v1/accounts/:id/followers.ts b/api/api/v1/accounts/:id/followers.ts index 52e2ce26..06e5161f 100644 --- a/api/api/v1/accounts/:id/followers.ts +++ b/api/api/v1/accounts/:id/followers.ts @@ -6,9 +6,10 @@ import { withUserParam, } from "@/api"; 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 { RolePermissions, Users } from "@versia/kit/tables"; +import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; const route = createRoute({ @@ -26,8 +27,8 @@ const route = createRoute({ auth: false, scopes: ["read:accounts"], permissions: [ - RolePermissions.ViewAccountFollows, - RolePermissions.ViewAccounts, + RolePermission.ViewAccountFollows, + RolePermission.ViewAccounts, ], }), withUserParam, diff --git a/api/api/v1/accounts/:id/following.ts b/api/api/v1/accounts/:id/following.ts index 2339f184..0fc26600 100644 --- a/api/api/v1/accounts/:id/following.ts +++ b/api/api/v1/accounts/:id/following.ts @@ -6,11 +6,11 @@ import { withUserParam, } from "@/api"; 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 { RolePermissions, Users } from "@versia/kit/tables"; +import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; - const route = createRoute({ method: "get", path: "/api/v1/accounts/{id}/following", @@ -26,8 +26,8 @@ const route = createRoute({ auth: false, scopes: ["read:accounts"], permissions: [ - RolePermissions.ViewAccountFollows, - RolePermissions.ViewAccounts, + RolePermission.ViewAccountFollows, + RolePermission.ViewAccounts, ], }), withUserParam, diff --git a/api/api/v1/accounts/:id/index.test.ts b/api/api/v1/accounts/:id/index.test.ts index a3feb1f2..d0aff8ef 100644 --- a/api/api/v1/accounts/:id/index.test.ts +++ b/api/api/v1/accounts/:id/index.test.ts @@ -1,5 +1,4 @@ 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"; const { users, deleteUsers } = await getTestUsers(5); @@ -68,6 +67,6 @@ describe("/api/v1/accounts/:id", () => { visible: false, }), ]), - } satisfies ApiAccount); + }); }); }); diff --git a/api/api/v1/accounts/:id/index.ts b/api/api/v1/accounts/:id/index.ts index 3490d449..e11bf303 100644 --- a/api/api/v1/accounts/:id/index.ts +++ b/api/api/v1/accounts/:id/index.ts @@ -6,8 +6,8 @@ import { withUserParam, } from "@/api"; import { createRoute, z } from "@hono/zod-openapi"; -import { Account as AccountSchema } from "@versia/client-ng/schemas"; -import { RolePermissions } from "@versia/kit/tables"; +import { Account as AccountSchema } from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; const route = createRoute({ method: "get", @@ -21,7 +21,7 @@ const route = createRoute({ middleware: [ auth({ auth: false, - permissions: [RolePermissions.ViewAccounts], + permissions: [RolePermission.ViewAccounts], }), withUserParam, ] as const, diff --git a/api/api/v1/accounts/:id/mute.ts b/api/api/v1/accounts/:id/mute.ts index 7ec777b7..b627cd86 100644 --- a/api/api/v1/accounts/:id/mute.ts +++ b/api/api/v1/accounts/:id/mute.ts @@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions } from "@versia/kit/tables"; const route = createRoute({ method: "post", @@ -28,8 +28,8 @@ const route = createRoute({ auth: true, scopes: ["write:mutes"], permissions: [ - RolePermissions.ManageOwnMutes, - RolePermissions.ViewAccounts, + RolePermission.ManageOwnMutes, + RolePermission.ViewAccounts, ], }), withUserParam, diff --git a/api/api/v1/accounts/:id/note.ts b/api/api/v1/accounts/:id/note.ts index b4e4b554..0f8193f5 100644 --- a/api/api/v1/accounts/:id/note.ts +++ b/api/api/v1/accounts/:id/note.ts @@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions } from "@versia/kit/tables"; const route = createRoute({ method: "post", @@ -27,8 +27,8 @@ const route = createRoute({ auth: true, scopes: ["write:accounts"], permissions: [ - RolePermissions.ManageOwnAccount, - RolePermissions.ViewAccounts, + RolePermission.ManageOwnAccount, + RolePermission.ViewAccounts, ], }), withUserParam, diff --git a/api/api/v1/accounts/:id/pin.ts b/api/api/v1/accounts/:id/pin.ts index f044c161..f9395c4d 100644 --- a/api/api/v1/accounts/:id/pin.ts +++ b/api/api/v1/accounts/:id/pin.ts @@ -3,9 +3,9 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions } from "@versia/kit/tables"; const route = createRoute({ method: "post", @@ -22,8 +22,8 @@ const route = createRoute({ auth: true, scopes: ["write:accounts"], permissions: [ - RolePermissions.ManageOwnAccount, - RolePermissions.ViewAccounts, + RolePermission.ManageOwnAccount, + RolePermission.ViewAccounts, ], }), withUserParam, diff --git a/api/api/v1/accounts/:id/refetch.ts b/api/api/v1/accounts/:id/refetch.ts index f5029124..516ea113 100644 --- a/api/api/v1/accounts/:id/refetch.ts +++ b/api/api/v1/accounts/:id/refetch.ts @@ -6,8 +6,8 @@ import { withUserParam, } from "@/api"; import { createRoute, z } from "@hono/zod-openapi"; -import { Account as AccountSchema } from "@versia/client-ng/schemas"; -import { RolePermissions } from "@versia/kit/tables"; +import { Account as AccountSchema } from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; import { ApiError } from "~/classes/errors/api-error"; import { ErrorSchema } from "~/types/api"; @@ -21,7 +21,7 @@ const route = createRoute({ auth({ auth: true, scopes: ["write:accounts"], - permissions: [RolePermissions.ViewAccounts], + permissions: [RolePermission.ViewAccounts], }), withUserParam, ] as const, diff --git a/api/api/v1/accounts/:id/remove_from_followers.ts b/api/api/v1/accounts/:id/remove_from_followers.ts index 8596d2e9..1fe32a9d 100644 --- a/api/api/v1/accounts/:id/remove_from_followers.ts +++ b/api/api/v1/accounts/:id/remove_from_followers.ts @@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions } from "@versia/kit/tables"; const route = createRoute({ method: "post", @@ -27,8 +27,8 @@ const route = createRoute({ auth: true, scopes: ["write:follows"], permissions: [ - RolePermissions.ManageOwnFollows, - RolePermissions.ViewAccounts, + RolePermission.ManageOwnFollows, + RolePermission.ViewAccounts, ], }), withUserParam, diff --git a/api/api/v1/accounts/:id/roles/:role_id/index.test.ts b/api/api/v1/accounts/:id/roles/:role_id/index.test.ts index 3cb9aa0e..167d5ec5 100644 --- a/api/api/v1/accounts/:id/roles/:role_id/index.test.ts +++ b/api/api/v1/accounts/:id/roles/:role_id/index.test.ts @@ -1,6 +1,6 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; +import { RolePermission } from "@versia/client/schemas"; import { Role } from "@versia/kit/db"; -import { RolePermissions } from "@versia/kit/tables"; import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(2); @@ -11,7 +11,7 @@ beforeAll(async () => { // Create new role role = await Role.insert({ name: "test", - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], priority: 2, description: "test", visible: true, @@ -25,7 +25,7 @@ beforeAll(async () => { // Create a role with higher priority than the user's role higherPriorityRole = await Role.insert({ name: "higherPriorityRole", - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], priority: 3, // Higher priority than the user's role description: "Higher priority role", visible: true, diff --git a/api/api/v1/accounts/:id/roles/:role_id/index.ts b/api/api/v1/accounts/:id/roles/:role_id/index.ts index c6d79024..c090a11b 100644 --- a/api/api/v1/accounts/:id/roles/:role_id/index.ts +++ b/api/api/v1/accounts/:id/roles/:role_id/index.ts @@ -3,9 +3,9 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions } from "@versia/kit/tables"; import { ApiError } from "~/classes/errors/api-error"; import { ErrorSchema } from "~/types/api"; @@ -17,7 +17,7 @@ const routePost = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], }), withUserParam, ] as const, @@ -57,7 +57,7 @@ const routeDelete = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], }), withUserParam, ] as const, diff --git a/api/api/v1/accounts/:id/roles/index.test.ts b/api/api/v1/accounts/:id/roles/index.test.ts index a3047dc7..3ff9bd15 100644 --- a/api/api/v1/accounts/:id/roles/index.test.ts +++ b/api/api/v1/accounts/:id/roles/index.test.ts @@ -1,6 +1,6 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; +import { RolePermission } from "@versia/client/schemas"; import { Role } from "@versia/kit/db"; -import { RolePermissions } from "@versia/kit/tables"; import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(2); @@ -10,7 +10,7 @@ beforeAll(async () => { // Create new role role = await Role.insert({ name: "test", - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], priority: 2, description: "test", visible: true, @@ -52,7 +52,7 @@ describe("/api/v1/accounts/:id/roles", () => { expect(data).toContainEqual({ id: role.id, name: "test", - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], priority: 2, description: "test", visible: true, diff --git a/api/api/v1/accounts/:id/roles/index.ts b/api/api/v1/accounts/:id/roles/index.ts index 4d6eb198..dd7f169c 100644 --- a/api/api/v1/accounts/:id/roles/index.ts +++ b/api/api/v1/accounts/:id/roles/index.ts @@ -3,7 +3,7 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, Role as RoleSchema, -} from "@versia/client-ng/schemas"; +} from "@versia/client/schemas"; import { Role } from "@versia/kit/db"; const route = createRoute({ diff --git a/api/api/v1/accounts/:id/statuses.ts b/api/api/v1/accounts/:id/statuses.ts index 9502f710..3cd9aa28 100644 --- a/api/api/v1/accounts/:id/statuses.ts +++ b/api/api/v1/accounts/:id/statuses.ts @@ -10,9 +10,10 @@ import { Account as AccountSchema, Status as StatusSchema, zBoolean, -} from "@versia/client-ng/schemas"; +} from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; 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"; const route = createRoute({ @@ -28,8 +29,8 @@ const route = createRoute({ auth({ auth: false, permissions: [ - RolePermissions.ViewNotes, - RolePermissions.ViewAccounts, + RolePermission.ViewNotes, + RolePermission.ViewAccounts, ], scopes: ["read:statuses"], }), diff --git a/api/api/v1/accounts/:id/unblock.ts b/api/api/v1/accounts/:id/unblock.ts index e8e09e40..399c6c26 100644 --- a/api/api/v1/accounts/:id/unblock.ts +++ b/api/api/v1/accounts/:id/unblock.ts @@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions } from "@versia/kit/tables"; const route = createRoute({ method: "post", @@ -27,8 +27,8 @@ const route = createRoute({ auth: true, scopes: ["write:blocks"], permissions: [ - RolePermissions.ManageOwnBlocks, - RolePermissions.ViewAccounts, + RolePermission.ManageOwnBlocks, + RolePermission.ViewAccounts, ], }), withUserParam, diff --git a/api/api/v1/accounts/:id/unfollow.ts b/api/api/v1/accounts/:id/unfollow.ts index 78c56e0a..718d39db 100644 --- a/api/api/v1/accounts/:id/unfollow.ts +++ b/api/api/v1/accounts/:id/unfollow.ts @@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions } from "@versia/kit/tables"; const route = createRoute({ method: "post", @@ -27,8 +27,8 @@ const route = createRoute({ auth: true, scopes: ["write:follows"], permissions: [ - RolePermissions.ManageOwnFollows, - RolePermissions.ViewAccounts, + RolePermission.ManageOwnFollows, + RolePermission.ViewAccounts, ], }), withUserParam, diff --git a/api/api/v1/accounts/:id/unmute.ts b/api/api/v1/accounts/:id/unmute.ts index 7f209c1b..3332c530 100644 --- a/api/api/v1/accounts/:id/unmute.ts +++ b/api/api/v1/accounts/:id/unmute.ts @@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions } from "@versia/kit/tables"; const route = createRoute({ method: "post", @@ -27,8 +27,8 @@ const route = createRoute({ auth: true, scopes: ["write:mutes"], permissions: [ - RolePermissions.ManageOwnMutes, - RolePermissions.ViewAccounts, + RolePermission.ManageOwnMutes, + RolePermission.ViewAccounts, ], }), withUserParam, diff --git a/api/api/v1/accounts/:id/unpin.ts b/api/api/v1/accounts/:id/unpin.ts index b894f97e..aaa0e7b1 100644 --- a/api/api/v1/accounts/:id/unpin.ts +++ b/api/api/v1/accounts/:id/unpin.ts @@ -9,9 +9,9 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions } from "@versia/kit/tables"; const route = createRoute({ method: "post", @@ -27,8 +27,8 @@ const route = createRoute({ auth: true, scopes: ["write:accounts"], permissions: [ - RolePermissions.ManageOwnAccount, - RolePermissions.ViewAccounts, + RolePermission.ManageOwnAccount, + RolePermission.ViewAccounts, ], }), withUserParam, diff --git a/api/api/v1/accounts/familiar_followers/index.ts b/api/api/v1/accounts/familiar_followers/index.ts index 6378410a..fc82239f 100644 --- a/api/api/v1/accounts/familiar_followers/index.ts +++ b/api/api/v1/accounts/familiar_followers/index.ts @@ -3,9 +3,10 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions, type Users } from "@versia/kit/tables"; +import type { Users } from "@versia/kit/tables"; import { type InferSelectModel, sql } from "drizzle-orm"; const route = createRoute({ @@ -22,7 +23,7 @@ const route = createRoute({ auth({ auth: true, scopes: ["read:follows"], - permissions: [RolePermissions.ManageOwnFollows], + permissions: [RolePermission.ManageOwnFollows], }), qsQuery(), ] as const, diff --git a/api/api/v1/accounts/index.ts b/api/api/v1/accounts/index.ts index b729ddbc..2c5f083c 100644 --- a/api/api/v1/accounts/index.ts +++ b/api/api/v1/accounts/index.ts @@ -1,7 +1,7 @@ import { apiRoute, auth, jsonOrForm, reusedResponses } from "@/api"; import { tempmailDomains } from "@/tempmail"; 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 { Users } from "@versia/kit/tables"; import { and, eq, isNull } from "drizzle-orm"; diff --git a/api/api/v1/accounts/lookup/index.ts b/api/api/v1/accounts/lookup/index.ts index 4a2b86df..e70e982e 100644 --- a/api/api/v1/accounts/lookup/index.ts +++ b/api/api/v1/accounts/lookup/index.ts @@ -6,9 +6,10 @@ import { reusedResponses, } from "@/api"; 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 { RolePermissions, Users } from "@versia/kit/tables"; +import { Users } from "@versia/kit/tables"; import { and, eq, isNull } from "drizzle-orm"; import { ApiError } from "~/classes/errors/api-error"; import { config } from "~/config.ts"; @@ -22,7 +23,7 @@ const route = createRoute({ middleware: [ auth({ auth: false, - permissions: [RolePermissions.Search], + permissions: [RolePermission.Search], }), ] as const, request: { diff --git a/api/api/v1/accounts/relationships/index.ts b/api/api/v1/accounts/relationships/index.ts index ca9212d3..00b8d140 100644 --- a/api/api/v1/accounts/relationships/index.ts +++ b/api/api/v1/accounts/relationships/index.ts @@ -4,9 +4,9 @@ import { Account as AccountSchema, Relationship as RelationshipSchema, zBoolean, -} from "@versia/client-ng/schemas"; +} from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; import { Relationship } from "@versia/kit/db"; -import { RolePermissions } from "@versia/kit/tables"; const route = createRoute({ method: "get", @@ -22,7 +22,7 @@ const route = createRoute({ auth({ auth: true, scopes: ["read:follows"], - permissions: [RolePermissions.ManageOwnFollows], + permissions: [RolePermission.ManageOwnFollows], }), qsQuery(), ] as const, diff --git a/api/api/v1/accounts/search/index.ts b/api/api/v1/accounts/search/index.ts index e7e0d00f..87c70aa9 100644 --- a/api/api/v1/accounts/search/index.ts +++ b/api/api/v1/accounts/search/index.ts @@ -1,8 +1,9 @@ import { apiRoute, auth, parseUserAddress } from "@/api"; 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 { RolePermissions, Users } from "@versia/kit/tables"; +import { Users } from "@versia/kit/tables"; import { eq, ilike, not, or, sql } from "drizzle-orm"; import stringComparison from "string-comparison"; import { ApiError } from "~/classes/errors/api-error"; @@ -19,7 +20,7 @@ export const route = createRoute({ middleware: [ auth({ auth: false, - permissions: [RolePermissions.Search, RolePermissions.ViewAccounts], + permissions: [RolePermission.Search, RolePermission.ViewAccounts], scopes: ["read:accounts"], }), ] as const, diff --git a/api/api/v1/accounts/update_credentials/index.ts b/api/api/v1/accounts/update_credentials/index.ts index ea1b882d..3d97f1ee 100644 --- a/api/api/v1/accounts/update_credentials/index.ts +++ b/api/api/v1/accounts/update_credentials/index.ts @@ -2,9 +2,10 @@ import { apiRoute, auth, jsonOrForm, reusedResponses } from "@/api"; import { mergeAndDeduplicate } from "@/lib"; import { sanitizedHtmlStrip } from "@/sanitization"; 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 { RolePermissions, Users } from "@versia/kit/tables"; +import { Users } from "@versia/kit/tables"; import { and, eq, isNull } from "drizzle-orm"; import { ApiError } from "~/classes/errors/api-error"; import { contentToHtml } from "~/classes/functions/status"; @@ -22,7 +23,7 @@ const route = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnAccount], + permissions: [RolePermission.ManageOwnAccount], scopes: ["write:accounts"], }), jsonOrForm(), diff --git a/api/api/v1/accounts/verify_credentials/index.ts b/api/api/v1/accounts/verify_credentials/index.ts index 507b1edd..56212264 100644 --- a/api/api/v1/accounts/verify_credentials/index.ts +++ b/api/api/v1/accounts/verify_credentials/index.ts @@ -1,6 +1,6 @@ import { apiRoute, auth, reusedResponses } from "@/api"; import { createRoute } from "@hono/zod-openapi"; -import { Account } from "@versia/client-ng/schemas"; +import { Account } from "@versia/client/schemas"; const route = createRoute({ method: "get", diff --git a/api/api/v1/apps/index.ts b/api/api/v1/apps/index.ts index 9c5af7d7..32790b6e 100644 --- a/api/api/v1/apps/index.ts +++ b/api/api/v1/apps/index.ts @@ -4,7 +4,7 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Application as ApplicationSchema, CredentialApplication as CredentialApplicationSchema, -} from "@versia/client-ng/schemas"; +} from "@versia/client/schemas"; import { Application } from "@versia/kit/db"; const route = createRoute({ diff --git a/api/api/v1/apps/verify_credentials/index.ts b/api/api/v1/apps/verify_credentials/index.ts index e0f4eaa2..20382dc6 100644 --- a/api/api/v1/apps/verify_credentials/index.ts +++ b/api/api/v1/apps/verify_credentials/index.ts @@ -1,8 +1,8 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { RolePermissions } from "@versia/kit/tables"; import { ApiError } from "~/classes/errors/api-error"; const route = createRoute({ @@ -17,7 +17,7 @@ const route = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnApps], + permissions: [RolePermission.ManageOwnApps], }), ] as const, responses: { diff --git a/api/api/v1/blocks/index.ts b/api/api/v1/blocks/index.ts index 26e09002..1482f386 100644 --- a/api/api/v1/blocks/index.ts +++ b/api/api/v1/blocks/index.ts @@ -1,10 +1,10 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { RolePermissions, Users } from "@versia/kit/tables"; +import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; - const route = createRoute({ method: "get", path: "/api/v1/blocks", @@ -18,7 +18,7 @@ const route = createRoute({ auth({ auth: true, scopes: ["read:blocks"], - permissions: [RolePermissions.ManageOwnBlocks], + permissions: [RolePermission.ManageOwnBlocks], }), ] as const, request: { diff --git a/api/api/v1/challenges/index.ts b/api/api/v1/challenges/index.ts index 6f945f61..359367f3 100644 --- a/api/api/v1/challenges/index.ts +++ b/api/api/v1/challenges/index.ts @@ -1,7 +1,7 @@ import { apiRoute, auth } from "@/api"; import { generateChallenge } from "@/challenges"; 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 { config } from "~/config.ts"; import { ErrorSchema } from "~/types/api"; diff --git a/api/api/v1/custom_emojis/index.ts b/api/api/v1/custom_emojis/index.ts index d8ae11df..63dcbdfa 100644 --- a/api/api/v1/custom_emojis/index.ts +++ b/api/api/v1/custom_emojis/index.ts @@ -1,8 +1,9 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { Emojis, RolePermissions } from "@versia/kit/tables"; +import { Emojis } from "@versia/kit/tables"; import { and, eq, isNull, or } from "drizzle-orm"; const route = createRoute({ @@ -17,7 +18,7 @@ const route = createRoute({ middleware: [ auth({ auth: false, - permissions: [RolePermissions.ViewEmojis], + permissions: [RolePermission.ViewEmojis], }), ] as const, responses: { diff --git a/api/api/v1/emojis/:id/index.ts b/api/api/v1/emojis/:id/index.ts index f794b50b..e5e8d3c6 100644 --- a/api/api/v1/emojis/:id/index.ts +++ b/api/api/v1/emojis/:id/index.ts @@ -7,8 +7,8 @@ import { } from "@/api"; import { mimeLookup } from "@/content_types"; import { createRoute, z } from "@hono/zod-openapi"; -import { CustomEmoji as CustomEmojiSchema } from "@versia/client-ng/schemas"; -import { RolePermissions } from "@versia/kit/tables"; +import { CustomEmoji as CustomEmojiSchema } from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; import { ApiError } from "~/classes/errors/api-error"; import { config } from "~/config.ts"; import { ErrorSchema } from "~/types/api"; @@ -50,7 +50,7 @@ const routeGet = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ViewEmojis], + permissions: [RolePermission.ViewEmojis], }), withEmojiParam, ] as const, @@ -90,8 +90,8 @@ const routePatch = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnEmojis, - RolePermissions.ViewEmojis, + RolePermission.ManageOwnEmojis, + RolePermission.ViewEmojis, ], }), jsonOrForm(), @@ -154,8 +154,8 @@ const routeDelete = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnEmojis, - RolePermissions.ViewEmojis, + RolePermission.ManageOwnEmojis, + RolePermission.ViewEmojis, ], }), withEmojiParam, @@ -187,7 +187,7 @@ export default apiRoute((app) => { // Don't leak non-global emojis to non-admins if ( - !user.hasPermission(RolePermissions.ManageEmojis) && + !user.hasPermission(RolePermission.ManageEmojis) && emoji.data.ownerId !== user.data.id ) { throw new ApiError(404, "Emoji not found"); @@ -202,13 +202,13 @@ export default apiRoute((app) => { // Check if user is admin if ( - !user.hasPermission(RolePermissions.ManageEmojis) && + !user.hasPermission(RolePermission.ManageEmojis) && emoji.data.ownerId !== user.data.id ) { throw new ApiError( 403, "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, } = context.req.valid("json"); - if (!user.hasPermission(RolePermissions.ManageEmojis) && emojiGlobal) { + if (!user.hasPermission(RolePermission.ManageEmojis) && emojiGlobal) { throw new ApiError( 401, "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 if ( - !user.hasPermission(RolePermissions.ManageEmojis) && + !user.hasPermission(RolePermission.ManageEmojis) && emoji.data.ownerId !== user.data.id ) { throw new ApiError( 403, "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`, ); } diff --git a/api/api/v1/emojis/index.ts b/api/api/v1/emojis/index.ts index d9fd2405..c9f4ed0a 100644 --- a/api/api/v1/emojis/index.ts +++ b/api/api/v1/emojis/index.ts @@ -1,13 +1,13 @@ import { apiRoute, auth, jsonOrForm, reusedResponses } from "@/api"; import { mimeLookup } from "@/content_types"; 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 { Emojis, RolePermissions } from "@versia/kit/tables"; +import { Emojis } from "@versia/kit/tables"; import { and, eq, isNull, or } from "drizzle-orm"; import { ApiError } from "~/classes/errors/api-error"; import { config } from "~/config.ts"; - const schema = z.object({ shortcode: CustomEmojiSchema.shape.shortcode, element: z @@ -43,8 +43,8 @@ const route = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnEmojis, - RolePermissions.ViewEmojis, + RolePermission.ManageOwnEmojis, + RolePermission.ViewEmojis, ], }), jsonOrForm(), @@ -83,11 +83,11 @@ export default apiRoute((app) => context.req.valid("json"); const { user } = context.get("auth"); - if (!user.hasPermission(RolePermissions.ManageEmojis) && global) { + if (!user.hasPermission(RolePermission.ManageEmojis) && global) { throw new ApiError( 401, "Missing permissions", - `Only users with the '${RolePermissions.ManageEmojis}' permission can upload global emojis`, + `Only users with the '${RolePermission.ManageEmojis}' permission can upload global emojis`, ); } diff --git a/api/api/v1/favourites/index.ts b/api/api/v1/favourites/index.ts index 7de80ff7..b0e31550 100644 --- a/api/api/v1/favourites/index.ts +++ b/api/api/v1/favourites/index.ts @@ -1,8 +1,9 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { Notes, RolePermissions } from "@versia/kit/tables"; +import { Notes } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; const route = createRoute({ @@ -17,7 +18,7 @@ const route = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnLikes], + permissions: [RolePermission.ManageOwnLikes], }), ] as const, request: { diff --git a/api/api/v1/follow_requests/:account_id/authorize.ts b/api/api/v1/follow_requests/:account_id/authorize.ts index 58606c6f..678fd593 100644 --- a/api/api/v1/follow_requests/:account_id/authorize.ts +++ b/api/api/v1/follow_requests/:account_id/authorize.ts @@ -3,9 +3,9 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions } from "@versia/kit/tables"; import { ApiError } from "~/classes/errors/api-error"; const route = createRoute({ @@ -19,7 +19,7 @@ const route = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnFollows], + permissions: [RolePermission.ManageOwnFollows], }), ] as const, request: { diff --git a/api/api/v1/follow_requests/:account_id/reject.ts b/api/api/v1/follow_requests/:account_id/reject.ts index 3bb27498..5ce0e0d6 100644 --- a/api/api/v1/follow_requests/:account_id/reject.ts +++ b/api/api/v1/follow_requests/:account_id/reject.ts @@ -3,9 +3,9 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions } from "@versia/kit/tables"; import { ApiError } from "~/classes/errors/api-error"; const route = createRoute({ @@ -19,7 +19,7 @@ const route = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnFollows], + permissions: [RolePermission.ManageOwnFollows], }), ] as const, request: { diff --git a/api/api/v1/follow_requests/index.ts b/api/api/v1/follow_requests/index.ts index 616e446b..d1c35c31 100644 --- a/api/api/v1/follow_requests/index.ts +++ b/api/api/v1/follow_requests/index.ts @@ -1,8 +1,9 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { RolePermissions, Users } from "@versia/kit/tables"; +import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; const route = createRoute({ @@ -17,7 +18,7 @@ const route = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnFollows], + permissions: [RolePermission.ManageOwnFollows], }), ] as const, request: { diff --git a/api/api/v1/instance/extended_description.ts b/api/api/v1/instance/extended_description.ts index 11d4377c..0f060e1f 100644 --- a/api/api/v1/instance/extended_description.ts +++ b/api/api/v1/instance/extended_description.ts @@ -1,6 +1,6 @@ import { apiRoute } from "@/api"; 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 { config } from "~/config.ts"; diff --git a/api/api/v1/instance/index.ts b/api/api/v1/instance/index.ts index 18012dea..160bb438 100644 --- a/api/api/v1/instance/index.ts +++ b/api/api/v1/instance/index.ts @@ -1,7 +1,7 @@ import { apiRoute, auth } from "@/api"; import { proxyUrl } from "@/response"; 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 { Users } from "@versia/kit/tables"; import { and, eq, isNull } from "drizzle-orm"; diff --git a/api/api/v1/instance/privacy_policy.ts b/api/api/v1/instance/privacy_policy.ts index d59cf4fe..48b6cae8 100644 --- a/api/api/v1/instance/privacy_policy.ts +++ b/api/api/v1/instance/privacy_policy.ts @@ -1,6 +1,6 @@ import { apiRoute, auth } from "@/api"; 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 { config } from "~/config.ts"; diff --git a/api/api/v1/instance/rules.ts b/api/api/v1/instance/rules.ts index e4297af9..879578d1 100644 --- a/api/api/v1/instance/rules.ts +++ b/api/api/v1/instance/rules.ts @@ -1,6 +1,6 @@ import { apiRoute, auth } from "@/api"; 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"; const route = createRoute({ diff --git a/api/api/v1/instance/terms_of_service.ts b/api/api/v1/instance/terms_of_service.ts index bca5004b..995769a2 100644 --- a/api/api/v1/instance/terms_of_service.ts +++ b/api/api/v1/instance/terms_of_service.ts @@ -1,6 +1,6 @@ import { apiRoute, auth } from "@/api"; 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 { config } from "~/config.ts"; diff --git a/api/api/v1/markers/index.ts b/api/api/v1/markers/index.ts index 1bd3c64f..d5fbd126 100644 --- a/api/api/v1/markers/index.ts +++ b/api/api/v1/markers/index.ts @@ -4,9 +4,10 @@ import { Marker as MarkerSchema, Notification as NotificationSchema, 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 { Markers, RolePermissions } from "@versia/kit/tables"; +import { Markers } from "@versia/kit/tables"; import { type SQL, and, eq } from "drizzle-orm"; const MarkerResponseSchema = z.object({ @@ -26,7 +27,7 @@ const routeGet = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnAccount], + permissions: [RolePermission.ManageOwnAccount], }), ] as const, request: { @@ -67,7 +68,7 @@ const routePost = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnAccount], + permissions: [RolePermission.ManageOwnAccount], }), ] as const, request: { diff --git a/api/api/v1/media/:id/index.ts b/api/api/v1/media/:id/index.ts index 2ccddd40..6b4246a9 100644 --- a/api/api/v1/media/:id/index.ts +++ b/api/api/v1/media/:id/index.ts @@ -1,8 +1,8 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { RolePermissions } from "@versia/kit/tables"; import { ApiError } from "~/classes/errors/api-error"; import { ErrorSchema } from "~/types/api"; @@ -20,7 +20,7 @@ const routePut = createRoute({ auth({ auth: true, scopes: ["write:media"], - permissions: [RolePermissions.ManageOwnMedia], + permissions: [RolePermission.ManageOwnMedia], }), ] as const, request: { @@ -84,7 +84,7 @@ const routeGet = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnMedia], + permissions: [RolePermission.ManageOwnMedia], }), ] as const, request: { diff --git a/api/api/v1/media/index.ts b/api/api/v1/media/index.ts index dbc8bbb7..e005efc9 100644 --- a/api/api/v1/media/index.ts +++ b/api/api/v1/media/index.ts @@ -1,8 +1,8 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { RolePermissions } from "@versia/kit/tables"; import { ErrorSchema } from "~/types/api"; const route = createRoute({ @@ -20,7 +20,7 @@ const route = createRoute({ auth({ auth: true, scopes: ["write:media"], - permissions: [RolePermissions.ManageOwnMedia], + permissions: [RolePermission.ManageOwnMedia], }), ] as const, request: { diff --git a/api/api/v1/mutes/index.ts b/api/api/v1/mutes/index.ts index 2355d63c..b489f427 100644 --- a/api/api/v1/mutes/index.ts +++ b/api/api/v1/mutes/index.ts @@ -1,8 +1,9 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { RolePermissions, Users } from "@versia/kit/tables"; +import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; const route = createRoute({ @@ -18,7 +19,7 @@ const route = createRoute({ auth({ auth: true, scopes: ["read:mutes"], - permissions: [RolePermissions.ManageOwnMutes], + permissions: [RolePermission.ManageOwnMutes], }), ] as const, request: { diff --git a/api/api/v1/notifications/:id/dismiss.test.ts b/api/api/v1/notifications/:id/dismiss.test.ts index 31180516..80a399df 100644 --- a/api/api/v1/notifications/:id/dismiss.test.ts +++ b/api/api/v1/notifications/:id/dismiss.test.ts @@ -1,6 +1,6 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; 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"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/api/api/v1/notifications/:id/dismiss.ts b/api/api/v1/notifications/:id/dismiss.ts index da14169c..776b31f0 100644 --- a/api/api/v1/notifications/:id/dismiss.ts +++ b/api/api/v1/notifications/:id/dismiss.ts @@ -1,8 +1,8 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { RolePermissions } from "@versia/kit/tables"; import { ApiError } from "~/classes/errors/api-error"; const route = createRoute({ @@ -18,7 +18,7 @@ const route = createRoute({ auth({ auth: true, scopes: ["write:notifications"], - permissions: [RolePermissions.ManageOwnNotifications], + permissions: [RolePermission.ManageOwnNotifications], }), ] as const, request: { diff --git a/api/api/v1/notifications/:id/index.test.ts b/api/api/v1/notifications/:id/index.test.ts index b4e96639..6d763f4e 100644 --- a/api/api/v1/notifications/:id/index.test.ts +++ b/api/api/v1/notifications/:id/index.test.ts @@ -1,6 +1,6 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; 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"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/api/api/v1/notifications/:id/index.ts b/api/api/v1/notifications/:id/index.ts index e6fcba6e..f2ae5803 100644 --- a/api/api/v1/notifications/:id/index.ts +++ b/api/api/v1/notifications/:id/index.ts @@ -1,8 +1,8 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { RolePermissions } from "@versia/kit/tables"; import { ApiError } from "~/classes/errors/api-error"; import { ErrorSchema } from "~/types/api"; @@ -18,7 +18,7 @@ const route = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnNotifications], + permissions: [RolePermission.ManageOwnNotifications], scopes: ["read:notifications"], }), ] as const, diff --git a/api/api/v1/notifications/clear/index.ts b/api/api/v1/notifications/clear/index.ts index a4853a40..90e0af02 100644 --- a/api/api/v1/notifications/clear/index.ts +++ b/api/api/v1/notifications/clear/index.ts @@ -1,6 +1,6 @@ import { apiRoute, auth, reusedResponses } from "@/api"; import { createRoute } from "@hono/zod-openapi"; -import { RolePermissions } from "@versia/kit/tables"; +import { RolePermission } from "@versia/client/schemas"; const route = createRoute({ method: "post", @@ -14,7 +14,7 @@ const route = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnNotifications], + permissions: [RolePermission.ManageOwnNotifications], scopes: ["write:notifications"], }), ] as const, diff --git a/api/api/v1/notifications/destroy_multiple/index.test.ts b/api/api/v1/notifications/destroy_multiple/index.test.ts index 3f301e32..baa3e098 100644 --- a/api/api/v1/notifications/destroy_multiple/index.test.ts +++ b/api/api/v1/notifications/destroy_multiple/index.test.ts @@ -1,6 +1,6 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; 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"; const { users, deleteUsers } = await getTestUsers(2); diff --git a/api/api/v1/notifications/destroy_multiple/index.ts b/api/api/v1/notifications/destroy_multiple/index.ts index 419c9bd7..0ad3be86 100644 --- a/api/api/v1/notifications/destroy_multiple/index.ts +++ b/api/api/v1/notifications/destroy_multiple/index.ts @@ -1,6 +1,6 @@ import { apiRoute, auth, reusedResponses } from "@/api"; import { createRoute, z } from "@hono/zod-openapi"; -import { RolePermissions } from "@versia/kit/tables"; +import { RolePermission } from "@versia/client/schemas"; const schemas = { query: z.object({ @@ -15,7 +15,7 @@ const route = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnNotifications], + permissions: [RolePermission.ManageOwnNotifications], scopes: ["write:notifications"], }), ] as const, diff --git a/api/api/v1/notifications/index.ts b/api/api/v1/notifications/index.ts index abb19b03..a9dd56bb 100644 --- a/api/api/v1/notifications/index.ts +++ b/api/api/v1/notifications/index.ts @@ -4,9 +4,10 @@ import { Account as AccountSchema, Notification as NotificationSchema, zBoolean, -} from "@versia/client-ng/schemas"; +} from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; 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"; const route = createRoute({ @@ -21,8 +22,8 @@ const route = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnNotifications, - RolePermissions.ViewPrivateTimelines, + RolePermission.ManageOwnNotifications, + RolePermission.ViewPrivateTimelines, ], }), ] as const, diff --git a/api/api/v1/profile/avatar.ts b/api/api/v1/profile/avatar.ts index 191269b6..c36f033d 100644 --- a/api/api/v1/profile/avatar.ts +++ b/api/api/v1/profile/avatar.ts @@ -1,7 +1,7 @@ import { apiRoute, auth, reusedResponses } from "@/api"; import { createRoute } from "@hono/zod-openapi"; -import { Account } from "@versia/client-ng/schemas"; -import { RolePermissions } from "@versia/kit/tables"; +import { Account } from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; const route = createRoute({ method: "delete", @@ -15,7 +15,7 @@ const route = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnAccount], + permissions: [RolePermission.ManageOwnAccount], scopes: ["write:account"], }), ] as const, diff --git a/api/api/v1/profile/header.ts b/api/api/v1/profile/header.ts index a94faba7..ff97d3ec 100644 --- a/api/api/v1/profile/header.ts +++ b/api/api/v1/profile/header.ts @@ -1,7 +1,7 @@ import { apiRoute, auth, reusedResponses } from "@/api"; import { createRoute } from "@hono/zod-openapi"; -import { Account } from "@versia/client-ng/schemas"; -import { RolePermissions } from "@versia/kit/tables"; +import { Account } from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; const route = createRoute({ method: "delete", @@ -15,7 +15,7 @@ const route = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnAccount], + permissions: [RolePermission.ManageOwnAccount], scopes: ["write:account"], }), ] as const, diff --git a/api/api/v1/push/subscription/index.delete.ts b/api/api/v1/push/subscription/index.delete.ts index 49c9a904..e9a77f1e 100644 --- a/api/api/v1/push/subscription/index.delete.ts +++ b/api/api/v1/push/subscription/index.delete.ts @@ -1,8 +1,8 @@ import { apiRoute, auth, reusedResponses } from "@/api"; import { createRoute, z } from "@hono/zod-openapi"; +import { RolePermission } from "@versia/client/schemas"; import { PushSubscription } from "@versia/kit/db"; import { ApiError } from "~/classes/errors/api-error"; -import { RolePermissions } from "~/drizzle/schema"; export default apiRoute((app) => app.openapi( @@ -18,7 +18,7 @@ export default apiRoute((app) => middleware: [ auth({ auth: true, - permissions: [RolePermissions.UsePushNotifications], + permissions: [RolePermission.UsePushNotifications], scopes: ["push"], }), ] as const, diff --git a/api/api/v1/push/subscription/index.get.ts b/api/api/v1/push/subscription/index.get.ts index 7d67e34b..b5e00960 100644 --- a/api/api/v1/push/subscription/index.get.ts +++ b/api/api/v1/push/subscription/index.get.ts @@ -1,9 +1,9 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { ApiError } from "~/classes/errors/api-error"; -import { RolePermissions } from "~/drizzle/schema"; export default apiRoute((app) => app.openapi( @@ -20,7 +20,7 @@ export default apiRoute((app) => middleware: [ auth({ auth: true, - permissions: [RolePermissions.UsePushNotifications], + permissions: [RolePermission.UsePushNotifications], scopes: ["push"], }), ] as const, diff --git a/api/api/v1/push/subscription/index.post.ts b/api/api/v1/push/subscription/index.post.ts index ba3c54bf..ed498e74 100644 --- a/api/api/v1/push/subscription/index.post.ts +++ b/api/api/v1/push/subscription/index.post.ts @@ -4,9 +4,9 @@ import { createRoute } from "@hono/zod-openapi"; import { WebPushSubscriptionInput, 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 { RolePermissions } from "~/drizzle/schema"; export default apiRoute((app) => app.openapi( @@ -23,7 +23,7 @@ export default apiRoute((app) => middleware: [ auth({ auth: true, - permissions: [RolePermissions.UsePushNotifications], + permissions: [RolePermission.UsePushNotifications], scopes: ["push"], }), jsonOrForm(), @@ -56,7 +56,7 @@ export default apiRoute((app) => if ( data.alerts["admin.report"] && - !user.hasPermission(RolePermissions.ManageReports) + !user.hasPermission(RolePermission.ManageReports) ) { // This shouldn't throw an error in mastodon either data.alerts["admin.report"] = false; @@ -64,7 +64,7 @@ export default apiRoute((app) => if ( data.alerts["admin.sign_up"] && - !user.hasPermission(RolePermissions.ManageAccounts) + !user.hasPermission(RolePermission.ManageAccounts) ) { data.alerts["admin.sign_up"] = false; } diff --git a/api/api/v1/push/subscription/index.put.ts b/api/api/v1/push/subscription/index.put.ts index 8a013b0b..f36fe020 100644 --- a/api/api/v1/push/subscription/index.put.ts +++ b/api/api/v1/push/subscription/index.put.ts @@ -3,10 +3,10 @@ import { createRoute } from "@hono/zod-openapi"; import { WebPushSubscriptionInput, 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 { ApiError } from "~/classes/errors/api-error"; -import { RolePermissions } from "~/drizzle/schema"; export default apiRoute((app) => app.openapi( @@ -23,7 +23,7 @@ export default apiRoute((app) => middleware: [ auth({ auth: true, - permissions: [RolePermissions.UsePushNotifications], + permissions: [RolePermission.UsePushNotifications], scopes: ["push"], }), jsonOrForm(), @@ -67,7 +67,7 @@ export default apiRoute((app) => if ( data.alerts["admin.report"] && - !user.hasPermission(RolePermissions.ManageReports) + !user.hasPermission(RolePermission.ManageReports) ) { // This shouldn't throw an error in mastodon either data.alerts["admin.report"] = false; @@ -75,7 +75,7 @@ export default apiRoute((app) => if ( data.alerts["admin.sign_up"] && - !user.hasPermission(RolePermissions.ManageAccounts) + !user.hasPermission(RolePermission.ManageAccounts) ) { data.alerts["admin.sign_up"] = false; } diff --git a/api/api/v1/roles/:id/index.test.ts b/api/api/v1/roles/:id/index.test.ts index 50e9c81e..3f109ce0 100644 --- a/api/api/v1/roles/:id/index.test.ts +++ b/api/api/v1/roles/:id/index.test.ts @@ -1,6 +1,6 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; +import { RolePermission } from "@versia/client/schemas"; import { Role } from "@versia/kit/db"; -import { RolePermissions } from "@versia/kit/tables"; import { generateClient, getTestUsers } from "~/tests/utils"; const { users, deleteUsers } = await getTestUsers(2); @@ -11,7 +11,7 @@ beforeAll(async () => { // Create new role role = await Role.insert({ name: "test", - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], priority: 2, description: "test", visible: true, @@ -25,7 +25,7 @@ beforeAll(async () => { // Create a role with higher priority than the user's role higherPriorityRole = await Role.insert({ name: "higherPriorityRole", - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], priority: 3, // Higher priority than the user's role description: "Higher priority role", visible: true, @@ -141,7 +141,7 @@ describe("/api/v1/roles/:id", () => { await using client = await generateClient(users[0]); const { data, ok, raw } = await client.updateRole(role.id, { - permissions: [RolePermissions.Impersonate], + permissions: [RolePermission.Impersonate], }); expect(ok).toBe(false); @@ -175,7 +175,7 @@ describe("/api/v1/roles/:id", () => { test("should delete role", async () => { const newRole = await Role.insert({ name: "test2", - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], priority: 2, description: "test", visible: true, diff --git a/api/api/v1/roles/:id/index.ts b/api/api/v1/roles/:id/index.ts index b5cc6187..818a0872 100644 --- a/api/api/v1/roles/:id/index.ts +++ b/api/api/v1/roles/:id/index.ts @@ -1,8 +1,8 @@ import { apiRoute, auth } from "@/api"; 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 { RolePermissions } from "@versia/kit/tables"; import { ApiError } from "~/classes/errors/api-error"; import { ErrorSchema } from "~/types/api"; @@ -48,7 +48,7 @@ const routePatch = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], }), ] as const, request: { @@ -94,7 +94,7 @@ const routeDelete = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], }), ] as const, request: { @@ -170,7 +170,7 @@ export default apiRoute((app) => { if (permissions) { const userPermissions = user.getAllPermissions(); const hasPermissions = ( - permissions as unknown as RolePermissions[] + permissions as unknown as RolePermission[] ).every((p) => userPermissions.includes(p)); if (!hasPermissions) { @@ -183,7 +183,7 @@ export default apiRoute((app) => { } await role.update({ - permissions: permissions as unknown as RolePermissions[], + permissions: permissions as unknown as RolePermission[], priority, description, icon, diff --git a/api/api/v1/roles/index.test.ts b/api/api/v1/roles/index.test.ts index 1f859d22..6cd5c5c3 100644 --- a/api/api/v1/roles/index.test.ts +++ b/api/api/v1/roles/index.test.ts @@ -1,6 +1,6 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; +import { RolePermission } from "@versia/client/schemas"; import { Role } from "@versia/kit/db"; -import { RolePermissions } from "@versia/kit/tables"; import { config } from "~/config.ts"; import { generateClient, getTestUsers } from "~/tests/utils"; @@ -11,7 +11,7 @@ beforeAll(async () => { // Create new role role = await Role.insert({ name: "test", - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], priority: 10, description: "test", visible: true, @@ -48,7 +48,7 @@ describe("/api/v1/roles", () => { expect(ok).toBe(true); expect(data).toContainEqual({ name: "test", - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], priority: 10, description: "test", visible: true, @@ -70,7 +70,7 @@ describe("/api/v1/roles", () => { await using client = await generateClient(users[0]); const { ok, data } = await client.createRole("newRole", { - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], priority: 1, description: "newRole", visible: true, @@ -80,7 +80,7 @@ describe("/api/v1/roles", () => { expect(ok).toBe(true); expect(data).toMatchObject({ name: "newRole", - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], priority: 1, description: "newRole", visible: true, @@ -99,7 +99,7 @@ describe("/api/v1/roles", () => { await using client = await generateClient(users[0]); const { data, ok, raw } = await client.createRole("newRole", { - permissions: [RolePermissions.ManageBlocks], + permissions: [RolePermission.ManageBlocks], priority: 11, description: "newRole", visible: true, @@ -117,7 +117,7 @@ describe("/api/v1/roles", () => { await using client = await generateClient(users[0]); const { data, ok, raw } = await client.createRole("newRole", { - permissions: [RolePermissions.Impersonate], + permissions: [RolePermission.Impersonate], priority: 1, description: "newRole", visible: true, diff --git a/api/api/v1/roles/index.ts b/api/api/v1/roles/index.ts index 21b72e66..22bc6f5d 100644 --- a/api/api/v1/roles/index.ts +++ b/api/api/v1/roles/index.ts @@ -1,9 +1,9 @@ import { apiRoute, auth } from "@/api"; 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 { ApiError } from "~/classes/errors/api-error"; -import { RolePermissions } from "~/drizzle/schema"; import { ErrorSchema } from "~/types/api"; const routeGet = createRoute({ @@ -34,7 +34,7 @@ const routePost = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageRoles], + permissions: [RolePermission.ManageRoles], }), ] as const, request: { @@ -100,7 +100,7 @@ export default apiRoute((app) => { if (permissions) { const userPermissions = user.getAllPermissions(); const hasPermissions = ( - permissions as unknown as RolePermissions[] + permissions as unknown as RolePermission[] ).every((p) => userPermissions.includes(p)); if (!hasPermissions) { @@ -116,7 +116,7 @@ export default apiRoute((app) => { description, icon, name, - permissions: permissions as unknown as RolePermissions[], + permissions: permissions as unknown as RolePermission[], priority, visible, }); diff --git a/api/api/v1/statuses/:id/context.ts b/api/api/v1/statuses/:id/context.ts index 53f5deac..01c47733 100644 --- a/api/api/v1/statuses/:id/context.ts +++ b/api/api/v1/statuses/:id/context.ts @@ -9,8 +9,8 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Context as ContextSchema, Status as StatusSchema, -} from "@versia/client-ng/schemas"; -import { RolePermissions } from "@versia/kit/tables"; +} from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; const route = createRoute({ method: "get", @@ -24,7 +24,7 @@ const route = createRoute({ middleware: [ auth({ auth: false, - permissions: [RolePermissions.ViewNotes], + permissions: [RolePermission.ViewNotes], }), withNoteParam, ] as const, diff --git a/api/api/v1/statuses/:id/favourite.ts b/api/api/v1/statuses/:id/favourite.ts index 4a41fdd6..45eaf9c7 100644 --- a/api/api/v1/statuses/:id/favourite.ts +++ b/api/api/v1/statuses/:id/favourite.ts @@ -6,8 +6,8 @@ import { withNoteParam, } from "@/api"; import { createRoute, z } from "@hono/zod-openapi"; -import { Status as StatusSchema } from "@versia/client-ng/schemas"; -import { RolePermissions } from "@versia/kit/tables"; +import { Status as StatusSchema } from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; const route = createRoute({ method: "post", @@ -22,8 +22,8 @@ const route = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnLikes, - RolePermissions.ViewNotes, + RolePermission.ManageOwnLikes, + RolePermission.ViewNotes, ], }), withNoteParam, diff --git a/api/api/v1/statuses/:id/favourited_by.ts b/api/api/v1/statuses/:id/favourited_by.ts index 216be8bb..875c99d7 100644 --- a/api/api/v1/statuses/:id/favourited_by.ts +++ b/api/api/v1/statuses/:id/favourited_by.ts @@ -9,9 +9,10 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions, Users } from "@versia/kit/tables"; +import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; const route = createRoute({ @@ -27,8 +28,8 @@ const route = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ViewNotes, - RolePermissions.ViewNoteLikes, + RolePermission.ViewNotes, + RolePermission.ViewNoteLikes, ], }), withNoteParam, diff --git a/api/api/v1/statuses/:id/index.ts b/api/api/v1/statuses/:id/index.ts index acfa40a8..746e49f7 100644 --- a/api/api/v1/statuses/:id/index.ts +++ b/api/api/v1/statuses/:id/index.ts @@ -13,9 +13,9 @@ import { Status as StatusSchema, StatusSource as StatusSourceSchema, zBoolean, -} from "@versia/client-ng/schemas"; +} from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; import { Media } from "@versia/kit/db"; -import { RolePermissions } from "@versia/kit/tables"; import { ApiError } from "~/classes/errors/api-error"; import { config } from "~/config.ts"; @@ -91,7 +91,7 @@ const routeGet = createRoute({ middleware: [ auth({ auth: false, - permissions: [RolePermissions.ViewNotes], + permissions: [RolePermission.ViewNotes], }), withNoteParam, ] as const, @@ -126,8 +126,8 @@ const routeDelete = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnNotes, - RolePermissions.ViewNotes, + RolePermission.ManageOwnNotes, + RolePermission.ViewNotes, ], }), withNoteParam, @@ -166,8 +166,8 @@ const routePut = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnNotes, - RolePermissions.ViewNotes, + RolePermission.ManageOwnNotes, + RolePermission.ViewNotes, ], }), jsonOrForm(), diff --git a/api/api/v1/statuses/:id/pin.ts b/api/api/v1/statuses/:id/pin.ts index aed4011f..7e81c0c4 100644 --- a/api/api/v1/statuses/:id/pin.ts +++ b/api/api/v1/statuses/:id/pin.ts @@ -6,9 +6,9 @@ import { withNoteParam, } from "@/api"; 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 { RolePermissions } from "@versia/kit/tables"; import type { SQL } from "drizzle-orm"; import { ApiError } from "~/classes/errors/api-error"; @@ -26,8 +26,8 @@ const route = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnNotes, - RolePermissions.ViewNotes, + RolePermission.ManageOwnNotes, + RolePermission.ViewNotes, ], }), withNoteParam, diff --git a/api/api/v1/statuses/:id/reblog.ts b/api/api/v1/statuses/:id/reblog.ts index 6e1dbdf6..511dab53 100644 --- a/api/api/v1/statuses/:id/reblog.ts +++ b/api/api/v1/statuses/:id/reblog.ts @@ -7,9 +7,10 @@ import { withNoteParam, } from "@/api"; 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 { Notes, RolePermissions } from "@versia/kit/tables"; +import { Notes } from "@versia/kit/tables"; import { and, eq } from "drizzle-orm"; const route = createRoute({ @@ -25,8 +26,8 @@ const route = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnBoosts, - RolePermissions.ViewNotes, + RolePermission.ManageOwnBoosts, + RolePermission.ViewNotes, ], }), jsonOrForm(), diff --git a/api/api/v1/statuses/:id/reblogged_by.ts b/api/api/v1/statuses/:id/reblogged_by.ts index 5477a3c7..aabfd21a 100644 --- a/api/api/v1/statuses/:id/reblogged_by.ts +++ b/api/api/v1/statuses/:id/reblogged_by.ts @@ -9,9 +9,10 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Account as AccountSchema, 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 { RolePermissions, Users } from "@versia/kit/tables"; +import { Users } from "@versia/kit/tables"; import { and, gt, gte, lt, sql } from "drizzle-orm"; const route = createRoute({ @@ -27,8 +28,8 @@ const route = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ViewNotes, - RolePermissions.ViewNoteBoosts, + RolePermission.ViewNotes, + RolePermission.ViewNoteBoosts, ], }), withNoteParam, diff --git a/api/api/v1/statuses/:id/source.ts b/api/api/v1/statuses/:id/source.ts index db2f644e..5cadb6f7 100644 --- a/api/api/v1/statuses/:id/source.ts +++ b/api/api/v1/statuses/:id/source.ts @@ -9,8 +9,8 @@ import { createRoute, z } from "@hono/zod-openapi"; import { Status as StatusSchema, StatusSource as StatusSourceSchema, -} from "@versia/client-ng/schemas"; -import { RolePermissions } from "@versia/kit/tables"; +} from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; const route = createRoute({ method: "get", @@ -26,8 +26,8 @@ const route = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnNotes, - RolePermissions.ViewNotes, + RolePermission.ManageOwnNotes, + RolePermission.ViewNotes, ], }), withNoteParam, diff --git a/api/api/v1/statuses/:id/unfavourite.ts b/api/api/v1/statuses/:id/unfavourite.ts index 1a0b117f..fbe75875 100644 --- a/api/api/v1/statuses/:id/unfavourite.ts +++ b/api/api/v1/statuses/:id/unfavourite.ts @@ -6,8 +6,8 @@ import { withNoteParam, } from "@/api"; import { createRoute, z } from "@hono/zod-openapi"; -import { Status as StatusSchema } from "@versia/client-ng/schemas"; -import { RolePermissions } from "@versia/kit/tables"; +import { Status as StatusSchema } from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; const route = createRoute({ method: "post", @@ -22,8 +22,8 @@ const route = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnNotes, - RolePermissions.ViewNotes, + RolePermission.ManageOwnNotes, + RolePermission.ViewNotes, ], }), withNoteParam, diff --git a/api/api/v1/statuses/:id/unpin.ts b/api/api/v1/statuses/:id/unpin.ts index ef2d00cf..85a4688b 100644 --- a/api/api/v1/statuses/:id/unpin.ts +++ b/api/api/v1/statuses/:id/unpin.ts @@ -6,8 +6,8 @@ import { withNoteParam, } from "@/api"; import { createRoute, z } from "@hono/zod-openapi"; -import { Status as StatusSchema } from "@versia/client-ng/schemas"; -import { RolePermissions } from "@versia/kit/tables"; +import { Status as StatusSchema } from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; import { ApiError } from "~/classes/errors/api-error"; const route = createRoute({ @@ -23,8 +23,8 @@ const route = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnNotes, - RolePermissions.ViewNotes, + RolePermission.ManageOwnNotes, + RolePermission.ViewNotes, ], }), withNoteParam, diff --git a/api/api/v1/statuses/:id/unreblog.ts b/api/api/v1/statuses/:id/unreblog.ts index c601e883..d15ad201 100644 --- a/api/api/v1/statuses/:id/unreblog.ts +++ b/api/api/v1/statuses/:id/unreblog.ts @@ -6,9 +6,10 @@ import { withNoteParam, } from "@/api"; 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 { Notes, RolePermissions } from "@versia/kit/tables"; +import { Notes } from "@versia/kit/tables"; import { and, eq } from "drizzle-orm"; import { ApiError } from "~/classes/errors/api-error"; @@ -25,8 +26,8 @@ const route = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnNotes, - RolePermissions.ViewNotes, + RolePermission.ManageOwnNotes, + RolePermission.ViewNotes, ], }), withNoteParam, diff --git a/api/api/v1/statuses/index.test.ts b/api/api/v1/statuses/index.test.ts index acce02d5..202c8aea 100644 --- a/api/api/v1/statuses/index.test.ts +++ b/api/api/v1/statuses/index.test.ts @@ -1,6 +1,6 @@ import { afterAll, beforeAll, describe, expect, test } from "bun:test"; 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 { Emojis } from "@versia/kit/tables"; import { eq } from "drizzle-orm"; diff --git a/api/api/v1/statuses/index.ts b/api/api/v1/statuses/index.ts index fc9cb1ec..3b36d310 100644 --- a/api/api/v1/statuses/index.ts +++ b/api/api/v1/statuses/index.ts @@ -6,9 +6,9 @@ import { Status as StatusSchema, StatusSource as StatusSourceSchema, zBoolean, -} from "@versia/client-ng/schemas"; +} from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; import { Media, Note } from "@versia/kit/db"; -import { RolePermissions } from "@versia/kit/tables"; import { ApiError } from "~/classes/errors/api-error"; import { config } from "~/config.ts"; @@ -113,7 +113,7 @@ const route = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnNotes], + permissions: [RolePermission.ManageOwnNotes], }), jsonOrForm(), ] as const, diff --git a/api/api/v1/timelines/home.ts b/api/api/v1/timelines/home.ts index fc76af14..05e7ba16 100644 --- a/api/api/v1/timelines/home.ts +++ b/api/api/v1/timelines/home.ts @@ -1,8 +1,9 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { Notes, RolePermissions } from "@versia/kit/tables"; +import { Notes } from "@versia/kit/tables"; import { and, eq, gt, gte, inArray, lt, or, sql } from "drizzle-orm"; const route = createRoute({ @@ -18,10 +19,10 @@ const route = createRoute({ auth({ auth: true, permissions: [ - RolePermissions.ManageOwnNotes, - RolePermissions.ViewNotes, - RolePermissions.ViewAccounts, - RolePermissions.ViewPrivateTimelines, + RolePermission.ManageOwnNotes, + RolePermission.ViewNotes, + RolePermission.ViewAccounts, + RolePermission.ViewPrivateTimelines, ], }), ] as const, diff --git a/api/api/v1/timelines/public.ts b/api/api/v1/timelines/public.ts index d9e722a8..1c0961a6 100644 --- a/api/api/v1/timelines/public.ts +++ b/api/api/v1/timelines/public.ts @@ -1,8 +1,9 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { Notes, RolePermissions } from "@versia/kit/tables"; +import { Notes } from "@versia/kit/tables"; import { and, eq, gt, gte, inArray, lt, or, sql } from "drizzle-orm"; const route = createRoute({ @@ -18,9 +19,9 @@ const route = createRoute({ auth({ auth: false, permissions: [ - RolePermissions.ViewNotes, - RolePermissions.ViewAccounts, - RolePermissions.ViewPublicTimelines, + RolePermission.ViewNotes, + RolePermission.ViewAccounts, + RolePermission.ViewPublicTimelines, ], }), ] as const, diff --git a/api/api/v2/filters/:id/index.ts b/api/api/v2/filters/:id/index.ts index 6c2c47c3..3e313b9b 100644 --- a/api/api/v2/filters/:id/index.ts +++ b/api/api/v2/filters/:id/index.ts @@ -4,9 +4,10 @@ import { FilterKeyword as FilterKeywordSchema, Filter as FilterSchema, zBoolean, -} from "@versia/client-ng/schemas"; +} from "@versia/client/schemas"; +import { RolePermission } from "@versia/client/schemas"; 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 { ApiError } from "~/classes/errors/api-error"; import { ErrorSchema } from "~/types/api"; @@ -22,7 +23,7 @@ const routeGet = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnFilters], + permissions: [RolePermission.ManageOwnFilters], }), ] as const, request: { @@ -63,7 +64,7 @@ const routePut = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnFilters], + permissions: [RolePermission.ManageOwnFilters], }), jsonOrForm(), ] as const, @@ -144,7 +145,7 @@ const routeDelete = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnFilters], + permissions: [RolePermission.ManageOwnFilters], }), ] as const, request: { diff --git a/api/api/v2/filters/index.ts b/api/api/v2/filters/index.ts index c6fe9068..e395f6d4 100644 --- a/api/api/v2/filters/index.ts +++ b/api/api/v2/filters/index.ts @@ -3,9 +3,10 @@ import { createRoute, z } from "@hono/zod-openapi"; import { FilterKeyword as FilterKeywordSchema, 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 { FilterKeywords, Filters, RolePermissions } from "@versia/kit/tables"; +import { FilterKeywords, Filters } from "@versia/kit/tables"; import type { SQL } from "drizzle-orm"; const routeGet = createRoute({ @@ -20,7 +21,7 @@ const routeGet = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnFilters], + permissions: [RolePermission.ManageOwnFilters], }), jsonOrForm(), ] as const, @@ -49,7 +50,7 @@ const routePost = createRoute({ middleware: [ auth({ auth: true, - permissions: [RolePermissions.ManageOwnFilters], + permissions: [RolePermission.ManageOwnFilters], }), jsonOrForm(), ] as const, diff --git a/api/api/v2/instance/index.ts b/api/api/v2/instance/index.ts index c9b0b4ee..893e6f58 100644 --- a/api/api/v2/instance/index.ts +++ b/api/api/v2/instance/index.ts @@ -1,7 +1,7 @@ import { apiRoute } from "@/api"; import { proxyUrl } from "@/response"; 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 { Users } from "@versia/kit/tables"; import { and, eq, isNull } from "drizzle-orm"; diff --git a/api/api/v2/media/index.ts b/api/api/v2/media/index.ts index cf580235..610a705f 100644 --- a/api/api/v2/media/index.ts +++ b/api/api/v2/media/index.ts @@ -1,8 +1,8 @@ import { apiRoute, auth, reusedResponses } from "@/api"; 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 { RolePermissions } from "@versia/kit/tables"; import { ErrorSchema } from "~/types/api"; const route = createRoute({ @@ -19,7 +19,7 @@ const route = createRoute({ auth({ auth: true, scopes: ["write:media"], - permissions: [RolePermissions.ManageOwnMedia], + permissions: [RolePermission.ManageOwnMedia], }), ] as const, request: { diff --git a/api/api/v2/search/index.ts b/api/api/v2/search/index.ts index b20f07d2..f0c12eee 100644 --- a/api/api/v2/search/index.ts +++ b/api/api/v2/search/index.ts @@ -11,9 +11,10 @@ import { Id, Search as SearchSchema, 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 { 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 { ApiError } from "~/classes/errors/api-error"; import { searchManager } from "~/classes/search/search-manager"; @@ -33,9 +34,9 @@ const route = createRoute({ auth: false, scopes: ["read:search"], permissions: [ - RolePermissions.Search, - RolePermissions.ViewAccounts, - RolePermissions.ViewNotes, + RolePermission.Search, + RolePermission.ViewAccounts, + RolePermission.ViewNotes, ], }), ] as const, diff --git a/api/notes/:uuid/index.ts b/api/notes/:uuid/index.ts index 99de4146..1e1c8e94 100644 --- a/api/notes/:uuid/index.ts +++ b/api/notes/:uuid/index.ts @@ -1,6 +1,6 @@ import { apiRoute } from "@/api"; 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 } from "@versia/kit/db"; import { Notes } from "@versia/kit/tables"; diff --git a/api/notes/:uuid/quotes.ts b/api/notes/:uuid/quotes.ts index 935d3c23..f1db3501 100644 --- a/api/notes/:uuid/quotes.ts +++ b/api/notes/:uuid/quotes.ts @@ -1,6 +1,6 @@ import { apiRoute } from "@/api"; 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 type { URICollection } from "@versia/federation/types"; import { Note, db } from "@versia/kit/db"; diff --git a/api/notes/:uuid/replies.ts b/api/notes/:uuid/replies.ts index 67a4229d..aab2eec9 100644 --- a/api/notes/:uuid/replies.ts +++ b/api/notes/:uuid/replies.ts @@ -1,6 +1,6 @@ import { apiRoute } from "@/api"; 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 type { URICollection } from "@versia/federation/types"; import { Note, db } from "@versia/kit/db"; diff --git a/benchmarks/timeline.ts b/benchmarks/timeline.ts index a7d9647d..eef72e22 100644 --- a/benchmarks/timeline.ts +++ b/benchmarks/timeline.ts @@ -1,5 +1,6 @@ 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 { fakeRequest, getTestStatuses, getTestUsers } from "~/tests/utils"; @@ -15,7 +16,7 @@ const testTimeline = async (): Promise => { }, }); - const objects = (await response.json()) as ApiStatus[]; + const objects = (await response.json()) as z.infer[]; if (objects.length !== 20) { throw new Error("Invalid response (not 20 objects)"); diff --git a/bun.lock b/bun.lock index 020a3298..e9f7071d 100644 --- a/bun.lock +++ b/bun.lock @@ -4,90 +4,89 @@ "": { "name": "versia-server", "dependencies": { - "@bull-board/api": "latest", - "@bull-board/hono": "latest", - "@clerc/plugin-completions": "latest", - "@clerc/plugin-friendly-error": "latest", - "@clerc/plugin-help": "latest", - "@clerc/plugin-not-found": "latest", - "@clerc/plugin-version": "latest", - "@hackmd/markdown-it-task-lists": "latest", - "@hono/prometheus": "latest", - "@hono/swagger-ui": "latest", - "@hono/zod-openapi": "latest", - "@hono/zod-validator": "latest", - "@inquirer/confirm": "latest", - "@logtape/file": "latest", - "@logtape/logtape": "latest", - "@sentry/bun": "latest", - "@versia/client": "latest", - "@versia/client-ng": "workspace:*", - "@versia/federation": "latest", + "@bull-board/api": "^6.7.10", + "@bull-board/hono": "^6.7.10", + "@clerc/plugin-completions": "^0.44.0", + "@clerc/plugin-friendly-error": "^0.44.0", + "@clerc/plugin-help": "^0.44.0", + "@clerc/plugin-not-found": "^0.44.0", + "@clerc/plugin-version": "^0.44.0", + "@hackmd/markdown-it-task-lists": "^2.1.4", + "@hono/prometheus": "^1.0.1", + "@hono/swagger-ui": "^0.5.1", + "@hono/zod-openapi": "0.19.2", + "@hono/zod-validator": "^0.4.3", + "@inquirer/confirm": "^5.1.8", + "@logtape/file": "^0.9.0", + "@logtape/logtape": "^0.9.0", + "@sentry/bun": "^9.8.0", + "@versia/client"workspace:*", + "@versia/federation": "^0.2.1", "@versia/kit": "workspace:*", - "altcha-lib": "latest", - "blurhash": "latest", - "bullmq": "latest", - "c12": "latest", - "chalk": "latest", - "clerc": "latest", - "confbox": "latest", - "drizzle-orm": "latest", - "hono": "latest", - "html-to-text": "latest", - "ioredis": "latest", - "ip-matching": "latest", - "iso-639-1": "latest", - "jose": "latest", - "linkify-html": "latest", - "linkify-string": "latest", - "linkifyjs": "latest", - "magic-regexp": "latest", - "markdown-it": "latest", - "markdown-it-anchor": "latest", - "markdown-it-container": "latest", - "markdown-it-toc-done-right": "latest", - "mime-types": "latest", - "mitata": "latest", - "oauth4webapi": "latest", - "ora": "latest", - "pg": "latest", - "qs": "latest", - "sharp": "latest", - "sonic-channel": "latest", - "string-comparison": "latest", - "stringify-entities": "latest", - "uqr": "latest", - "web-push": "latest", - "xss": "latest", - "zod": "latest", - "zod-validation-error": "latest", + "altcha-lib": "^1.2.0", + "blurhash": "^2.0.5", + "bullmq": "^5.44.2", + "c12": "^3.0.2", + "chalk": "^5.4.1", + "clerc": "^0.44.0", + "confbox": "^0.2.1", + "drizzle-orm": "^0.41.0", + "hono": "^4.7.5", + "html-to-text": "^9.0.5", + "ioredis": "^5.6.0", + "ip-matching": "^2.1.2", + "iso-639-1": "^3.1.5", + "jose": "^6.0.10", + "linkify-html": "^4.2.0", + "linkify-string": "^4.2.0", + "linkifyjs": "^4.2.0", + "magic-regexp": "^0.8.0", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^9.2.0", + "markdown-it-container": "^4.0.0", + "markdown-it-toc-done-right": "^4.2.0", + "mime-types": "^2.1.35", + "mitata": "^1.0.34", + "oauth4webapi": "^3.3.1", + "ora": "^8.2.0", + "pg": "^8.14.1", + "qs": "^6.14.0", + "sharp": "^0.33.5", + "sonic-channel": "^1.3.1", + "string-comparison": "^1.3.0", + "stringify-entities": "^4.0.4", + "uqr": "^0.1.2", + "web-push": "^3.6.7", + "xss": "^1.0.15", + "zod": "^3.24.2", + "zod-validation-error": "^3.4.0", }, "devDependencies": { - "@biomejs/biome": "latest", - "@types/bun": "latest", - "@types/html-to-text": "latest", - "@types/markdown-it-container": "latest", - "@types/mime-types": "latest", - "@types/pg": "latest", - "@types/qs": "latest", - "@types/web-push": "latest", - "drizzle-kit": "latest", - "markdown-it-image-figures": "latest", - "markdown-it-mathjax3": "latest", - "ts-prune": "latest", - "typescript": "latest", - "vitepress": "latest", - "vitepress-plugin-tabs": "latest", - "vitepress-sidebar": "latest", - "vue": "latest", - "zod-to-json-schema": "latest", + "@biomejs/biome": "^1.9.4", + "@types/bun": "^1.2.5", + "@types/html-to-text": "^9.0.4", + "@types/markdown-it-container": "^2.0.10", + "@types/mime-types": "^2.1.4", + "@types/pg": "^8.11.11", + "@types/qs": "^6.9.18", + "@types/web-push": "^3.6.4", + "drizzle-kit": "^0.30.5", + "markdown-it-image-figures": "^2.1.1", + "markdown-it-mathjax3": "^4.3.2", + "ts-prune": "^0.10.3", + "typescript": "^5.8.2", + "vitepress": "^1.6.3", + "vitepress-plugin-tabs": "^0.6.0", + "vitepress-sidebar": "^1.31.1", + "vue": "^3.5.13", + "zod-to-json-schema": "^3.24.5", }, "peerDependencies": { "typescript": "^5.7.2", }, }, "packages/client": { - "name": "@versia/client-ng", + "name": "@versia/client "version": "0.2.0-alpha.1", "dependencies": { "@badgateway/oauth2-client": "^2.4.2", @@ -544,9 +543,7 @@ "@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-ng": ["@versia/client-ng@workspace:packages/client"], + "@versia/client["@ve@versia/clientpace: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=="], diff --git a/classes/config/schema.ts b/classes/config/schema.ts index b93e7d12..fc179007 100644 --- a/classes/config/schema.ts +++ b/classes/config/schema.ts @@ -1,15 +1,65 @@ import { z } from "@hono/zod-openapi"; -import { - ADMIN_ROLES, - DEFAULT_ROLES, - RolePermissions, -} from "@versia/kit/tables"; import { type BunFile, file } from "bun"; import ISO6391 from "iso-639-1"; import { types as mimeTypes } from "mime-types"; import { generateVAPIDKeys } from "web-push"; import { ZodError } from "zod"; 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 { Local = "local", @@ -667,12 +717,12 @@ export const ConfigSchema = z }), permissions: z.strictObject({ anonymous: z - .array(z.nativeEnum(RolePermissions)) + .array(z.nativeEnum(RolePermission)) .default(DEFAULT_ROLES), default: z - .array(z.nativeEnum(RolePermissions)) + .array(z.nativeEnum(RolePermission)) .default(DEFAULT_ROLES), - admin: z.array(z.nativeEnum(RolePermissions)).default(ADMIN_ROLES), + admin: z.array(z.nativeEnum(RolePermission)).default(ADMIN_ROLES), }), logging: z.strictObject({ types: z.record( diff --git a/classes/database/application.ts b/classes/database/application.ts index 22d5edf0..aea22137 100644 --- a/classes/database/application.ts +++ b/classes/database/application.ts @@ -2,7 +2,7 @@ import type { z } from "@hono/zod-openapi"; import type { Application as ApplicationSchema, CredentialApplication, -} from "@versia/client-ng/schemas"; +} from "@versia/client/schemas"; import { Token, db } from "@versia/kit/db"; import { Applications } from "@versia/kit/tables"; import { diff --git a/classes/database/emoji.ts b/classes/database/emoji.ts index 02f775d1..0c66bd9c 100644 --- a/classes/database/emoji.ts +++ b/classes/database/emoji.ts @@ -1,7 +1,7 @@ import { emojiValidatorWithColons, emojiValidatorWithIdentifiers } from "@/api"; import { proxyUrl } from "@/response"; 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 Instance, Media, db } from "@versia/kit/db"; import { Emojis, type Instances, type Medias } from "@versia/kit/tables"; diff --git a/classes/database/like.ts b/classes/database/like.ts index dadd7ef4..e7a46b11 100644 --- a/classes/database/like.ts +++ b/classes/database/like.ts @@ -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 { db } from "@versia/kit/db"; import { @@ -27,16 +25,6 @@ type LikeType = InferSelectModel & { }; export class Like extends BaseInterface { - 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 async reload(): Promise { diff --git a/classes/database/media.ts b/classes/database/media.ts index d2b5efbc..6b081988 100644 --- a/classes/database/media.ts +++ b/classes/database/media.ts @@ -2,7 +2,7 @@ import { join } from "node:path"; import { mimeLookup } from "@/content_types.ts"; import { proxyUrl } from "@/response"; 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 { db } from "@versia/kit/db"; import { Medias } from "@versia/kit/tables"; diff --git a/classes/database/note.ts b/classes/database/note.ts index 6fe4e565..c8303229 100644 --- a/classes/database/note.ts +++ b/classes/database/note.ts @@ -4,7 +4,7 @@ import { sanitizedHtmlStrip } from "@/sanitization"; import { sentry } from "@/sentry"; import type { z } from "@hono/zod-openapi"; 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 type { ContentFormat, @@ -825,7 +825,6 @@ export class Note extends BaseInterface { pinned: data.pinned, // TODO: Add polls poll: null, - // @ts-expect-error broken recursive types reblog: data.reblog ? await new Note(data.reblog as NoteTypeWithRelations).toApi( userFetching, @@ -841,7 +840,6 @@ export class Note extends BaseInterface { visibility: data.visibility, url: data.uri || this.getMastoUri().toString(), bookmarked: false, - // @ts-expect-error broken recursive types quote: data.quotingId ? ((await Note.fromId(data.quotingId, userFetching?.id).then( (n) => n?.toApi(userFetching), @@ -850,8 +848,8 @@ export class Note extends BaseInterface { edited_at: data.updatedAt ? new Date(data.updatedAt).toISOString() : null, - emoji_reactions: [], - plain_content: data.contentSource, + reactions: [], + text: data.contentSource, }; } diff --git a/classes/database/notification.ts b/classes/database/notification.ts index 8ba6e052..51601d3b 100644 --- a/classes/database/notification.ts +++ b/classes/database/notification.ts @@ -1,5 +1,5 @@ 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 { Notifications } from "@versia/kit/tables"; import { diff --git a/classes/database/pushsubscription.ts b/classes/database/pushsubscription.ts index a1c98b26..cb15f53f 100644 --- a/classes/database/pushsubscription.ts +++ b/classes/database/pushsubscription.ts @@ -1,5 +1,5 @@ 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 { PushSubscriptions, Tokens } from "@versia/kit/tables"; import { diff --git a/classes/database/relationship.ts b/classes/database/relationship.ts index 58cac9a6..46e6a9cb 100644 --- a/classes/database/relationship.ts +++ b/classes/database/relationship.ts @@ -1,5 +1,5 @@ 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 { Relationships } from "@versia/kit/tables"; import { diff --git a/classes/database/role.ts b/classes/database/role.ts index 0ebefb9d..04ebf741 100644 --- a/classes/database/role.ts +++ b/classes/database/role.ts @@ -1,8 +1,7 @@ import { proxyUrl } from "@/response"; -import type { - VersiaRole as APIRole, - RolePermission, -} from "@versia/client/types"; +import type { z } from "@hono/zod-openapi"; +import type { Role as RoleSchema } from "@versia/client/schemas"; +import type { RolePermission } from "@versia/client/schemas"; import { db } from "@versia/kit/db"; import { RoleToUsers, Roles } from "@versia/kit/tables"; import { @@ -16,7 +15,6 @@ import { } from "drizzle-orm"; import { config } from "~/config.ts"; import { BaseInterface } from "./base.ts"; - type RoleType = InferSelectModel; export class Role extends BaseInterface { @@ -208,7 +206,7 @@ export class Role extends BaseInterface { return this.data.id; } - public toApi(): APIRole { + public toApi(): z.infer { return { id: this.id, name: this.data.name, diff --git a/classes/database/token.ts b/classes/database/token.ts index 2f50cb72..20d2f5d3 100644 --- a/classes/database/token.ts +++ b/classes/database/token.ts @@ -1,5 +1,5 @@ import type { z } from "@hono/zod-openapi"; -import type { Token as TokenSchema } from "@versia/client-ng/schemas"; +import type { Token as TokenSchema } from "@versia/client/schemas"; import { type Application, User, db } from "@versia/kit/db"; import { Tokens } from "@versia/kit/tables"; import { diff --git a/classes/database/user.ts b/classes/database/user.ts index 81f9af33..c282c20d 100644 --- a/classes/database/user.ts +++ b/classes/database/user.ts @@ -9,7 +9,8 @@ import type { Account, Mention as MentionSchema, Source, -} from "@versia/client-ng/schemas"; +} from "@versia/client/schemas"; +import type { RolePermission } from "@versia/client/schemas"; import { EntityValidator, FederationRequester, @@ -30,7 +31,6 @@ import { NoteToMentions, Notes, Notifications, - type RolePermissions, UserToPinnedNotes, Users, } from "@versia/kit/tables"; @@ -171,11 +171,11 @@ export class User extends BaseInterface { return uri ? uri : new URL(`/users/${id}`, config.http.base_url); } - public hasPermission(permission: RolePermissions): boolean { + public hasPermission(permission: RolePermission): boolean { return this.getAllPermissions().includes(permission); } - public getAllPermissions(): RolePermissions[] { + public getAllPermissions(): RolePermission[] { return ( this.data.roles .flatMap((role) => role.permissions) @@ -188,7 +188,7 @@ export class User extends BaseInterface { acc.push(permission); } return acc; - }, [] as RolePermissions[]) + }, [] as RolePermission[]) ); } diff --git a/drizzle/schema.ts b/drizzle/schema.ts index 31ca1822..07cbc0ca 100644 --- a/drizzle/schema.ts +++ b/drizzle/schema.ts @@ -3,7 +3,8 @@ import type { Notification as NotificationSchema, Source, Status as StatusSchema, -} from "@versia/client-ng/schemas"; +} from "@versia/client/schemas"; +import type { RolePermission } from "@versia/client/schemas"; import type { ContentFormat, InstanceMetadata } from "@versia/federation/types"; import type { Challenge } from "altcha-lib/types"; import { relations, sql } from "drizzle-orm"; @@ -710,124 +711,13 @@ export const ModTags = pgTable("ModTags", { createdAt: createdAt(), }); -/** - * Permissions not prefixed with `owner:` let the role manage all instances of the resource. - * For example, a user with the `notes` permission can manage all notes of every user - * - Manage: Delete, Update, Create - * - Owner: Only manage their own resources - */ -export enum RolePermissions { - ManageNotes = "notes", - ManageOwnNotes = "owner:note", - ViewNotes = "read:note", - ViewNoteLikes = "read:note_likes", - ViewNoteBoosts = "read:note_boosts", - ManageAccounts = "accounts", - ManageOwnAccount = "owner:account", - ViewAccountFollows = "read:account_follows", - ManageLikes = "likes", - ManageOwnLikes = "owner:like", - ManageBoosts = "boosts", - ManageOwnBoosts = "owner:boost", - ViewAccounts = "read:account", - ManageEmojis = "emojis", - ViewEmojis = "read:emoji", - ManageOwnEmojis = "owner:emoji", - ViewReactions = "read:reaction", - ManageReactions = "reactions", - ManageOwnReactions = "owner:reaction", - ManageMedia = "media", - ManageOwnMedia = "owner:media", - ManageBlocks = "blocks", - ManageOwnBlocks = "owner:block", - ManageFilters = "filters", - ManageOwnFilters = "owner:filter", - ManageMutes = "mutes", - ManageOwnMutes = "owner:mute", - ManageReports = "reports", - ManageOwnReports = "owner:report", - ManageSettings = "settings", - ManageOwnSettings = "owner:settings", - ManageRoles = "roles", - ManageNotifications = "notifications", - ManageOwnNotifications = "owner:notification", - ManageFollows = "follows", - ManageOwnFollows = "owner:follow", - ManageOwnApps = "owner:app", - Search = "search", - UsePushNotifications = "push_notifications", - ViewPublicTimelines = "public_timelines", - ViewPrivateTimelines = "private_timelines", - IgnoreRateLimits = "ignore_rate_limits", - Impersonate = "impersonate", - ManageInstance = "instance", - ManageInstanceFederation = "instance:federation", - ManageInstanceSettings = "instance:settings", - /** Users who do not have this permission will not be able to login! */ - OAuth = "oauth", -} - -export const DEFAULT_ROLES = [ - RolePermissions.ManageOwnNotes, - RolePermissions.ViewNotes, - RolePermissions.ViewNoteLikes, - RolePermissions.ViewNoteBoosts, - RolePermissions.ManageOwnAccount, - RolePermissions.ViewAccountFollows, - RolePermissions.ManageOwnLikes, - RolePermissions.ManageOwnBoosts, - RolePermissions.ViewAccounts, - RolePermissions.ManageOwnEmojis, - RolePermissions.ViewReactions, - RolePermissions.ManageOwnReactions, - RolePermissions.ViewEmojis, - RolePermissions.ManageOwnMedia, - RolePermissions.ManageOwnBlocks, - RolePermissions.ManageOwnFilters, - RolePermissions.ManageOwnMutes, - RolePermissions.ManageOwnReports, - RolePermissions.ManageOwnSettings, - RolePermissions.ManageOwnNotifications, - RolePermissions.ManageOwnFollows, - RolePermissions.ManageOwnApps, - RolePermissions.Search, - RolePermissions.UsePushNotifications, - RolePermissions.ViewPublicTimelines, - RolePermissions.ViewPrivateTimelines, - RolePermissions.OAuth, -]; - -export const ADMIN_ROLES = [ - ...DEFAULT_ROLES, - RolePermissions.ManageNotes, - RolePermissions.ManageAccounts, - RolePermissions.ManageLikes, - RolePermissions.ManageBoosts, - RolePermissions.ManageEmojis, - RolePermissions.ManageReactions, - RolePermissions.ManageMedia, - RolePermissions.ManageBlocks, - RolePermissions.ManageFilters, - RolePermissions.ManageMutes, - RolePermissions.ManageReports, - RolePermissions.ManageSettings, - RolePermissions.ManageRoles, - RolePermissions.ManageNotifications, - RolePermissions.ManageFollows, - RolePermissions.Impersonate, - RolePermissions.IgnoreRateLimits, - RolePermissions.ManageInstance, - RolePermissions.ManageInstanceFederation, - RolePermissions.ManageInstanceSettings, -]; - export const Roles = pgTable("Roles", { id: id(), name: text("name").notNull(), permissions: text("permissions") .array() .notNull() - .$type(), + .$type(), priority: integer("priority").notNull().default(0), description: text("description"), visible: boolean("visible").notNull().default(false), diff --git a/package.json b/package.json index caad5945..6d615db6 100644 --- a/package.json +++ b/package.json @@ -92,10 +92,9 @@ "@logtape/file": "^0.9.0", "@logtape/logtape": "^0.9.0", "@sentry/bun": "^9.8.0", - "@versia/client": "^0.1.5", + "@versia/client": "workspace:*", "@versia/federation": "^0.2.1", "@versia/kit": "workspace:*", - "@versia/client-ng": "workspace:*", "altcha-lib": "^1.2.0", "blurhash": "^2.0.5", "bullmq": "^5.44.2", diff --git a/packages/client/package.json b/packages/client/package.json index 515c0d32..bd0602b3 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,5 +1,5 @@ { - "name": "@versia/client-ng", + "name": "@versia/client", "displayName": "Versia Client", "version": "0.2.0-alpha.1", "author": { diff --git a/packages/client/schemas.ts b/packages/client/schemas.ts index f44e960c..dc7b3729 100644 --- a/packages/client/schemas.ts +++ b/packages/client/schemas.ts @@ -34,6 +34,11 @@ export { Status, Mention, StatusSource } from "./schemas/status.ts"; export { Tag } from "./schemas/tag.ts"; export { Token } from "./schemas/token.ts"; export { TermsOfService } from "./schemas/tos.ts"; -export { Role, NoteReaction, SSOConfig, Challenge } from "./schemas/versia.ts"; - +export { + Role, + NoteReaction, + SSOConfig, + Challenge, +} from "./schemas/versia.ts"; +export { RolePermission } from "./schemas/permissions.ts"; export { Id, iso631, zBoolean } from "./schemas/common.ts"; diff --git a/packages/client/schemas/account.ts b/packages/client/schemas/account.ts index 1fbaeb44..c44a9577 100644 --- a/packages/client/schemas/account.ts +++ b/packages/client/schemas/account.ts @@ -1,6 +1,5 @@ import { userAddressValidator } from "@/api.ts"; import { z } from "@hono/zod-openapi"; -import type { Account as ApiAccount } from "@versia/client/types"; import { config } from "~/config.ts"; import { iso631, zBoolean } from "./common.ts"; import { CustomEmoji } from "./emoji.ts"; @@ -116,7 +115,8 @@ export const Source = z }, }); -export const Account = z.object({ +// Because Account has some recursive references, we need to define it like this +const BaseAccount = z.object({ id: z .string() .uuid() @@ -322,19 +322,6 @@ export const Account = z.object({ url: "https://docs.joinmastodon.org/entities/Account/#noindex", }, }), - // FIXME: Use a proper type - moved: z - .lazy((): z.ZodType => Account as z.ZodType) - .nullable() - .optional() - .openapi({ - description: - "Indicates that the profile is currently inactive and that its user has moved to a new account.", - example: null, - externalDocs: { - url: "https://docs.joinmastodon.org/entities/Account/#moved", - }, - }), suspended: zBoolean.optional().openapi({ description: "An extra attribute returned only when an account is suspended.", @@ -427,3 +414,16 @@ export const Account = z.object({ example: "2025-03-01T14:00:00.000Z", }), }); + +export const Account = BaseAccount.extend({ + moved: BaseAccount.nullable() + .optional() + .openapi({ + description: + "Indicates that the profile is currently inactive and that its user has moved to a new account.", + example: null, + externalDocs: { + url: "https://docs.joinmastodon.org/entities/Account/#moved", + }, + }), +}); diff --git a/packages/client/schemas/permissions.ts b/packages/client/schemas/permissions.ts new file mode 100644 index 00000000..533a6888 --- /dev/null +++ b/packages/client/schemas/permissions.ts @@ -0,0 +1,56 @@ +/** + * Permissions not prefixed with `owner:` let the role manage all instances of the resource. + * For example, a user with the `notes` permission can manage all notes of every user + * - Manage: Delete, Update, Create + * - Owner: Only manage their own resources + */ +export enum RolePermission { + ManageNotes = "notes", + ManageOwnNotes = "owner:note", + ViewNotes = "read:note", + ViewNoteLikes = "read:note_likes", + ViewNoteBoosts = "read:note_boosts", + ManageAccounts = "accounts", + ManageOwnAccount = "owner:account", + ViewAccountFollows = "read:account_follows", + ManageLikes = "likes", + ManageOwnLikes = "owner:like", + ManageBoosts = "boosts", + ManageOwnBoosts = "owner:boost", + ViewAccounts = "read:account", + ManageEmojis = "emojis", + ViewEmojis = "read:emoji", + ManageOwnEmojis = "owner:emoji", + ViewReactions = "read:reaction", + ManageReactions = "reactions", + ManageOwnReactions = "owner:reaction", + ManageMedia = "media", + ManageOwnMedia = "owner:media", + ManageBlocks = "blocks", + ManageOwnBlocks = "owner:block", + ManageFilters = "filters", + ManageOwnFilters = "owner:filter", + ManageMutes = "mutes", + ManageOwnMutes = "owner:mute", + ManageReports = "reports", + ManageOwnReports = "owner:report", + ManageSettings = "settings", + ManageOwnSettings = "owner:settings", + ManageRoles = "roles", + ManageNotifications = "notifications", + ManageOwnNotifications = "owner:notification", + ManageFollows = "follows", + ManageOwnFollows = "owner:follow", + ManageOwnApps = "owner:app", + Search = "search", + UsePushNotifications = "push_notifications", + ViewPublicTimelines = "public_timelines", + ViewPrivateTimelines = "private_timelines", + IgnoreRateLimits = "ignore_rate_limits", + Impersonate = "impersonate", + ManageInstance = "instance", + ManageInstanceFederation = "instance:federation", + ManageInstanceSettings = "instance:settings", + /** Users who do not have this permission will not be able to login! */ + OAuth = "oauth", +} diff --git a/packages/client/schemas/status.ts b/packages/client/schemas/status.ts index 24ea6b21..7aa4a7c1 100644 --- a/packages/client/schemas/status.ts +++ b/packages/client/schemas/status.ts @@ -1,5 +1,4 @@ import { z } from "@hono/zod-openapi"; -import type { Status as ApiNote } from "@versia/client/types"; import { config } from "~/config.ts"; import { Account } from "./account.ts"; import { Attachment } from "./attachment.ts"; @@ -82,7 +81,8 @@ export const StatusSource = z }, }); -export const Status = z.object({ +// Because Status has some recursive references, we need to define it like this +const BaseStatus = z.object({ id: Id.openapi({ description: "ID of the status in the database.", example: "2de861d3-a3dd-42ee-ba38-2c7d3f4af588", @@ -134,16 +134,7 @@ export const Status = z.object({ url: "https://docs.joinmastodon.org/entities/Status/#in_reply_to_account_id", }, }), - reblog: z - // @ts-expect-error broken recursive types - .lazy((): z.ZodType => Status as z.ZodType) - .nullable() - .openapi({ - description: "The status being reblogged.", - externalDocs: { - url: "https://docs.joinmastodon.org/entities/Status/#reblog", - }, - }), + content: z.string().openapi({ description: "HTML-encoded status content.", example: "

hello world

", @@ -341,10 +332,6 @@ export const Status = z.object({ }, }), reactions: z.array(NoteReaction).openapi({}), - quote: z - // @ts-expect-error broken recursive types - .lazy((): z.ZodType => Status as z.ZodType) - .nullable(), bookmarked: zBoolean.optional().openapi({ description: "If the current token has an authorized user: Have you bookmarked this status?", @@ -365,132 +352,15 @@ export const Status = z.object({ }), }); -/* -Attributes -id - -Description: ID of the scheduled status in the database. -Type: String (cast from an integer but not guaranteed to be a number) -Version history: -2.7.0 - added -scheduled_at - -Description: The timestamp for when the status will be posted. -Type: String (Datetime) -Version history: -2.7.0 - added -params - -Description: The parameters that were used when scheduling the status, to be used when the status is posted. -Type: Hash -Version history: -2.7.0 - added -params[text] - -Description: Text to be used as status content. -Type: String -Version history: -2.7.0 - added -params[poll] - -Description: Poll to be attached to the status. -Type: nullable Hash -Version history: -2.8.0 - added -params[poll][options[]] - -Description: The poll options to be used. -Type: Array of String -Version history: -2.8.0 - added -params[poll][expires_in] - -Description: How many seconds the poll should last before closing. -Type: String (cast from integer) -Version history: -2.8.0 - added -params[poll][multiple] - -Description: Whether the poll allows multiple choices. -Type: optional Boolean -Version history: -2.8.0 - added -params[poll][hide_totals] - -Description: Whether the poll should hide total votes until after voting has ended. -Type: optional Boolean -Version history: -2.8.0 - added -params[media_ids] - -Description: IDs of the MediaAttachments that will be attached to the status. -Type: nullable Array of String -Version history: -2.7.0 - added -params[sensitive] - -Description: Whether the status will be marked as sensitive. -Type: nullable Boolean -Version history: -2.7.0 - added -params[spoiler_text] - -Description: The text of the content warning or summary for the status. -Type: nullable String -Version history: -2.7.0 - added -params[visibility] - -Description: The visibility that the status will have once it is posted. -Type: String (Enumerable oneOf) -public = Visible to everyone, shown in public timelines. -unlisted = Visible to public, but not included in public timelines. -private = Visible to followers only, and to any mentioned users. -direct = Visible only to mentioned users. -Version history: -2.7.0 - added -params[in_reply_to_id] - -Description: ID of the Status that will be replied to. -Type: nullable Integer -Version history: -2.7.0 - added -params[language] - -Description: The language that will be used for the status. -Type: nullable String (ISO 639-1 two-letter language code) -Version history: -2.7.0 - added -params[application_id] deprecated - -Description: Internal ID of the Application that posted the status. Provided for historical compatibility only and can be ignored. -Type: Integer -Version history: -2.7.0 - added -params[scheduled_at] - -Description: When the status will be scheduled. This will be null because the status is only scheduled once. -Type: nullable Null -Version history: -2.7.0 - added -params[idempotency] - -Description: Idempotency key to prevent duplicate statuses. -Type: nullable String -Version history: -2.7.0 - added -params[with_rate_limit] deprecated - -Description: Whether status creation is subject to rate limiting. Provided for historical compatibility only and can be ignored. -Type: Boolean -Version history: -2.7.0 - added -media_attachments -Description: Media that will be attached when the status is posted. -Type: Array of MediaAttachment -Version history: -2.7.0 - added -*/ +export const Status = BaseStatus.extend({ + reblog: BaseStatus.nullable().openapi({ + description: "The status being reblogged.", + externalDocs: { + url: "https://docs.joinmastodon.org/entities/Status/#reblog", + }, + }), + quote: BaseStatus.nullable(), +}); export const ScheduledStatus = z.object({ id: Id.openapi({ diff --git a/packages/client/schemas/versia.ts b/packages/client/schemas/versia.ts index 7428e784..bf379f55 100644 --- a/packages/client/schemas/versia.ts +++ b/packages/client/schemas/versia.ts @@ -1,7 +1,7 @@ import { z } from "@hono/zod-openapi"; -import { RolePermission } from "@versia/client/types"; import { config } from "~/config.ts"; import { Id } from "./common.ts"; +import { RolePermission } from "./permissions.ts"; /* Versia Server API extension */ export const Role = z diff --git a/plugins/openid/index.ts b/plugins/openid/index.ts index 51a6f061..504c188d 100644 --- a/plugins/openid/index.ts +++ b/plugins/openid/index.ts @@ -1,4 +1,5 @@ import { z } from "@hono/zod-openapi"; +import { RolePermission } from "@versia/client/schemas"; import { Hooks, Plugin } from "@versia/kit"; import { User } from "@versia/kit/db"; import { getCookie } from "hono/cookie"; @@ -6,7 +7,6 @@ import { jwtVerify } from "jose"; import { JOSEError, JWTExpired } from "jose/errors"; import { keyPair, sensitiveString } from "~/classes/config/schema.ts"; import { ApiError } from "~/classes/errors/api-error.ts"; -import { RolePermissions } from "~/drizzle/schema.ts"; import authorizeRoute from "./routes/authorize.ts"; import jwksRoute from "./routes/jwks.ts"; import ssoLoginCallbackRoute from "./routes/oauth/callback.ts"; @@ -91,10 +91,10 @@ plugin.registerRoute("/admin/*", (app) => { const user = await User.fromId(sub); - if (!user?.hasPermission(RolePermissions.ManageInstanceFederation)) { + if (!user?.hasPermission(RolePermission.ManageInstanceFederation)) { throw new ApiError( 403, - `Missing '${RolePermissions.ManageInstanceFederation}' permission`, + `Missing '${RolePermission.ManageInstanceFederation}' permission`, ); } diff --git a/plugins/openid/routes/authorize.test.ts b/plugins/openid/routes/authorize.test.ts index 2ca6b6b4..a2e41527 100644 --- a/plugins/openid/routes/authorize.test.ts +++ b/plugins/openid/routes/authorize.test.ts @@ -1,7 +1,7 @@ import { afterAll, describe, expect, test } from "bun:test"; import { randomString } from "@/math"; +import { RolePermission } from "@versia/client/schemas"; import { Application } from "@versia/kit/db"; -import { RolePermissions } from "@versia/kit/tables"; import { SignJWT } from "jose"; import { config } from "~/config.ts"; import { fakeRequest, getTestUsers } from "~/tests/utils"; @@ -268,7 +268,7 @@ describe("/oauth/authorize", () => { const params = new URLSearchParams(location.search); expect(params.get("error")).toBe("unauthorized"); expect(params.get("error_description")).toBe( - `User missing required '${RolePermissions.OAuth}' permission`, + `User missing required '${RolePermission.OAuth}' permission`, ); config.permissions.default = oldPermissions; diff --git a/plugins/openid/routes/authorize.ts b/plugins/openid/routes/authorize.ts index b80c57d9..d6e34a99 100644 --- a/plugins/openid/routes/authorize.ts +++ b/plugins/openid/routes/authorize.ts @@ -1,8 +1,8 @@ import { auth, jsonOrForm } from "@/api"; import { randomString } from "@/math"; import { z } from "@hono/zod-openapi"; +import { RolePermission } from "@versia/client/schemas"; import { Application, Token, User } from "@versia/kit/db"; -import { RolePermissions } from "@versia/kit/tables"; import { type JWTPayload, SignJWT, jwtVerify } from "jose"; import { JOSEError } from "jose/errors"; import { errorRedirect, errors } from "../errors.ts"; @@ -161,7 +161,7 @@ export default (plugin: PluginType): void => ); } - if (!user.hasPermission(RolePermissions.OAuth)) { + if (!user.hasPermission(RolePermission.OAuth)) { return errorRedirect( context, errors.MissingOauthPermission, diff --git a/plugins/openid/routes/oauth/callback.ts b/plugins/openid/routes/oauth/callback.ts index 9a7308f6..803fc592 100644 --- a/plugins/openid/routes/oauth/callback.ts +++ b/plugins/openid/routes/oauth/callback.ts @@ -1,9 +1,10 @@ import { randomString } from "@/math.ts"; 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 { Media, Token, User, db } from "@versia/kit/db"; import { type SQL, and, eq, isNull } from "@versia/kit/drizzle"; -import { OpenIdAccounts, RolePermissions, Users } from "@versia/kit/tables"; +import { OpenIdAccounts, Users } from "@versia/kit/tables"; import { setCookie } from "hono/cookie"; import { SignJWT } from "jose"; import { ApiError } from "~/classes/errors/api-error.ts"; @@ -268,11 +269,11 @@ export default (plugin: PluginType): void => { ); } - if (!user.hasPermission(RolePermissions.OAuth)) { + if (!user.hasPermission(RolePermission.OAuth)) { errorSearchParams.append("error", "invalid_request"); errorSearchParams.append( "error_description", - `User does not have the '${RolePermissions.OAuth}' permission`, + `User does not have the '${RolePermission.OAuth}' permission`, ); return context.redirect( diff --git a/plugins/openid/routes/sso/:id/index.ts b/plugins/openid/routes/sso/:id/index.ts index d187bdab..a136b668 100644 --- a/plugins/openid/routes/sso/:id/index.ts +++ b/plugins/openid/routes/sso/:id/index.ts @@ -1,9 +1,10 @@ import { auth } from "@/api"; import { proxyUrl } from "@/response"; import { createRoute, z } from "@hono/zod-openapi"; +import { RolePermission } from "@versia/client/schemas"; import { db } from "@versia/kit/db"; import { type SQL, eq } from "@versia/kit/drizzle"; -import { OpenIdAccounts, RolePermissions } from "@versia/kit/tables"; +import { OpenIdAccounts } from "@versia/kit/tables"; import { ApiError } from "~/classes/errors/api-error"; import type { PluginType } from "~/plugins/openid"; import { ErrorSchema } from "~/types/api"; @@ -18,7 +19,7 @@ export default (plugin: PluginType): void => { middleware: [ auth({ auth: true, - permissions: [RolePermissions.OAuth], + permissions: [RolePermission.OAuth], }), plugin.middleware, ] as const, @@ -103,7 +104,7 @@ export default (plugin: PluginType): void => { middleware: [ auth({ auth: true, - permissions: [RolePermissions.OAuth], + permissions: [RolePermission.OAuth], }), plugin.middleware, ] as const, diff --git a/plugins/openid/routes/sso/index.ts b/plugins/openid/routes/sso/index.ts index 544c6652..5ed9ca83 100644 --- a/plugins/openid/routes/sso/index.ts +++ b/plugins/openid/routes/sso/index.ts @@ -1,7 +1,8 @@ import { auth } from "@/api"; import { z } from "@hono/zod-openapi"; +import { RolePermission } from "@versia/client/schemas"; import { Application, db } from "@versia/kit/db"; -import { OpenIdLoginFlows, RolePermissions } from "@versia/kit/tables"; +import { OpenIdLoginFlows } from "@versia/kit/tables"; import { calculatePKCECodeChallenge, generateRandomCodeVerifier, @@ -20,7 +21,7 @@ export default (plugin: PluginType): void => { middleware: [ auth({ auth: true, - permissions: [RolePermissions.OAuth], + permissions: [RolePermission.OAuth], }), plugin.middleware, ] as const, @@ -67,7 +68,7 @@ export default (plugin: PluginType): void => { middleware: [ auth({ auth: true, - permissions: [RolePermissions.OAuth], + permissions: [RolePermission.OAuth], }), plugin.middleware, ] as const, diff --git a/tests/api/accounts.test.ts b/tests/api/accounts.test.ts index c374202d..84b4894a 100644 --- a/tests/api/accounts.test.ts +++ b/tests/api/accounts.test.ts @@ -2,10 +2,8 @@ * @deprecated */ import { afterAll, describe, expect, test } from "bun:test"; -import type { - Account as ApiAccount, - Relationship as ApiRelationship, -} from "@versia/client/types"; +import type { z } from "@hono/zod-openapi"; +import type { Account, Relationship } from "@versia/client/schemas"; import { config } from "~/config.ts"; import { fakeRequest, getTestUsers } from "~/tests/utils"; @@ -47,7 +45,7 @@ describe("API Tests", () => { "application/json", ); - const user = (await response.json()) as ApiAccount; + const user = (await response.json()) as z.infer; expect(user.display_name).toBe("New Display Name"); }); @@ -69,7 +67,7 @@ describe("API Tests", () => { "application/json", ); - const account = (await response.json()) as ApiAccount; + const account = (await response.json()) as z.infer; expect(account.username).toBe(user.data.username); expect(account.bot).toBe(false); @@ -118,7 +116,9 @@ describe("API Tests", () => { "application/json", ); - const account = (await response.json()) as ApiRelationship; + const account = (await response.json()) as z.infer< + typeof Relationship + >; expect(account.id).toBe(user2.id); expect(account.followed_by).toBe(false); @@ -144,7 +144,9 @@ describe("API Tests", () => { "application/json", ); - const account = (await response.json()) as ApiRelationship; + const account = (await response.json()) as z.infer< + typeof Relationship + >; expect(account.id).toBe(user2.id); expect(account.blocking).toBe(true); @@ -164,7 +166,7 @@ describe("API Tests", () => { expect(response.headers.get("content-type")).toContain( "application/json", ); - const body = (await response.json()) as ApiAccount[]; + const body = (await response.json()) as z.infer[]; expect(Array.isArray(body)).toBe(true); expect(body.length).toBe(1); @@ -191,7 +193,9 @@ describe("API Tests", () => { "application/json", ); - const account = (await response.json()) as ApiRelationship; + const account = (await response.json()) as z.infer< + typeof Relationship + >; expect(account.id).toBe(user2.id); expect(account.blocking).toBe(false); @@ -217,7 +221,9 @@ describe("API Tests", () => { "application/json", ); - const account = (await response.json()) as ApiRelationship; + const account = (await response.json()) as z.infer< + typeof Relationship + >; expect(account.id).toBe(user2.id); expect(account.endorsed).toBe(true); @@ -243,7 +249,9 @@ describe("API Tests", () => { "application/json", ); - const account = (await response.json()) as ApiRelationship; + const account = (await response.json()) as z.infer< + typeof Relationship + >; expect(account.id).toBe(user2.id); expect(account.endorsed).toBe(false); @@ -269,7 +277,7 @@ describe("API Tests", () => { "application/json", ); - const account = (await response.json()) as ApiAccount; + const account = (await response.json()) as z.infer; expect(account.id).toBe(user2.id); expect(account.note).toBe("This is a new note"); @@ -293,7 +301,9 @@ describe("API Tests", () => { "application/json", ); - const relationships = (await response.json()) as ApiRelationship[]; + const relationships = (await response.json()) as z.infer< + typeof Relationship + >[]; expect(Array.isArray(relationships)).toBe(true); expect(relationships.length).toBeGreaterThan(0); @@ -323,7 +333,7 @@ describe("API Tests", () => { "application/json", ); - const account = (await response.json()) as ApiAccount; + const account = (await response.json()) as z.infer; expect(account.id).toBeDefined(); expect(account.avatar).toBeDefined(); @@ -344,7 +354,7 @@ describe("API Tests", () => { "application/json", ); - const account = (await response.json()) as ApiAccount; + const account = (await response.json()) as z.infer; expect(account.id).toBeDefined(); expect(account.header).toBe(""); @@ -389,7 +399,7 @@ describe("API Tests", () => { const familiarFollowers = (await response.json()) as { id: string; - accounts: ApiAccount[]; + accounts: z.infer[]; }[]; expect(Array.isArray(familiarFollowers)).toBe(true); diff --git a/tests/api/statuses.test.ts b/tests/api/statuses.test.ts index 0170323f..68be9fd7 100644 --- a/tests/api/statuses.test.ts +++ b/tests/api/statuses.test.ts @@ -2,19 +2,16 @@ * @deprecated */ import { afterAll, describe, expect, test } from "bun:test"; -import type { - AsyncAttachment as ApiAsyncAttachment, - Context as ApiContext, - Status as ApiStatus, -} from "@versia/client/types"; +import type { z } from "@hono/zod-openapi"; +import type { Attachment, Context, Status } from "@versia/client/schemas"; import { fakeRequest, getTestUsers } from "~/tests/utils"; const { users, tokens, deleteUsers } = await getTestUsers(1); const user = users[0]; const token = tokens[0]; -let status: ApiStatus | null = null; -let status2: ApiStatus | null = null; -let media1: ApiAsyncAttachment | null = null; +let status: z.infer | null = null; +let status2: z.infer | null = null; +let media1: z.infer | null = null; describe("API Tests", () => { afterAll(async () => { @@ -39,7 +36,7 @@ describe("API Tests", () => { "application/json", ); - media1 = (await response.json()) as ApiAsyncAttachment; + media1 = (await response.json()) as z.infer; expect(media1.id).toBeDefined(); expect(media1.type).toBe("unknown"); @@ -67,7 +64,7 @@ describe("API Tests", () => { "application/json", ); - status = (await response.json()) as ApiStatus; + status = (await response.json()) as z.infer; expect(status.content).toContain("Hello, world!"); expect(status.visibility).toBe("public"); expect(status.account.id).toBe(user.id); @@ -109,7 +106,7 @@ describe("API Tests", () => { "application/json", ); - status2 = (await response.json()) as ApiStatus; + status2 = (await response.json()) as z.infer; expect(status2.content).toContain("This is a reply!"); expect(status2.visibility).toBe("public"); expect(status2.account.id).toBe(user.id); @@ -149,7 +146,9 @@ describe("API Tests", () => { "application/json", ); - const statusJson = (await response.json()) as ApiStatus; + const statusJson = (await response.json()) as z.infer< + typeof Status + >; expect(statusJson.id).toBe(status?.id || ""); expect(statusJson.content).toBeDefined(); @@ -194,7 +193,9 @@ describe("API Tests", () => { "application/json", ); - const rebloggedStatus = (await response.json()) as ApiStatus; + const rebloggedStatus = (await response.json()) as z.infer< + typeof Status + >; expect(rebloggedStatus.id).toBeDefined(); expect(rebloggedStatus.reblog?.id).toEqual(status?.id ?? ""); @@ -219,7 +220,9 @@ describe("API Tests", () => { "application/json", ); - const unrebloggedStatus = (await response.json()) as ApiStatus; + const unrebloggedStatus = (await response.json()) as z.infer< + typeof Status + >; expect(unrebloggedStatus.id).toBeDefined(); expect(unrebloggedStatus.reblogged).toBe(false); @@ -242,7 +245,7 @@ describe("API Tests", () => { "application/json", ); - const context = (await response.json()) as ApiContext; + const context = (await response.json()) as z.infer; expect(context.ancestors.length).toBe(0); expect(context.descendants.length).toBe(1); @@ -269,7 +272,9 @@ describe("API Tests", () => { "application/json", ); - const statuses = (await response.json()) as ApiStatus[]; + const statuses = (await response.json()) as z.infer< + typeof Status + >[]; expect(statuses.length).toBe(2); @@ -316,7 +321,9 @@ describe("API Tests", () => { "application/json", ); - const updatedStatus = (await response.json()) as ApiStatus; + const updatedStatus = (await response.json()) as z.infer< + typeof Status + >; expect(updatedStatus.favourited).toBe(false); expect(updatedStatus.favourites_count).toBe(0); diff --git a/tests/oauth.test.ts b/tests/oauth.test.ts index 94653b42..047f25c4 100644 --- a/tests/oauth.test.ts +++ b/tests/oauth.test.ts @@ -2,17 +2,15 @@ * @deprecated */ import { afterAll, describe, expect, test } from "bun:test"; -import type { - Application as ApiApplication, - Token as ApiToken, -} from "@versia/client/types"; +import type { z } from "@hono/zod-openapi"; +import type { Application, Token } from "@versia/client/schemas"; import { fakeRequest, getTestUsers } from "./utils.ts"; let clientId: string; let clientSecret: string; let code: string; let jwt: string; -let token: ApiToken; +let token: z.infer; const { users, passwords, deleteUsers } = await getTestUsers(1); afterAll(async () => { @@ -168,7 +166,9 @@ describe("GET /api/v1/apps/verify_credentials", () => { "application/json", ); - const credentials = (await response.json()) as Partial; + const credentials = (await response.json()) as Partial< + z.infer + >; expect(credentials.name).toBe("Test Application"); expect(credentials.website).toBe("https://example.com"); diff --git a/tests/utils.ts b/tests/utils.ts index 14f65990..2998e1e9 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -1,6 +1,6 @@ import { generateChallenge } from "@/challenges"; import { randomString } from "@/math"; -import { Client as VersiaClient } from "@versia/client-ng"; +import { Client as VersiaClient } from "@versia/client"; import { Note, Token, User, db } from "@versia/kit/db"; import { Notes, Users } from "@versia/kit/tables"; import { solveChallenge } from "altcha-lib"; diff --git a/utils/api.ts b/utils/api.ts index d9672844..52afee7f 100644 --- a/utils/api.ts +++ b/utils/api.ts @@ -2,8 +2,9 @@ import type { OpenAPIHono } from "@hono/zod-openapi"; import { z } from "@hono/zod-openapi"; import { zValidator } from "@hono/zod-validator"; import { getLogger } from "@logtape/logtape"; +import type { RolePermission } from "@versia/client/schemas"; import { Application, Emoji, Note, Token, User, db } from "@versia/kit/db"; -import { Challenges, type RolePermissions } from "@versia/kit/tables"; +import { Challenges } from "@versia/kit/tables"; import { extractParams, verifySolution } from "altcha-lib"; import chalk from "chalk"; import { type SQL, eq } from "drizzle-orm"; @@ -185,7 +186,7 @@ export const handleZodError = ( const checkPermissions = ( auth: AuthData | null, - required: RolePermissions[], + required: RolePermission[], ): void => { const userPerms = auth?.user ? auth.user.getAllPermissions() @@ -291,7 +292,7 @@ type HonoEnvWithAuth = HonoEnv & { export const auth = (options: { auth: AuthRequired; - permissions?: RolePermissions[]; + permissions?: RolePermission[]; challenge?: boolean; scopes?: string[]; // If authRequired is true, HonoEnv.Variables.auth.user will never be null