/** * WordPress API Client Types * * TypeScript definitions for the WordPress REST API client */ import type { WordPressPost, WordPressPage, WordPressMedia, WordPressUser, WordPressComment, WordPressCategory, WordPressTag, WordPressSiteSettings, WordPressApplicationPassword, PostQueryParams, MediaQueryParams, UserQueryParams, CommentQueryParams, CreatePostRequest, UpdatePostRequest, CreatePageRequest, UpdatePageRequest, CreateUserRequest, UpdateUserRequest, CreateCommentRequest, UpdateCommentRequest, CreateCategoryRequest, UpdateCategoryRequest, CreateTagRequest, UpdateTagRequest, UploadMediaRequest, UpdateMediaRequest, AuthMethod } from "./wordpress.js"; export type { AuthMethod }; export interface AuthConfig { method: AuthMethod; username?: string; password?: string; appPassword?: string; apiKey?: string; secret?: string; nonce?: string; token?: string; clientId?: string; } export interface AppPasswordCredentials { username: string; appPassword: string; } export interface JwtCredentials { username: string; password: string; jwtToken?: string; jwtSecret?: string; } export interface BasicCredentials { username: string; password: string; } export interface ApiKeyCredentials { apiKey: string; } export type AuthCredentials = AppPasswordCredentials | JwtCredentials | BasicCredentials | ApiKeyCredentials; export interface AuthStatus { isAuthenticated: boolean; method: AuthMethod; lastAuthAttempt?: Date | null; tokenExpiry?: Date | null; } export interface WordPressClientConfig { baseUrl: string; auth: AuthConfig; timeout?: number; maxRetries?: number; userAgent?: string; headers?: Record; rateLimit?: { requestsPerMinute: number; burstLimit: number; }; } export type HTTPMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; export interface RequestOptions { headers?: Record; timeout?: number; retries?: number; signal?: AbortSignal; params?: Record; idempotent?: boolean; } export interface RawResponse { data: T; status: number; headers: Record; } export interface APIResponse { data: T; status: number; statusText: string; headers: Record; } export interface RateLimit { limit: number; remaining: number; reset: number; window: number; } export interface ClientStats { totalRequests: number; successfulRequests: number; failedRequests: number; averageResponseTime: number; lastRequestTime?: number; rateLimitHits: number; authFailures: number; errors: number; } export interface IWordPressClient { readonly config: WordPressClientConfig; readonly isAuthenticated: boolean; readonly stats: ClientStats; initialize(): Promise; authenticate(): Promise; disconnect(): Promise; request(method: HTTPMethod, endpoint: string, data?: unknown, options?: RequestOptions): Promise; get(endpoint: string, options?: RequestOptions): Promise; post(endpoint: string, data?: unknown, options?: RequestOptions): Promise; put(endpoint: string, data?: unknown, options?: RequestOptions): Promise; patch(endpoint: string, data?: unknown, options?: RequestOptions): Promise; delete(endpoint: string, options?: RequestOptions): Promise; getPosts(params?: PostQueryParams): Promise; getPost(id: number, context?: "view" | "embed" | "edit"): Promise; createPost(data: CreatePostRequest): Promise; updatePost(data: UpdatePostRequest): Promise; deletePost(id: number, force?: boolean): Promise<{ deleted: boolean; previous?: WordPressPost; }>; getPostRevisions(id: number): Promise; getPages(params?: PostQueryParams): Promise; getPage(id: number, context?: "view" | "embed" | "edit"): Promise; createPage(data: CreatePageRequest): Promise; updatePage(data: UpdatePageRequest): Promise; deletePage(id: number, force?: boolean): Promise<{ deleted: boolean; previous?: WordPressPage; }>; getPageRevisions(id: number): Promise; getMedia(params?: MediaQueryParams): Promise; getMediaItem(id: number, context?: "view" | "embed" | "edit"): Promise; uploadMedia(data: UploadMediaRequest): Promise; uploadFile(fileData: Buffer, filename: string, mimeType: string, meta?: Partial, options?: RequestOptions): Promise; updateMedia(data: UpdateMediaRequest): Promise; deleteMedia(id: number, force?: boolean): Promise<{ deleted: boolean; previous?: WordPressMedia; }>; getUsers(params?: UserQueryParams): Promise; getUser(id: number | "me", context?: "view" | "embed" | "edit"): Promise; createUser(data: CreateUserRequest): Promise; updateUser(data: UpdateUserRequest): Promise; deleteUser(id: number, reassign?: number): Promise<{ deleted: boolean; previous?: WordPressUser; }>; getCurrentUser(): Promise; getComments(params?: CommentQueryParams): Promise; getComment(id: number, context?: "view" | "embed" | "edit"): Promise; createComment(data: CreateCommentRequest): Promise; updateComment(data: UpdateCommentRequest): Promise; deleteComment(id: number, force?: boolean): Promise<{ deleted: boolean; previous?: WordPressComment; }>; approveComment(id: number): Promise; rejectComment(id: number): Promise; spamComment(id: number): Promise; getCategories(params?: { search?: string; exclude?: number[]; include?: number[]; order?: "asc" | "desc"; orderby?: string; hide_empty?: boolean; parent?: number; post?: number; slug?: string; }): Promise; getCategory(id: number): Promise; createCategory(data: CreateCategoryRequest): Promise; updateCategory(data: UpdateCategoryRequest): Promise; deleteCategory(id: number, force?: boolean): Promise<{ deleted: boolean; previous?: WordPressCategory; }>; getTags(params?: { search?: string; exclude?: number[]; include?: number[]; order?: "asc" | "desc"; orderby?: string; hide_empty?: boolean; post?: number; slug?: string; }): Promise; getTag(id: number): Promise; createTag(data: CreateTagRequest): Promise; updateTag(data: UpdateTagRequest): Promise; deleteTag(id: number, force?: boolean): Promise<{ deleted: boolean; previous?: WordPressTag; }>; getSiteSettings(): Promise; updateSiteSettings(settings: Partial): Promise; getSiteInfo(): Promise; getApplicationPasswords(userId?: number | "me"): Promise; createApplicationPassword(userId: number | "me", name: string, appId?: string): Promise; deleteApplicationPassword(userId: number | "me", uuid: string): Promise<{ deleted: boolean; }>; search(query: string, types?: string[], subtype?: string): Promise; ping(): Promise; getServerInfo(): Promise>; validateEndpoint(endpoint: string): boolean; buildUrl(endpoint: string, params?: Record): string; } export interface IAuthProvider { readonly method: AuthMethod; authenticate(client: IWordPressClient): Promise; addAuthHeaders(headers: Record): void; refreshAuth?(): Promise; validateAuth?(): Promise; } export declare class WordPressAPIError extends Error { readonly statusCode?: number; readonly code?: string; data?: unknown; constructor(message: string, statusCode?: number, code?: string, data?: unknown); } export declare class AuthenticationError extends WordPressAPIError { constructor(message: string, method: AuthMethod); } export declare class RateLimitError extends WordPressAPIError { constructor(message: string, resetTime: number); } export declare class ValidationError extends WordPressAPIError { constructor(message: string, field?: string); } export declare function isWordPressAPIError(error: unknown): error is WordPressAPIError; export declare function isAuthenticationError(error: unknown): error is AuthenticationError; export declare function isRateLimitError(error: unknown): error is RateLimitError; export declare function isValidationError(error: unknown): error is ValidationError; export declare function isWordPressPost(obj: unknown): obj is WordPressPost; export declare function isWordPressPage(obj: unknown): obj is WordPressPage; export declare function isWordPressMedia(obj: unknown): obj is WordPressMedia; export declare function isWordPressUser(obj: unknown): obj is WordPressUser; export declare function isWordPressComment(obj: unknown): obj is WordPressComment; //# sourceMappingURL=client.d.ts.map