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
JavaScript
/**
* 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