okta-mcp-server
Version:
Model Context Protocol (MCP) server for Okta API operations with support for bulk operations and caching
65 lines • 3.14 kB
JavaScript
import { OktaClient } from '../lib/okta-client.js';
import { MockOktaClient } from './mock-okta-client.js';
import { logger } from '../utils/logger.js';
export class OktaClientFactory {
static async create(config) {
// Check environment variable first
const shouldUseMock = config.useMock ?? process.env['USE_MOCK_OKTA'] === 'true';
logger.info('OktaClientFactory.create called with:', {
useMock: config.useMock,
USE_MOCK_OKTA: process.env['USE_MOCK_OKTA'],
shouldUseMock,
hasRealConfig: !!(config.realConfig?.domain && config.realConfig?.apiToken),
domain: config.realConfig?.domain ? '***' + config.realConfig.domain.slice(-10) : 'NOT SET',
hasApiToken: !!config.realConfig?.apiToken,
});
if (shouldUseMock) {
logger.info('Using Mock Okta Client');
return new MockOktaClient(config.mockConfig);
}
if (!config.realConfig?.domain || !config.realConfig?.apiToken) {
logger.warn('Missing Okta configuration, falling back to mock client', {
hasDomain: !!config.realConfig?.domain,
hasApiToken: !!config.realConfig?.apiToken,
domain: config.realConfig?.domain,
hasToken: !!config.realConfig?.apiToken,
tokenLength: config.realConfig?.apiToken?.length,
});
return new MockOktaClient(config.mockConfig);
}
return new OktaClient(config.realConfig);
}
// Create a client from environment variables
static async fromEnv() {
const useMock = process.env['USE_MOCK_OKTA'] === 'true';
if (useMock) {
const mockConfig = {
userCount: parseInt(process.env['MOCK_USER_COUNT'] || '1000', 10),
groupCount: parseInt(process.env['MOCK_GROUP_COUNT'] || '100', 10),
appCount: parseInt(process.env['MOCK_APP_COUNT'] || '50', 10),
policyCount: parseInt(process.env['MOCK_POLICY_COUNT'] || '20', 10),
enableAuth: process.env['MOCK_ENABLE_AUTH'] !== 'false',
enableRateLimit: process.env['MOCK_ENABLE_RATE_LIMIT'] !== 'false',
enableErrors: process.env['MOCK_ENABLE_ERRORS'] !== 'false',
enableDelays: process.env['MOCK_ENABLE_DELAYS'] !== 'false',
errorRate: process.env['MOCK_ERROR_RATE']
? parseFloat(process.env['MOCK_ERROR_RATE'])
: 0.02,
networkConditions: process.env['MOCK_NETWORK_CONDITIONS'] || 'normal',
};
if (process.env['MOCK_SEED']) {
mockConfig.seed = parseInt(process.env['MOCK_SEED'], 10);
}
return new MockOktaClient(mockConfig);
}
const oktaConfig = {
domain: process.env['OKTA_DOMAIN'] || '',
apiToken: process.env['OKTA_API_TOKEN'] || '',
};
return this.create({
useMock: false,
realConfig: oktaConfig,
});
}
}
//# sourceMappingURL=okta-client-factory.js.map