pl-api: Start working on supporting Pixelfed groups
Signed-off-by: mkljczk <git@mkljczk.pl>
This commit is contained in:
@ -5005,25 +5005,50 @@ class PlApiClient {
|
||||
groups: {
|
||||
/** returns an array of `Group` entities the current user is a member of */
|
||||
getGroups: async () => {
|
||||
const response = await this.request('/api/v1/groups');
|
||||
let response;
|
||||
if (this.features.version.software === PIXELFED) {
|
||||
response = await this.request('/api/v0/groups/self/list');
|
||||
} else {
|
||||
response = await this.request('/api/v1/groups');
|
||||
}
|
||||
|
||||
return v.parse(filteredArray(groupSchema), response.json);
|
||||
},
|
||||
|
||||
/** create a group with the given attributes (`display_name`, `note`, `avatar` and `header`). Sets the user who made the request as group administrator */
|
||||
createGroup: async (params: CreateGroupParams) => {
|
||||
const response = await this.request('/api/v1/groups', {
|
||||
method: 'POST',
|
||||
body: params,
|
||||
contentType: params.avatar || params.header ? '' : undefined,
|
||||
});
|
||||
let response;
|
||||
|
||||
if (this.features.version.software === PIXELFED) {
|
||||
response = await this.request('/api/v0/groups/create', {
|
||||
method: 'POST',
|
||||
body: { ...params, name: params.display_name, description: params.note, membership: 'public' },
|
||||
contentType: params.avatar || params.header ? '' : undefined,
|
||||
});
|
||||
|
||||
if (response.json?.id) {
|
||||
return this.experimental.groups.getGroup(response.json.id);
|
||||
}
|
||||
} else {
|
||||
response = await this.request('/api/v1/groups', {
|
||||
method: 'POST',
|
||||
body: params,
|
||||
contentType: params.avatar || params.header ? '' : undefined,
|
||||
});
|
||||
}
|
||||
|
||||
return v.parse(groupSchema, response.json);
|
||||
},
|
||||
|
||||
/** returns the `Group` entity describing a given group */
|
||||
getGroup: async (groupId: string) => {
|
||||
const response = await this.request(`/api/v1/groups/${groupId}`);
|
||||
let response;
|
||||
|
||||
if (this.features.version.software === PIXELFED) {
|
||||
response = await this.request(`/api/v0/groups/${groupId}`);
|
||||
} else {
|
||||
response = await this.request(`/api/v1/groups/${groupId}`);
|
||||
}
|
||||
|
||||
return v.parse(groupSchema, response.json);
|
||||
},
|
||||
|
||||
@ -7,7 +7,17 @@ import { datetimeSchema, filteredArray } from './utils';
|
||||
/**
|
||||
* @category Schemas
|
||||
*/
|
||||
const groupSchema = v.object({
|
||||
const groupSchema = v.pipe(v.any(), v.transform((group: any) => {
|
||||
if (group.config) {
|
||||
return {
|
||||
display_name: group.name,
|
||||
members_count: group.member_count,
|
||||
note: group.short_description,
|
||||
...group,
|
||||
};
|
||||
}
|
||||
return group;
|
||||
}), v.object({
|
||||
avatar: v.fallback(v.string(), ''),
|
||||
avatar_static: v.fallback(v.string(), ''),
|
||||
created_at: v.fallback(datetimeSchema, new Date().toISOString()),
|
||||
@ -22,14 +32,14 @@ const groupSchema = v.object({
|
||||
members_count: v.fallback(v.number(), 0),
|
||||
owner: v.fallback(v.nullable(v.object({ id: v.string() })), null),
|
||||
note: v.fallback(v.pipe(v.string(), v.transform(note => note === '<p></p>' ? '' : note)), ''),
|
||||
relationship: v.fallback(v.nullable(groupRelationshipSchema), null), // Dummy field to be overwritten later
|
||||
relationship: v.fallback(v.nullable(groupRelationshipSchema), null),
|
||||
statuses_visibility: v.fallback(v.string(), 'public'),
|
||||
uri: v.fallback(v.string(), ''),
|
||||
url: v.fallback(v.string(), ''),
|
||||
|
||||
avatar_description: v.fallback(v.string(), ''),
|
||||
header_description: v.fallback(v.string(), ''),
|
||||
});
|
||||
}));
|
||||
|
||||
/**
|
||||
* @category Entity types
|
||||
|
||||
@ -705,7 +705,10 @@ const getFeatures = (instance: Instance) => {
|
||||
* @see POST /api/v1/admin/groups/:group_id/unsuspend
|
||||
* @see DELETE /api/v1/admin/groups/:group_id
|
||||
*/
|
||||
groups: instance.api_versions['groups.pleroma.pl-api'] >= 1,
|
||||
groups: any([
|
||||
v.software === PIXELFED,
|
||||
instance.api_versions['groups.pleroma.pl-api'] >= 1,
|
||||
]),
|
||||
|
||||
groupsSlugs: instance.api_versions['groups.pleroma.pl-api'] >= 1,
|
||||
|
||||
|
||||
Reference in New Issue
Block a user