UNPKG

okta-mcp-server

Version:

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

86 lines 2.48 kB
/** * Simple dependency injection container for service management */ export class Container { services = new Map(); factories = new Map(); singletons = new Map(); /** * Register a service factory */ register(token, factory, options = { singleton: true }) { this.factories.set(token, factory); this.singletons.set(token, options.singleton ?? true); } /** * Register a value directly */ registerValue(token, value) { this.services.set(token, value); } /** * Resolve a service */ resolve(token) { // Check if we have a direct value if (this.services.has(token)) { return this.services.get(token); } // Check if we have a factory const factory = this.factories.get(token); if (!factory) { throw new Error(`No factory registered for token: ${String(token)}`); } // If it's a singleton and already created, return it const isSingleton = this.singletons.get(token) ?? true; if (isSingleton && this.services.has(token)) { return this.services.get(token); } // Create the service const service = factory(); // Store if singleton if (isSingleton) { this.services.set(token, service); } return service; } /** * Check if a service is registered */ has(token) { return this.services.has(token) || this.factories.has(token); } /** * Clear all services (useful for testing) */ clear() { this.services.clear(); this.factories.clear(); this.singletons.clear(); } /** * Create a child container */ createChild() { const child = new Container(); // Copy factories and singleton settings for (const [token, factory] of this.factories) { child.factories.set(token, factory); child.singletons.set(token, this.singletons.get(token) ?? true); } // Copy existing singleton instances for (const [token, service] of this.services) { if (this.singletons.get(token)) { child.services.set(token, service); } } return child; } /** * Alias for resolve (used by audit handlers) */ get(token) { return this.resolve(token); } } //# sourceMappingURL=container.js.map