@atomic-solutions/wordpress-api-client 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/index.cjs +321 -10
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.js +312 -1
- package/dist/client/index.js.map +1 -1
- package/dist/index.cjs +438 -137
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +403 -4
- package/dist/index.js.map +1 -1
- package/dist/testing/index.cjs +321 -10
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.js +312 -1
- package/dist/testing/index.js.map +1 -1
- package/package.json +4 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/constants/endpoints.ts","../../src/errors/classes/BaseError.ts","../../src/errors/mapping/auth.ts","../../src/errors/mapping/resources.ts","../../src/errors/mapping/server.ts","../../src/errors/mapping/constants.ts","../../src/errors/mapping/index.ts","../../src/errors/classes/WordPressApiError.ts","../../src/errors/classes/WordPressDataValidationError.ts","../../src/http/handleApiResponse.ts","../../src/utils/calculatePagination.ts","../../src/utils/getPaginationMeta.ts","../../src/http/handlePaginatedApiResponse.ts","../../src/logging/logger.ts","../../src/http/interceptors/request.ts","../../src/http/interceptors/response.ts","../../src/http/interceptors/error.ts","../../src/api/auth.ts","../../src/api/categories.ts","../../src/api/media.ts","../../src/api/posts.ts","../../src/api/users.ts","../../src/client/createClient.ts"],"names":["error","isAxiosError","axios","JwtTokenResponseSchema","CategoriesListSchema","CategorySchema","MediaSchema","PostsListSchema","PostSchema","CurrentUserSchema","UserSchema"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * WordPress REST API v2 endpoints\n */\n\nexport const ENDPOINTS = {\n // Posts\n POSTS: '/wp/v2/posts',\n POST: (id: number) => `/wp/v2/posts/${id}`,\n\n // Categories\n CATEGORIES: '/wp/v2/categories',\n CATEGORY: (id: number) => `/wp/v2/categories/${id}`,\n\n // Tags\n TAGS: '/wp/v2/tags',\n TAG: (id: number) => `/wp/v2/tags/${id}`,\n\n // Media\n MEDIA: '/wp/v2/media',\n MEDIA_ITEM: (id: number) => `/wp/v2/media/${id}`,\n\n // Users\n USERS: '/wp/v2/users',\n USER: (id: number) => `/wp/v2/users/${id}`,\n USERS_ME: '/wp/v2/users/me',\n\n // JWT Auth (requires JWT Authentication plugin)\n JWT_TOKEN: '/jwt-auth/v1/token',\n JWT_VALIDATE: '/jwt-auth/v1/token/validate',\n\n // Pages\n PAGES: '/wp/v2/pages',\n PAGE: (id: number) => `/wp/v2/pages/${id}`,\n\n // Comments\n COMMENTS: '/wp/v2/comments',\n COMMENT: (id: number) => `/wp/v2/comments/${id}`,\n\n // Search\n SEARCH: '/wp/v2/search',\n} as const;\n","/**\n * Base error class for all package errors\n *\n * Generic over:\n * - TOptions: The options type for this error class\n * - TReportable: The reportable data structure for error tracking\n */\nimport type { BaseErrorOptions, BaseReportableData } from './types';\n\nexport class BaseError<\n TOptions extends BaseErrorOptions = BaseErrorOptions,\n TReportable extends BaseReportableData = BaseReportableData,\n> extends Error {\n constructor(public readonly options: TOptions) {\n super(options.message);\n\n // Maintain proper prototype chain\n Object.setPrototypeOf(this, new.target.prototype);\n\n // Set error name\n this.name = this.constructor.name;\n\n // Capture stack trace (excluding constructor call)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n // If there's a cause with a stack, preserve it\n if (this.options.cause instanceof Error && this.options.cause.stack) {\n this.stack = `${this.stack}\\nCaused by: ${this.options.cause.stack}`;\n }\n }\n\n /**\n * Get reportable data for error tracking/logging\n * Subclasses should override this to add their own reportable fields\n */\n getReportableData(): TReportable {\n const { code, operation, userMessage, retryable } = this.options;\n return {\n code,\n operation,\n userMessage,\n retryable,\n } as TReportable;\n }\n\n /**\n * Custom JSON serialization\n * Makes the error properly serializable for logging/reporting\n */\n toJSON(): Record<string, unknown> {\n return {\n ...this.getReportableData(),\n name: this.name,\n message: this.message,\n stack: this.stack,\n } as unknown as Record<string, unknown>;\n }\n}\n","/**\n * Authentication and authorization error codes\n */\n\nexport const AUTH_CODE_TRANSFORMATIONS = {\n // Authentication\n jwt_auth_failed: 'auth_failed',\n jwt_auth_invalid_token: 'token_expired',\n jwt_auth_bad_request: 'invalid_auth_request',\n\n // Authorization\n rest_forbidden: 'forbidden',\n rest_cannot_read: 'cannot_read',\n rest_cannot_edit: 'cannot_edit',\n rest_cannot_create: 'cannot_create',\n rest_cannot_delete: 'cannot_delete',\n} as const;\n\nexport const AUTH_ERROR_METADATA = {\n // Authentication\n auth_failed: {\n operation: 'authenticate',\n retryable: false,\n userMessage: 'Invalid username or password',\n },\n token_expired: {\n operation: 'validate_token',\n retryable: false,\n userMessage: 'Your session has expired. Please sign in again.',\n },\n invalid_auth_request: {\n operation: 'authenticate',\n retryable: false,\n userMessage: 'Invalid login request',\n },\n\n // Authorization\n forbidden: {\n operation: 'authorize',\n retryable: false,\n userMessage: 'You do not have permission to access this resource',\n },\n cannot_read: {\n operation: 'read_resource',\n retryable: false,\n userMessage: 'You do not have permission to view this content',\n },\n cannot_edit: {\n operation: 'edit_resource',\n retryable: false,\n userMessage: 'You do not have permission to edit this content',\n },\n cannot_create: {\n operation: 'create_resource',\n retryable: false,\n userMessage: 'You do not have permission to create content',\n },\n cannot_delete: {\n operation: 'delete_resource',\n retryable: false,\n userMessage: 'You do not have permission to delete this content',\n },\n} as const;\n","/**\n * Resource not found error codes\n */\n\nexport const RESOURCE_CODE_TRANSFORMATIONS = {\n rest_post_invalid_id: 'post_not_found',\n rest_term_invalid: 'term_not_found',\n rest_user_invalid_id: 'user_not_found',\n rest_no_route: 'route_not_found',\n} as const;\n\nexport const RESOURCE_ERROR_METADATA = {\n post_not_found: {\n operation: 'get_post',\n retryable: false,\n userMessage: 'Post not found',\n },\n term_not_found: {\n operation: 'get_term',\n retryable: false,\n userMessage: 'Category or tag not found',\n },\n user_not_found: {\n operation: 'get_user',\n retryable: false,\n userMessage: 'User not found',\n },\n route_not_found: {\n operation: 'api_request',\n retryable: false,\n userMessage: 'The requested resource was not found',\n },\n} as const;\n","/**\n * Server error codes\n */\n\nexport const SERVER_CODE_TRANSFORMATIONS = {\n rest_cookie_invalid_nonce: 'invalid_nonce',\n internal_error: 'server_error',\n} as const;\n\nexport const SERVER_ERROR_METADATA = {\n invalid_nonce: {\n operation: 'api_request',\n retryable: true,\n userMessage: 'Session expired. Please try again.',\n },\n server_error: {\n operation: 'api_request',\n retryable: true,\n userMessage: 'An unexpected error occurred. Please try again.',\n },\n unknown_error: {\n operation: 'api_request',\n retryable: false,\n userMessage: 'An error occurred',\n },\n} as const;\n","/**\n * WordPress error metadata constants\n */\n\nimport { AUTH_ERROR_METADATA } from './auth';\nimport type { WordPressErrorCode } from './index';\nimport { RESOURCE_ERROR_METADATA } from './resources';\nimport { SERVER_ERROR_METADATA } from './server';\nimport type { WordPressErrorMetadata } from './types';\n\nexport const VALIDATION_CODE_TRANSFORMATIONS = {\n rest_invalid_param: 'invalid_params',\n rest_missing_callback_param: 'missing_params',\n} as const;\n\nexport const VALIDATION_ERROR_METADATA = {\n invalid_params: {\n operation: 'api_request',\n retryable: false,\n userMessage: 'Invalid request parameters',\n },\n missing_params: {\n operation: 'api_request',\n retryable: false,\n userMessage: 'Missing required parameters',\n },\n} as const;\n\n/**\n * Combined error metadata for all WordPress error codes\n * Maps error codes to their operation, retryable status, and user message\n */\nexport const WORDPRESS_ERROR_METADATA: Record<WordPressErrorCode, WordPressErrorMetadata> = {\n ...AUTH_ERROR_METADATA,\n ...RESOURCE_ERROR_METADATA,\n ...VALIDATION_ERROR_METADATA,\n ...SERVER_ERROR_METADATA,\n};\n\n/**\n * Validation error codes\n */\n","import { AUTH_CODE_TRANSFORMATIONS, AUTH_ERROR_METADATA } from './auth';\nimport { VALIDATION_CODE_TRANSFORMATIONS, VALIDATION_ERROR_METADATA } from './constants';\nimport { RESOURCE_CODE_TRANSFORMATIONS, RESOURCE_ERROR_METADATA } from './resources';\nimport { SERVER_CODE_TRANSFORMATIONS, SERVER_ERROR_METADATA } from './server';\n\n/**\n * WordPress REST API error code mapping\n */\n\nexport { WORDPRESS_ERROR_METADATA } from './constants';\nexport type { WordPressErrorMetadata } from './types';\n\n/**\n * Application-level error code\n * Clean, semantic codes for use in application logic\n */\nexport type WordPressErrorCode =\n // Authentication\n | 'auth_failed'\n | 'token_expired'\n | 'invalid_auth_request'\n // Authorization\n | 'forbidden'\n | 'cannot_read'\n | 'cannot_edit'\n | 'cannot_create'\n | 'cannot_delete'\n // Not found\n | 'post_not_found'\n | 'term_not_found'\n | 'user_not_found'\n | 'route_not_found'\n // Validation\n | 'invalid_params'\n | 'missing_params'\n // Server\n | 'invalid_nonce'\n | 'server_error'\n // Fallback\n | 'unknown_error';\n\n/**\n * Mapped error with transformed code\n */\nexport interface MappedError {\n code: WordPressErrorCode;\n retryable: boolean;\n userMessage: string;\n}\n\n/**\n * Combined code transformations\n */\nconst CODE_TRANSFORMATIONS: Record<string, WordPressErrorCode> = {\n ...AUTH_CODE_TRANSFORMATIONS,\n ...RESOURCE_CODE_TRANSFORMATIONS,\n ...VALIDATION_CODE_TRANSFORMATIONS,\n ...SERVER_CODE_TRANSFORMATIONS,\n};\n\n/**\n * Combined error metadata\n */\nconst ERROR_METADATA: Record<WordPressErrorCode, Omit<MappedError, 'code'>> = {\n ...AUTH_ERROR_METADATA,\n ...RESOURCE_ERROR_METADATA,\n ...VALIDATION_ERROR_METADATA,\n ...SERVER_ERROR_METADATA,\n};\n\n/**\n * Transform WordPress API error code to application-level code\n *\n * @param apiCode - WordPress REST API error code (e.g., \"rest_post_invalid_id\")\n * @param status - HTTP status code\n * @returns Application-level error code with metadata\n *\n * @example\n * // Direct transformation\n * mapWordPressCode('rest_post_invalid_id', 404)\n * // Returns: { code: 'post_not_found', retryable: false, userMessage: 'Post not found' }\n *\n * // Pattern matching\n * mapWordPressCode('rest_comment_invalid_id', 404)\n * // Returns: { code: 'route_not_found', retryable: false, userMessage: '...' }\n */\nexport const mapWordPressCode = (apiCode: string, status: number): MappedError => {\n // Direct transformation mapping\n const appCode = CODE_TRANSFORMATIONS[apiCode];\n\n if (appCode) {\n const metadata = ERROR_METADATA[appCode];\n return {\n code: appCode,\n ...metadata,\n };\n }\n\n // Pattern matching for unmapped codes\n if (apiCode.includes('invalid_id') || apiCode.includes('not_found')) {\n return {\n code: 'route_not_found',\n ...ERROR_METADATA.route_not_found,\n };\n }\n\n if (apiCode.includes('cannot_') || apiCode.includes('forbidden')) {\n return {\n code: 'forbidden',\n ...ERROR_METADATA.forbidden,\n };\n }\n\n if (apiCode.includes('invalid_param') || apiCode.includes('missing_')) {\n return {\n code: 'invalid_params',\n ...ERROR_METADATA.invalid_params,\n };\n }\n\n if (apiCode.includes('nonce')) {\n return {\n code: 'invalid_nonce',\n ...ERROR_METADATA.invalid_nonce,\n };\n }\n\n // Fallback based on status code\n if (status === 401) {\n return {\n code: 'auth_failed',\n retryable: false,\n userMessage: 'Authentication required',\n };\n }\n\n if (status === 403) {\n return {\n code: 'forbidden',\n ...ERROR_METADATA.forbidden,\n };\n }\n\n if (status === 404) {\n return {\n code: 'route_not_found',\n ...ERROR_METADATA.route_not_found,\n };\n }\n\n if (status >= 500) {\n return {\n code: 'server_error',\n ...ERROR_METADATA.server_error,\n };\n }\n\n // Ultimate fallback\n return {\n code: 'unknown_error',\n ...ERROR_METADATA.unknown_error,\n };\n};\n","/**\n * WordPress API Error\n */\n\nimport { WORDPRESS_ERROR_METADATA, type WordPressErrorCode } from '../mapping';\nimport { BaseError } from './BaseError';\nimport type { ApiReportableData, WordPressApiErrorOptions } from './types';\n\n/**\n * WordPress-specific error class\n *\n * Extends BaseError to provide:\n * - Code transformation (WordPress API codes → clean app codes)\n * - WordPress-specific error categorization\n * - HTTP context (status, URL, method)\n */\nexport class WordPressApiError extends BaseError<WordPressApiErrorOptions, ApiReportableData> {\n constructor(options: WordPressApiErrorOptions) {\n const metadata = WORDPRESS_ERROR_METADATA[options.code] ?? {\n operation: 'wordpress_api_request',\n retryable: false,\n };\n\n // Enrich options with metadata defaults\n const enrichedOptions: WordPressApiErrorOptions = {\n ...options,\n operation: options.operation || metadata.operation,\n userMessage: options.userMessage || metadata.userMessage,\n retryable: options.retryable ?? metadata.retryable,\n };\n\n super(enrichedOptions);\n }\n\n // Convenient getters for frequently accessed fields (no duplication)\n get wpCode(): WordPressErrorCode {\n return this.options.code;\n }\n\n get originalCode(): string {\n return this.options.originalCode;\n }\n\n get statusCode(): number {\n return this.options.statusCode;\n }\n\n get url(): string {\n return this.options.url;\n }\n\n get method(): string {\n return this.options.method;\n }\n\n get requestBody(): unknown | undefined {\n return this.options.requestBody;\n }\n\n get responseBody(): unknown | undefined {\n return this.options.responseBody;\n }\n\n get data(): Record<string, unknown> | undefined {\n return this.options.data;\n }\n\n /**\n * Check if error is an authentication error\n */\n get isAuthError(): boolean {\n return (\n this.statusCode === 401 ||\n this.wpCode === 'auth_failed' ||\n this.wpCode === 'token_expired' ||\n this.wpCode === 'invalid_auth_request'\n );\n }\n\n /**\n * Check if error is a not found error\n */\n get isNotFoundError(): boolean {\n return (\n this.statusCode === 404 ||\n this.wpCode === 'route_not_found' ||\n this.wpCode === 'post_not_found' ||\n this.wpCode === 'term_not_found' ||\n this.wpCode === 'user_not_found'\n );\n }\n\n /**\n * Get reportable data for error tracking/logging\n * Includes HTTP context and WordPress-specific fields\n */\n override getReportableData(): ApiReportableData {\n return {\n code: this.options.code,\n operation: this.options.operation,\n userMessage: this.options.userMessage,\n retryable: this.options.retryable,\n statusCode: this.options.statusCode,\n url: this.options.url,\n method: this.options.method,\n wpCode: this.options.code,\n originalCode: this.options.originalCode,\n };\n }\n}\n","/**\n * WordPress validation error class\n * Thrown when API response validation fails\n */\n\nimport type { ZodError } from 'zod';\n\nimport { BaseError } from './BaseError';\nimport type {\n BaseErrorOptions,\n ValidationReportableData,\n WordPressDataValidationErrorOptions,\n} from './types';\n\n/**\n * Internal options type that combines user options with computed fields\n */\ninterface WordPressDataValidationErrorInternalOptions extends BaseErrorOptions {\n url?: string;\n zodError?: ZodError;\n value?: unknown;\n fieldErrors?: Record<string, string[]>;\n}\n\n/**\n * WordPress validation error\n *\n * Thrown when API response validation fails using Zod schemas\n */\nexport class WordPressDataValidationError extends BaseError<\n WordPressDataValidationErrorInternalOptions,\n ValidationReportableData\n> {\n constructor(options: WordPressDataValidationErrorOptions) {\n // Extract field errors from Zod error if provided\n const fieldErrors = options.zodError\n ? WordPressDataValidationError.extractFieldErrorsFromZod(options.zodError)\n : undefined;\n\n super({\n code: 'validation_error',\n message: options.message,\n operation: options.operation,\n userMessage: options.userMessage || 'Received unexpected data from WordPress',\n retryable: false,\n cause: options.cause,\n url: options.url,\n zodError: options.zodError,\n value: options.value,\n fieldErrors,\n });\n }\n\n // Convenient getters for validation-specific fields (no duplication)\n get url(): string | undefined {\n return this.options.url;\n }\n\n get zodError(): ZodError | undefined {\n return this.options.zodError;\n }\n\n get invalidValue(): unknown | undefined {\n return this.options.value;\n }\n\n get fieldErrors(): Record<string, string[]> | undefined {\n return this.options.fieldErrors;\n }\n\n /**\n * Get reportable data for error tracking/logging\n * Includes validation-specific fields\n */\n override getReportableData(): ValidationReportableData {\n return {\n code: this.options.code,\n operation: this.options.operation,\n userMessage: this.options.userMessage,\n retryable: false,\n fieldErrors: this.options.fieldErrors,\n url: this.options.url,\n };\n }\n\n /**\n * Extract field errors from Zod error\n */\n private static extractFieldErrorsFromZod(\n zodError: ZodError\n ): Record<string, string[]> | undefined {\n if (!zodError?.errors) {\n return undefined;\n }\n\n const fieldErrors: Record<string, string[]> = {};\n\n for (const issue of zodError.errors) {\n const path = issue.path.join('.');\n if (!fieldErrors[path]) {\n fieldErrors[path] = [];\n }\n fieldErrors[path].push(issue.message);\n }\n\n return fieldErrors;\n }\n\n /**\n * Get all error messages as a flat array\n */\n getMessages(): string[] {\n if (!this.fieldErrors) {\n return [this.message];\n }\n\n const messages: string[] = [];\n for (const fieldMessages of Object.values(this.fieldErrors)) {\n messages.push(...fieldMessages);\n }\n\n return messages;\n }\n\n /**\n * Check if a specific field has errors\n */\n hasFieldError(field: string): boolean {\n return this.fieldErrors ? field in this.fieldErrors : false;\n }\n\n /**\n * Get error messages for a specific field\n */\n getFieldError(field: string): string[] | undefined {\n return this.fieldErrors?.[field];\n }\n}\n","/**\n * Response validation utilities\n */\n\nimport type { AxiosResponse } from 'axios';\nimport type { ZodError, ZodSchema } from 'zod';\n\nimport { WordPressDataValidationError } from '../errors/classes';\n\n/**\n * Validation mode for API responses\n * - 'strict': Throw error on validation failure (default)\n * - 'warn': Log warning and continue on validation failure\n */\nexport type ValidationMode = 'strict' | 'warn';\n\n/**\n * Options for response handling\n */\nexport interface ResponseOptions {\n /** Validation mode */\n validationMode?: ValidationMode;\n\n /** Error reporter for validation errors */\n errorReporter?: (error: Error) => void;\n\n /** Optional validation error handler (called before errorReporter) */\n onValidationError?: (error: Error) => void;\n}\n\n/**\n * Handle and validate API response\n *\n * @param response - Axios response\n * @param schema - Zod schema for validation\n * @param options - Response handling options\n * @returns Validated data\n * @throws ValidationError if validation fails in strict mode\n */\nexport const handleApiResponse = <T>(\n response: AxiosResponse,\n schema: ZodSchema<T>,\n options?: ResponseOptions\n): T => {\n const validationMode = options?.validationMode ?? 'strict';\n\n // Warn mode - use safeParse and continue on validation failure\n if (validationMode === 'warn') {\n const result = schema.safeParse(response.data);\n\n if (!result.success) {\n const validationError = new WordPressDataValidationError({\n message: `WordPress API response validation failed for ${response.config.url || 'unknown endpoint'}`,\n url: response.config.url,\n zodError: result.error,\n value: response.data,\n userMessage: 'Received unexpected data from WordPress',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n // Log warning to console in warn mode\n console.warn('[wordpress-utils] Validation warning:', validationError.message);\n\n // Return raw data to allow app to continue\n return response.data as T;\n }\n\n return result.data;\n }\n\n // Strict mode - throw on validation failure\n try {\n return schema.parse(response.data);\n } catch (error) {\n if (error && typeof error === 'object' && 'issues' in error) {\n const validationError = new WordPressDataValidationError({\n message: `WordPress API response validation failed for ${response.config.url || 'unknown endpoint'}`,\n url: response.config.url,\n zodError: error as ZodError,\n value: response.data,\n userMessage: 'Received unexpected data from WordPress',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n throw validationError;\n }\n throw error;\n }\n};\n\n/**\n * Check if error is a Zod validation error\n */\nexport const isZodError = (error: unknown): error is ZodError => {\n return error instanceof Error && error.name === 'ZodError';\n};\n","/**\n * Calculate pagination navigation\n */\n\nexport interface Pagination {\n page: number;\n perPage: number;\n total: number;\n totalPages: number;\n hasNextPage: boolean;\n hasPrevPage: boolean;\n nextPage: number | null;\n prevPage: number | null;\n}\n\nexport interface CalculatePaginationInput {\n page: number;\n perPage: number;\n total: number;\n totalPages: number;\n}\n\n/**\n * Calculate pagination navigation from WordPress pagination metadata\n *\n * @param input - Current pagination state\n * @returns Full pagination object with navigation helpers\n */\nexport const calculatePagination = (input: CalculatePaginationInput): Pagination => {\n const { page, perPage, total, totalPages } = input;\n\n const hasNextPage = page < totalPages;\n const hasPrevPage = page > 1;\n\n return {\n page,\n perPage,\n total,\n totalPages,\n hasNextPage,\n hasPrevPage,\n nextPage: hasNextPage ? page + 1 : null,\n prevPage: hasPrevPage ? page - 1 : null,\n };\n};\n","/**\n * Extract pagination metadata from WordPress response headers\n */\n\nimport type { AxiosResponse } from 'axios';\n\nexport interface PaginationMeta {\n total: number;\n totalPages: number;\n}\n\n/**\n * Extract pagination metadata from WordPress REST API headers\n *\n * WordPress uses x-wp-total and x-wp-totalpages headers for pagination\n *\n * @param headers - Axios response headers\n * @returns Pagination metadata object\n */\nexport const getPaginationMeta = (headers: AxiosResponse['headers']): PaginationMeta => {\n // Handle undefined/null headers\n if (!headers) {\n return {\n total: 0,\n totalPages: 0,\n };\n }\n\n const wpTotal = headers['x-wp-total'];\n const wpTotalPages = headers['x-wp-totalpages'];\n\n if (!wpTotal || !wpTotalPages) {\n return {\n total: 0,\n totalPages: 0,\n };\n }\n\n const total = parseInt(wpTotal, 10);\n const totalPages = parseInt(wpTotalPages, 10);\n\n return {\n total,\n totalPages,\n };\n};\n","/**\n * Pagination utilities for WordPress API responses\n */\n\nimport type { AxiosResponse } from 'axios';\nimport type { ZodError, ZodSchema } from 'zod';\n\nimport { WordPressDataValidationError } from '../errors/classes';\nimport { calculatePagination, type Pagination } from '../utils/calculatePagination';\nimport { getPaginationMeta } from '../utils/getPaginationMeta';\nimport type { ResponseOptions } from './handleApiResponse';\n\n/**\n * Paginated response wrapper\n */\nexport interface PaginatedResponse<T> {\n data: T[];\n pagination: Pagination;\n}\n\n/**\n * Handle paginated API response\n *\n * @param response - Axios response\n * @param schema - Zod schema for validating array items\n * @param params - Request parameters (page, per_page)\n * @param options - Response handling options\n * @returns Paginated response with validated data\n * @throws ValidationError if validation fails in strict mode\n */\nexport const handlePaginatedApiResponse = <T>(\n response: AxiosResponse,\n schema: ZodSchema<T[]>,\n params: { page?: number; per_page?: number } = {},\n options?: ResponseOptions\n): PaginatedResponse<T> => {\n const validationMode = options?.validationMode ?? 'strict';\n let data: T[];\n\n // Warn mode - use safeParse and continue on validation failure\n if (validationMode === 'warn') {\n const result = schema.safeParse(response.data);\n\n if (!result.success) {\n const validationError = new WordPressDataValidationError({\n message: `WordPress API response validation failed for ${response.config.url || 'unknown endpoint'}`,\n url: response.config.url,\n zodError: result.error,\n value: response.data,\n userMessage: 'Received unexpected data from WordPress',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n // Log warning to console in warn mode\n console.warn('[wordpress-utils] Validation warning:', validationError.message);\n\n // Return raw data as array (best effort)\n data = Array.isArray(response.data) ? response.data : [];\n } else {\n data = result.data;\n }\n } else {\n // Strict mode - throw on validation failure\n try {\n data = schema.parse(response.data);\n } catch (error) {\n if (error && typeof error === 'object' && 'issues' in error) {\n const validationError = new WordPressDataValidationError({\n message: `WordPress API response validation failed for ${response.config.url || 'unknown endpoint'}`,\n url: response.config.url,\n zodError: error as ZodError,\n value: response.data,\n userMessage: 'Received unexpected data from WordPress',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n throw validationError;\n }\n throw error;\n }\n }\n\n const { total, totalPages } = getPaginationMeta(response.headers);\n const page = params.page || 1;\n const perPage = params.per_page || 10;\n\n const pagination = calculatePagination({\n page,\n perPage,\n total,\n totalPages,\n });\n\n return {\n data,\n pagination,\n };\n};\n","/**\n * Debug logger for WordPress utils\n */\n\nconst DEBUG_PREFIX = '[wordpress-utils]';\n\n/**\n * Check if debug mode is enabled\n */\nexport const isDebugEnabled = (): boolean => {\n if (typeof process !== 'undefined' && process.env) {\n return process.env.DEBUG === 'true' || process.env.DEBUG === '1';\n }\n return false;\n};\n\n/**\n * Log debug message (only if DEBUG is enabled)\n */\nexport const debug = (...args: unknown[]): void => {\n if (isDebugEnabled()) {\n console.log(DEBUG_PREFIX, ...args);\n }\n};\n\n/**\n * Log warning message\n */\nexport const warn = (...args: unknown[]): void => {\n console.warn(DEBUG_PREFIX, ...args);\n};\n\n/**\n * Log error message\n */\nexport const error = (...args: unknown[]): void => {\n console.error(DEBUG_PREFIX, ...args);\n};\n","/**\n * Axios request interceptor for WordPress API\n */\n\nimport type { AxiosInstance, InternalAxiosRequestConfig } from 'axios';\n\nimport type { WordPressClient, WordPressConfig } from '../../client/types';\nimport { debug } from '../../logging/logger';\n\n/**\n * Setup request interceptor\n *\n * - Injects JWT Bearer token for authenticated requests\n * - Calls optional onRequest hook\n * - Passes client instance to callbacks\n */\nexport const setupRequestInterceptor = (\n axiosInstance: AxiosInstance,\n config: WordPressConfig,\n client: WordPressClient\n): void => {\n axiosInstance.interceptors.request.use(\n async (requestConfig: InternalAxiosRequestConfig) => {\n // Inject JWT token if adapter is provided\n if (config.jwtToken) {\n const token = await config.jwtToken.get();\n if (token) {\n requestConfig.headers.Authorization = `Bearer ${token}`;\n debug('JWT token injected');\n }\n }\n\n // Call optional onRequest hook\n if (config.onRequest) {\n return config.onRequest(requestConfig, client);\n }\n\n return requestConfig;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n};\n","/**\n * Axios response interceptor for WordPress API\n */\n\nimport type { AxiosInstance, AxiosResponse } from 'axios';\n\nimport type { WordPressClient, WordPressConfig } from '../../client/types';\nimport { debug } from '../../logging/logger';\n\n/**\n * Setup response interceptor\n *\n * - Logs responses in debug mode\n * - Calls optional onResponse hook\n * - Passes client instance to callbacks\n */\nexport const setupResponseInterceptor = (\n axiosInstance: AxiosInstance,\n config: WordPressConfig,\n client: WordPressClient\n): void => {\n axiosInstance.interceptors.response.use(\n async (response: AxiosResponse) => {\n debug('Response:', response.config.url, response.status);\n\n // Call optional onResponse hook\n if (config.onResponse) {\n return config.onResponse(response, client);\n }\n\n return response;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n};\n","/**\n * Axios error interceptor for WordPress API\n */\n\nimport { isAxiosError, type AxiosError, type AxiosInstance } from 'axios';\n\nimport type { WordPressClient, WordPressConfig } from '../../client/types';\nimport { WordPressApiError } from '../../errors/classes';\nimport { mapWordPressCode } from '../../errors/mapping';\nimport { debug, error as logError } from '../../logging/logger';\n\ninterface WordPressErrorData {\n code?: string;\n message?: string;\n data?: {\n status?: number;\n };\n}\n\n/**\n * Setup error interceptor\n *\n * - Transforms WordPress errors into WordPressApiError instances\n * - Calls optional onError hook\n * - Passes client instance to callbacks\n */\nexport const setupErrorInterceptor = (\n axiosInstance: AxiosInstance,\n config: WordPressConfig,\n client: WordPressClient\n): void => {\n axiosInstance.interceptors.response.use(\n (response) => response,\n async (axiosError: AxiosError<WordPressErrorData>) => {\n const status = axiosError.response?.status || 500;\n const errorData = axiosError.response?.data;\n\n // Extract WordPress error details\n const apiCode = errorData?.code || 'unknown_error';\n const wpMessage = errorData?.message || axiosError.message || 'Unknown error';\n\n // Transform WordPress API code to application-level code\n // e.g., \"rest_post_invalid_id\" → \"post_not_found\"\n const mappedError = mapWordPressCode(apiCode, status);\n\n // Create WordPressApiError with full context\n const wpError = new WordPressApiError({\n message: wpMessage,\n statusCode: status,\n code: mappedError.code, // Transformed app-level code\n originalCode: apiCode, // Original WordPress API code\n retryable: mappedError.retryable,\n userMessage: mappedError.userMessage,\n operation: axiosError.config?.url || 'wordpress_api_request',\n url: axiosError.config?.url || '',\n method: axiosError.config?.method?.toUpperCase() || 'GET',\n requestBody: axiosError.config?.data,\n responseBody: errorData,\n cause: axiosError,\n });\n\n if (config.debug) {\n debug('WordPress error:', apiCode, status, wpMessage);\n logError(wpError);\n }\n\n // Handle authentication errors (401/403)\n if (\n (status === 401 || status === 403) &&\n config.onAuthError &&\n isAxiosError(axiosError) &&\n !axiosError.config?._retry\n ) {\n if (config.debug) {\n debug('Auth error detected, calling onAuthError handler');\n }\n\n try {\n const shouldRetry = await config.onAuthError(wpError, client);\n\n if (shouldRetry) {\n if (config.debug) {\n debug('Retrying request after auth error');\n }\n\n // Mark as retry to prevent infinite loops\n axiosError.config!._retry = true;\n\n // Retry the request\n return axiosInstance.request(axiosError.config!);\n }\n } catch (authErrorHandlerError) {\n // If onAuthError handler throws, fall through to error reporting\n if (config.debug) {\n debug('onAuthError handler threw error', authErrorHandlerError);\n }\n }\n }\n\n // Call optional onError hook\n if (config.onError) {\n config.onError(wpError, client);\n }\n\n // Report error to configured error reporter (Sentry, etc.)\n config.errorReporter?.report(wpError);\n\n return Promise.reject(wpError);\n }\n );\n};\n\n// Augment AxiosRequestConfig to include _retry flag\ndeclare module 'axios' {\n export interface AxiosRequestConfig {\n _retry?: boolean;\n }\n}\n","/**\n * Auth API functions\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport { ENDPOINTS } from '../constants/endpoints';\nimport { handleApiResponse, type ResponseOptions } from '../http';\nimport {\n JwtTokenResponseSchema,\n type JwtLoginInput,\n type JwtTokenResponse,\n} from '@atomic-solutions/schemas/wordpress';\n\n/**\n * Create Auth API\n */\nexport const createAuthAPI = (axios: AxiosInstance, options?: ResponseOptions) => ({\n /**\n * Login with username/password and get JWT token\n */\n async login(input: JwtLoginInput): Promise<JwtTokenResponse> {\n const response = await axios.post(ENDPOINTS.JWT_TOKEN, input);\n return handleApiResponse(response, JwtTokenResponseSchema, options);\n },\n\n /**\n * Validate current JWT token\n *\n * Requires Authorization header to be set\n */\n async validateToken(): Promise<boolean> {\n try {\n const response = await axios.post(ENDPOINTS.JWT_VALIDATE);\n return response.data?.code === 'jwt_auth_valid_token';\n } catch {\n return false;\n }\n },\n});\n","/**\n * Categories API functions\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport { ENDPOINTS } from '../constants/endpoints';\nimport {\n handleApiResponse,\n handlePaginatedApiResponse,\n type PaginatedResponse,\n type ResponseOptions,\n} from '../http';\nimport {\n CategoriesListSchema,\n CategorySchema,\n type Category,\n type CategoryParams,\n} from '@atomic-solutions/schemas/wordpress';\n\n/**\n * Create Categories API\n */\nexport const createCategoriesAPI = (axios: AxiosInstance, options?: ResponseOptions) => ({\n /**\n * Get list of categories with pagination\n */\n async list(params?: CategoryParams): Promise<PaginatedResponse<Category>> {\n const response = await axios.get(ENDPOINTS.CATEGORIES, { params });\n return handlePaginatedApiResponse(response, CategoriesListSchema, params, options);\n },\n\n /**\n * Get single category by ID\n */\n async get(id: number): Promise<Category> {\n const response = await axios.get(ENDPOINTS.CATEGORY(id));\n return handleApiResponse(response, CategorySchema, options);\n },\n});\n","/**\n * Media API functions\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport { ENDPOINTS } from '../constants/endpoints';\nimport { handleApiResponse, type ResponseOptions } from '../http';\nimport { MediaSchema, type Media } from '@atomic-solutions/schemas/wordpress';\n\n/**\n * Create Media API\n */\nexport const createMediaAPI = (axios: AxiosInstance, options?: ResponseOptions) => ({\n /**\n * Get single media item by ID\n */\n async get(id: number): Promise<Media> {\n const response = await axios.get(ENDPOINTS.MEDIA_ITEM(id));\n return handleApiResponse(response, MediaSchema, options);\n },\n});\n","/**\n * Posts API functions\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport { ENDPOINTS } from '../constants/endpoints';\nimport {\n handleApiResponse,\n handlePaginatedApiResponse,\n type PaginatedResponse,\n type ResponseOptions,\n} from '../http';\nimport {\n PostSchema,\n PostsListSchema,\n type Post,\n type PostParams,\n} from '@atomic-solutions/schemas/wordpress';\n\n/**\n * Create Posts API\n */\nexport const createPostsAPI = (axios: AxiosInstance, options?: ResponseOptions) => ({\n /**\n * Get list of posts with pagination\n */\n async list(params?: PostParams): Promise<PaginatedResponse<Post>> {\n const response = await axios.get(ENDPOINTS.POSTS, { params });\n return handlePaginatedApiResponse(response, PostsListSchema, params, options);\n },\n\n /**\n * Get single post by ID\n */\n async get(id: number): Promise<Post> {\n const response = await axios.get(ENDPOINTS.POST(id));\n return handleApiResponse(response, PostSchema, options);\n },\n\n /**\n * Get single post by slug\n */\n async getBySlug(slug: string): Promise<Post | null> {\n const response = await axios.get(ENDPOINTS.POSTS, {\n params: { slug, per_page: 1 },\n });\n const posts = handleApiResponse(response, PostsListSchema, options);\n return posts[0] || null;\n },\n});\n","/**\n * Users API functions\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport { ENDPOINTS } from '../constants/endpoints';\nimport { handleApiResponse, type ResponseOptions } from '../http';\nimport {\n CurrentUserSchema,\n UserSchema,\n type CurrentUser,\n type User,\n} from '@atomic-solutions/schemas/wordpress';\n\n/**\n * Create Users API\n */\nexport const createUsersAPI = (axios: AxiosInstance, options?: ResponseOptions) => ({\n /**\n * Get current authenticated user\n */\n async me(): Promise<CurrentUser> {\n const response = await axios.get(ENDPOINTS.USERS_ME);\n return handleApiResponse(response, CurrentUserSchema, options);\n },\n\n /**\n * Get user by ID\n */\n async get(id: number): Promise<User> {\n const response = await axios.get(ENDPOINTS.USER(id));\n return handleApiResponse(response, UserSchema, options);\n },\n});\n","/**\n * WordPress API client factory\n *\n * Creates a configured WordPress client with:\n * - JWT authentication for protected endpoints\n * - Response validation with Zod schemas\n * - Error handling with WordPress-specific error codes\n */\n\nimport axios from 'axios';\n\nimport { ResponseOptions } from '@/http';\n\nimport { createAuthAPI } from '../api/auth';\nimport { createCategoriesAPI } from '../api/categories';\nimport { createMediaAPI } from '../api/media';\nimport { createPostsAPI } from '../api/posts';\nimport { createUsersAPI } from '../api/users';\nimport {\n setupErrorInterceptor,\n setupRequestInterceptor,\n setupResponseInterceptor,\n} from '../http/interceptors';\nimport type { ErrorReporter, WordPressClient, WordPressConfig } from './types';\n\n/**\n * Default error reporter - logs to console\n */\nconst DEFAULT_ERROR_REPORTER: ErrorReporter = {\n report: (error: Error) => {\n console.error('[wordpress-utils]', error);\n },\n};\n\n/**\n * Create a configured WordPress API client\n *\n * @param config - Client configuration\n * @returns Configured WordPress client instance\n *\n * @example\n * ```tsx\n * import { createClient } from '@atomic-solutions/wordpress-utils';\n *\n * const jwtTokenAdapter = {\n * get: async () => AsyncStorage.getItem('wp_jwt_token'),\n * };\n *\n * const client = createClient({\n * baseURL: 'https://example.com/wp-json',\n * jwtToken: jwtTokenAdapter,\n * debug: process.env.DEBUG === 'true',\n * });\n *\n * // Use the client\n * const posts = await client.posts.list({ per_page: 20 });\n * const user = await client.users.me(); // Requires JWT token\n * ```\n */\nexport const createClient = (config: WordPressConfig): WordPressClient => {\n // Apply default error reporter if not provided\n const fullConfig: WordPressConfig = {\n ...config,\n errorReporter: config.errorReporter ?? DEFAULT_ERROR_REPORTER,\n };\n\n // Create axios instance\n const axiosInstance = axios.create({\n baseURL: fullConfig.baseURL,\n timeout: fullConfig.timeout || 30000,\n headers: {\n 'Content-Type': 'application/json',\n ...fullConfig.headers,\n },\n });\n\n // Response options for validation error handling\n const responseOptions: ResponseOptions = {\n errorReporter: fullConfig.errorReporter?.report,\n onValidationError: fullConfig.onValidationError,\n validationMode: fullConfig.validationMode,\n };\n\n // Create client object FIRST\n const client: WordPressClient = {\n config: fullConfig,\n axios: axiosInstance,\n posts: createPostsAPI(axiosInstance, responseOptions),\n categories: createCategoriesAPI(axiosInstance, responseOptions),\n media: createMediaAPI(axiosInstance, responseOptions),\n users: createUsersAPI(axiosInstance, responseOptions),\n auth: createAuthAPI(axiosInstance, responseOptions),\n };\n\n // Setup interceptors with client reference\n setupRequestInterceptor(axiosInstance, fullConfig, client);\n setupResponseInterceptor(axiosInstance, fullConfig, client);\n setupErrorInterceptor(axiosInstance, fullConfig, client);\n\n return client;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/constants/endpoints.ts","../../src/errors/classes/BaseError.ts","../../src/errors/mapping/auth.ts","../../src/errors/mapping/resources.ts","../../src/errors/mapping/server.ts","../../src/errors/mapping/constants.ts","../../src/errors/mapping/index.ts","../../src/errors/classes/WordPressApiError.ts","../../src/errors/classes/WordPressDataValidationError.ts","../../src/http/handleApiResponse.ts","../../src/utils/calculatePagination.ts","../../src/utils/getPaginationMeta.ts","../../src/http/handlePaginatedApiResponse.ts","../../src/logging/logger.ts","../../src/http/interceptors/request.ts","../../src/http/interceptors/response.ts","../../src/http/interceptors/error.ts","../../../schemas/src/wordpress/auth.schema.ts","../../../schemas/src/wordpress/base.schema.ts","../../../schemas/src/common/pagination.schema.ts","../../../schemas/src/wordpress/category.schema.ts","../../../schemas/src/wordpress/media.schema.ts","../../../schemas/src/wordpress/post.schema.ts","../../../schemas/src/wordpress/user.schema.ts","../../src/api/auth.ts","../../src/api/categories.ts","../../src/api/media.ts","../../src/api/posts.ts","../../src/api/users.ts","../../src/client/createClient.ts"],"names":["error","isAxiosError","z","axios"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * WordPress REST API v2 endpoints\n */\n\nexport const ENDPOINTS = {\n // Posts\n POSTS: '/wp/v2/posts',\n POST: (id: number) => `/wp/v2/posts/${id}`,\n\n // Categories\n CATEGORIES: '/wp/v2/categories',\n CATEGORY: (id: number) => `/wp/v2/categories/${id}`,\n\n // Tags\n TAGS: '/wp/v2/tags',\n TAG: (id: number) => `/wp/v2/tags/${id}`,\n\n // Media\n MEDIA: '/wp/v2/media',\n MEDIA_ITEM: (id: number) => `/wp/v2/media/${id}`,\n\n // Users\n USERS: '/wp/v2/users',\n USER: (id: number) => `/wp/v2/users/${id}`,\n USERS_ME: '/wp/v2/users/me',\n\n // JWT Auth (requires JWT Authentication plugin)\n JWT_TOKEN: '/jwt-auth/v1/token',\n JWT_VALIDATE: '/jwt-auth/v1/token/validate',\n\n // Pages\n PAGES: '/wp/v2/pages',\n PAGE: (id: number) => `/wp/v2/pages/${id}`,\n\n // Comments\n COMMENTS: '/wp/v2/comments',\n COMMENT: (id: number) => `/wp/v2/comments/${id}`,\n\n // Search\n SEARCH: '/wp/v2/search',\n} as const;\n","/**\n * Base error class for all package errors\n *\n * Generic over:\n * - TOptions: The options type for this error class\n * - TReportable: The reportable data structure for error tracking\n */\nimport type { BaseErrorOptions, BaseReportableData } from './types';\n\nexport class BaseError<\n TOptions extends BaseErrorOptions = BaseErrorOptions,\n TReportable extends BaseReportableData = BaseReportableData,\n> extends Error {\n constructor(public readonly options: TOptions) {\n super(options.message);\n\n // Maintain proper prototype chain\n Object.setPrototypeOf(this, new.target.prototype);\n\n // Set error name\n this.name = this.constructor.name;\n\n // Capture stack trace (excluding constructor call)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n // If there's a cause with a stack, preserve it\n if (this.options.cause instanceof Error && this.options.cause.stack) {\n this.stack = `${this.stack}\\nCaused by: ${this.options.cause.stack}`;\n }\n }\n\n /**\n * Get reportable data for error tracking/logging\n * Subclasses should override this to add their own reportable fields\n */\n getReportableData(): TReportable {\n const { code, operation, userMessage, retryable } = this.options;\n return {\n code,\n operation,\n userMessage,\n retryable,\n } as TReportable;\n }\n\n /**\n * Custom JSON serialization\n * Makes the error properly serializable for logging/reporting\n */\n toJSON(): Record<string, unknown> {\n return {\n ...this.getReportableData(),\n name: this.name,\n message: this.message,\n stack: this.stack,\n } as unknown as Record<string, unknown>;\n }\n}\n","/**\n * Authentication and authorization error codes\n */\n\nexport const AUTH_CODE_TRANSFORMATIONS = {\n // Authentication\n jwt_auth_failed: 'auth_failed',\n jwt_auth_invalid_token: 'token_expired',\n jwt_auth_bad_request: 'invalid_auth_request',\n\n // Authorization\n rest_forbidden: 'forbidden',\n rest_cannot_read: 'cannot_read',\n rest_cannot_edit: 'cannot_edit',\n rest_cannot_create: 'cannot_create',\n rest_cannot_delete: 'cannot_delete',\n} as const;\n\nexport const AUTH_ERROR_METADATA = {\n // Authentication\n auth_failed: {\n operation: 'authenticate',\n retryable: false,\n userMessage: 'Invalid username or password',\n },\n token_expired: {\n operation: 'validate_token',\n retryable: false,\n userMessage: 'Your session has expired. Please sign in again.',\n },\n invalid_auth_request: {\n operation: 'authenticate',\n retryable: false,\n userMessage: 'Invalid login request',\n },\n\n // Authorization\n forbidden: {\n operation: 'authorize',\n retryable: false,\n userMessage: 'You do not have permission to access this resource',\n },\n cannot_read: {\n operation: 'read_resource',\n retryable: false,\n userMessage: 'You do not have permission to view this content',\n },\n cannot_edit: {\n operation: 'edit_resource',\n retryable: false,\n userMessage: 'You do not have permission to edit this content',\n },\n cannot_create: {\n operation: 'create_resource',\n retryable: false,\n userMessage: 'You do not have permission to create content',\n },\n cannot_delete: {\n operation: 'delete_resource',\n retryable: false,\n userMessage: 'You do not have permission to delete this content',\n },\n} as const;\n","/**\n * Resource not found error codes\n */\n\nexport const RESOURCE_CODE_TRANSFORMATIONS = {\n rest_post_invalid_id: 'post_not_found',\n rest_term_invalid: 'term_not_found',\n rest_user_invalid_id: 'user_not_found',\n rest_no_route: 'route_not_found',\n} as const;\n\nexport const RESOURCE_ERROR_METADATA = {\n post_not_found: {\n operation: 'get_post',\n retryable: false,\n userMessage: 'Post not found',\n },\n term_not_found: {\n operation: 'get_term',\n retryable: false,\n userMessage: 'Category or tag not found',\n },\n user_not_found: {\n operation: 'get_user',\n retryable: false,\n userMessage: 'User not found',\n },\n route_not_found: {\n operation: 'api_request',\n retryable: false,\n userMessage: 'The requested resource was not found',\n },\n} as const;\n","/**\n * Server error codes\n */\n\nexport const SERVER_CODE_TRANSFORMATIONS = {\n rest_cookie_invalid_nonce: 'invalid_nonce',\n internal_error: 'server_error',\n} as const;\n\nexport const SERVER_ERROR_METADATA = {\n invalid_nonce: {\n operation: 'api_request',\n retryable: true,\n userMessage: 'Session expired. Please try again.',\n },\n server_error: {\n operation: 'api_request',\n retryable: true,\n userMessage: 'An unexpected error occurred. Please try again.',\n },\n unknown_error: {\n operation: 'api_request',\n retryable: false,\n userMessage: 'An error occurred',\n },\n} as const;\n","/**\n * WordPress error metadata constants\n */\n\nimport { AUTH_ERROR_METADATA } from './auth';\nimport type { WordPressErrorCode } from './index';\nimport { RESOURCE_ERROR_METADATA } from './resources';\nimport { SERVER_ERROR_METADATA } from './server';\nimport type { WordPressErrorMetadata } from './types';\n\nexport const VALIDATION_CODE_TRANSFORMATIONS = {\n rest_invalid_param: 'invalid_params',\n rest_missing_callback_param: 'missing_params',\n} as const;\n\nexport const VALIDATION_ERROR_METADATA = {\n invalid_params: {\n operation: 'api_request',\n retryable: false,\n userMessage: 'Invalid request parameters',\n },\n missing_params: {\n operation: 'api_request',\n retryable: false,\n userMessage: 'Missing required parameters',\n },\n} as const;\n\n/**\n * Combined error metadata for all WordPress error codes\n * Maps error codes to their operation, retryable status, and user message\n */\nexport const WORDPRESS_ERROR_METADATA: Record<WordPressErrorCode, WordPressErrorMetadata> = {\n ...AUTH_ERROR_METADATA,\n ...RESOURCE_ERROR_METADATA,\n ...VALIDATION_ERROR_METADATA,\n ...SERVER_ERROR_METADATA,\n};\n\n/**\n * Validation error codes\n */\n","import { AUTH_CODE_TRANSFORMATIONS, AUTH_ERROR_METADATA } from './auth';\nimport { VALIDATION_CODE_TRANSFORMATIONS, VALIDATION_ERROR_METADATA } from './constants';\nimport { RESOURCE_CODE_TRANSFORMATIONS, RESOURCE_ERROR_METADATA } from './resources';\nimport { SERVER_CODE_TRANSFORMATIONS, SERVER_ERROR_METADATA } from './server';\n\n/**\n * WordPress REST API error code mapping\n */\n\nexport { WORDPRESS_ERROR_METADATA } from './constants';\nexport type { WordPressErrorMetadata } from './types';\n\n/**\n * Application-level error code\n * Clean, semantic codes for use in application logic\n */\nexport type WordPressErrorCode =\n // Authentication\n | 'auth_failed'\n | 'token_expired'\n | 'invalid_auth_request'\n // Authorization\n | 'forbidden'\n | 'cannot_read'\n | 'cannot_edit'\n | 'cannot_create'\n | 'cannot_delete'\n // Not found\n | 'post_not_found'\n | 'term_not_found'\n | 'user_not_found'\n | 'route_not_found'\n // Validation\n | 'invalid_params'\n | 'missing_params'\n // Server\n | 'invalid_nonce'\n | 'server_error'\n // Fallback\n | 'unknown_error';\n\n/**\n * Mapped error with transformed code\n */\nexport interface MappedError {\n code: WordPressErrorCode;\n retryable: boolean;\n userMessage: string;\n}\n\n/**\n * Combined code transformations\n */\nconst CODE_TRANSFORMATIONS: Record<string, WordPressErrorCode> = {\n ...AUTH_CODE_TRANSFORMATIONS,\n ...RESOURCE_CODE_TRANSFORMATIONS,\n ...VALIDATION_CODE_TRANSFORMATIONS,\n ...SERVER_CODE_TRANSFORMATIONS,\n};\n\n/**\n * Combined error metadata\n */\nconst ERROR_METADATA: Record<WordPressErrorCode, Omit<MappedError, 'code'>> = {\n ...AUTH_ERROR_METADATA,\n ...RESOURCE_ERROR_METADATA,\n ...VALIDATION_ERROR_METADATA,\n ...SERVER_ERROR_METADATA,\n};\n\n/**\n * Transform WordPress API error code to application-level code\n *\n * @param apiCode - WordPress REST API error code (e.g., \"rest_post_invalid_id\")\n * @param status - HTTP status code\n * @returns Application-level error code with metadata\n *\n * @example\n * // Direct transformation\n * mapWordPressCode('rest_post_invalid_id', 404)\n * // Returns: { code: 'post_not_found', retryable: false, userMessage: 'Post not found' }\n *\n * // Pattern matching\n * mapWordPressCode('rest_comment_invalid_id', 404)\n * // Returns: { code: 'route_not_found', retryable: false, userMessage: '...' }\n */\nexport const mapWordPressCode = (apiCode: string, status: number): MappedError => {\n // Direct transformation mapping\n const appCode = CODE_TRANSFORMATIONS[apiCode];\n\n if (appCode) {\n const metadata = ERROR_METADATA[appCode];\n return {\n code: appCode,\n ...metadata,\n };\n }\n\n // Pattern matching for unmapped codes\n if (apiCode.includes('invalid_id') || apiCode.includes('not_found')) {\n return {\n code: 'route_not_found',\n ...ERROR_METADATA.route_not_found,\n };\n }\n\n if (apiCode.includes('cannot_') || apiCode.includes('forbidden')) {\n return {\n code: 'forbidden',\n ...ERROR_METADATA.forbidden,\n };\n }\n\n if (apiCode.includes('invalid_param') || apiCode.includes('missing_')) {\n return {\n code: 'invalid_params',\n ...ERROR_METADATA.invalid_params,\n };\n }\n\n if (apiCode.includes('nonce')) {\n return {\n code: 'invalid_nonce',\n ...ERROR_METADATA.invalid_nonce,\n };\n }\n\n // Fallback based on status code\n if (status === 401) {\n return {\n code: 'auth_failed',\n retryable: false,\n userMessage: 'Authentication required',\n };\n }\n\n if (status === 403) {\n return {\n code: 'forbidden',\n ...ERROR_METADATA.forbidden,\n };\n }\n\n if (status === 404) {\n return {\n code: 'route_not_found',\n ...ERROR_METADATA.route_not_found,\n };\n }\n\n if (status >= 500) {\n return {\n code: 'server_error',\n ...ERROR_METADATA.server_error,\n };\n }\n\n // Ultimate fallback\n return {\n code: 'unknown_error',\n ...ERROR_METADATA.unknown_error,\n };\n};\n","/**\n * WordPress API Error\n */\n\nimport { WORDPRESS_ERROR_METADATA, type WordPressErrorCode } from '../mapping';\nimport { BaseError } from './BaseError';\nimport type { ApiReportableData, WordPressApiErrorOptions } from './types';\n\n/**\n * WordPress-specific error class\n *\n * Extends BaseError to provide:\n * - Code transformation (WordPress API codes → clean app codes)\n * - WordPress-specific error categorization\n * - HTTP context (status, URL, method)\n */\nexport class WordPressApiError extends BaseError<WordPressApiErrorOptions, ApiReportableData> {\n constructor(options: WordPressApiErrorOptions) {\n const metadata = WORDPRESS_ERROR_METADATA[options.code] ?? {\n operation: 'wordpress_api_request',\n retryable: false,\n };\n\n // Enrich options with metadata defaults\n const enrichedOptions: WordPressApiErrorOptions = {\n ...options,\n operation: options.operation || metadata.operation,\n userMessage: options.userMessage || metadata.userMessage,\n retryable: options.retryable ?? metadata.retryable,\n };\n\n super(enrichedOptions);\n }\n\n // Convenient getters for frequently accessed fields (no duplication)\n get wpCode(): WordPressErrorCode {\n return this.options.code;\n }\n\n get originalCode(): string {\n return this.options.originalCode;\n }\n\n get statusCode(): number {\n return this.options.statusCode;\n }\n\n get url(): string {\n return this.options.url;\n }\n\n get method(): string {\n return this.options.method;\n }\n\n get requestBody(): unknown | undefined {\n return this.options.requestBody;\n }\n\n get responseBody(): unknown | undefined {\n return this.options.responseBody;\n }\n\n get data(): Record<string, unknown> | undefined {\n return this.options.data;\n }\n\n /**\n * Check if error is an authentication error\n */\n get isAuthError(): boolean {\n return (\n this.statusCode === 401 ||\n this.wpCode === 'auth_failed' ||\n this.wpCode === 'token_expired' ||\n this.wpCode === 'invalid_auth_request'\n );\n }\n\n /**\n * Check if error is a not found error\n */\n get isNotFoundError(): boolean {\n return (\n this.statusCode === 404 ||\n this.wpCode === 'route_not_found' ||\n this.wpCode === 'post_not_found' ||\n this.wpCode === 'term_not_found' ||\n this.wpCode === 'user_not_found'\n );\n }\n\n /**\n * Get reportable data for error tracking/logging\n * Includes HTTP context and WordPress-specific fields\n */\n override getReportableData(): ApiReportableData {\n return {\n code: this.options.code,\n operation: this.options.operation,\n userMessage: this.options.userMessage,\n retryable: this.options.retryable,\n statusCode: this.options.statusCode,\n url: this.options.url,\n method: this.options.method,\n wpCode: this.options.code,\n originalCode: this.options.originalCode,\n };\n }\n}\n","/**\n * WordPress validation error class\n * Thrown when API response validation fails\n */\n\nimport type { ZodError } from 'zod';\n\nimport { BaseError } from './BaseError';\nimport type {\n BaseErrorOptions,\n ValidationReportableData,\n WordPressDataValidationErrorOptions,\n} from './types';\n\n/**\n * Internal options type that combines user options with computed fields\n */\ninterface WordPressDataValidationErrorInternalOptions extends BaseErrorOptions {\n url?: string;\n zodError?: ZodError;\n value?: unknown;\n fieldErrors?: Record<string, string[]>;\n}\n\n/**\n * WordPress validation error\n *\n * Thrown when API response validation fails using Zod schemas\n */\nexport class WordPressDataValidationError extends BaseError<\n WordPressDataValidationErrorInternalOptions,\n ValidationReportableData\n> {\n constructor(options: WordPressDataValidationErrorOptions) {\n // Extract field errors from Zod error if provided\n const fieldErrors = options.zodError\n ? WordPressDataValidationError.extractFieldErrorsFromZod(options.zodError)\n : undefined;\n\n super({\n code: 'validation_error',\n message: options.message,\n operation: options.operation,\n userMessage: options.userMessage || 'Received unexpected data from WordPress',\n retryable: false,\n cause: options.cause,\n url: options.url,\n zodError: options.zodError,\n value: options.value,\n fieldErrors,\n });\n }\n\n // Convenient getters for validation-specific fields (no duplication)\n get url(): string | undefined {\n return this.options.url;\n }\n\n get zodError(): ZodError | undefined {\n return this.options.zodError;\n }\n\n get invalidValue(): unknown | undefined {\n return this.options.value;\n }\n\n get fieldErrors(): Record<string, string[]> | undefined {\n return this.options.fieldErrors;\n }\n\n /**\n * Get reportable data for error tracking/logging\n * Includes validation-specific fields\n */\n override getReportableData(): ValidationReportableData {\n return {\n code: this.options.code,\n operation: this.options.operation,\n userMessage: this.options.userMessage,\n retryable: false,\n fieldErrors: this.options.fieldErrors,\n url: this.options.url,\n };\n }\n\n /**\n * Extract field errors from Zod error\n */\n private static extractFieldErrorsFromZod(\n zodError: ZodError\n ): Record<string, string[]> | undefined {\n if (!zodError?.errors) {\n return undefined;\n }\n\n const fieldErrors: Record<string, string[]> = {};\n\n for (const issue of zodError.errors) {\n const path = issue.path.join('.');\n if (!fieldErrors[path]) {\n fieldErrors[path] = [];\n }\n fieldErrors[path].push(issue.message);\n }\n\n return fieldErrors;\n }\n\n /**\n * Get all error messages as a flat array\n */\n getMessages(): string[] {\n if (!this.fieldErrors) {\n return [this.message];\n }\n\n const messages: string[] = [];\n for (const fieldMessages of Object.values(this.fieldErrors)) {\n messages.push(...fieldMessages);\n }\n\n return messages;\n }\n\n /**\n * Check if a specific field has errors\n */\n hasFieldError(field: string): boolean {\n return this.fieldErrors ? field in this.fieldErrors : false;\n }\n\n /**\n * Get error messages for a specific field\n */\n getFieldError(field: string): string[] | undefined {\n return this.fieldErrors?.[field];\n }\n}\n","/**\n * Response validation utilities\n */\n\nimport type { AxiosResponse } from 'axios';\nimport type { ZodError, ZodSchema } from 'zod';\n\nimport { WordPressDataValidationError } from '../errors/classes';\n\n/**\n * Validation mode for API responses\n * - 'strict': Throw error on validation failure (default)\n * - 'warn': Log warning and continue on validation failure\n */\nexport type ValidationMode = 'strict' | 'warn';\n\n/**\n * Options for response handling\n */\nexport interface ResponseOptions {\n /** Validation mode */\n validationMode?: ValidationMode;\n\n /** Error reporter for validation errors */\n errorReporter?: (error: Error) => void;\n\n /** Optional validation error handler (called before errorReporter) */\n onValidationError?: (error: Error) => void;\n}\n\n/**\n * Handle and validate API response\n *\n * @param response - Axios response\n * @param schema - Zod schema for validation\n * @param options - Response handling options\n * @returns Validated data\n * @throws ValidationError if validation fails in strict mode\n */\nexport const handleApiResponse = <T>(\n response: AxiosResponse,\n schema: ZodSchema<T>,\n options?: ResponseOptions\n): T => {\n const validationMode = options?.validationMode ?? 'strict';\n\n // Warn mode - use safeParse and continue on validation failure\n if (validationMode === 'warn') {\n const result = schema.safeParse(response.data);\n\n if (!result.success) {\n const validationError = new WordPressDataValidationError({\n message: `WordPress API response validation failed for ${response.config.url || 'unknown endpoint'}`,\n url: response.config.url,\n zodError: result.error,\n value: response.data,\n userMessage: 'Received unexpected data from WordPress',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n // Log warning to console in warn mode\n console.warn('[wordpress-utils] Validation warning:', validationError.message);\n\n // Return raw data to allow app to continue\n return response.data as T;\n }\n\n return result.data;\n }\n\n // Strict mode - throw on validation failure\n try {\n return schema.parse(response.data);\n } catch (error) {\n if (error && typeof error === 'object' && 'issues' in error) {\n const validationError = new WordPressDataValidationError({\n message: `WordPress API response validation failed for ${response.config.url || 'unknown endpoint'}`,\n url: response.config.url,\n zodError: error as ZodError,\n value: response.data,\n userMessage: 'Received unexpected data from WordPress',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n throw validationError;\n }\n throw error;\n }\n};\n\n/**\n * Check if error is a Zod validation error\n */\nexport const isZodError = (error: unknown): error is ZodError => {\n return error instanceof Error && error.name === 'ZodError';\n};\n","/**\n * Calculate pagination navigation\n */\n\nexport interface Pagination {\n page: number;\n perPage: number;\n total: number;\n totalPages: number;\n hasNextPage: boolean;\n hasPrevPage: boolean;\n nextPage: number | null;\n prevPage: number | null;\n}\n\nexport interface CalculatePaginationInput {\n page: number;\n perPage: number;\n total: number;\n totalPages: number;\n}\n\n/**\n * Calculate pagination navigation from WordPress pagination metadata\n *\n * @param input - Current pagination state\n * @returns Full pagination object with navigation helpers\n */\nexport const calculatePagination = (input: CalculatePaginationInput): Pagination => {\n const { page, perPage, total, totalPages } = input;\n\n const hasNextPage = page < totalPages;\n const hasPrevPage = page > 1;\n\n return {\n page,\n perPage,\n total,\n totalPages,\n hasNextPage,\n hasPrevPage,\n nextPage: hasNextPage ? page + 1 : null,\n prevPage: hasPrevPage ? page - 1 : null,\n };\n};\n","/**\n * Extract pagination metadata from WordPress response headers\n */\n\nimport type { AxiosResponse } from 'axios';\n\nexport interface PaginationMeta {\n total: number;\n totalPages: number;\n}\n\n/**\n * Extract pagination metadata from WordPress REST API headers\n *\n * WordPress uses x-wp-total and x-wp-totalpages headers for pagination\n *\n * @param headers - Axios response headers\n * @returns Pagination metadata object\n */\nexport const getPaginationMeta = (headers: AxiosResponse['headers']): PaginationMeta => {\n // Handle undefined/null headers\n if (!headers) {\n return {\n total: 0,\n totalPages: 0,\n };\n }\n\n const wpTotal = headers['x-wp-total'];\n const wpTotalPages = headers['x-wp-totalpages'];\n\n if (!wpTotal || !wpTotalPages) {\n return {\n total: 0,\n totalPages: 0,\n };\n }\n\n const total = parseInt(wpTotal, 10);\n const totalPages = parseInt(wpTotalPages, 10);\n\n return {\n total,\n totalPages,\n };\n};\n","/**\n * Pagination utilities for WordPress API responses\n */\n\nimport type { AxiosResponse } from 'axios';\nimport type { ZodError, ZodSchema } from 'zod';\n\nimport { WordPressDataValidationError } from '../errors/classes';\nimport { calculatePagination, type Pagination } from '../utils/calculatePagination';\nimport { getPaginationMeta } from '../utils/getPaginationMeta';\nimport type { ResponseOptions } from './handleApiResponse';\n\n/**\n * Paginated response wrapper\n */\nexport interface PaginatedResponse<T> {\n data: T[];\n pagination: Pagination;\n}\n\n/**\n * Handle paginated API response\n *\n * @param response - Axios response\n * @param schema - Zod schema for validating array items\n * @param params - Request parameters (page, per_page)\n * @param options - Response handling options\n * @returns Paginated response with validated data\n * @throws ValidationError if validation fails in strict mode\n */\nexport const handlePaginatedApiResponse = <T>(\n response: AxiosResponse,\n schema: ZodSchema<T[]>,\n params: { page?: number; per_page?: number } = {},\n options?: ResponseOptions\n): PaginatedResponse<T> => {\n const validationMode = options?.validationMode ?? 'strict';\n let data: T[];\n\n // Warn mode - use safeParse and continue on validation failure\n if (validationMode === 'warn') {\n const result = schema.safeParse(response.data);\n\n if (!result.success) {\n const validationError = new WordPressDataValidationError({\n message: `WordPress API response validation failed for ${response.config.url || 'unknown endpoint'}`,\n url: response.config.url,\n zodError: result.error,\n value: response.data,\n userMessage: 'Received unexpected data from WordPress',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n // Log warning to console in warn mode\n console.warn('[wordpress-utils] Validation warning:', validationError.message);\n\n // Return raw data as array (best effort)\n data = Array.isArray(response.data) ? response.data : [];\n } else {\n data = result.data;\n }\n } else {\n // Strict mode - throw on validation failure\n try {\n data = schema.parse(response.data);\n } catch (error) {\n if (error && typeof error === 'object' && 'issues' in error) {\n const validationError = new WordPressDataValidationError({\n message: `WordPress API response validation failed for ${response.config.url || 'unknown endpoint'}`,\n url: response.config.url,\n zodError: error as ZodError,\n value: response.data,\n userMessage: 'Received unexpected data from WordPress',\n });\n\n // Call optional validation error handler\n options?.onValidationError?.(validationError);\n\n // Report to error tracker (if provided)\n options?.errorReporter?.(validationError);\n\n throw validationError;\n }\n throw error;\n }\n }\n\n const { total, totalPages } = getPaginationMeta(response.headers);\n const page = params.page || 1;\n const perPage = params.per_page || 10;\n\n const pagination = calculatePagination({\n page,\n perPage,\n total,\n totalPages,\n });\n\n return {\n data,\n pagination,\n };\n};\n","/**\n * Debug logger for WordPress utils\n */\n\nconst DEBUG_PREFIX = '[wordpress-utils]';\n\n/**\n * Check if debug mode is enabled\n */\nexport const isDebugEnabled = (): boolean => {\n if (typeof process !== 'undefined' && process.env) {\n return process.env.DEBUG === 'true' || process.env.DEBUG === '1';\n }\n return false;\n};\n\n/**\n * Log debug message (only if DEBUG is enabled)\n */\nexport const debug = (...args: unknown[]): void => {\n if (isDebugEnabled()) {\n console.log(DEBUG_PREFIX, ...args);\n }\n};\n\n/**\n * Log warning message\n */\nexport const warn = (...args: unknown[]): void => {\n console.warn(DEBUG_PREFIX, ...args);\n};\n\n/**\n * Log error message\n */\nexport const error = (...args: unknown[]): void => {\n console.error(DEBUG_PREFIX, ...args);\n};\n","/**\n * Axios request interceptor for WordPress API\n */\n\nimport type { AxiosInstance, InternalAxiosRequestConfig } from 'axios';\n\nimport type { WordPressClient, WordPressConfig } from '../../client/types';\nimport { debug } from '../../logging/logger';\n\n/**\n * Setup request interceptor\n *\n * - Injects JWT Bearer token for authenticated requests\n * - Calls optional onRequest hook\n * - Passes client instance to callbacks\n */\nexport const setupRequestInterceptor = (\n axiosInstance: AxiosInstance,\n config: WordPressConfig,\n client: WordPressClient\n): void => {\n axiosInstance.interceptors.request.use(\n async (requestConfig: InternalAxiosRequestConfig) => {\n // Inject JWT token if adapter is provided\n if (config.jwtToken) {\n const token = await config.jwtToken.get();\n if (token) {\n requestConfig.headers.Authorization = `Bearer ${token}`;\n debug('JWT token injected');\n }\n }\n\n // Call optional onRequest hook\n if (config.onRequest) {\n return config.onRequest(requestConfig, client);\n }\n\n return requestConfig;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n};\n","/**\n * Axios response interceptor for WordPress API\n */\n\nimport type { AxiosInstance, AxiosResponse } from 'axios';\n\nimport type { WordPressClient, WordPressConfig } from '../../client/types';\nimport { debug } from '../../logging/logger';\n\n/**\n * Setup response interceptor\n *\n * - Logs responses in debug mode\n * - Calls optional onResponse hook\n * - Passes client instance to callbacks\n */\nexport const setupResponseInterceptor = (\n axiosInstance: AxiosInstance,\n config: WordPressConfig,\n client: WordPressClient\n): void => {\n axiosInstance.interceptors.response.use(\n async (response: AxiosResponse) => {\n debug('Response:', response.config.url, response.status);\n\n // Call optional onResponse hook\n if (config.onResponse) {\n return config.onResponse(response, client);\n }\n\n return response;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n};\n","/**\n * Axios error interceptor for WordPress API\n */\n\nimport { isAxiosError, type AxiosError, type AxiosInstance } from 'axios';\n\nimport type { WordPressClient, WordPressConfig } from '../../client/types';\nimport { WordPressApiError } from '../../errors/classes';\nimport { mapWordPressCode } from '../../errors/mapping';\nimport { debug, error as logError } from '../../logging/logger';\n\ninterface WordPressErrorData {\n code?: string;\n message?: string;\n data?: {\n status?: number;\n };\n}\n\n/**\n * Setup error interceptor\n *\n * - Transforms WordPress errors into WordPressApiError instances\n * - Calls optional onError hook\n * - Passes client instance to callbacks\n */\nexport const setupErrorInterceptor = (\n axiosInstance: AxiosInstance,\n config: WordPressConfig,\n client: WordPressClient\n): void => {\n axiosInstance.interceptors.response.use(\n (response) => response,\n async (axiosError: AxiosError<WordPressErrorData>) => {\n const status = axiosError.response?.status || 500;\n const errorData = axiosError.response?.data;\n\n // Extract WordPress error details\n const apiCode = errorData?.code || 'unknown_error';\n const wpMessage = errorData?.message || axiosError.message || 'Unknown error';\n\n // Transform WordPress API code to application-level code\n // e.g., \"rest_post_invalid_id\" → \"post_not_found\"\n const mappedError = mapWordPressCode(apiCode, status);\n\n // Create WordPressApiError with full context\n const wpError = new WordPressApiError({\n message: wpMessage,\n statusCode: status,\n code: mappedError.code, // Transformed app-level code\n originalCode: apiCode, // Original WordPress API code\n retryable: mappedError.retryable,\n userMessage: mappedError.userMessage,\n operation: axiosError.config?.url || 'wordpress_api_request',\n url: axiosError.config?.url || '',\n method: axiosError.config?.method?.toUpperCase() || 'GET',\n requestBody: axiosError.config?.data,\n responseBody: errorData,\n cause: axiosError,\n });\n\n if (config.debug) {\n debug('WordPress error:', apiCode, status, wpMessage);\n logError(wpError);\n }\n\n // Handle authentication errors (401/403)\n if (\n (status === 401 || status === 403) &&\n config.onAuthError &&\n isAxiosError(axiosError) &&\n !axiosError.config?._retry\n ) {\n if (config.debug) {\n debug('Auth error detected, calling onAuthError handler');\n }\n\n try {\n const shouldRetry = await config.onAuthError(wpError, client);\n\n if (shouldRetry) {\n if (config.debug) {\n debug('Retrying request after auth error');\n }\n\n // Mark as retry to prevent infinite loops\n axiosError.config!._retry = true;\n\n // Retry the request\n return axiosInstance.request(axiosError.config!);\n }\n } catch (authErrorHandlerError) {\n // If onAuthError handler throws, fall through to error reporting\n if (config.debug) {\n debug('onAuthError handler threw error', authErrorHandlerError);\n }\n }\n }\n\n // Call optional onError hook\n if (config.onError) {\n config.onError(wpError, client);\n }\n\n // Report error to configured error reporter (Sentry, etc.)\n config.errorReporter?.report(wpError);\n\n return Promise.reject(wpError);\n }\n );\n};\n\n// Augment AxiosRequestConfig to include _retry flag\ndeclare module 'axios' {\n export interface AxiosRequestConfig {\n _retry?: boolean;\n }\n}\n","/**\n * WordPress JWT Authentication Schema\n *\n * Based on JWT Authentication for WP REST API plugin\n * Endpoint: /jwt-auth/v1/token\n */\n\nimport { z } from 'zod';\n\n/**\n * JWT login request\n */\nexport const JwtLoginInputSchema = z.object({\n username: z.string(),\n password: z.string(),\n});\n\nexport type JwtLoginInput = z.infer<typeof JwtLoginInputSchema>;\n\n/**\n * JWT token response from /jwt-auth/v1/token\n */\nexport const JwtTokenResponseSchema = z.object({\n token: z.string(),\n user_email: z.string(),\n user_nicename: z.string(),\n user_display_name: z.string(),\n});\n\nexport type JwtTokenResponse = z.infer<typeof JwtTokenResponseSchema>;\n\n/**\n * JWT token validation response from /jwt-auth/v1/token/validate\n */\nexport const JwtValidateResponseSchema = z.object({\n code: z.string(),\n data: z.object({\n status: z.number(),\n }),\n});\n\nexport type JwtValidateResponse = z.infer<typeof JwtValidateResponseSchema>;\n\n/**\n * JWT error response\n */\nexport const JwtErrorResponseSchema = z.object({\n code: z.string(),\n message: z.string(),\n data: z\n .object({\n status: z.number(),\n })\n .optional(),\n});\n\nexport type JwtErrorResponse = z.infer<typeof JwtErrorResponseSchema>;\n","/**\n * Base WordPress REST API schemas\n *\n * Common types used across WordPress endpoints\n */\n\nimport { z } from 'zod';\n\n/**\n * WordPress rendered content field (title, content, excerpt)\n */\nexport const RenderedContentSchema = z.object({\n rendered: z.string(),\n protected: z.boolean().optional(),\n});\n\nexport type RenderedContent = z.infer<typeof RenderedContentSchema>;\n\n/**\n * WordPress GUID field\n */\nexport const GuidSchema = z.object({\n rendered: z.string(),\n});\n\nexport type Guid = z.infer<typeof GuidSchema>;\n\n/**\n * WordPress post status\n */\nexport const PostStatusSchema = z.enum([\n 'publish',\n 'future',\n 'draft',\n 'pending',\n 'private',\n 'trash',\n 'auto-draft',\n 'inherit',\n]);\n\nexport type PostStatus = z.infer<typeof PostStatusSchema>;\n\n/**\n * WordPress HAL link item\n */\nexport const HalLinkItemSchema = z.object({\n href: z.string(),\n embeddable: z.boolean().optional(),\n templated: z.boolean().optional(),\n});\n\nexport type HalLinkItem = z.infer<typeof HalLinkItemSchema>;\n\n/**\n * WordPress HAL _links object\n */\nexport const HalLinksSchema = z\n .object({\n self: z.array(HalLinkItemSchema).optional(),\n collection: z.array(HalLinkItemSchema).optional(),\n about: z.array(HalLinkItemSchema).optional(),\n author: z.array(HalLinkItemSchema).optional(),\n replies: z.array(HalLinkItemSchema).optional(),\n 'wp:featuredmedia': z.array(HalLinkItemSchema).optional(),\n 'wp:attachment': z.array(HalLinkItemSchema).optional(),\n 'wp:term': z.array(HalLinkItemSchema).optional(),\n 'wp:post_type': z.array(HalLinkItemSchema).optional(),\n curies: z\n .array(\n z.object({\n name: z.string(),\n href: z.string(),\n templated: z.boolean(),\n })\n )\n .optional(),\n })\n .passthrough();\n\nexport type HalLinks = z.infer<typeof HalLinksSchema>;\n\n/**\n * Common base fields for WordPress objects\n */\nexport const WordPressBaseSchema = z.object({\n id: z.number(),\n date: z.string(),\n date_gmt: z.string(),\n modified: z.string(),\n modified_gmt: z.string(),\n slug: z.string(),\n status: z.string(),\n type: z.string(),\n link: z.string(),\n _links: HalLinksSchema.optional(),\n});\n\nexport type WordPressBase = z.infer<typeof WordPressBaseSchema>;\n","import { z } from 'zod';\n\n/**\n * Base pagination parameters schema\n */\nexport const paginationParamsSchema = z.object({\n /** Current page number */\n page: z.number().int().positive().optional(),\n\n /** Items per page */\n per_page: z.number().int().positive().max(100).optional(),\n\n /** Offset for pagination */\n offset: z.number().int().nonnegative().optional(),\n\n /** Sort order */\n order: z.enum(['asc', 'desc']).optional(),\n\n /** Field to sort by */\n orderby: z.string().optional(),\n});\n\n/**\n * Pagination metadata schema (for responses)\n */\nexport const paginationMetaSchema = z.object({\n /** Total number of items */\n total: z.number(),\n\n /** Total number of pages */\n totalPages: z.number(),\n\n /** Current page */\n currentPage: z.number(),\n\n /** Items per page */\n perPage: z.number(),\n});\n\n// Type exports\nexport type PaginationParams = z.infer<typeof paginationParamsSchema>;\nexport type PaginationMeta = z.infer<typeof paginationMetaSchema>;\n","/**\n * WordPress Category/Taxonomy Schema\n *\n * Based on WordPress REST API v2 /wp/v2/categories endpoint\n */\n\nimport { z } from 'zod';\n\nimport { HalLinksSchema } from './base.schema';\nimport { paginationParamsSchema } from '../common/pagination.schema';\n\n/**\n * WordPress Category object\n */\nexport const CategorySchema = z.object({\n id: z.number(),\n count: z.number(),\n description: z.string().optional(),\n link: z.string(),\n name: z.string(),\n slug: z.string(),\n taxonomy: z.string(),\n parent: z.number(),\n meta: z.any().optional(),\n _links: HalLinksSchema.optional(),\n});\n\nexport type Category = z.infer<typeof CategorySchema>;\n\n/**\n * Categories list schema\n */\nexport const CategoriesListSchema = z.array(CategorySchema);\n\nexport type CategoriesList = z.infer<typeof CategoriesListSchema>;\n\n/**\n * Category query parameters\n */\nexport const CategoryParamsSchema = paginationParamsSchema.extend({\n context: z.enum(['view', 'embed', 'edit']).optional(),\n search: z.string().optional(),\n exclude: z.array(z.number()).optional(),\n include: z.array(z.number()).optional(),\n hide_empty: z.boolean().optional(),\n parent: z.number().optional(),\n post: z.number().optional(),\n slug: z.string().optional(),\n});\n\nexport type CategoryParams = z.infer<typeof CategoryParamsSchema>;\n\n/**\n * WordPress Tag object (similar to Category)\n */\nexport const TagSchema = z.object({\n id: z.number(),\n count: z.number(),\n description: z.string().optional(),\n link: z.string(),\n name: z.string(),\n slug: z.string(),\n taxonomy: z.string(),\n meta: z.any().optional(),\n _links: HalLinksSchema.optional(),\n});\n\nexport type Tag = z.infer<typeof TagSchema>;\n\n/**\n * Tags list schema\n */\nexport const TagsListSchema = z.array(TagSchema);\n\nexport type TagsList = z.infer<typeof TagsListSchema>;\n","/**\n * WordPress Media Schema\n *\n * Based on WordPress REST API v2 /wp/v2/media endpoint\n */\n\nimport { z } from 'zod';\n\nimport { GuidSchema, HalLinksSchema, RenderedContentSchema } from './base.schema';\n\n/**\n * Media size details (thumbnail, medium, large, etc.)\n */\nexport const MediaSizeSchema = z.object({\n file: z.string(),\n width: z.number(),\n height: z.number(),\n filesize: z.number().optional(),\n mime_type: z.string(),\n source_url: z.string(),\n});\n\nexport type MediaSize = z.infer<typeof MediaSizeSchema>;\n\n/**\n * Standard WordPress media sizes\n */\nexport const MediaSizesSchema = z\n .object({\n thumbnail: MediaSizeSchema.optional(),\n medium: MediaSizeSchema.optional(),\n medium_large: MediaSizeSchema.optional(),\n large: MediaSizeSchema.optional(),\n full: MediaSizeSchema.optional(),\n })\n .passthrough(); // Allow custom theme sizes\n\nexport type MediaSizes = z.infer<typeof MediaSizesSchema>;\n\n/**\n * Image EXIF/metadata\n */\nexport const ImageMetaSchema = z.object({\n aperture: z.string().optional(),\n credit: z.string().optional(),\n camera: z.string().optional(),\n caption: z.string().optional(),\n created_timestamp: z.string().optional(),\n copyright: z.string().optional(),\n focal_length: z.string().optional(),\n iso: z.string().optional(),\n shutter_speed: z.string().optional(),\n title: z.string().optional(),\n orientation: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n});\n\nexport type ImageMeta = z.infer<typeof ImageMetaSchema>;\n\n/**\n * Media details including sizes and metadata\n */\nexport const MediaDetailsSchema = z.object({\n width: z.number(),\n height: z.number(),\n file: z.string(),\n filesize: z.number().optional(),\n sizes: MediaSizesSchema,\n image_meta: ImageMetaSchema.optional(),\n});\n\nexport type MediaDetails = z.infer<typeof MediaDetailsSchema>;\n\n/**\n * WordPress Media attachment object\n */\nexport const MediaSchema = z.object({\n id: z.number(),\n date: z.string(),\n date_gmt: z.string(),\n guid: GuidSchema,\n modified: z.string(),\n modified_gmt: z.string(),\n slug: z.string(),\n status: z.string(),\n type: z.string(),\n link: z.string(),\n title: RenderedContentSchema,\n author: z.number(),\n comment_status: z.string(),\n ping_status: z.string(),\n template: z.string().optional(),\n meta: z.any().optional(),\n description: RenderedContentSchema,\n caption: RenderedContentSchema,\n alt_text: z.string(),\n media_type: z.string(),\n mime_type: z.string(),\n media_details: MediaDetailsSchema,\n post: z.number().nullable(),\n source_url: z.string(),\n _links: HalLinksSchema.optional(),\n});\n\nexport type Media = z.infer<typeof MediaSchema>;\n\n/**\n * Media list schema\n */\nexport const MediaListSchema = z.array(MediaSchema);\n\nexport type MediaList = z.infer<typeof MediaListSchema>;\n","/**\n * WordPress Post Schema\n *\n * Based on WordPress REST API v2 /wp/v2/posts endpoint\n */\n\nimport { z } from 'zod';\n\nimport { GuidSchema, HalLinksSchema, RenderedContentSchema } from './base.schema';\nimport { paginationParamsSchema } from '../common/pagination.schema';\n\n/**\n * WordPress Post object\n */\nexport const PostSchema = z.object({\n id: z.number(),\n date: z.string(),\n date_gmt: z.string(),\n guid: GuidSchema,\n modified: z.string(),\n modified_gmt: z.string(),\n slug: z.string(),\n status: z.string(),\n type: z.string(),\n link: z.string(),\n title: RenderedContentSchema,\n content: RenderedContentSchema,\n excerpt: RenderedContentSchema,\n author: z.number(),\n featured_media: z.number(),\n comment_status: z.string(),\n ping_status: z.string(),\n sticky: z.boolean(),\n template: z.string(),\n format: z.string(),\n meta: z.any().optional(),\n categories: z.array(z.number()),\n tags: z.array(z.number()).optional(),\n _links: HalLinksSchema.optional(),\n});\n\nexport type Post = z.infer<typeof PostSchema>;\n\n/**\n * Posts list schema\n */\nexport const PostsListSchema = z.array(PostSchema);\n\nexport type PostsList = z.infer<typeof PostsListSchema>;\n\n/**\n * Post query parameters\n */\nexport const PostParamsSchema = paginationParamsSchema.extend({\n context: z.enum(['view', 'embed', 'edit']).optional(),\n search: z.string().optional(),\n after: z.string().optional(),\n before: z.string().optional(),\n author: z.union([z.number(), z.array(z.number())]).optional(),\n author_exclude: z.array(z.number()).optional(),\n exclude: z.array(z.number()).optional(),\n include: z.array(z.number()).optional(),\n categories: z.union([z.number(), z.array(z.number())]).optional(),\n categories_exclude: z.array(z.number()).optional(),\n tags: z.union([z.number(), z.array(z.number())]).optional(),\n tags_exclude: z.array(z.number()).optional(),\n sticky: z.boolean().optional(),\n});\n\nexport type PostParams = z.infer<typeof PostParamsSchema>;\n\n/**\n * Embedded post with featured media (custom endpoint response)\n */\nexport const EmbeddedPostSchema = z.object({\n id: z.number(),\n title: z.string(),\n content: z.string(),\n featured_image: z.string().optional(),\n published_date: z.string(),\n categories: z\n .array(\n z.object({\n id: z.number(),\n name: z.string(),\n slug: z.string(),\n taxonomy: z.string().optional(),\n description: z.string().optional(),\n parent: z.number().optional(),\n count: z.number().optional(),\n })\n )\n .optional(),\n});\n\nexport type EmbeddedPost = z.infer<typeof EmbeddedPostSchema>;\n\nexport const EmbeddedPostsListSchema = z.array(EmbeddedPostSchema);\n\nexport type EmbeddedPostsList = z.infer<typeof EmbeddedPostsListSchema>;\n","/**\n * WordPress User Schema\n *\n * Based on WordPress REST API v2 /wp/v2/users endpoint\n */\n\nimport { z } from 'zod';\n\nimport { HalLinksSchema } from './base.schema';\n\n/**\n * User avatar URLs\n */\nexport const AvatarUrlsSchema = z.object({\n '24': z.string().optional(),\n '48': z.string().optional(),\n '96': z.string().optional(),\n});\n\nexport type AvatarUrls = z.infer<typeof AvatarUrlsSchema>;\n\n/**\n * WordPress User object\n */\nexport const UserSchema = z.object({\n id: z.number(),\n username: z.string().optional(), // Only in edit context\n name: z.string(),\n first_name: z.string().optional(),\n last_name: z.string().optional(),\n email: z.string().optional(), // Only for current user or admin\n url: z.string(),\n description: z.string(),\n link: z.string(),\n locale: z.string().optional(), // Only for current user\n nickname: z.string().optional(), // Only in edit context\n slug: z.string(),\n registered_date: z.string().optional(), // Only in edit context\n roles: z.array(z.string()).optional(), // Only in edit context\n capabilities: z.record(z.boolean()).optional(), // Only in edit context\n extra_capabilities: z.record(z.boolean()).optional(), // Only in edit context\n avatar_urls: AvatarUrlsSchema.optional(),\n meta: z.any().optional(),\n _links: HalLinksSchema.optional(),\n});\n\nexport type User = z.infer<typeof UserSchema>;\n\n/**\n * Users list schema\n */\nexport const UsersListSchema = z.array(UserSchema);\n\nexport type UsersList = z.infer<typeof UsersListSchema>;\n\n/**\n * Current user response (from /users/me)\n * Includes additional fields not available in public user endpoints\n */\nexport const CurrentUserSchema = UserSchema.extend({\n username: z.string(),\n email: z.string(),\n locale: z.string(),\n nickname: z.string(),\n registered_date: z.string(),\n roles: z.array(z.string()),\n});\n\nexport type CurrentUser = z.infer<typeof CurrentUserSchema>;\n","/**\n * Auth API functions\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport { ENDPOINTS } from '../constants/endpoints';\nimport { handleApiResponse, type ResponseOptions } from '../http';\nimport {\n JwtTokenResponseSchema,\n type JwtLoginInput,\n type JwtTokenResponse,\n} from '@atomic-solutions/schemas/wordpress';\n\n/**\n * Create Auth API\n */\nexport const createAuthAPI = (axios: AxiosInstance, options?: ResponseOptions) => ({\n /**\n * Login with username/password and get JWT token\n */\n async login(input: JwtLoginInput): Promise<JwtTokenResponse> {\n const response = await axios.post(ENDPOINTS.JWT_TOKEN, input);\n return handleApiResponse(response, JwtTokenResponseSchema, options);\n },\n\n /**\n * Validate current JWT token\n *\n * Requires Authorization header to be set\n */\n async validateToken(): Promise<boolean> {\n try {\n const response = await axios.post(ENDPOINTS.JWT_VALIDATE);\n return response.data?.code === 'jwt_auth_valid_token';\n } catch {\n return false;\n }\n },\n});\n","/**\n * Categories API functions\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport { ENDPOINTS } from '../constants/endpoints';\nimport {\n handleApiResponse,\n handlePaginatedApiResponse,\n type PaginatedResponse,\n type ResponseOptions,\n} from '../http';\nimport {\n CategoriesListSchema,\n CategorySchema,\n type Category,\n type CategoryParams,\n} from '@atomic-solutions/schemas/wordpress';\n\n/**\n * Create Categories API\n */\nexport const createCategoriesAPI = (axios: AxiosInstance, options?: ResponseOptions) => ({\n /**\n * Get list of categories with pagination\n */\n async list(params?: CategoryParams): Promise<PaginatedResponse<Category>> {\n const response = await axios.get(ENDPOINTS.CATEGORIES, { params });\n return handlePaginatedApiResponse(response, CategoriesListSchema, params, options);\n },\n\n /**\n * Get single category by ID\n */\n async get(id: number): Promise<Category> {\n const response = await axios.get(ENDPOINTS.CATEGORY(id));\n return handleApiResponse(response, CategorySchema, options);\n },\n});\n","/**\n * Media API functions\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport { ENDPOINTS } from '../constants/endpoints';\nimport { handleApiResponse, type ResponseOptions } from '../http';\nimport { MediaSchema, type Media } from '@atomic-solutions/schemas/wordpress';\n\n/**\n * Create Media API\n */\nexport const createMediaAPI = (axios: AxiosInstance, options?: ResponseOptions) => ({\n /**\n * Get single media item by ID\n */\n async get(id: number): Promise<Media> {\n const response = await axios.get(ENDPOINTS.MEDIA_ITEM(id));\n return handleApiResponse(response, MediaSchema, options);\n },\n});\n","/**\n * Posts API functions\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport { ENDPOINTS } from '../constants/endpoints';\nimport {\n handleApiResponse,\n handlePaginatedApiResponse,\n type PaginatedResponse,\n type ResponseOptions,\n} from '../http';\nimport {\n PostSchema,\n PostsListSchema,\n type Post,\n type PostParams,\n} from '@atomic-solutions/schemas/wordpress';\n\n/**\n * Create Posts API\n */\nexport const createPostsAPI = (axios: AxiosInstance, options?: ResponseOptions) => ({\n /**\n * Get list of posts with pagination\n */\n async list(params?: PostParams): Promise<PaginatedResponse<Post>> {\n const response = await axios.get(ENDPOINTS.POSTS, { params });\n return handlePaginatedApiResponse(response, PostsListSchema, params, options);\n },\n\n /**\n * Get single post by ID\n */\n async get(id: number): Promise<Post> {\n const response = await axios.get(ENDPOINTS.POST(id));\n return handleApiResponse(response, PostSchema, options);\n },\n\n /**\n * Get single post by slug\n */\n async getBySlug(slug: string): Promise<Post | null> {\n const response = await axios.get(ENDPOINTS.POSTS, {\n params: { slug, per_page: 1 },\n });\n const posts = handleApiResponse(response, PostsListSchema, options);\n return posts[0] || null;\n },\n});\n","/**\n * Users API functions\n */\n\nimport type { AxiosInstance } from 'axios';\n\nimport { ENDPOINTS } from '../constants/endpoints';\nimport { handleApiResponse, type ResponseOptions } from '../http';\nimport {\n CurrentUserSchema,\n UserSchema,\n type CurrentUser,\n type User,\n} from '@atomic-solutions/schemas/wordpress';\n\n/**\n * Create Users API\n */\nexport const createUsersAPI = (axios: AxiosInstance, options?: ResponseOptions) => ({\n /**\n * Get current authenticated user\n */\n async me(): Promise<CurrentUser> {\n const response = await axios.get(ENDPOINTS.USERS_ME);\n return handleApiResponse(response, CurrentUserSchema, options);\n },\n\n /**\n * Get user by ID\n */\n async get(id: number): Promise<User> {\n const response = await axios.get(ENDPOINTS.USER(id));\n return handleApiResponse(response, UserSchema, options);\n },\n});\n","/**\n * WordPress API client factory\n *\n * Creates a configured WordPress client with:\n * - JWT authentication for protected endpoints\n * - Response validation with Zod schemas\n * - Error handling with WordPress-specific error codes\n */\n\nimport axios from 'axios';\n\nimport { ResponseOptions } from '@/http';\n\nimport { createAuthAPI } from '../api/auth';\nimport { createCategoriesAPI } from '../api/categories';\nimport { createMediaAPI } from '../api/media';\nimport { createPostsAPI } from '../api/posts';\nimport { createUsersAPI } from '../api/users';\nimport {\n setupErrorInterceptor,\n setupRequestInterceptor,\n setupResponseInterceptor,\n} from '../http/interceptors';\nimport type { ErrorReporter, WordPressClient, WordPressConfig } from './types';\n\n/**\n * Default error reporter - logs to console\n */\nconst DEFAULT_ERROR_REPORTER: ErrorReporter = {\n report: (error: Error) => {\n console.error('[wordpress-utils]', error);\n },\n};\n\n/**\n * Create a configured WordPress API client\n *\n * @param config - Client configuration\n * @returns Configured WordPress client instance\n *\n * @example\n * ```tsx\n * import { createClient } from '@atomic-solutions/wordpress-utils';\n *\n * const jwtTokenAdapter = {\n * get: async () => AsyncStorage.getItem('wp_jwt_token'),\n * };\n *\n * const client = createClient({\n * baseURL: 'https://example.com/wp-json',\n * jwtToken: jwtTokenAdapter,\n * debug: process.env.DEBUG === 'true',\n * });\n *\n * // Use the client\n * const posts = await client.posts.list({ per_page: 20 });\n * const user = await client.users.me(); // Requires JWT token\n * ```\n */\nexport const createClient = (config: WordPressConfig): WordPressClient => {\n // Apply default error reporter if not provided\n const fullConfig: WordPressConfig = {\n ...config,\n errorReporter: config.errorReporter ?? DEFAULT_ERROR_REPORTER,\n };\n\n // Create axios instance\n const axiosInstance = axios.create({\n baseURL: fullConfig.baseURL,\n timeout: fullConfig.timeout || 30000,\n headers: {\n 'Content-Type': 'application/json',\n ...fullConfig.headers,\n },\n });\n\n // Response options for validation error handling\n const responseOptions: ResponseOptions = {\n errorReporter: fullConfig.errorReporter?.report,\n onValidationError: fullConfig.onValidationError,\n validationMode: fullConfig.validationMode,\n };\n\n // Create client object FIRST\n const client: WordPressClient = {\n config: fullConfig,\n axios: axiosInstance,\n posts: createPostsAPI(axiosInstance, responseOptions),\n categories: createCategoriesAPI(axiosInstance, responseOptions),\n media: createMediaAPI(axiosInstance, responseOptions),\n users: createUsersAPI(axiosInstance, responseOptions),\n auth: createAuthAPI(axiosInstance, responseOptions),\n };\n\n // Setup interceptors with client reference\n setupRequestInterceptor(axiosInstance, fullConfig, client);\n setupResponseInterceptor(axiosInstance, fullConfig, client);\n setupErrorInterceptor(axiosInstance, fullConfig, client);\n\n return client;\n};\n"]}
|