1.0.10 • Published 5 months ago
coachlms v1.0.10
Coach LMS API Client
A secure and robust Node.js client for interacting with the Coach LMS API.
Installation
npm install coach-lms-api-client
Usage
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
});
Features
- 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
Available Methods
Organization Structure
getOrganisationCategory()
Get all available organization categories.
const categories = await client.getOrganisationCategory();
getOrgSubcategory(categoryId)
Get subcategories for a specific category.
const subcategories = await client.getOrgSubcategory('categoryId');
getOrgProgram(subcategoryId)
Get programs for a specific subcategory.
const programs = await client.getOrgProgram('subcategoryId');
getOrgProgramCohort(programId)
Get cohorts for a specific program.
const cohorts = await client.getOrgProgramCohort('programId');
Program Structure
getProgramTerm(cohortId)
Get terms for a specific cohort.
const terms = await client.getProgramTerm('cohortId');
getProgramTermSection(termId)
Get sections for a specific term.
const sections = await client.getProgramTermSection('termId');
getCourses(sectionId)
Get courses for a specific section.
const courses = await client.getCourses('sectionId');
User Management
getUsersDetails(userId)
Get details for a specific user.
const userDetails = await client.getUsersDetails('userId');
getUserAssignment(userId)
Get assignments for a specific user.
const assignments = await client.getUserAssignment('userId');
getUserAnnouncements(userId)
Get announcements for a specific user.
const announcements = await client.getUserAnnouncements('userId');
getUserPortfolioDetails(userId)
Get portfolio details for a specific user.
const portfolioDetails = await client.getUserPortfolioDetails('userId');
getUserSessions(userId)
Get all sessions for a specific user.
const sessions = await client.getUserSessions('userId');
Error Handling
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
}
Security Features
- Automatic request ID generation for tracking
- Request timestamp headers
- Input sanitization
- Content-Type enforcement
- Client version tracking
- Configurable timeout
- Bearer token authentication
License
MIT
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Security Features
Built-in Security Measures
- 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
Configuration Options
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
});
Best Practices
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