UNPKG

okta-mcp-server

Version:

Model Context Protocol (MCP) server for Okta API operations with support for bulk operations and caching

123 lines 4.27 kB
export class DelaySimulator { config; constructor(config = { enabled: true, baseDelay: 50, variability: 0.3, networkConditions: 'normal', }) { this.config = config; this.applyNetworkConditions(); } applyNetworkConditions() { switch (this.config.networkConditions) { case 'fast': this.config.baseDelay = 20; this.config.variability = 0.1; break; case 'slow': this.config.baseDelay = 200; this.config.variability = 0.5; break; case 'unstable': this.config.baseDelay = 100; this.config.variability = 0.8; break; case 'normal': default: // Use configured values break; } } async delay(operation) { if (!this.config.enabled) return; const delay = this.calculateDelay(operation); await new Promise((resolve) => setTimeout(resolve, delay)); } calculateDelay(operation) { let baseDelay = this.config.baseDelay; // Check for operation-specific delay if (operation && this.config.operationDelays?.has(operation)) { baseDelay = this.config.operationDelays.get(operation); } // Add realistic variability const variability = baseDelay * this.config.variability; const randomFactor = (Math.random() - 0.5) * 2; // -1 to 1 const actualDelay = baseDelay + variability * randomFactor; // Ensure minimum delay return Math.max(10, actualDelay); } // Configure delays for specific operations setOperationDelay(operation, delay) { if (!this.config.operationDelays) { this.config.operationDelays = new Map(); } this.config.operationDelays.set(operation, delay); } // Simulate realistic delays for different operations static getRealisticDelays() { return new Map([ // User operations ['listUsers', 100], ['getUser', 50], ['createUser', 150], ['updateUser', 120], ['deleteUser', 100], // Group operations ['listGroups', 120], ['getGroup', 60], ['createGroup', 130], ['updateGroup', 110], ['deleteGroup', 90], // App operations ['listApps', 150], ['getApp', 70], ['createApp', 200], ['updateApp', 160], ['deleteApp', 140], // Policy operations ['listPolicies', 130], ['getPolicy', 65], ['createPolicy', 180], ['updatePolicy', 150], ['deletePolicy', 120], // Auth operations ['authenticate', 200], ['refreshToken', 100], ['revokeToken', 80], // Bulk operations ['bulkImport', 500], ['bulkUpdate', 400], ['bulkDelete', 350], ]); } // Simulate network spikes async simulateNetworkSpike(duration = 5000) { const originalDelay = this.config.baseDelay; const originalVariability = this.config.variability; // Increase delays during spike this.config.baseDelay = originalDelay * 5; this.config.variability = 0.9; // Reset after duration setTimeout(() => { this.config.baseDelay = originalDelay; this.config.variability = originalVariability; }, duration); } // Simulate gradual degradation async simulateDegradation(steps = 10, intervalMs = 1000) { const originalDelay = this.config.baseDelay; const targetDelay = originalDelay * 10; const increment = (targetDelay - originalDelay) / steps; for (let i = 0; i < steps; i++) { this.config.baseDelay = originalDelay + increment * (i + 1); await new Promise((resolve) => setTimeout(resolve, intervalMs)); } } // Reset to original configuration reset() { this.applyNetworkConditions(); } } //# sourceMappingURL=delay-simulator.js.map