diff --git a/packages/ditto/app.ts b/packages/ditto/app.ts index 6e896571..bd86ac51 100644 --- a/packages/ditto/app.ts +++ b/packages/ditto/app.ts @@ -87,7 +87,6 @@ import { } from '@/controllers/api/pleroma.ts'; import { preferencesController } from '@/controllers/api/preferences.ts'; import { getSubscriptionController, pushSubscribeController } from '@/controllers/api/push.ts'; -import { deleteReactionController, reactionController, reactionsController } from '@/controllers/api/reactions.ts'; import { relayController } from '@/controllers/nostr/relay.ts'; import { adminReportController, @@ -150,6 +149,7 @@ import { logiMiddleware } from '@/middleware/logiMiddleware.ts'; import customEmojisRoute from '@/routes/customEmojisRoute.ts'; import dittoNamesRoute from '@/routes/dittoNamesRoute.ts'; import pleromaAdminPermissionGroupsRoute from '@/routes/pleromaAdminPermissionGroupsRoute.ts'; +import pleromaStatusesRoute from '@/routes/pleromaStatusesRoute.ts'; import { DittoRelayStore } from '@/storages/DittoRelayStore.ts'; export interface AppEnv extends DittoEnv { @@ -435,10 +435,7 @@ app.post('/api/v1/markers', userMiddleware({ verify: true }), updateMarkersContr app.get('/api/v1/push/subscription', userMiddleware(), getSubscriptionController); app.post('/api/v1/push/subscription', userMiddleware({ verify: true }), pushSubscribeController); -app.get('/api/v1/pleroma/statuses/:id{[0-9a-f]{64}}/reactions', reactionsController); -app.get('/api/v1/pleroma/statuses/:id{[0-9a-f]{64}}/reactions/:emoji', reactionsController); -app.put('/api/v1/pleroma/statuses/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), reactionController); -app.delete('/api/v1/pleroma/statuses/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), deleteReactionController); +app.route('/api/v1/pleroma/statuses', pleromaStatusesRoute); app.get('/api/v1/pleroma/admin/config', userMiddleware({ role: 'admin' }), configController); app.post('/api/v1/pleroma/admin/config', userMiddleware({ role: 'admin' }), updateConfigController); diff --git a/packages/ditto/controllers/api/reactions.ts b/packages/ditto/routes/pleromaStatusesRoute.ts similarity index 90% rename from packages/ditto/controllers/api/reactions.ts rename to packages/ditto/routes/pleromaStatusesRoute.ts index 5f459ab0..b17c95cc 100644 --- a/packages/ditto/controllers/api/reactions.ts +++ b/packages/ditto/routes/pleromaStatusesRoute.ts @@ -1,4 +1,6 @@ -import { AppController } from '@/app.ts'; +import { userMiddleware } from '@ditto/mastoapi/middleware'; +import { DittoRoute } from '@ditto/mastoapi/router'; + import { DittoEvent } from '@/interfaces/DittoEvent.ts'; import { hydrateEvents } from '@/storages/hydrate.ts'; import { createEvent } from '@/utils/api.ts'; @@ -8,11 +10,13 @@ import { HTTPException } from '@hono/hono/http-exception'; import { getCustomEmojis } from '@/utils/custom-emoji.ts'; -/** +const route = new DittoRoute(); + +/* * React to a status. * https://docs.pleroma.social/backend/development/API/pleroma_api/#put-apiv1pleromastatusesidreactionsemoji */ -const reactionController: AppController = async (c) => { +route.put('/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), async (c) => { const { relay, user, conf, signal } = c.var; const { type, value } = parseEmojiParam(c.req.param('emoji')); @@ -46,13 +50,13 @@ const reactionController: AppController = async (c) => { const status = await renderStatus(relay, event, { viewerPubkey: pubkey }); return c.json(status); -}; +}); -/** +/* * Delete reactions to a status. * https://docs.pleroma.social/backend/development/API/pleroma_api/#delete-apiv1pleromastatusesidreactionsemoji */ -const deleteReactionController: AppController = async (c) => { +route.delete('/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), async (c) => { const { relay, user } = c.var; const id = c.req.param('id'); @@ -89,13 +93,13 @@ const deleteReactionController: AppController = async (c) => { const status = renderStatus(relay, event, { viewerPubkey: pubkey }); return c.json(status); -}; +}); -/** +/* * Get an object of emoji to account mappings with accounts that reacted to the post. * https://docs.pleroma.social/backend/development/API/pleroma_api/#get-apiv1pleromastatusesidreactions */ -const reactionsController: AppController = async (c) => { +route.get('/:id{[0-9a-f]{64}}/reactions', userMiddleware({ required: false }), async (c) => { const { relay, user } = c.var; const id = c.req.param('id'); @@ -133,7 +137,7 @@ const reactionsController: AppController = async (c) => { ); return c.json(results); -}; +}); function parseEmojiParam(input: string): { type: 'native' | 'custom'; value: string } { if (/^\p{RGI_Emoji}$/v.test(input)) { @@ -147,4 +151,4 @@ function parseEmojiParam(input: string): { type: 'native' | 'custom'; value: str throw new HTTPException(400, { message: 'Invalid emoji' }); } -export { deleteReactionController, reactionController, reactionsController }; +export default route;