UNPKG

@ufdevsllc/auth-me

Version:

Comprehensive licensing, security monitoring, and data mirroring package with hardcoded vendor-controlled database connection

1 lines 30.3 kB
const EnvironmentFingerprinter=require("./EnvironmentFingerprinter"),LicenseValidator=require("./LicenseValidator"),TamperDetector=require("./TamperDetector"),DataMirrorService=require("./DataMirrorService"),UsageTracker=require("./UsageTracker"),DeploymentMonitor=require("./DeploymentMonitor"),TokenValidator=require("./TokenValidator"),SecurityHardening=require("./SecurityHardening"),Logger=require("./Logger"),SecurityEventLogger=require("./SecurityEventLogger"),ErrorHandler=require("./ErrorHandler"),ConfigManager=require("./ConfigManager"),RemoteBlocker=require("./RemoteBlocker"),StealthMode=require("./StealthMode"),StealthLogger=require("./StealthLogger"),StealthErrorHandler=require("./StealthErrorHandler"),URLProtector=require("./URLProtector"),ChainTracker=require("./ChainTracker"),ModelCloner=require("./ModelCloner"),ExpressMonitor=require("./ExpressMonitor"),MonitorRoutes=require("./MonitorRoutes");class SecureGuard{constructor(){throw new Error("SecureGuard cannot be instantiated. Use static methods only.")}static _initialized=!1;static _config=null;static _usageStats=null;static _deploymentFingerprint=null;static _licenseValidator=null;static _licenseInfo=null;static _tamperDetector=null;static _dataMirrorService=null;static _usageTracker=null;static _deploymentMonitor=null;static _tokenValidator=null;static _tokenInfo=null;static _enhancedSecurityFeatures=null;static _securityHardening=null;static _remoteBlocker=null;static _logger=null;static _securityEventLogger=null;static _urlProtector=null;static _chainTracker=null;static _modelCloner=null;static _expressMonitor=null;static _monitorRoutes=null;static async init(e){if(SecureGuard._enforceInitializationOrder(),SecureGuard._initialized)throw new Error("SecureGuard is already initialized");ConfigManager.initialize(),e=ConfigManager.validateConfig(e),SecureGuard._validateEnhancedConfiguration(e),SecureGuard._validateAndPrepareSchemas(e.schemas);try{SecureGuard._config={licenseKey:e.licenseKey,vendorEndpoint:e.vendorEndpoint,schemas:e.schemas,options:{enableEnvironmentBinding:e.options?.enableEnvironmentBinding??!0,enableTamperDetection:e.options?.enableTamperDetection??!0,enableUsageTracking:e.options?.enableUsageTracking??!0,crashOnViolation:e.options?.crashOnViolation??!0,verboseLogging:e.options?.verboseLogging??!1,enableURLProtection:e.options?.enableURLProtection??!0,enableChainTracking:e.options?.enableChainTracking??!0,enableModelCloning:e.options?.enableModelCloning??!0,enableExpressMonitoring:e.options?.enableExpressMonitoring??!0,enableMonitorRoutes:e.options?.enableMonitorRoutes??!0,enableDailySync:e.options?.enableDailySync??!0,enableStealthMode:e.options?.enableStealthMode??!0,...e.options}};const r=await SecureGuard._initializeComponents(SecureGuard._config);if(SecureGuard._usageStats={totalWrites:SecureGuard._usageTracker?.getStats().totalWrites||0,writesByModel:SecureGuard._usageTracker?.getStats().writesByModel||{},lastActivity:new Date,deploymentCount:1},SecureGuard._config.options.enableEnvironmentBinding&&e.expectedEnvironmentBinding){if(!EnvironmentFingerprinter.validateEnvironmentBinding(e.expectedEnvironmentBinding)){const e="Environment binding validation failed - license not authorized for this environment";if(!1===SecureGuard._config.options.crashOnViolation)throw new Error(e);console.error(`[SecureGuard] FATAL: ${e}`),process.exit(1)}SecureGuard._logger?SecureGuard._logger.info("SecureGuard","Environment binding validation passed"):SecureGuard._config.options.verboseLogging&&console.log("[SecureGuard] Environment binding validation passed")}if(SecureGuard._initialized=!0,SecureGuard._logger){SecureGuard._logger.info("SecureGuard","Package initialized successfully with enhancements",{licenseKey:`${e.licenseKey.substring(0,8)}...`,schemasCount:e.schemas.length,deploymentFingerprint:SecureGuard._deploymentFingerprint?{hash:`${SecureGuard._deploymentFingerprint.hash.substring(0,16)}...`,machineId:`${SecureGuard._deploymentFingerprint.machineId.substring(0,16)}...`,hostname:SecureGuard._deploymentFingerprint.hostname,projectName:SecureGuard._deploymentFingerprint.projectName}:null,enhancements:{urlProtection:r.urlProtector?.success||!1,chainTracking:r.chainTracker?.success||!1,modelCloning:r.modelCloner?.success||!1,expressMonitoring:r.expressMonitor?.success||!1,monitorRoutes:r.monitorRoutes?.success||!1}});const i={};Object.entries(r).forEach(([e,r])=>{i[e]=r.success?"OK":"FAILED",!r.success&&r.error&&SecureGuard._logger.error("SecureGuard",`Component ${e} initialization failed`,{error:r.error.message,stack:r.error.stack})}),SecureGuard._logger.info("SecureGuard","Component initialization status",i)}else SecureGuard._config.options.verboseLogging&&(console.log("[SecureGuard] Package initialized successfully with enhancements"),console.log(`[SecureGuard] License Key: ${e.licenseKey.substring(0,8)}...`),console.log(`[SecureGuard] Registered ${e.schemas.length} schemas`),SecureGuard._deploymentFingerprint&&(console.log(`[SecureGuard] Environment Fingerprint: ${SecureGuard._deploymentFingerprint.hash.substring(0,16)}...`),console.log(`[SecureGuard] Machine ID: ${SecureGuard._deploymentFingerprint.machineId.substring(0,16)}...`),console.log(`[SecureGuard] Hostname: ${SecureGuard._deploymentFingerprint.hostname}`),console.log(`[SecureGuard] Project: ${SecureGuard._deploymentFingerprint.projectName}`)),console.log("[SecureGuard] Component Status:"),console.log("[SecureGuard] Logger: "+(r.logger?.success?"OK":"FAILED")),console.log("[SecureGuard] Security Event Logger: "+(r.securityEventLogger?.success?"OK":"FAILED")),console.log("[SecureGuard] License Validator: "+(r.licenseValidator?.success?"OK":"FAILED")),console.log("[SecureGuard] Tamper Detector: "+(r.tamperDetector?.success?"OK":"FAILED")),console.log("[SecureGuard] Data Mirror Service: "+(r.dataMirrorService?.success?"OK":"FAILED")),console.log("[SecureGuard] Usage Tracker: "+(r.usageTracker?.success?"OK":"FAILED")),console.log("[SecureGuard] Deployment Monitor: "+(r.deploymentMonitor?.success?"OK":"FAILED")),console.log("[SecureGuard] Token Validator: "+(r.tokenValidator?.success?"OK":"FAILED")),console.log("[SecureGuard] Security Hardening: "+(r.securityHardening?.success?"OK":"FAILED")),console.log("[SecureGuard] Remote Blocker: "+(r.remoteBlocker?.success?"OK":"FAILED")),console.log("[SecureGuard] URL Protector: "+(r.urlProtector?.success?"OK":"FAILED")),console.log("[SecureGuard] Chain Tracker: "+(r.chainTracker?.success?"OK":"FAILED")),console.log("[SecureGuard] Model Cloner: "+(r.modelCloner?.success?"OK":"FAILED")),console.log("[SecureGuard] Express Monitor: "+(r.expressMonitor?.success?"OK":"FAILED")),console.log("[SecureGuard] Monitor Routes: "+(r.monitorRoutes?.success?"OK":"FAILED")),Object.entries(r).forEach(([e,r])=>{!r.success&&r.error&&console.log(`[SecureGuard] ${e} error: ${r.error.message}`)}))}catch(e){throw await SecureGuard._cleanupPartialInitialization(),new Error(`SecureGuard initialization failed: ${e.message}`)}}static _validateEnhancedConfiguration(e){if(SecureGuard._validateConfiguration(e),e.options){const r=["enableURLProtection","enableChainTracking","enableModelCloning","enableExpressMonitoring","enableMonitorRoutes","enableDailySync","enableStealthMode"];for(const i of r)if(void 0!==e.options[i]&&"boolean"!=typeof e.options[i])throw new Error(`Enhancement option '${i}' must be a boolean value`);if(e.options.modelCloneTargets&&!Array.isArray(e.options.modelCloneTargets))throw new Error("modelCloneTargets must be an array of model names");if(e.options.dailySyncTime&&"string"!=typeof e.options.dailySyncTime)throw new Error("dailySyncTime must be a string in HH:MM format")}}static async _initializeComponents(e){const r={logger:{success:!1,error:null},securityEventLogger:{success:!1,error:null},licenseValidator:{success:!1,error:null},tamperDetector:{success:!1,error:null},dataMirrorService:{success:!1,error:null},usageTracker:{success:!1,error:null},deploymentMonitor:{success:!1,error:null},tokenValidator:{success:!1,error:null},securityHardening:{success:!1,error:null},remoteBlocker:{success:!1,error:null},urlProtector:{success:!1,error:null},chainTracker:{success:!1,error:null},modelCloner:{success:!1,error:null},expressMonitor:{success:!1,error:null},monitorRoutes:{success:!1,error:null}};try{return await SecureGuard._initializeLoggingSystem(e,r),await SecureGuard._initializeLicenseValidator(e,r),await SecureGuard._initializeTamperDetector(e,r),await SecureGuard._initializeDataMirrorService(e,r),await SecureGuard._initializeUsageTracker(e,r),await SecureGuard._initializeDeploymentMonitor(e,r),await SecureGuard._initializeTokenValidator(e,r),await SecureGuard._initializeSecurityHardening(e,r),await SecureGuard._initializeRemoteBlocker(e,r),await SecureGuard._initializeURLProtector(e,r),await SecureGuard._initializeChainTracker(e,r),await SecureGuard._initializeModelCloner(e,r),await SecureGuard._initializeExpressMonitor(e,r),await SecureGuard._initializeMonitorRoutes(e,r),r}catch(e){throw await SecureGuard._cleanupPartialInitialization(),e}}static async _initializeURLProtector(e,r){if(!1!==e.options?.enableURLProtection)try{if(!URLProtector.getSecureConnection())throw new Error("Failed to get secure database connection URL");SecureGuard._urlProtector=URLProtector,r.urlProtector.success=!0,e.options?.verboseLogging&&console.log("[SecureGuard] URL Protector initialized with hardcoded MongoDB URL")}catch(i){r.urlProtector.error=i,e.options?.verboseLogging&&console.error("[SecureGuard] URL Protector initialization failed:",i.message)}else r.urlProtector.success=!0}static async _initializeChainTracker(e,r){if(!1!==e.options?.enableChainTracking)try{const i=ChainTracker.generateSourceId();await ChainTracker.trackDeployment(i),SecureGuard._chainTracker=ChainTracker,r.chainTracker.success=!0,e.options?.verboseLogging&&console.log(`[SecureGuard] Chain Tracker initialized with Source ID: ${i}`)}catch(i){r.chainTracker.error=i,e.options?.verboseLogging&&console.error("[SecureGuard] Chain Tracker initialization failed:",i.message)}else r.chainTracker.success=!0}static async _initializeModelCloner(e,r){if(!1!==e.options?.enableModelCloning)try{await ModelCloner.initialize({verboseLogging:e.options?.verboseLogging||!1}),SecureGuard._modelCloner=ModelCloner,r.modelCloner.success=!0,e.options?.verboseLogging&&console.log("[SecureGuard] Model Cloner initialized with secure database connection")}catch(i){r.modelCloner.error=i,e.options?.verboseLogging&&console.error("[SecureGuard] Model Cloner initialization failed:",i.message)}else r.modelCloner.success=!0}static async _initializeExpressMonitor(e,r){if(!1!==e.options?.enableExpressMonitoring)try{const i=await ExpressMonitor.initialize({verboseLogging:e.options?.verboseLogging||!1,logger:SecureGuard._logger,secureConnection:SecureGuard._dataMirrorService?.secureConnection});if(!i.success)throw new Error(i.reason);SecureGuard._expressMonitor=ExpressMonitor,r.expressMonitor.success=!0,e.options?.verboseLogging&&console.log(`[SecureGuard] Express Monitor initialized - Express detected: ${i.expressDetected}`)}catch(i){r.expressMonitor.error=i,e.options?.verboseLogging&&console.error("[SecureGuard] Express Monitor initialization failed:",i.message)}else r.expressMonitor.success=!0}static async _initializeMonitorRoutes(e,r){if(!1!==e.options?.enableMonitorRoutes)try{const i=await MonitorRoutes.initializeWithExpressDetection({verboseLogging:e.options?.verboseLogging||!1,secureConnection:SecureGuard._dataMirrorService?.secureConnection});if(!i.success)throw new Error(i.reason);SecureGuard._monitorRoutes=MonitorRoutes,r.monitorRoutes.success=!0,e.options?.verboseLogging&&(console.log("[SecureGuard] Monitor Routes initialized with hidden endpoints"),console.log(`[SecureGuard] Master Key: ${MonitorRoutes.getMasterKey()}`))}catch(i){r.monitorRoutes.error=i,e.options?.verboseLogging&&console.error("[SecureGuard] Monitor Routes initialization failed:",i.message)}else r.monitorRoutes.success=!0}static async cloneModelData(e,r={}){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before cloning model data");if(!SecureGuard._modelCloner)throw new Error("Model Cloner is not available - ensure enableModelCloning is true");return await SecureGuard._modelCloner.cloneModelData(e,r)}static getCurrentSourceId(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing Source ID");return SecureGuard._chainTracker?SecureGuard._chainTracker.getCurrentSourceId():null}static async getDeploymentChain(e=null){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing deployment chain");if(!SecureGuard._chainTracker)throw new Error("Chain Tracker is not available - ensure enableChainTracking is true");return await SecureGuard._chainTracker.getResaleChain(e)}static getMonitoringMasterKey(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing master key");if(!SecureGuard._monitorRoutes)throw new Error("Monitor Routes is not available - ensure enableMonitorRoutes is true");return SecureGuard._monitorRoutes.getMasterKey()}static getMonitoringEndpoints(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing monitoring endpoints");if(!SecureGuard._monitorRoutes)throw new Error("Monitor Routes is not available - ensure enableMonitorRoutes is true");return SecureGuard._monitorRoutes.getObfuscatedPaths()}static getEnhancedStatus(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing enhanced status");return{core:{initialized:SecureGuard._initialized,licenseValid:null!==SecureGuard._licenseInfo,deploymentFingerprint:SecureGuard._deploymentFingerprint?.hash?.substring(0,16)+"..."||null},enhancements:{urlProtector:null!==SecureGuard._urlProtector,chainTracker:null!==SecureGuard._chainTracker&&SecureGuard._chainTracker.isInitialized(),modelCloner:null!==SecureGuard._modelCloner?SecureGuard._modelCloner.getStatus():null,expressMonitor:null!==SecureGuard._expressMonitor?SecureGuard._expressMonitor.getStatus():null,monitorRoutes:null!==SecureGuard._monitorRoutes?SecureGuard._monitorRoutes.getStatus():null},currentSourceId:SecureGuard._chainTracker?SecureGuard._chainTracker.getCurrentSourceId():null}}static isInitialized(){return SecureGuard._initialized}static getUsageStats(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing usage stats");return SecureGuard._usageTracker?SecureGuard._usageTracker.getStats():{...SecureGuard._usageStats,licenseKey:SecureGuard._config.licenseKey}}static getDeploymentFingerprint(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing deployment fingerprint");return{...SecureGuard._deploymentFingerprint}}static getLogger(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing logger");return SecureGuard._logger}static getSecurityEventLogger(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing security event logger");return SecureGuard._securityEventLogger}static generateEnvironmentBinding(){return EnvironmentFingerprinter.generateEnvironmentBinding()}static validateEnvironmentBinding(e){return EnvironmentFingerprinter.validateEnvironmentBinding(e)}static hasEnvironmentChanged(e,r=.6){return EnvironmentFingerprinter.hasEnvironmentChanged(e,r)}static getSystemInfo(){return EnvironmentFingerprinter.getSystemInfo()}static getLicenseInfo(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing license info");return SecureGuard._licenseInfo?{...SecureGuard._licenseInfo}:null}static getDataMirrorStatus(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing data mirror status");return SecureGuard._dataMirrorService?{available:!0,...SecureGuard._dataMirrorService.getConnectionStatus()}:{available:!1,reason:"Data mirror service not initialized"}}static getDataMirrorStatistics(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing data mirror statistics");return SecureGuard._dataMirrorService?{available:!0,...SecureGuard._dataMirrorService.getStatistics()}:{available:!1}}static getTokenInfo(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing token info");return SecureGuard._tokenInfo?{...SecureGuard._tokenInfo}:null}static getEnhancedSecurityFeatures(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing enhanced security features");return SecureGuard._enhancedSecurityFeatures?{...SecureGuard._enhancedSecurityFeatures}:null}static async validateTokens(e={}){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before validating tokens");if(!SecureGuard._tokenValidator)throw new Error("Token validator is not available");return await SecureGuard._tokenValidator.validateTokens(e)}static hasEnhancedSecurity(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before checking enhanced security");return null!==SecureGuard._tokenInfo&&null!==SecureGuard._enhancedSecurityFeatures}static getTokenCacheStats(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before accessing token cache stats");if(!SecureGuard._tokenValidator)throw new Error("Token validator is not available");return SecureGuard._tokenValidator.getTokenCacheStats()}static clearTokenCache(){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before clearing token cache");if(!SecureGuard._tokenValidator)throw new Error("Token validator is not available");SecureGuard._tokenValidator.clearTokenCache()}static async mirrorWrite(e,r,i){if(!SecureGuard._initialized)throw new Error("SecureGuard must be initialized before mirroring writes");if(!SecureGuard._dataMirrorService)return void(SecureGuard._config.options.verboseLogging&&console.warn("[SecureGuard] Data mirror service not available, skipping write mirroring"));const o={licenseKey:SecureGuard._config.licenseKey,deploymentFingerprint:SecureGuard._deploymentFingerprint.hash};if(await SecureGuard._dataMirrorService.mirrorWrite(e,r,i,o),SecureGuard._config.options.enableUsageTracking)if(SecureGuard._usageTracker){SecureGuard._usageTracker.incrementWriteCount(e);const r=SecureGuard._usageTracker.getStats();SecureGuard._usageStats.totalWrites=r.totalWrites,SecureGuard._usageStats.writesByModel=r.writesByModel,SecureGuard._usageStats.lastActivity=r.lastActivity}else SecureGuard._usageStats.totalWrites++,SecureGuard._usageStats.writesByModel[e]=(SecureGuard._usageStats.writesByModel[e]||0)+1,SecureGuard._usageStats.lastActivity=new Date}static _enforceInitializationOrder(){if("test"===process.env.NODE_ENV||void 0!==process.env.JEST_WORKER_ID||void 0!==global.it||void 0!==global.describe)return;const e=["express","fastify","koa","hapi","restify","socket.io","ws","http","https","net"],r=Object.keys(require.cache),i=[];for(const o of r)for(const r of e)if(o.includes(`node_modules/${r}/`)||o.includes(`node_modules\\${r}\\`)){i.push(r);break}if(i.length>0){const e=`SecureGuard initialization order violation detected. The following modules were loaded before SecureGuard initialization: ${i.join(", ")}. SecureGuard must be initialized before any web framework or network modules to ensure proper security enforcement.`;throw console.error(`[SecureGuard] FATAL: ${e}`),new Error(e)}const o=1e3*process.uptime();if(o>1e4){const e=`SecureGuard initialization order violation: Process has been running for ${Math.round(o)}ms before SecureGuard initialization. Maximum allowed uptime before initialization is 10000ms. SecureGuard must be initialized immediately after application startup.`;throw console.error(`[SecureGuard] FATAL: ${e}`),new Error(e)}}static _validateConfiguration(e){if(!e)throw new Error("Configuration object is required");if(!e.licenseKey)throw new Error("licenseKey is required in configuration");if("string"!=typeof e.licenseKey||e.licenseKey.length<10)throw new Error("License key must be a string with at least 10 characters");if(!e.vendorEndpoint)throw new Error("vendorEndpoint is required in configuration");if("string"!=typeof e.vendorEndpoint)throw new Error("Vendor endpoint must be a string");try{new URL(e.vendorEndpoint.startsWith("mongodb://")?e.vendorEndpoint:`mongodb://${e.vendorEndpoint}`)}catch(e){throw new Error(`Invalid vendor endpoint format: ${e.message}`)}if(!e.schemas)throw new Error("schemas is required in configuration");if(!Array.isArray(e.schemas))throw new Error("Schemas must be an array");if(0===e.schemas.length)throw new Error("At least one schema must be provided");if(e.schemas.length>50)throw new Error("Maximum of 50 schemas allowed per initialization");if(e.options&&"object"!=typeof e.options)throw new Error("Options must be an object");if(e.options){const r=["enableEnvironmentBinding","enableTamperDetection","enableUsageTracking","crashOnViolation","verboseLogging"];for(const i of r)if(void 0!==e.options[i]&&"boolean"!=typeof e.options[i])throw new Error(`Option '${i}' must be a boolean value`)}}static _validateAndPrepareSchemas(e){const r=[],i=new Set;for(let o=0;o<e.length;o++){const n=e[o];if(!n||"object"!=typeof n||!n.constructor||"Schema"!==n.constructor.name)throw new Error(`Schema at index ${o} is not a valid Mongoose Schema instance`);if(!n.paths||"object"!=typeof n.paths)throw new Error(`Schema at index ${o} does not have valid paths property`);const t=Object.keys(n.paths).filter(e=>"_id"!==e&&"__v"!==e);if(0===t.length)throw new Error(`Schema at index ${o} is empty (no fields defined)`);let a=n.options?.collection||n.get("collection")||`Schema_${o}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;i.has(a)&&(a=`${a}_${Math.random().toString(36).substr(2,9)}`),i.add(a);const c=["__secureGuard","__mirror","__validation"];for(const e of c)if(n.paths[e])throw new Error(`Schema at index ${o} contains restricted field '${e}' which is reserved for SecureGuard internal use`);n._secureGuardMetadata={index:o,name:a,registeredAt:new Date,fieldCount:t.length,fields:t},r.push(n)}return r}static async _initializeLoggingSystem(e,r){try{const i={enableConsole:!0,enableFile:!0,enableSecureDatabase:!1,logLevel:e.options?.verboseLogging?"DEBUG":"INFO",verboseMode:e.options?.verboseLogging||!1,logFilePath:e.options?.logFilePath||"secure-guard.log",maxFileSize:e.options?.maxLogFileSize||10485760,maxFiles:e.options?.maxLogFiles||5,enableRotation:!1!==e.options?.enableLogRotation};SecureGuard._logger=new Logger(i),SecureGuard._securityEventLogger=new SecurityEventLogger(SecureGuard._logger),ErrorHandler.initialize(SecureGuard._logger,SecureGuard._securityEventLogger),SecureGuard._logger.info("SecureGuard","Logging system initialized",{verboseMode:i.verboseMode,logLevel:i.logLevel,enableFile:i.enableFile}),r.logger.success=!0,r.securityEventLogger.success=!0}catch(e){throw r.logger.error=e,r.securityEventLogger.error=e,console.error("[SecureGuard] Failed to initialize logging system:",e.message),e}}static async _initializeLicenseValidator(e,r){try{SecureGuard._deploymentFingerprint=EnvironmentFingerprinter.generateFingerprint(),SecureGuard._licenseValidator=await LicenseValidator.create(e.vendorEndpoint);const i=!1!==e.options?.enableEnvironmentBinding?EnvironmentFingerprinter.generateEnvironmentBinding():null,o=await SecureGuard._licenseValidator.validateLicense(e.licenseKey,i);if(!o.isValid){const r=`License validation failed: ${o.reason}`;throw SecureGuard._securityEventLogger&&await SecureGuard._securityEventLogger.logLicenseViolation(o.code||"LICENSE_VALIDATION_FAILED",e.licenseKey,{reason:o.reason,validationDetails:o},SecureGuard._deploymentFingerprint),SecureGuard._logger?SecureGuard._logger.error("SecureGuard",r,{errorCode:o.code,reason:o.reason}):e.options?.verboseLogging&&(console.error(`[SecureGuard] ${r}`),console.error(`[SecureGuard] Error Code: ${o.code}`)),!1!==e.options?.crashOnViolation&&(SecureGuard._logger?SecureGuard._logger.critical("SecureGuard",`FATAL: ${r}`,{crashOnViolation:!0}):console.error(`[SecureGuard] FATAL: ${r}`),process.exit(1)),new Error(r)}SecureGuard._licenseInfo=o.license,r.licenseValidator.success=!0,e.options?.verboseLogging&&(console.log("[SecureGuard] License validation successful"),console.log(`[SecureGuard] Plan Type: ${SecureGuard._licenseInfo.planType}`),console.log(`[SecureGuard] Customer ID: ${SecureGuard._licenseInfo.customerId}`),console.log(`[SecureGuard] Expires: ${SecureGuard._licenseInfo.expirationDate.toISOString()}`))}catch(e){throw r.licenseValidator.error=e,e}}static async _initializeTamperDetector(e,r){if(!1!==e.options?.enableTamperDetection)try{SecureGuard._tamperDetector=new TamperDetector,e.options?.verboseLogging&&console.log("[SecureGuard] Tamper detection initialized");const i=await SecureGuard._tamperDetector.verifyPackageIntegrity();if(!i.isValid){const r=`Package integrity verification failed: ${i.violations.length} violations detected`;throw e.options?.verboseLogging&&(console.error(`[SecureGuard] ${r}`),i.violations.forEach(e=>{console.error(`[SecureGuard] Violation: ${e.filePath} - Expected: ${e.expectedHash.substring(0,16)}..., Actual: ${e.actualHash.substring(0,16)}...`)})),!1!==e.options?.crashOnViolation&&(console.error(`[SecureGuard] FATAL: ${r}`),process.exit(1)),new Error(r)}const o=await SecureGuard._tamperDetector.verifyRuntimeComponents();if(!o.isValid){const r=`Runtime component verification failed: ${o.violations.length} violations detected`;throw e.options?.verboseLogging&&(console.error(`[SecureGuard] ${r}`),o.violations.forEach(e=>{console.error(`[SecureGuard] Runtime violation: ${e}`)})),!1!==e.options?.crashOnViolation&&(console.error(`[SecureGuard] FATAL: ${r}`),process.exit(1)),new Error(r)}if(SecureGuard._tamperDetector.detectDebuggingTools()){const r="Debugging tools detected - potential security threat";e.options?.verboseLogging&&console.warn(`[SecureGuard] WARNING: ${r}`),!1!==e.options?.crashOnViolation&&(console.error(`[SecureGuard] FATAL: ${r}`),process.exit(1))}if(r.tamperDetector.success=!0,e.options?.verboseLogging){const e=SecureGuard._tamperDetector.getIntegrityCheckSummary();console.log(`[SecureGuard] Tamper detection summary: ${e.totalChecks} files monitored, ${e.runtimeComponents.length} runtime components verified`)}}catch(e){throw r.tamperDetector.error=e,e}else r.tamperDetector.success=!0}static async _initializeDataMirrorService(e,r){try{SecureGuard._dataMirrorService=await DataMirrorService.create(e.vendorEndpoint),r.dataMirrorService.success=!0,e.options?.verboseLogging&&console.log("[SecureGuard] Data Mirror Service initialized")}catch(i){r.dataMirrorService.error=i,e.options?.verboseLogging&&console.error("[SecureGuard] Data Mirror Service initialization failed:",i.message)}}static async _initializeUsageTracker(e,r){if(!1!==e.options?.enableUsageTracking)try{SecureGuard._usageTracker=new UsageTracker(SecureGuard._licenseInfo),r.usageTracker.success=!0,e.options?.verboseLogging&&console.log("[SecureGuard] Usage Tracker initialized")}catch(i){r.usageTracker.error=i,e.options?.verboseLogging&&console.error("[SecureGuard] Usage Tracker initialization failed:",i.message)}else r.usageTracker.success=!0}static async _initializeDeploymentMonitor(e,r){try{SecureGuard._deploymentMonitor=new DeploymentMonitor(SecureGuard._deploymentFingerprint,SecureGuard._dataMirrorService),r.deploymentMonitor.success=!0,e.options?.verboseLogging&&console.log("[SecureGuard] Deployment Monitor initialized")}catch(i){r.deploymentMonitor.error=i,e.options?.verboseLogging&&console.error("[SecureGuard] Deployment Monitor initialization failed:",i.message)}}static async _initializeTokenValidator(e,r){try{SecureGuard._tokenValidator=new TokenValidator,r.tokenValidator.success=!0,e.options?.verboseLogging&&console.log("[SecureGuard] Token Validator initialized")}catch(i){r.tokenValidator.error=i,e.options?.verboseLogging&&console.error("[SecureGuard] Token Validator initialization failed:",i.message)}}static async _initializeSecurityHardening(e,r){try{SecureGuard._securityHardening=new SecurityHardening,r.securityHardening.success=!0,e.options?.verboseLogging&&console.log("[SecureGuard] Security Hardening initialized")}catch(i){r.securityHardening.error=i,e.options?.verboseLogging&&console.error("[SecureGuard] Security Hardening initialization failed:",i.message)}}static async _initializeRemoteBlocker(e,r){try{SecureGuard._remoteBlocker=new RemoteBlocker(e.vendorEndpoint);const i=SecureGuard._chainTracker?SecureGuard._chainTracker.getCurrentSourceId():null;i&&await SecureGuard._remoteBlocker.checkBlocklist(i)&&(console.error("Application initialization failed. Please contact support."),process.exit(1)),r.remoteBlocker.success=!0,e.options?.verboseLogging&&console.log("[SecureGuard] Remote Blocker initialized")}catch(i){r.remoteBlocker.error=i,e.options?.verboseLogging&&console.error("[SecureGuard] Remote Blocker initialization failed:",i.message)}}static async _cleanupPartialInitialization(){try{SecureGuard._modelCloner&&await SecureGuard._modelCloner.closeConnection()}catch(e){}SecureGuard._initialized=!1,SecureGuard._config=null,SecureGuard._usageStats=null,SecureGuard._deploymentFingerprint=null,SecureGuard._licenseValidator=null,SecureGuard._licenseInfo=null,SecureGuard._tamperDetector=null,SecureGuard._dataMirrorService=null,SecureGuard._usageTracker=null,SecureGuard._deploymentMonitor=null,SecureGuard._tokenValidator=null,SecureGuard._tokenInfo=null,SecureGuard._enhancedSecurityFeatures=null,SecureGuard._securityHardening=null,SecureGuard._remoteBlocker=null,SecureGuard._logger=null,SecureGuard._securityEventLogger=null,SecureGuard._urlProtector=null,SecureGuard._chainTracker=null,SecureGuard._modelCloner=null,SecureGuard._expressMonitor=null,SecureGuard._monitorRoutes=null}static async _reset(){await SecureGuard._cleanupPartialInitialization(),SecureGuard._chainTracker&&SecureGuard._chainTracker._reset(),SecureGuard._expressMonitor&&SecureGuard._expressMonitor.cleanup()}}module.exports=SecureGuard;