add: status get endpoints to masto api
This commit is contained in:
parent
55e85fe1c1
commit
7c3f3390b4
2 changed files with 136 additions and 0 deletions
|
@ -750,6 +750,16 @@ export class MastodonApiServerService {
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region Status
|
//#region Status
|
||||||
|
const NoteEndpoint = new apiStatusMastodon(fastify);
|
||||||
|
|
||||||
|
// GET Endpoints
|
||||||
|
NoteEndpoint.getStatus();
|
||||||
|
NoteEndpoint.getContext();
|
||||||
|
NoteEndpoint.getHistory();
|
||||||
|
NoteEndpoint.getReblogged();
|
||||||
|
NoteEndpoint.getFavourites();
|
||||||
|
NoteEndpoint.getMedia();
|
||||||
|
NoteEndpoint.getPoll();
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
done();
|
done();
|
||||||
|
|
126
packages/backend/src/server/api/mastodon/endpoints/status.ts
Normal file
126
packages/backend/src/server/api/mastodon/endpoints/status.ts
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
import { convertId, IdConvertType as IdType, convertAccount, convertAttachment, convertPoll, convertStatus } from '../converters.js';
|
||||||
|
import querystring from 'querystring';
|
||||||
|
import type { Entity, MegalodonInterface } from 'megalodon';
|
||||||
|
import type { FastifyInstance } from 'fastify';
|
||||||
|
import { getClient } from '../MastodonApiServerService.js';
|
||||||
|
import { convertTimelinesArgsId, limitToInt } from './timeline.js';
|
||||||
|
|
||||||
|
function normalizeQuery(data: any) {
|
||||||
|
const str = querystring.stringify(data);
|
||||||
|
return querystring.parse(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
export class apiStatusMastodon {
|
||||||
|
private fastify: FastifyInstance;
|
||||||
|
|
||||||
|
constructor(fastify: FastifyInstance) {
|
||||||
|
this.fastify = fastify;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getStatus() {
|
||||||
|
this.fastify.get<{ Params: { id: string } }>("/v1/statuses/:id", async (_request, reply) => {
|
||||||
|
const BASE_URL = `${_request.protocol}://${_request.hostname}`;
|
||||||
|
const accessTokens = _request.headers.authorization;
|
||||||
|
const client = getClient(BASE_URL, accessTokens);
|
||||||
|
try {
|
||||||
|
const data = await client.getStatus(convertId(_request.params.id, IdType.SharkeyId));
|
||||||
|
reply.send(convertStatus(data.data));
|
||||||
|
} catch (e: any) {
|
||||||
|
console.error(e);
|
||||||
|
reply.code(_request.is404 ? 404 : 401).send(e.response.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getContext() {
|
||||||
|
this.fastify.get<{ Params: { id: string } }>("/v1/statuses/:id/context", async (_request, reply) => {
|
||||||
|
const BASE_URL = `${_request.protocol}://${_request.hostname}`;
|
||||||
|
const accessTokens = _request.headers.authorization;
|
||||||
|
const client = getClient(BASE_URL, accessTokens);
|
||||||
|
const query: any = _request.query;
|
||||||
|
try {
|
||||||
|
const data = await client.getStatusContext(
|
||||||
|
convertId(_request.params.id, IdType.SharkeyId),
|
||||||
|
convertTimelinesArgsId(limitToInt(query))
|
||||||
|
);
|
||||||
|
data.data.ancestors = data.data.ancestors.map((status: Entity.Status) => convertStatus(status));
|
||||||
|
data.data.descendants = data.data.descendants.map((status: Entity.Status) => convertStatus(status));
|
||||||
|
reply.send(data.data);
|
||||||
|
} catch (e: any) {
|
||||||
|
console.error(e);
|
||||||
|
reply.code(_request.is404 ? 404 : 401).send(e.response.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getHistory() {
|
||||||
|
this.fastify.get<{ Params: { id: string } }>("/v1/statuses/:id/history", async (_request, reply) => {
|
||||||
|
try {
|
||||||
|
reply.code(401).send({ message: 'Not Implemented' });
|
||||||
|
} catch (e: any) {
|
||||||
|
console.error(e);
|
||||||
|
reply.code(401).send(e.response.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getReblogged() {
|
||||||
|
this.fastify.get<{ Params: { id: string } }>("/v1/statuses/:id/reblogged_by", async (_request, reply) => {
|
||||||
|
const BASE_URL = `${_request.protocol}://${_request.hostname}`;
|
||||||
|
const accessTokens = _request.headers.authorization;
|
||||||
|
const client = getClient(BASE_URL, accessTokens);
|
||||||
|
try {
|
||||||
|
const data = await client.getStatusRebloggedBy(convertId(_request.params.id, IdType.SharkeyId));
|
||||||
|
reply.send(data.data.map((account: Entity.Account) => convertAccount(account)));
|
||||||
|
} catch (e: any) {
|
||||||
|
console.error(e);
|
||||||
|
reply.code(401).send(e.response.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getFavourites() {
|
||||||
|
this.fastify.get<{ Params: { id: string } }>("/v1/statuses/:id/favourited_by", async (_request, reply) => {
|
||||||
|
const BASE_URL = `${_request.protocol}://${_request.hostname}`;
|
||||||
|
const accessTokens = _request.headers.authorization;
|
||||||
|
const client = getClient(BASE_URL, accessTokens);
|
||||||
|
try {
|
||||||
|
const data = await client.getStatusFavouritedBy(convertId(_request.params.id, IdType.SharkeyId));
|
||||||
|
reply.send(data.data.map((account: Entity.Account) => convertAccount(account)));
|
||||||
|
} catch (e: any) {
|
||||||
|
console.error(e);
|
||||||
|
reply.code(401).send(e.response.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getMedia() {
|
||||||
|
this.fastify.get<{ Params: { id: string } }>("/v1/media/:id", async (_request, reply) => {
|
||||||
|
const BASE_URL = `${_request.protocol}://${_request.hostname}`;
|
||||||
|
const accessTokens = _request.headers.authorization;
|
||||||
|
const client = getClient(BASE_URL, accessTokens);
|
||||||
|
try {
|
||||||
|
const data = await client.getMedia(convertId(_request.params.id, IdType.SharkeyId));
|
||||||
|
reply.send(convertAttachment(data.data));
|
||||||
|
} catch (e: any) {
|
||||||
|
console.error(e);
|
||||||
|
reply.code(401).send(e.response.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getPoll() {
|
||||||
|
this.fastify.get<{ Params: { id: string } }>("/v1/polls/:id", async (_request, reply) => {
|
||||||
|
const BASE_URL = `${_request.protocol}://${_request.hostname}`;
|
||||||
|
const accessTokens = _request.headers.authorization;
|
||||||
|
const client = getClient(BASE_URL, accessTokens);
|
||||||
|
try {
|
||||||
|
const data = await client.getPoll(convertId(_request.params.id, IdType.SharkeyId));
|
||||||
|
reply.send(convertPoll(data.data));
|
||||||
|
} catch (e: any) {
|
||||||
|
console.error(e);
|
||||||
|
reply.code(401).send(e.response.data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue