hippofish/packages/backend/src/server/api/mastodon/ApiMastodonCompatibleService.ts

65 lines
2.1 KiB
TypeScript
Raw Normal View History

import Router from "@koa/router";
2023-02-11 00:41:19 +01:00
import megalodon, { MegalodonInterface } from "@cutls/megalodon";
import { apiAuthMastodon } from "./endpoints/auth.js";
import { apiAccountMastodon } from "./endpoints/account.js";
import { apiStatusMastodon } from "./endpoints/status.js";
import { apiFilterMastodon } from "./endpoints/filter.js";
import { apiTimelineMastodon } from "./endpoints/timeline.js";
import { apiNotificationsMastodon } from "./endpoints/notifications.js";
import { apiSearchMastodon } from "./endpoints/search.js";
import { getInstance } from "./endpoints/meta.js";
2023-02-11 00:41:19 +01:00
export function getClient(
BASE_URL: string,
authorization: string | undefined,
): MegalodonInterface {
const accessTokenArr = authorization?.split(" ") ?? [null];
const accessToken = accessTokenArr[accessTokenArr.length - 1];
2023-02-11 00:41:19 +01:00
const generator = (megalodon as any).default;
const client = generator(
"misskey",
BASE_URL,
accessToken,
) as MegalodonInterface;
return client;
}
export function apiMastodonCompatible(router: Router): void {
2023-02-11 00:41:19 +01:00
apiAuthMastodon(router);
apiAccountMastodon(router);
apiStatusMastodon(router);
apiFilterMastodon(router);
apiTimelineMastodon(router);
apiNotificationsMastodon(router);
apiSearchMastodon(router);
2023-02-11 00:41:19 +01:00
router.get("/v1/custom_emojis", async (ctx) => {
const BASE_URL = `${ctx.request.protocol}://${ctx.request.hostname}`;
const accessTokens = ctx.request.headers.authorization;
const client = getClient(BASE_URL, accessTokens);
try {
const data = await client.getInstanceCustomEmojis();
ctx.body = data.data;
} catch (e: any) {
2023-02-11 00:41:19 +01:00
console.error(e);
2023-02-07 23:05:26 +01:00
ctx.status = 401;
ctx.body = e.response.data;
}
});
2023-02-11 00:41:19 +01:00
router.get("/v1/instance", async (ctx) => {
2023-02-07 23:05:26 +01:00
const BASE_URL = `${ctx.request.protocol}://${ctx.request.hostname}`;
const accessTokens = ctx.request.headers.authorization;
2023-02-11 00:41:19 +01:00
const client = getClient(BASE_URL, accessTokens); // we are using this here, because in private mode some info isnt
// displayed without being logged in
try {
const data = await client.getInstance();
ctx.body = getInstance(data.data);
} catch (e: any) {
2023-02-11 00:41:19 +01:00
console.error(e);
2023-02-07 23:05:26 +01:00
ctx.status = 401;
ctx.body = e.response.data;
}
});
2023-02-11 00:41:19 +01:00
}