// import { FileLogDeduper } from './log-deduper'; // import { MMConnectorLogger, LogEntry } from './mm-connector-logger'; // import { HTTPError } from '../http-client'; // import { getErrorType } from '../error-utils'; // /** // * Example usage of the MM Connector Logger with deduplication // * // * This example demonstrates how to use the MMConnectorLogger class to send // * progress updates and error logs to the MM cloud. Deduplication is configured // * via environment variables and applied consistently to all log messages. // */ // async function exampleUsage() { // // Initialize logger with source identifier and deduplication settings // const logger = new MMConnectorLogger('proshop', new FileLogDeduper({ // windowSeconds: 300, // 5 minute deduplication window // ttlSeconds: 3600, // 1 hour TTL for store cleanup // sweepIntervalSeconds: 600 // 10 minute sweep interval // })); // try { // // Sends initial sync start message // await logger.sendLog(new LogEntry({ // level: 'info', // dedupeKey: 'SyncStart', // message: 'Starting sync process' // })); // // Simulates some work with progress updates // for (let i = 1; i <= 3; i++) { // await logger.sendLog(new LogEntry({ // level: 'info', // dedupeKey: 'SyncProgress', // message: `Processing batch ${i}/3` // })); // await new Promise(resolve => setTimeout(resolve, 100)); // Simulate work // } // // Sends completion message // await logger.sendLog(new LogEntry({ // level: 'info', // dedupeKey: 'SyncComplete', // message: 'Sync process completed successfully' // })); // // Demonstrates error logging with error type extraction // try { // throw new Error('Simulated database connection failure'); // } catch (error) { // const errorType = getErrorType(error); // await logger.sendLog(new LogEntry({ // level: 'error', // dedupeKey: `DatabaseError_${errorType}`, // message: `Database operation failed: ${error instanceof Error ? error.message : 'Unknown error'}` // })); // } // // Demonstrates getErrorType with different error types // const httpError = new HTTPError('Bad Request', 400, 'INVALID_REQUEST'); // const errorTypeFromCode = getErrorType(httpError); // Returns 'INVALID_REQUEST' // const typeError = new TypeError('Cannot read property of undefined'); // const errorTypeFromName = getErrorType(typeError); // Returns 'TypeError' // await logger.sendLog(new LogEntry({ // level: 'error', // dedupeKey: `HTTPError_${errorTypeFromCode}`, // message: `HTTP request failed with code: ${errorTypeFromCode}` // })); // await logger.sendLog(new LogEntry({ // level: 'error', // dedupeKey: `TypeError_${errorTypeFromName}`, // message: `Type error occurred: ${errorTypeFromName}` // })); // // Demonstrate deduplication - this message will be suppressed if sent within 5 minutes // await logger.sendLog(new LogEntry({ // level: 'warn', // dedupeKey: 'RateLimit', // message: 'API rate limit approaching' // })); // await logger.sendLog(new LogEntry({ // level: 'warn', // dedupeKey: 'RateLimit', // message: 'API rate limit approaching' // })); // This will be deduplicated // // Retry any failed transmissions // await logger.retryFailedTransmissions(); // } catch (error) { // console.error('Failed to send logs:', error); // } finally { // // Clean up resources // await logger.destroy(); // } // }