pl-api: support GoToSocial custom emoji management
Signed-off-by: mkljczk <git@mkljczk.pl>
This commit is contained in:
@ -9,6 +9,7 @@ import {
|
||||
adminAnnouncementSchema,
|
||||
adminCanonicalEmailBlockSchema,
|
||||
adminCohortSchema,
|
||||
adminCustomEmojiSchema,
|
||||
adminDimensionSchema,
|
||||
adminDomainAllowSchema,
|
||||
adminDomainBlockSchema,
|
||||
@ -114,6 +115,7 @@ import type {
|
||||
import type {
|
||||
AdminAccountAction,
|
||||
AdminCreateAnnouncementParams,
|
||||
AdminCreateCustomEmojiParams,
|
||||
AdminCreateDomainBlockParams,
|
||||
AdminCreateDomainParams,
|
||||
AdminCreateIpBlockParams,
|
||||
@ -122,6 +124,7 @@ import type {
|
||||
AdminGetAccountsParams,
|
||||
AdminGetAnnouncementsParams,
|
||||
AdminGetCanonicalEmailBlocks,
|
||||
AdminGetCustomEmojisParams,
|
||||
AdminGetDimensionsParams,
|
||||
AdminGetDomainAllowsParams,
|
||||
AdminGetDomainBlocksParams,
|
||||
@ -135,6 +138,7 @@ import type {
|
||||
AdminMeasureKey,
|
||||
AdminPerformAccountActionParams,
|
||||
AdminUpdateAnnouncementParams,
|
||||
AdminUpdateCustomEmojiParams,
|
||||
AdminUpdateDomainBlockParams,
|
||||
AdminUpdateReportParams,
|
||||
AdminUpdateRuleParams,
|
||||
@ -4379,6 +4383,68 @@ class PlApiClient {
|
||||
return v.parse(pleromaConfigSchema, response.json);
|
||||
},
|
||||
},
|
||||
|
||||
customEmojis: {
|
||||
/**
|
||||
* View local and remote emojis available to/known by this instance.
|
||||
*
|
||||
* Requires features{@link Features['adminCustomEmojis']}.
|
||||
* @see {@link https://docs.gotosocial.org/en/latest/api/swagger/}
|
||||
*/
|
||||
getCustomEmojis: (params: AdminGetCustomEmojisParams) =>
|
||||
this.#paginatedGet('/api/v1/admin/custom_emojis', { params }, adminCustomEmojiSchema),
|
||||
|
||||
/**
|
||||
* Get the admin view of a single emoji.
|
||||
*
|
||||
* Requires features{@link Features['adminCustomEmojis']}.
|
||||
* @see {@link https://docs.gotosocial.org/en/latest/api/swagger/}
|
||||
*/
|
||||
getCustomEmoji: async (emojiId: string) => {
|
||||
const response = await this.request(`/api/v1/admin/custom_emojis/${emojiId}`);
|
||||
|
||||
return v.parse(adminCustomEmojiSchema, response.json);
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the admin view of a single emoji.
|
||||
*
|
||||
* Requires features{@link Features['adminCustomEmojis']}.
|
||||
* @see {@link https://docs.gotosocial.org/en/latest/api/swagger/}
|
||||
*/
|
||||
createCustomEmoji: async (params: AdminCreateCustomEmojiParams) => {
|
||||
const response = await this.request(
|
||||
'/api/v1/admin/custom_emojis',
|
||||
{ method: 'POST', body: params, contentType: '' },
|
||||
);
|
||||
|
||||
return v.parse(adminCustomEmojiSchema, response.json);
|
||||
},
|
||||
|
||||
updateCustomEmoji: async (emojiId: string, params: AdminUpdateCustomEmojiParams) => {
|
||||
const response = await this.request(
|
||||
`/api/v1/admin/custom_emojis/${emojiId}`,
|
||||
{ method: 'PATCH', body: params, contentType: '' },
|
||||
);
|
||||
|
||||
return v.parse(adminCustomEmojiSchema, response.json);
|
||||
},
|
||||
|
||||
/**
|
||||
* Delete a **local** emoji with the given ID from the instance.
|
||||
*
|
||||
* Requires features{@link Features['adminCustomEmojis']}.
|
||||
* @see {@link https://docs.gotosocial.org/en/latest/api/swagger/}
|
||||
*/
|
||||
deleteCustomEmoji: async (emojiId: string) => {
|
||||
const response = await this.request(
|
||||
`/api/v1/admin/custom_emojis/${emojiId}`,
|
||||
{ method: 'DELETE' },
|
||||
);
|
||||
|
||||
return v.parse(adminCustomEmojiSchema, response.json);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
public readonly oembed = {
|
||||
|
||||
31
packages/pl-api/lib/entities/admin/custom-emoji.ts
Normal file
31
packages/pl-api/lib/entities/admin/custom-emoji.ts
Normal file
@ -0,0 +1,31 @@
|
||||
import * as v from 'valibot';
|
||||
|
||||
import { datetimeSchema } from '../utils';
|
||||
|
||||
/**
|
||||
* Admin view of a custom emoji.
|
||||
*
|
||||
* @category Admin schemas
|
||||
* @see {@link https://docs.gotosocial.org/en/latest/api/swagger/}
|
||||
*/
|
||||
const adminCustomEmojiSchema = v.object({
|
||||
category: v.fallback(v.nullable(v.string()), null),
|
||||
content_type: v.fallback(v.nullable(v.string()), null),
|
||||
disabled: v.fallback(v.boolean(), false),
|
||||
domain: v.fallback(v.nullable(v.string()), null),
|
||||
id: v.string(),
|
||||
shortcode: v.string(),
|
||||
static_url: v.fallback(v.string(), ''),
|
||||
total_file_size: v.fallback(v.nullable(v.number()), null),
|
||||
updated_at: v.fallback(v.optional(datetimeSchema), undefined),
|
||||
uri: v.fallback(v.string(), ''),
|
||||
url: v.string(),
|
||||
visible_in_picker: v.fallback(v.boolean(), true),
|
||||
});
|
||||
|
||||
/**
|
||||
* @category Entity types
|
||||
*/
|
||||
type AdminCustomEmoji = v.InferOutput<typeof adminCustomEmojiSchema>;
|
||||
|
||||
export { adminCustomEmojiSchema, type AdminCustomEmoji };
|
||||
@ -4,6 +4,7 @@ export * from './admin/account';
|
||||
export * from './admin/announcement';
|
||||
export * from './admin/canonical-email-block';
|
||||
export * from './admin/cohort';
|
||||
export * from './admin/custom-emoji';
|
||||
export * from './admin/dimension';
|
||||
export * from './admin/domain';
|
||||
export * from './admin/domain-allow';
|
||||
|
||||
@ -670,6 +670,15 @@ const getFeatures = (instance: Instance) => {
|
||||
v.software === PLEROMA,
|
||||
]),
|
||||
|
||||
/**
|
||||
* @see GET /api/v1/admin/custom_emojis
|
||||
* @see GET /api/v1/admin/custom_emojis/:id
|
||||
* @see POST /api/v1/admin/custom_emojis
|
||||
* @see PATCH /api/v1/admin/custom_emojis/:id
|
||||
* @see DELETE /api/v1/admin/custom_emojis/:id
|
||||
*/
|
||||
adminCustomEmojis: v.software === GOTOSOCIAL,
|
||||
|
||||
/**
|
||||
* Ability to manage instance rules by admins.
|
||||
* @see GET /api/v1/pleroma/admin/rules
|
||||
|
||||
@ -299,6 +299,28 @@ interface AdminCreateRuleParams {
|
||||
*/
|
||||
type AdminUpdateRuleParams = Partial<AdminCreateRuleParams>;
|
||||
|
||||
/**
|
||||
* @category Request params
|
||||
*/
|
||||
interface AdminGetCustomEmojisParams extends Pick<PaginationParams, 'limit'> {
|
||||
filter?: string;
|
||||
max_shortcode_domain?: string;
|
||||
min_shortcode_domain?: string;
|
||||
}
|
||||
|
||||
interface AdminCreateCustomEmojiParams {
|
||||
shortcode: string;
|
||||
image: File;
|
||||
category?: string;
|
||||
}
|
||||
|
||||
interface AdminUpdateCustomEmojiParams {
|
||||
type: 'disable' | 'copy' | 'modify';
|
||||
shortcode?: string;
|
||||
image?: File;
|
||||
category?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* @category Request params
|
||||
*/
|
||||
@ -333,5 +355,8 @@ export type {
|
||||
AdminGetModerationLogParams,
|
||||
AdminCreateRuleParams,
|
||||
AdminUpdateRuleParams,
|
||||
AdminGetCustomEmojisParams,
|
||||
AdminCreateCustomEmojiParams,
|
||||
AdminUpdateCustomEmojiParams,
|
||||
AdminGetGroupsParams,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user