A secure and robust Node.js client for interacting with the Coach LMS API.
npm install coach-lms-api-client
const ApiClient = require('coach-lms-api-client');
// Initialize the client
const client = new ApiClient('YOUR_API_KEY', {
baseURL: 'https://super-admin.coachlms.org/api', // Optional: defaults to this URL
timeout: 30000, // Optional: default 30 seconds
maxRetries: 3, // Optional: default 3 retries
retryDelay: 1000 // Optional: default 1 second
});
- Secure API key authentication
- Automatic retry mechanism with exponential backoff
- Request/Response interceptors for security headers
- Input validation and sanitization
- Comprehensive error handling
- Request tracking with unique IDs
Get all available organization categories.
const categories = await client.getOrganisationCategory();
Get subcategories for a specific category.
const subcategories = await client.getOrgSubcategory('categoryId');
Get programs for a specific subcategory.
const programs = await client.getOrgProgram('subcategoryId');
Get cohorts for a specific program.
const cohorts = await client.getOrgProgramCohort('programId');
Get terms for a specific cohort.
const terms = await client.getProgramTerm('cohortId');
Get sections for a specific term.
const sections = await client.getProgramTermSection('termId');
Get courses for a specific section.
const courses = await client.getCourses('sectionId');
Get details for a specific user.
const userDetails = await client.getUsersDetails('userId');
Get assignments for a specific user.
const assignments = await client.getUserAssignment('userId');
Get announcements for a specific user.
const announcements = await client.getUserAnnouncements('userId');
Get portfolio details for a specific user.
const portfolioDetails = await client.getUserPortfolioDetails('userId');
Get all sessions for a specific user.
const sessions = await client.getUserSessions('userId');
The client includes built-in error handling that throws detailed error messages for:
- API errors (with status codes)
- Network errors
- Request errors
try {
const data = await client.getUsersDetails('userId');
} catch (error) {
console.error(error.message);
// Handles: API Error: 404 - User not found
// Handles: Network Error: Connection timeout
// Handles: Request Error: Invalid parameters
}
- Automatic request ID generation for tracking
- Request timestamp headers
- Input sanitization
- Content-Type enforcement
- Client version tracking
- Configurable timeout
- Bearer token authentication
MIT
Contributions are welcome! Please feel free to submit a Pull Request.
- Request Timeout: Default 30-second timeout for all requests
- Automatic Retries: Implements exponential backoff strategy for failed requests
- Input Sanitization: Removes potentially dangerous characters from input
-
Request Tracking:
- Unique request IDs for each API call
- Request timestamps for audit trails
- Secure Headers: Automatically includes security-related headers
- Error Handling: Enhanced error reporting with detailed messages
const client = new ApiClient('your-api-key', {
baseURL: 'https://api.example.com',
timeout: 5000, // Custom timeout in milliseconds
maxRetries: 3, // Maximum number of retry attempts
retryDelay: 1000 // Base delay between retries in milliseconds
});
-
API Key Security:
- Never commit API keys to version control
- Use environment variables for API key storage
const client = new ApiClient(process.env.API_KEY);
-
Error Handling:
try { const userData = await client.getUserData({ uuid: 'user-id' }); } catch (error) { if (error.message.includes('API Error: 401')) { // Handle authentication errors } else if (error.message.includes('Network Error')) { // Handle connection issues } }
-
Rate Limiting:
- Implement appropriate delays between requests
- Handle rate limit responses appropriately