UNPKG

okta-mcp-server

Version:

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

123 lines 4.3 kB
/** * Audit infrastructure exports */ export * from './types.js'; export * from './audit-logger.js'; export * from './audit-middleware.js'; export * from './pii-masker.js'; import { AuditLogger } from './audit-logger.js'; import { AuditMiddleware } from './audit-middleware.js'; /** * Factory for creating audit infrastructure */ export class AuditFactory { /** * Create an audit logger instance */ static createLogger(options) { return new AuditLogger({ dbPath: process.env['AUDIT_DB_PATH'], inMemory: process.env['AUDIT_IN_MEMORY'] === 'true', retentionPolicy: { retentionDays: parseInt(process.env['AUDIT_RETENTION_DAYS'] || '90'), archiveAfterDays: parseInt(process.env['AUDIT_ARCHIVE_DAYS'] || '30'), deletePersonalDataAfterDays: parseInt(process.env['AUDIT_GDPR_DAYS'] || '365'), }, enableIntegrityChecks: process.env['AUDIT_INTEGRITY_CHECKS'] !== 'false', performanceTracking: process.env['AUDIT_PERFORMANCE_TRACKING'] !== 'false', batchSize: parseInt(process.env['AUDIT_BATCH_SIZE'] || '100'), flushInterval: parseInt(process.env['AUDIT_FLUSH_INTERVAL'] || '1000'), ...options, }); } /** * Create audit middleware */ static createMiddleware(auditLogger, options) { return new AuditMiddleware({ auditLogger, performanceThreshold: parseInt(process.env['AUDIT_PERF_THRESHOLD'] || '5000'), ...options, }); } /** * Create a complete audit system with event bus integration */ static createAuditSystem(eventBus) { const logger = this.createLogger({ eventBus }); const middleware = this.createMiddleware(logger); return { logger, middleware }; } } /** * Global audit logger instance (lazy initialization) */ let globalAuditLogger = null; export function getGlobalAuditLogger() { if (!globalAuditLogger) { globalAuditLogger = AuditFactory.createLogger(); } return globalAuditLogger; } /** * Audit log helper functions */ export async function auditLog(entry) { const logger = getGlobalAuditLogger(); await logger.log(entry); } export async function auditToolCall(toolName, args, result, options = {}) { const logger = getGlobalAuditLogger(); await logger.log({ timestamp: new Date(), actor: AuditMiddleware.createActor(options.actor || { id: 'system', type: 'system' }), action: { type: 'tool.call', method: toolName, result, errorMessage: options.error?.message, errorCode: options.error?.code, }, request: { method: toolName, parameters: args, }, response: { status: result === 'success' ? 200 : result === 'failure' ? 400 : 500, }, performance: options.duration ? { duration: options.duration } : undefined, context: AuditMiddleware.createContext({ id: options.requestId }), }); } export async function auditResourceAccess(resourceUri, result, options = {}) { const logger = getGlobalAuditLogger(); // Extract resource info from URI const match = resourceUri.match(/^okta:\/\/([^/]+)(?:\/(.+))?/); const resourceType = match?.[1] || 'unknown'; const resourceId = match?.[2] || 'all'; await logger.log({ timestamp: new Date(), actor: AuditMiddleware.createActor(options.actor || { id: 'system', type: 'system' }), action: { type: 'resource.read', method: resourceType, result, errorMessage: options.error?.message, errorCode: options.error?.code, }, resource: { type: resourceType, id: resourceId, }, request: { method: 'read', path: resourceUri, }, response: { status: result === 'success' ? 200 : result === 'failure' ? 404 : 500, }, performance: options.duration ? { duration: options.duration } : undefined, context: AuditMiddleware.createContext({ id: options.requestId }), }); } //# sourceMappingURL=index.js.map