indiamart-lms-sdk
Version:
Simple and powerful SDK for IndiaMART Lead Management System (LMS) - Get leads with just your CRM key
173 lines (141 loc) โข 5.96 kB
JavaScript
/**
* Secure Usage Example - IndiaMART LMS SDK
*
* This example demonstrates the secure and optimized usage of the SDK
* with input validation, secure logging, caching, and error handling.
*/
import { IndiaMartSDK } from '../src/index.js';
import dotenv from 'dotenv';
// Load environment variables
dotenv.config();
async function demonstrateSecureUsage() {
console.log('๐ IndiaMART LMS SDK - Secure Usage Example\n');
try {
// Check if CRM key is available
if (!process.env.INDIAMART_CRM_KEY) {
console.log('โ ๏ธ No CRM key found. Using demo mode with mock data.\n');
// Demonstrate input validation without API calls
console.log('๐ก๏ธ Input Validation Demo:');
// Create a mock SDK instance for validation demo
const { InputValidator } = await import('../src/input-validator.js');
// Valid input
const validInput = InputValidator.validateString('test@example.com', {
pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
minLength: 5,
maxLength: 100
});
console.log('Valid email validation:', validInput.isValid ? 'โ
' : 'โ');
// Invalid input
const invalidInput = InputValidator.validateString('invalid-email', {
pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
minLength: 5,
maxLength: 100
});
console.log('Invalid email validation:', invalidInput.isValid ? 'โ
' : 'โ',
invalidInput.errors.join(', '));
// Demonstrate file path validation
const pathValidation = InputValidator.validateFilePath('../sensitive-file.txt');
console.log('Path traversal validation:', pathValidation.isValid ? 'โ
' : 'โ',
pathValidation.errors.join(', '));
console.log('\nโ
Security validation demonstration completed!');
console.log('๐ก To test full functionality, set INDIAMART_CRM_KEY environment variable');
return;
}
// Initialize SDK with secure configuration
const sdk = new IndiaMartSDK(process.env.INDIAMART_CRM_KEY, {
paths: {
downloadPath: './secure-downloads',
logPath: './secure-logs',
dataPath: './secure-data'
}
});
console.log('โ
SDK initialized with secure configuration');
// Demonstrate input validation
console.log('\n๐ก๏ธ Input Validation Demo:');
// Valid input
const validInput = sdk.validateInput('test@example.com', {
type: 'string',
pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
min: 5,
max: 100
});
console.log('Valid email validation:', validInput.isValid ? 'โ
' : 'โ');
// Invalid input
const invalidInput = sdk.validateInput('invalid-email', {
type: 'string',
pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
min: 5,
max: 100
});
console.log('Invalid email validation:', invalidInput.isValid ? 'โ
' : 'โ',
invalidInput.errors.join(', '));
// Demonstrate health check
console.log('\n๐ฅ Health Check:');
const health = await sdk.getHealthStatus();
console.log('SDK Health:', health.status);
console.log('Components:', Object.keys(health.components).join(', '));
// Demonstrate caching
console.log('\n๐พ Caching Demo:');
const cacheStats = sdk.getCacheStats();
console.log('Cache Stats:', {
size: cacheStats.size,
hitRate: `${cacheStats.hitRate}%`,
totalRequests: cacheStats.totalRequests
});
// Demonstrate secure logging
console.log('\n๐ Secure Logging Demo:');
const logs = await sdk.getSecureLogs(5);
console.log(`Retrieved ${logs.length} recent log entries`);
// Demonstrate error handling with invalid dates
console.log('\nโ ๏ธ Error Handling Demo:');
try {
// This should fail due to invalid date range
const result = await sdk.getLeadsForDateRange('invalid-date', 'also-invalid');
console.log('Invalid date result:', result.success ? 'โ
' : 'โ', result.error);
} catch (error) {
console.log('Caught error:', error.message);
}
// Demonstrate proper date usage
console.log('\n๐
Proper Date Usage:');
const today = new Date();
const yesterday = new Date(today);
yesterday.setDate(yesterday.getDate() - 1);
try {
const result = await sdk.getLeadsForYesterday();
console.log('Yesterday leads result:', result.success ? 'โ
' : 'โ');
if (result.success) {
console.log(`Found ${result.leads.length} leads`);
if (result.downloadPath) {
console.log(`Downloaded to: ${result.downloadPath}`);
}
} else {
console.log('Error:', result.error);
}
} catch (error) {
console.log('Error fetching yesterday leads:', error.message);
}
// Demonstrate cache management
console.log('\n๐๏ธ Cache Management:');
// Clear specific cache pattern
const clearResult = await sdk.clearCache('leads:.*');
console.log('Cache clear result:', clearResult.success ? 'โ
' : 'โ', clearResult.message);
// Demonstrate log management
console.log('\n๐งน Log Management:');
const logClearResult = await sdk.clearOldSecureLogs(7); // Keep only 7 days
console.log('Log clear result:', logClearResult.success ? 'โ
' : 'โ', logClearResult.message);
// Demonstrate resource cleanup
console.log('\n๐งฝ Resource Cleanup:');
const destroyResult = await sdk.destroy();
console.log('SDK destroyed:', destroyResult.success ? 'โ
' : 'โ', destroyResult.message);
console.log('\nโ
Secure usage demonstration completed!');
} catch (error) {
console.error('โ Error in secure usage demo:', error.message);
console.error('Stack trace:', error.stack);
}
}
// Run the demonstration
if (import.meta.url === `file://${process.argv[1]}`) {
demonstrateSecureUsage().catch(console.error);
}
export { demonstrateSecureUsage };