|
3 months ago | |
---|---|---|
.. | ||
__tests__ | 3 months ago | |
config | 3 months ago | |
src | 3 months ago | |
README.md | 3 months ago | |
eslint.config.js | 3 months ago | |
package.json | 3 months ago | |
tsconfig.build.json | 3 months ago | |
tsconfig.json | 3 months ago | |
tsconfig.misc.json | 3 months ago | |
vitest.config.mts | 3 months ago |
README.md
@coze-arch/bot-http
Global HTTP client and error handling utilities for Bot Studio web applications
Project Overview
This package provides a centralized HTTP client solution for the entire Bot Studio web application ecosystem. It offers a pre-configured axios instance with global interceptors, comprehensive error handling, event-driven API error management, and standardized response processing. This package ensures consistent HTTP behavior across all Bot Studio services while providing robust error reporting and handling capabilities.
Features
- Pre-configured Axios Instance: Ready-to-use HTTP client with Bot Studio optimizations
- Global Interceptors: Request/response interceptors for authentication, logging, and error handling
- Event-driven Error Management: Centralized API error event system with custom handlers
- Structured Error Types: Type-safe API error definitions with detailed error information
- Authentication Integration: Built-in support for unauthorized request handling and redirects
- Error Reporting: Automatic error reporting with categorized event tracking
- Response Processing: Standardized response data extraction and error transformation
Get Started
Installation
Add this package to your package.json
dependencies and set it to workspace:*
version:
{
"dependencies": {
"@coze-arch/bot-http": "workspace:*"
}
}
Then run:
rush update
Basic Usage
Using the Axios Instance
import { axiosInstance } from '@coze-arch/bot-http';
// Make HTTP requests
const response = await axiosInstance.get('/api/users');
const userData = await axiosInstance.post('/api/users', { name: 'John' });
// The instance is pre-configured with interceptors and error handling
Error Handling
import {
APIErrorEvent,
handleAPIErrorEvent,
isApiError,
ApiError
} from '@coze-arch/bot-http';
// Register global error handler
handleAPIErrorEvent((error: APIErrorEvent) => {
console.error('API Error occurred:', error);
// Handle error globally (show toast, redirect, etc.)
});
// Check if error is an API error
try {
await axiosInstance.get('/api/data');
} catch (error) {
if (isApiError(error)) {
console.log('API Error Code:', error.code);
console.log('API Error Message:', error.msg);
}
}
Global Interceptors
import {
addGlobalRequestInterceptor,
addGlobalResponseInterceptor,
removeGlobalRequestInterceptor
} from '@coze-arch/bot-http';
// Add request interceptor for authentication
const requestInterceptor = addGlobalRequestInterceptor((config) => {
config.headers.Authorization = `Bearer ${getToken()}`;
return config;
});
// Add response interceptor for data processing
addGlobalResponseInterceptor((response) => {
// Process response data
return response;
});
// Remove interceptor when no longer needed
removeGlobalRequestInterceptor(requestInterceptor);
Error Event Management
import {
emitAPIErrorEvent,
startAPIErrorEvent,
stopAPIErrorEvent,
clearAPIErrorEvent
} from '@coze-arch/bot-http';
// Manually emit API error event
emitAPIErrorEvent({
code: '500',
msg: 'Internal server error',
type: 'custom'
});
// Control error event handling
stopAPIErrorEvent(); // Temporarily disable error events
startAPIErrorEvent(); // Re-enable error events
clearAPIErrorEvent(); // Clear all error handlers
API Reference
Core Components
axiosInstance
Pre-configured axios instance with global interceptors and error handling.
import { axiosInstance } from '@coze-arch/bot-http';
// Use like regular axios instance
ApiError
Extended error class for API-specific errors.
class ApiError extends AxiosError {
code: string; // Error code
msg: string; // Error message
hasShowedError: boolean; // Whether error has been displayed
type: string; // Error type
raw?: any; // Raw error data
}
Error Management
Error Event Functions
// Register error handler
handleAPIErrorEvent(handler: (error: APIErrorEvent) => void): void
// Remove error handler
removeAPIErrorEvent(handler: (error: APIErrorEvent) => void): void
// Control error events
startAPIErrorEvent(): void
stopAPIErrorEvent(): void
clearAPIErrorEvent(): void
// Emit custom error
emitAPIErrorEvent(error: APIErrorEvent): void
Error Checking
// Check if error is API error
isApiError(error: any): error is ApiError
Interceptor Management
Request Interceptors
// Add request interceptor
addGlobalRequestInterceptor(
interceptor: (config: AxiosRequestConfig) => AxiosRequestConfig
): number
// Remove request interceptor
removeGlobalRequestInterceptor(interceptorId: number): void
Response Interceptors
// Add response interceptor
addGlobalResponseInterceptor(
interceptor: (response: AxiosResponse) => AxiosResponse
): void
Error Codes
Built-in error code constants:
enum ErrorCodes {
NOT_LOGIN = 700012006,
COUNTRY_RESTRICTED = 700012015,
COZE_TOKEN_INSUFFICIENT = 702082020,
COZE_TOKEN_INSUFFICIENT_WORKFLOW = 702095072,
}
Advanced Usage
Custom Error Handling
import { axiosInstance, ApiError } from '@coze-arch/bot-http';
axiosInstance.interceptors.response.use(
response => response,
error => {
if (error instanceof ApiError) {
// Handle specific API errors
switch (error.code) {
case '401':
// Redirect to login
break;
case '403':
// Show permission error
break;
default:
// Generic error handling
}
}
return Promise.reject(error);
}
);
Integration with Web Context
The package automatically integrates with @coze-arch/web-context
for handling redirects and navigation in unauthorized scenarios.
Development
Available Scripts
npm run build
- Build the package (no-op, source-only package)npm run lint
- Run ESLintnpm run test
- Run tests with Vitestnpm run test:cov
- Run tests with coverage
Project Structure
src/
├── axios.ts # Axios instance configuration and interceptors
├── api-error.ts # API error classes and utilities
├── eventbus.ts # Error event management system
└── index.ts # Main exports
Dependencies
This package depends on:
@coze-arch/logger
- Logging utilities for error reportingaxios
- HTTP client library
License
Apache-2.0