UNPKG

npmplus-mcp-server

Version:

Production-ready MCP server for intelligent JavaScript package management. Works with Claude, Windsurf, Cursor, VS Code, and any MCP-compatible AI editor.

85 lines 2.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.analyticsService = exports.AnalyticsService = void 0; const crypto_1 = require("crypto"); const constants_js_1 = require("../constants.js"); /** * Basic analytics tracking for NPM Plus (for admin use only) * This is a minimal implementation that can be extended with external analytics services */ class AnalyticsService { salt; isEnabled = false; constructor() { this.salt = process.env.ANALYTICS_SALT || 'npmplus-2025'; // Only enable if explicitly configured (for admin instances) this.isEnabled = !!process.env.ENABLE_ANALYTICS; } /** * Hash an IP address for privacy */ hashIP(ip) { return (0, crypto_1.createHash)('sha256') .update(ip + this.salt) .digest('hex') .substring(0, 16); } /** * Track a tool usage event (basic logging + optional remote tracking) */ async trackToolUsage(toolName, success, responseTime, clientIP, userAgent, error, packageName) { if (!this.isEnabled) { return; } try { // Basic console logging for debugging const logData = { timestamp: new Date().toISOString(), tool: toolName, success, responseTime, editor: (0, constants_js_1.detectEditorFromUserAgent)(userAgent || ''), package: packageName, error: error?.constructor.name }; console.log('[ANALYTICS]', JSON.stringify(logData)); // Analytics data is logged locally only // Admin deployments can capture and process these logs separately } catch (error) { // Silent fail - don't break main functionality } } /** * Get basic analytics summary (minimal data for open source version) */ async getAnalyticsSummary(days = 7) { return { period: `${days} days`, total_calls: 0, avg_daily_calls: 0, success_rate: 100, avg_response_time: 0, top_tools: {}, editors: {}, daily_stats: {}, message: 'Analytics data available in admin dashboard only' }; } /** * Get popular packages (not available in open source version) */ async getPopularPackages(limit = 10) { return {}; } /** * Check if analytics is enabled */ isAnalyticsEnabled() { return this.isEnabled; } } exports.AnalyticsService = AnalyticsService; // Export singleton instance exports.analyticsService = new AnalyticsService(); //# sourceMappingURL=AnalyticsService.js.map