UNPKG

@stackend/api

Version:

JS bindings to api.stackend.com

441 lines 12.7 kB
import { XcapJsonResult, Thunk, XcapOptionalParameters } from '../api'; import { User } from '../user'; import { Request } from '../request'; import { PaginatedCollection } from '../api/PaginatedCollection'; import { AuthObject } from '../user/privileges'; import XcapObject from '../api/XcapObject'; import NameAware from '../api/NameAware'; import DescriptionAware from '../api/DescriptionAware'; import PermalinkAware from '../api/PermalinkAware'; import CreatorUserIdAware from '../api/CreatorUserIdAware'; import CreatedDateAware from '../api/CreatedDateAware'; import ModifiedDateAware from '../api/ModifiedDateAware'; import ModerationAware from '../api/ModerationAware'; /** * Xcap group api constants and methods. * * @since 3 apr 2017 */ export declare type GroupTypes = 'blog' | 'groups' | 'discussion'; export declare enum GroupType { OPEN = "OPEN", CLOSED = "CLOSED", BLOG = "BLOG", DISCUSSION = "DISCUSSION" } export declare const GROUP_TYPES_BY_ID: { [id: string]: GroupType; }; export declare enum Visibility { VISIBLE = "VISIBLE", HIDDEN = "HIDDEN" } export declare const VisibilityId: { [vis: string]: number; }; /** * Group definition */ export interface Group extends XcapObject, NameAware, DescriptionAware, PermalinkAware, CreatorUserIdAware, CreatedDateAware, ModifiedDateAware, ModerationAware { __type: 'net.josh.community.group.Group'; categoryId: number; categoryRef: any; obfuscatedReference: string; contentVisibility: Visibility; nrOfMembers: number; type: GroupType; visibility: Visibility; blogKey: string; backgroundImage: string; css: { headerFont: string; magazineColorDarker: string; textFont: string; magazineColor: string; magazineColorLighter: string; textColor: string; }; darkLogotype: string; darkOrLightLogotype: string; featured: boolean; openForApplications: boolean; numberOfReaders: number; rating: number; calendarId: number; lightLogotype: string; tags: Array<string>; totalNumberOfViews: number; adminIds: Array<number>; adminsRef: Array<User>; } export interface GroupMember extends CreatedDateAware { groupId: number; groupRef: Group; userId: number; userRef: User; /** Privilege. See privileges.ts */ privilegeType: number; } /** * Membership request */ export interface GroupMembershipRequest extends CreatedDateAware { groupId: number; userId: number; text: string; } /** * Component class (used to look up privileges, etc) */ export declare const COMPONENT_CLASS = "net.josh.community.group.GroupManager"; /** * Component name * @type {string} */ export declare const COMPONENT_NAME = "group"; /** * Sort by for groups */ export declare enum SortBy { /** * Sort by number of members */ SIZE = 1, /** * Sort alphabetically */ ALPHABETICAL = 2, /** * Sort by last activity date */ LAST_ACTIVITY_DATE = 3, /** * Sort by creation date. */ CREATION_DATE = 4 } export declare type sortBy = SortBy; /** * Sort order used when listing group members */ export declare enum GroupMemberSortOrder { JOIN_DATE_ASC = "JOIN_DATE_ASC", JOIN_DATE_DESC = "JOIN_DATE_DESC" } /** * Membership actions */ export declare enum MemberShipRequestType { /** * Add a member or approve a pending membership application (available to group admin only) */ ADD = "ADD", /** * Remove a member or pending membership application (available to group admin only) */ REMOVE = "REMOVE", /** * Apply for membership. */ APPLY = "APPLY", /** * Toggle admin status (available to group admin only) */ TOGGLE_ADMIN = "TOGGLE_ADMIN" } export declare function getUrl({ request }: { request: Request; }): string; export declare function getBlogUrl({ request }: { request: Request; }): string; /** * * Should be fixed so it doesn't only work for king */ export declare function getBlogPostUrl({ request, blogPermalink, entryPermalink }: { request: Request; blogPermalink?: string; entryPermalink?: string; }): string; /** * Get the site link to a group * @param request * @param group * @returns {string} */ export declare function getGroupUrl({ request, group }: { request: Request; group: Group; }): string; export declare function getGroupSettingsUrl({ request, group }: { request: Request; group: Group; }): string; export interface GroupMemberAuth { groupId: number; groupRef: string; userId: number; userRef: string; privilegeType: number; createdDate: number; } /** * Get CSS for a group. * Specify groupId or groupPermalink. * @param groupPermalink * @param groupId * @return {Promise} */ export declare function getCss({ groupPermalink, groupId }: { groupPermalink?: string; groupId?: number; }): void; /** * Given an url, get the group type ("blog", "group", "discussion") * @param request * @param url * @returns {string} */ export declare function getGroupType({ request, url }: { request: Request; url: string; }): string; export interface ListMyGroupsResult extends XcapJsonResult { groups: PaginatedCollection<Group>; /** Maps from group id */ groupAuth: { [id: string]: AuthObject; }; groupType: { [id: string]: number; }; } /** * List my groups */ export declare function listMyGroups({}: XcapOptionalParameters): Thunk<Promise<ListMyGroupsResult>>; /** * List groups. * * @param q {string} Search expression. Optional. * @param categoryId {number} Category id. Optional * @param categoryPermaLink {string} Category permalink. Optional. * @param memberUserId {number} Search for groups where this user is a member. Optional * @param sortBy {sortBy} Sort by * @param order {SortOrder} order * @param pageSize {number} Page size * @param p {number} Page number * @return {Promise} */ export declare function search({ q, categoryId, categoryPermaLink, memberUserId, sortBy, order, pageSize, p }: { q?: string; categoryId?: number; categoryPermaLink?: string; memberUserId?: number; sortBy: SortBy; order?: GroupMemberSortOrder; pageSize?: number; p?: number; } & XcapOptionalParameters): Thunk<Promise<XcapJsonResult>>; /** * List groups by tag. * * @param tag {string} Tag. * @param pageSize {number} Page size * @param p {number} Page number */ export declare function listGroupsByTag({ tag, pageSize, p }: { tag: string; pageSize?: number; p?: number; } & XcapOptionalParameters): Thunk<Promise<XcapJsonResult>>; export interface GetGroupResult extends XcapJsonResult { groupMembers: Array<GroupMember> | null; group: Group | null; hasApplied: boolean; } /** * Get a group and it's members. * Specify groupId or groupPermalink. */ export declare function getGroup({ groupPermalink, groupId }: { groupPermalink?: string; groupId?: number; } & XcapOptionalParameters): Thunk<Promise<GetGroupResult>>; export interface SubscribeResult extends XcapJsonResult { group: Group | null; groupId: number; groupPermalink: string; groupUserPrivilege: number; } /** * Subscribe to a group * @param groupPermalink * @param groupId */ export declare function subscribe({ groupPermalink, groupId }: { groupPermalink?: string; groupId?: number; } & XcapOptionalParameters): Thunk<Promise<SubscribeResult>>; /** * Unsubscribe from a group * @param groupPermalink * @param groupId */ export declare function unsubscribe({ groupPermalink, groupId }: { groupPermalink?: string; groupId?: number; } & XcapOptionalParameters): Thunk<Promise<XcapJsonResult>>; /** * Apply for membership in a group * @param groupPermalink * @param groupId */ export declare function applyForMembership({ groupPermalink, groupId }: { groupPermalink?: string; groupId?: number; } & XcapOptionalParameters): Thunk<Promise<XcapJsonResult>>; /** * Edit a group membership, membership request * * Specify groupId or groupPermalink. * * @param action {MemberShipRequestType} Required * @param groupPermalink * @param groupId * @param userId {[number]} One or more user ids. Required * @param privilegeType Optional. The privilege of the user (can be used to add and make a user admin in one request) */ export declare function editMembership({ action, groupPermalink, groupId, userId, privilegeType }: { action: string; groupPermalink?: string; groupId?: number; userId: number; privilegeType: number; } & XcapOptionalParameters): Thunk<Promise<XcapJsonResult>>; /** * List pending group membership requests. * Available to group admins only. * * @param groupPermalink * @param groupId */ export declare function listMembershipRequests({ groupPermalink, groupId }: { groupPermalink?: string; groupId?: number; } & XcapOptionalParameters): Thunk<Promise<XcapJsonResult>>; export interface ListMembersResult extends XcapJsonResult { group: Group | null; groupId: number; groupPermalink: string | null; groupMembers: Array<GroupMember>; } /** * List members of a group * * Specify groupId or groupPermalink. * FIXME: No support for pagination */ export declare function listMembers({ groupPermalink, groupId, groupMemberPrivilegeType, sortOrder }: { groupPermalink?: string; groupId?: number; sortOrder?: GroupMemberSortOrder; groupMemberPrivilegeType?: string; } & XcapOptionalParameters): Thunk<Promise<XcapJsonResult>>; /** * Edit or create a group. * * Action will set all parameters, not just the supplied one. * * @param groupId Group id (Optional) * @param groupPermalink Group permalink (Optional) * @param name Name, required. * @param headline * @param description * @param visibility * @param contentVisibility * @param isOpenForApplications * @param categoryId Category id (Optional) * @param tags Tags (Optional) * @returns {Thunk<XcapJsonResult>} */ export declare function editGroup({ groupId, groupPermalink, name, headline, description, visibility, contentVisibility, isOpenForApplications, categoryId, tags }: { groupId?: number; groupPermalink?: string; name: string; headline?: string; description?: string; visibility: Visibility; contentVisibility: Visibility; isOpenForApplications: boolean; categoryId?: number; tags?: Array<string>; } & XcapOptionalParameters): Thunk<Promise<XcapJsonResult>>; export interface CheckGroupPermalinkResult extends XcapJsonResult { groupPermalink: string; valid: boolean; available: boolean; } /** * Check if a group permalink is valid and available. * @param groupPermalink */ export declare function checkGroupPermalink({ groupPermalink }: { groupPermalink: string; } & XcapOptionalParameters): Thunk<Promise<CheckGroupPermalinkResult>>; /** * Set the group logotype image. * * @param groupId * @param imageId */ export declare function setGroupLogotypeImage({ groupId, imageId }: { groupId: number; imageId: number; } & XcapOptionalParameters): Thunk<Promise<XcapJsonResult>>; /** * Set the group background image. * * @param groupId * @param imageId */ export declare function setGroupBackgroundImage({ groupId, imageId }: { groupId: number; imageId: number; } & XcapOptionalParameters): Thunk<Promise<XcapJsonResult>>; /** * Set group styling. * * Application specific colors and fonts can be set by * supplying extra parameters named *color* or *font*. * * Requires group admin. * * @param groupId Group id * @param permalink Group permalink (optional) * @param lightLogotypeId Image id of light logotype image * @param darkLogotypeId Image id of dark logotype image * @param backgroundImageId Image id of background image * @param backgroundCropX Background crop position * @param backgroundCropY Background crop position * @param any */ export declare function setGroupStyle({ groupId, permalink, lightLogotypeId, darkLogotypeId, backgroundImageId, backgroundCropX, backgroundCropY, ...any }: { groupId?: number; permalink?: string; lightLogotypeId?: number; darkLogotypeId?: number; backgroundImageId?: number; backgroundCropX?: number; backgroundCropY?: number; } & XcapOptionalParameters): Thunk<Promise<XcapJsonResult>>; /** * Remove a group. * * @param groupId Group id */ export declare function removeGroup({ groupId }: { groupId: number; } & XcapOptionalParameters): Thunk<Promise<XcapJsonResult>>; //# sourceMappingURL=index.d.ts.map