Skip to main content
Glama
users-service.ts3.56 kB
// WordPress Users Service import { AxiosInstance } from 'axios'; import { logger } from '../../utils/logger.js'; import { ErrorHandler } from '../../utils/error-handler.js'; export interface UserCreateData { username: string; email: string; password: string; name?: string; first_name?: string; last_name?: string; roles?: string[]; description?: string; url?: string; } export interface UserUpdateData extends Partial<UserCreateData> { id: number; } export interface UserQueryParams { per_page?: number; page?: number; search?: string; roles?: string[]; orderby?: 'id' | 'name' | 'registered_date' | 'email'; order?: 'asc' | 'desc'; } export class UsersService { constructor(private client: AxiosInstance) {} async createUser(data: UserCreateData): Promise<any> { return ErrorHandler.wrapAsync(async () => { logger.info('Creating new user', { username: data.username, email: data.email }); const response = await this.client.post('/users', data); logger.info('User created successfully', { id: response.data.id }); return response.data; }, 'UsersService.createUser'); } async getUser(id: number, context: 'view' | 'edit' = 'view'): Promise<any> { return ErrorHandler.wrapAsync(async () => { logger.debug(`Fetching user ${id}`); const response = await this.client.get(`/users/${id}`, { params: { context } }); return response.data; }, 'UsersService.getUser'); } async getCurrentUser(): Promise<any> { return ErrorHandler.wrapAsync(async () => { logger.debug('Fetching current user'); const response = await this.client.get('/users/me'); return response.data; }, 'UsersService.getCurrentUser'); } async updateUser(data: UserUpdateData): Promise<any> { return ErrorHandler.wrapAsync(async () => { const { id, ...updateData } = data; logger.info(`Updating user ${id}`); const response = await this.client.post(`/users/${id}`, updateData); logger.info('User updated successfully', { id }); return response.data; }, 'UsersService.updateUser'); } async deleteUser(id: number, reassign?: number, force: boolean = false): Promise<any> { return ErrorHandler.wrapAsync(async () => { logger.info(`Deleting user ${id}`, { reassign, force }); const params: any = { force }; if (reassign) params.reassign = reassign; const response = await this.client.delete(`/users/${id}`, { params }); logger.info('User deleted successfully', { id }); return response.data; }, 'UsersService.deleteUser'); } async listUsers(params: UserQueryParams = {}): Promise<any> { return ErrorHandler.wrapAsync(async () => { const defaultParams = { per_page: 10, ...params }; logger.debug('Listing users', defaultParams); const response = await this.client.get('/users', { params: defaultParams }); logger.debug(`Found ${response.data.length} users`); return { users: response.data, total: response.headers['x-wp-total'], totalPages: response.headers['x-wp-totalpages'] }; }, 'UsersService.listUsers'); } async searchUsers(searchTerm: string, params: Omit<UserQueryParams, 'search'> = {}): Promise<any> { return this.listUsers({ ...params, search: searchTerm }); } async getUsersByRole(role: string, params: Omit<UserQueryParams, 'roles'> = {}): Promise<any> { return this.listUsers({ ...params, roles: [role] }); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mbrown1837/Ultimate-Elementor-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server