ditto/src/app.ts

96 lines
3.7 KiB
TypeScript
Raw Normal View History

2023-04-30 20:16:33 +00:00
import { type Context, cors, type Handler, Hono, type HonoEnv, logger, type MiddlewareHandler } from '@/deps.ts';
2023-03-05 01:55:28 +00:00
2023-04-29 21:35:44 +00:00
import {
accountController,
accountLookupController,
accountSearchController,
accountStatusesController,
2023-04-29 21:35:44 +00:00
credentialsController,
2023-04-29 22:59:42 +00:00
relationshipsController,
2023-04-30 19:45:30 +00:00
} from './controllers/api/accounts.ts';
import { appCredentialsController, createAppController } from './controllers/api/apps.ts';
import { emptyArrayController, emptyObjectController } from './controllers/api/fallback.ts';
import { homeController } from './controllers/api/timelines.ts';
import instanceController from './controllers/api/instance.ts';
import { createTokenController, oauthAuthorizeController, oauthController } from './controllers/api/oauth.ts';
2023-05-13 19:27:49 +00:00
import { preferencesController } from './controllers/api/preferences.ts';
import { searchController } from './controllers/api/search.ts';
2023-05-07 17:32:24 +00:00
import {
contextController,
createStatusController,
favouriteController,
statusController,
} from './controllers/api/statuses.ts';
import { streamingController } from './controllers/api/streaming.ts';
2023-04-30 19:51:56 +00:00
import { indexController } from './controllers/site.ts';
import { requireAuth, setAuth } from './middleware/auth.ts';
2023-03-05 02:19:57 +00:00
2023-04-29 20:22:10 +00:00
interface AppEnv extends HonoEnv {
Variables: {
pubkey?: string;
seckey?: string;
};
}
2023-03-05 01:55:28 +00:00
2023-04-29 20:22:10 +00:00
type AppContext = Context<AppEnv>;
type AppMiddleware = MiddlewareHandler<AppEnv>;
type AppController = Handler<AppEnv>;
const app = new Hono<AppEnv>();
app.use('*', logger());
app.get('/api/v1/streaming', streamingController);
app.get('/api/v1/streaming/', streamingController);
app.use('*', cors({ origin: '*', exposeHeaders: ['link'] }), setAuth);
2023-03-05 04:49:08 +00:00
2023-03-05 02:19:57 +00:00
app.get('/api/v1/instance', instanceController);
2023-03-05 01:55:28 +00:00
app.get('/api/v1/apps/verify_credentials', appCredentialsController);
2023-03-05 02:59:39 +00:00
app.post('/api/v1/apps', createAppController);
2023-03-05 03:36:53 +00:00
app.post('/oauth/token', createTokenController);
2023-03-05 06:36:37 +00:00
app.post('/oauth/revoke', emptyObjectController);
2023-04-30 18:28:49 +00:00
app.post('/oauth/authorize', oauthAuthorizeController);
app.get('/oauth/authorize', oauthController);
2023-03-05 03:36:53 +00:00
2023-04-29 20:22:10 +00:00
app.get('/api/v1/accounts/verify_credentials', requireAuth, credentialsController);
app.get('/api/v1/accounts/search', accountSearchController);
2023-04-29 21:23:23 +00:00
app.get('/api/v1/accounts/lookup', accountLookupController);
2023-04-29 22:59:42 +00:00
app.get('/api/v1/accounts/relationships', relationshipsController);
app.get('/api/v1/accounts/:pubkey{[0-9a-f]{64}}/statuses', accountStatusesController);
2023-04-29 21:35:44 +00:00
app.get('/api/v1/accounts/:pubkey{[0-9a-f]{64}}', accountController);
2023-04-30 01:23:51 +00:00
app.get('/api/v1/statuses/:id{[0-9a-f]{64}}/context', contextController);
2023-04-29 22:26:56 +00:00
app.get('/api/v1/statuses/:id{[0-9a-f]{64}}', statusController);
2023-05-07 17:32:24 +00:00
app.post('/api/v1/statuses/:id{[0-9a-f]{64}}/favourite', favouriteController);
2023-04-29 20:22:10 +00:00
app.post('/api/v1/statuses', requireAuth, createStatusController);
2023-03-05 05:26:25 +00:00
2023-04-29 20:22:10 +00:00
app.get('/api/v1/timelines/home', requireAuth, homeController);
2023-03-18 19:49:44 +00:00
2023-05-13 19:27:49 +00:00
app.get('/api/v1/preferences', preferencesController);
2023-05-13 19:45:13 +00:00
app.get('/api/v1/search', searchController);
app.get('/api/v2/search', searchController);
2023-05-13 19:27:49 +00:00
// Not (yet) implemented.
2023-03-05 06:36:37 +00:00
app.get('/api/v1/notifications', emptyArrayController);
app.get('/api/v1/bookmarks', emptyArrayController);
2023-03-05 06:36:37 +00:00
app.get('/api/v1/custom_emojis', emptyArrayController);
app.get('/api/v1/accounts/search', emptyArrayController);
app.get('/api/v1/filters', emptyArrayController);
app.get('/api/v1/blocks', emptyArrayController);
app.get('/api/v1/mutes', emptyArrayController);
app.get('/api/v1/domain_blocks', emptyArrayController);
2023-04-30 02:14:00 +00:00
app.get('/api/v1/markers', emptyObjectController);
2023-05-12 21:27:52 +00:00
app.get('/api/v1/timelines/public', emptyArrayController);
2023-05-13 19:27:49 +00:00
app.get('/api/v1/conversations', emptyArrayController);
app.get('/api/v1/favourites', emptyArrayController);
app.get('/api/v1/lists', emptyArrayController);
2023-04-30 19:51:56 +00:00
app.get('/', indexController);
2023-03-05 01:55:28 +00:00
export default app;
2023-04-29 20:22:10 +00:00
export type { AppContext, AppController, AppMiddleware };