export const API_ERROR_CODES = { AUTH_REQUIRED: 'AUTH_REQUIRED', AUTH_SESSION_EXPIRED: 'AUTH_SESSION_EXPIRED', FORBIDDEN: 'FORBIDDEN', VALIDATION_ERROR: 'VALIDATION_ERROR', INVALID_CREDENTIALS: 'INVALID_CREDENTIALS', ACCOUNT_LOCKED: 'ACCOUNT_LOCKED', ACCOUNT_DISABLED: 'ACCOUNT_DISABLED', WECHAT_LOGIN_FAILED: 'WECHAT_LOGIN_FAILED', RESOURCE_NOT_FOUND: 'RESOURCE_NOT_FOUND', APPLICATION_NOT_FOUND: 'APPLICATION_NOT_FOUND', BENEFICIARY_NOT_FOUND: 'BENEFICIARY_NOT_FOUND', CASE_NOT_FOUND: 'CASE_NOT_FOUND', SERVICE_RECORD_NOT_FOUND: 'SERVICE_RECORD_NOT_FOUND', FILE_NOT_FOUND: 'FILE_NOT_FOUND', FOLLOW_UP_NOT_FOUND: 'FOLLOW_UP_NOT_FOUND', VOLUNTEER_NOT_FOUND: 'VOLUNTEER_NOT_FOUND', VOLUNTEER_NOT_APPROVED: 'VOLUNTEER_NOT_APPROVED', PROJECT_NOT_FOUND: 'PROJECT_NOT_FOUND', ACTIVITY_NOT_FOUND: 'ACTIVITY_NOT_FOUND', REGISTRATION_NOT_FOUND: 'REGISTRATION_NOT_FOUND', ACTIVITY_FULL: 'ACTIVITY_FULL', REGISTRATION_CLOSED: 'REGISTRATION_CLOSED', RESOURCE_CONFLICT: 'RESOURCE_CONFLICT', UPLOAD_NOT_READY: 'UPLOAD_NOT_READY', STORAGE_UNAVAILABLE: 'STORAGE_UNAVAILABLE', DUPLICATE_REQUEST: 'DUPLICATE_REQUEST', INVALID_STATE_TRANSITION: 'INVALID_STATE_TRANSITION', RATE_LIMITED: 'RATE_LIMITED', INTERNAL_ERROR: 'INTERNAL_ERROR', } as const; export type ApiErrorCode = (typeof API_ERROR_CODES)[keyof typeof API_ERROR_CODES]; export interface ApiSuccessResponse { success: true; data: T; requestId: string; } export interface ApiErrorResponse { success: false; error: { code: ApiErrorCode; message: string; details?: Record; }; requestId: string; }