{"version":3,"sources":["../src/cache/memory.ts","../src/cache/redis.ts","../src/cache/file.ts","../src/auth/env.ts","../src/oauth/scope-checkers.ts","../src/audit/jsonl.ts","../src/audit/otel-metrics.ts","../src/audit/opentelemetry.ts"],"names":["MemoryCache","name","cache","maxKeys","defaultTTL","constructor","options","Map","get","key","entry","expiresAt","Date","now","delete","set","value","ttl","size","has","firstKey","keys","next","clear","pattern","regex","RegExp","replace","test","mget","Promise","all","map","mset","entries","disconnect","getStats","utilization","RedisCache","redis","keyPrefix","getFullKey","JSON","parse","error","log","Error","message","serialized","stringify","fullKey","effectiveTTL","setex","del","exists","fullPattern","length","fullKeys","values","pipeline","exec","quit","FileCache","cacheDir","cleanupInterval","cleanupTimer","initPromise","path","join","os","tmpdir","initialize","fs","mkdir","recursive","startCleanup","ensureInitialized","getFilePath","sanitizedKey","setInterval","cleanExpired","catch","unref","files","readdir","file","endsWith","filePath","content","readFile","unlink","enforceMaxKeys","jsonFiles","filter","f","fileStats","stats","stat","mtime","getTime","sort","a","b","toDelete","slice","item","code","writeFile","keyBase","clearInterval","undefined","totalSize","sizeBytes","cleanup","EnvAuthProvider","prefix","credentials","Object","getCredential","envValue","process","env","setCredential","_ttl","deleteCredential","listCredentials","Set","add","startsWith","substring","Array","from","ScopeCheckerRegistry","checkers","scopeCache","maxCacheSize","pendingChecks","cleanupExpiredCache","stopCleanup","cleaned","entriesToRemove","i","debug","register","checker","provider","hasChecker","getChecker","checkScopes","token","cacheTTL","cacheKey","hashToken","cached","scopes","pending","checkPromise","check","validateToken","validate","getTokenInfo","valid","resolve","clearCache","createHash","update","digest","JSONLAuditSink","sanitizeSecrets","buffer","flushInterval","batchSize","dir","dirname","existsSync","err","flushIntervalMs","flush","write","event","sanitized","sanitizeEvent","line","appendFile","writeBatch","events","e","lines","query","split","trim","clientId","userId","timestamp","to","resource","eventType","types","isArray","includes","status","statuses","minRiskScore","riskScore","offset","limit","sanitizeString","input","sanitizeObject","output","str","patterns","source","obj","secretPatterns","lowerKey","toLowerCase","some","OTelCounter","OTelHistogram","OTelSpan","OTelAttribute","METRIC_CONFIGS","description","unit","OTEL_SERVICE_NAME","OTEL_TRACER_NAME","OTEL_METER_NAME","ATTRIBUTE_PREFIX_TOOL","ATTRIBUTE_PREFIX_METADATA","OpenTelemetryAuditSink","tracer","trace","getTracer","meter","metrics","getMeter","executionCounter","createCounter","EXECUTIONS_TOTAL","toolCallCounter","TOOLS_CALLS","llmCallCounter","LLM_CALLS","approvalCounter","APPROVALS_TOTAL","executionDuration","createHistogram","EXECUTION_DURATION","toolDuration","TOOL_DURATION","span","startSpan","action","attributes","buildAttributes","context","with","setSpan","active","handleEvent","recordMetrics","setStatus","SpanStatusCode","OK","ERROR","recordException","end","attrs","EVENT_ID","eventId","EVENT_TYPE","EVENT_ACTION","TIMESTAMP","CLIENT_ID","STATUS","USER_ID","ipAddress","IP_ADDRESS","userAgent","USER_AGENT","RESOURCE","resourceId","RESOURCE_ID","toolName","TOOL_NAME","apiGroup","API_GROUP","duration","DURATION_MS","memoryUsed","MEMORY_BYTES","llmCallsCount","httpCallsCount","HTTP_CALLS","RISK_SCORE","securityEvents","SECURITY_EVENTS","SECURITY_EVENTS_COUNT","ERROR_MESSAGE","ERROR_CODE","stack","ERROR_STACK","annotations","assign","flattenObject","metadata","addEvent","duration_ms","llm_calls","setAttribute","TOOL_INPUT_SIZE","TOOL_OUTPUT_SIZE","secEvent","commonAttrs","client_id","event_type","record","tool_name","api_group","securityEventCounter","risk_score","result"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { CacheProvider } from '@mondaydotcomorg/atp-protocol';\n\ninterface CacheEntry {\n\tvalue: unknown;\n\texpiresAt: number;\n}\n\n/**\n * In-memory cache provider with LRU eviction\n * Good for development and single-server deployments\n */\nexport class MemoryCache implements CacheProvider {\n\tname = 'memory';\n\tprivate cache: Map<string, CacheEntry>;\n\tprivate maxKeys: number;\n\tprivate defaultTTL: number;\n\n\tconstructor(options: { maxKeys?: number; defaultTTL?: number } = {}) {\n\t\tthis.cache = new Map();\n\t\tthis.maxKeys = options.maxKeys || 1000;\n\t\tthis.defaultTTL = options.defaultTTL || 3600;\n\t}\n\n\tasync get<T>(key: string): Promise<T | null> {\n\t\tconst entry = this.cache.get(key);\n\n\t\tif (!entry) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (entry.expiresAt !== -1 && Date.now() > entry.expiresAt) {\n\t\t\tthis.cache.delete(key);\n\t\t\treturn null;\n\t\t}\n\n\t\tthis.cache.delete(key);\n\t\tthis.cache.set(key, entry);\n\n\t\treturn entry.value as T;\n\t}\n\n\tasync set(key: string, value: unknown, ttl?: number): Promise<void> {\n\t\tif (this.cache.size >= this.maxKeys && !this.cache.has(key)) {\n\t\t\tconst firstKey = this.cache.keys().next().value;\n\t\t\tif (firstKey) {\n\t\t\t\tthis.cache.delete(firstKey);\n\t\t\t}\n\t\t}\n\n\t\tconst expiresAt = ttl\n\t\t\t? Date.now() + ttl * 1000\n\t\t\t: this.defaultTTL > 0\n\t\t\t\t? Date.now() + this.defaultTTL * 1000\n\t\t\t\t: -1;\n\n\t\tthis.cache.set(key, { value, expiresAt });\n\t}\n\n\tasync delete(key: string): Promise<void> {\n\t\tthis.cache.delete(key);\n\t}\n\n\tasync has(key: string): Promise<boolean> {\n\t\tconst value = await this.get(key);\n\t\treturn value !== null;\n\t}\n\n\tasync clear(pattern?: string): Promise<void> {\n\t\tif (!pattern) {\n\t\t\tthis.cache.clear();\n\t\t\treturn;\n\t\t}\n\n\t\tconst regex = new RegExp('^' + pattern.replace(/\\*/g, '.*') + '$');\n\n\t\tfor (const key of this.cache.keys()) {\n\t\t\tif (regex.test(key)) {\n\t\t\t\tthis.cache.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync mget(keys: string[]): Promise<Array<unknown | null>> {\n\t\treturn Promise.all(keys.map((key) => this.get(key)));\n\t}\n\n\tasync mset(entries: Array<[string, unknown, number?]>): Promise<void> {\n\t\tfor (const [key, value, ttl] of entries) {\n\t\t\tawait this.set(key, value, ttl);\n\t\t}\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tthis.cache.clear();\n\t}\n\n\t/** Get cache statistics */\n\tgetStats() {\n\t\treturn {\n\t\t\tkeys: this.cache.size,\n\t\t\tmaxKeys: this.maxKeys,\n\t\t\tutilization: (this.cache.size / this.maxKeys) * 100,\n\t\t};\n\t}\n}\n","import type { CacheProvider } from '@mondaydotcomorg/atp-protocol';\nimport { log } from '@mondaydotcomorg/atp-runtime';\nimport type Redis from 'ioredis';\n\nexport interface RedisCacheOptions {\n\tredis: Redis;\n\tkeyPrefix?: string;\n\tdefaultTTL?: number;\n}\n\n/**\n * Redis-backed cache provider for distributed systems\n * Enables cross-pod state sharing and resume capabilities\n */\nexport class RedisCache implements CacheProvider {\n\tname = 'redis';\n\tprivate redis: Redis;\n\tprivate keyPrefix: string;\n\tprivate defaultTTL?: number;\n\n\tconstructor(options: RedisCacheOptions) {\n\t\tthis.redis = options.redis;\n\t\tthis.keyPrefix = options.keyPrefix || 'atp:cache:';\n\t\tthis.defaultTTL = options.defaultTTL;\n\t}\n\n\tprivate getFullKey(key: string): string {\n\t\treturn `${this.keyPrefix}${key}`;\n\t}\n\n\tasync get<T>(key: string): Promise<T | null> {\n\t\ttry {\n\t\t\tconst value = await this.redis.get(this.getFullKey(key));\n\t\t\tif (!value) return null;\n\t\t\treturn JSON.parse(value) as T;\n\t\t} catch (error) {\n\t\t\tlog.error('RedisCache failed to get key', {\n\t\t\t\tkey,\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync set(key: string, value: unknown, ttl?: number): Promise<void> {\n\t\ttry {\n\t\t\tconst serialized = JSON.stringify(value);\n\t\t\tconst fullKey = this.getFullKey(key);\n\t\t\tconst effectiveTTL = ttl ?? this.defaultTTL;\n\n\t\t\tif (effectiveTTL) {\n\t\t\t\tawait this.redis.setex(fullKey, effectiveTTL, serialized);\n\t\t\t} else {\n\t\t\t\tawait this.redis.set(fullKey, serialized);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlog.error('RedisCache failed to set key', {\n\t\t\t\tkey,\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync delete(key: string): Promise<void> {\n\t\ttry {\n\t\t\tawait this.redis.del(this.getFullKey(key));\n\t\t} catch (error) {\n\t\t\tlog.error('RedisCache failed to delete key', {\n\t\t\t\tkey,\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync has(key: string): Promise<boolean> {\n\t\ttry {\n\t\t\tconst exists = await this.redis.exists(this.getFullKey(key));\n\t\t\treturn exists === 1;\n\t\t} catch (error) {\n\t\t\tlog.error('RedisCache failed to check key', {\n\t\t\t\tkey,\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync clear(pattern?: string): Promise<void> {\n\t\ttry {\n\t\t\tif (pattern) {\n\t\t\t\tconst fullPattern = this.getFullKey(pattern);\n\t\t\t\tconst keys = await this.redis.keys(fullPattern);\n\t\t\t\tif (keys.length > 0) {\n\t\t\t\t\tawait this.redis.del(...keys);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst keys = await this.redis.keys(this.getFullKey('*'));\n\t\t\t\tif (keys.length > 0) {\n\t\t\t\t\tawait this.redis.del(...keys);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlog.error('RedisCache failed to clear cache', {\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync mget(keys: string[]): Promise<Array<unknown | null>> {\n\t\ttry {\n\t\t\tconst fullKeys = keys.map((key) => this.getFullKey(key));\n\t\t\tconst values = await this.redis.mget(...fullKeys);\n\t\t\treturn values.map((value) => (value ? JSON.parse(value) : null));\n\t\t} catch (error) {\n\t\t\tlog.error('RedisCache failed to mget keys', {\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t\treturn keys.map(() => null);\n\t\t}\n\t}\n\n\tasync mset(entries: Array<[string, unknown, number?]>): Promise<void> {\n\t\ttry {\n\t\t\tconst pipeline = this.redis.pipeline();\n\t\t\tfor (const [key, value, ttl] of entries) {\n\t\t\t\tconst serialized = JSON.stringify(value);\n\t\t\t\tconst fullKey = this.getFullKey(key);\n\t\t\t\tconst effectiveTTL = ttl ?? this.defaultTTL;\n\n\t\t\t\tif (effectiveTTL) {\n\t\t\t\t\tpipeline.setex(fullKey, effectiveTTL, serialized);\n\t\t\t\t} else {\n\t\t\t\t\tpipeline.set(fullKey, serialized);\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait pipeline.exec();\n\t\t} catch (error) {\n\t\t\tlog.error('RedisCache failed to mset entries', {\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.redis.quit();\n\t\t} catch (error) {\n\t\t\tlog.error('RedisCache failed to disconnect', {\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t}\n\t}\n}\n","import type { CacheProvider } from '@mondaydotcomorg/atp-protocol';\nimport { log } from '@mondaydotcomorg/atp-runtime';\nimport { promises as fs } from 'fs';\nimport path from 'path';\nimport os from 'os';\n\ninterface CacheEntry {\n\tvalue: unknown;\n\texpiresAt: number;\n}\n\nexport interface FileCacheOptions {\n\tcacheDir?: string;\n\tmaxKeys?: number;\n\tdefaultTTL?: number;\n\tcleanupInterval?: number;\n}\n\n/**\n * File-based cache provider for persistent local caching\n * Good for single-server deployments that need persistence across restarts\n * Supports cross-pod scenarios when using a shared filesystem (NFS, EFS, etc.)\n */\nexport class FileCache implements CacheProvider {\n\tname = 'file';\n\tprivate cacheDir: string;\n\tprivate maxKeys: number;\n\tprivate defaultTTL: number;\n\tprivate cleanupInterval: number;\n\tprivate cleanupTimer?: NodeJS.Timeout;\n\tprivate initPromise?: Promise<void>;\n\n\tconstructor(options: FileCacheOptions = {}) {\n\t\tthis.cacheDir = options.cacheDir || path.join(os.tmpdir(), 'atp-cache');\n\t\tthis.maxKeys = options.maxKeys || 1000;\n\t\tthis.defaultTTL = options.defaultTTL || 3600;\n\t\tthis.cleanupInterval = options.cleanupInterval || 300; // 5 minutes\n\n\t\t// Initialize asynchronously\n\t\tthis.initPromise = this.initialize();\n\t}\n\n\tprivate async initialize(): Promise<void> {\n\t\ttry {\n\t\t\tawait fs.mkdir(this.cacheDir, { recursive: true });\n\t\t\t// Start periodic cleanup\n\t\t\tthis.startCleanup();\n\t\t} catch (error) {\n\t\t\tlog.error('FileCache failed to initialize cache directory', {\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async ensureInitialized(): Promise<void> {\n\t\tif (this.initPromise) {\n\t\t\tawait this.initPromise;\n\t\t}\n\t}\n\n\tprivate getFilePath(key: string): string {\n\t\t// Sanitize key to be filesystem-safe\n\t\tconst sanitizedKey = key.replace(/[^a-zA-Z0-9_-]/g, '_');\n\t\treturn path.join(this.cacheDir, `${sanitizedKey}.json`);\n\t}\n\n\tprivate startCleanup(): void {\n\t\tif (this.cleanupInterval > 0) {\n\t\t\tthis.cleanupTimer = setInterval(() => {\n\t\t\t\tthis.cleanExpired().catch((error) => {\n\t\t\t\t\tlog.error('FileCache cleanup error', { error });\n\t\t\t\t});\n\t\t\t}, this.cleanupInterval * 1000);\n\n\t\t\t// Don't prevent process exit\n\t\t\tif (this.cleanupTimer.unref) {\n\t\t\t\tthis.cleanupTimer.unref();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async cleanExpired(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.ensureInitialized();\n\t\t\tconst files = await fs.readdir(this.cacheDir);\n\t\t\tconst now = Date.now();\n\n\t\t\tfor (const file of files) {\n\t\t\t\tif (!file.endsWith('.json')) continue;\n\n\t\t\t\tconst filePath = path.join(this.cacheDir, file);\n\t\t\t\ttry {\n\t\t\t\t\tconst content = await fs.readFile(filePath, 'utf-8');\n\t\t\t\t\tconst entry: CacheEntry = JSON.parse(content);\n\n\t\t\t\t\tif (entry.expiresAt !== -1 && now > entry.expiresAt) {\n\t\t\t\t\t\tawait fs.unlink(filePath);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// If we can't read or parse a file, delete it\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait fs.unlink(filePath);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Ignore deletion errors\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Enforce max keys limit\n\t\t\tawait this.enforceMaxKeys();\n\t\t} catch (error) {\n\t\t\tlog.error('FileCache failed to clean expired entries', {\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async enforceMaxKeys(): Promise<void> {\n\t\ttry {\n\t\t\tconst files = await fs.readdir(this.cacheDir);\n\t\t\tconst jsonFiles = files.filter((f) => f.endsWith('.json'));\n\n\t\t\tif (jsonFiles.length > this.maxKeys) {\n\t\t\t\t// Sort by modification time and remove oldest\n\t\t\t\tconst fileStats = await Promise.all(\n\t\t\t\t\tjsonFiles.map(async (file) => {\n\t\t\t\t\t\tconst filePath = path.join(this.cacheDir, file);\n\t\t\t\t\t\tconst stats = await fs.stat(filePath);\n\t\t\t\t\t\treturn { file, mtime: stats.mtime.getTime() };\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tfileStats.sort((a, b) => a.mtime - b.mtime);\n\n\t\t\t\tconst toDelete = fileStats.slice(0, jsonFiles.length - this.maxKeys);\n\t\t\t\tawait Promise.all(\n\t\t\t\t\ttoDelete.map((item) => {\n\t\t\t\t\t\tconst filePath = path.join(this.cacheDir, item.file);\n\t\t\t\t\t\treturn fs.unlink(filePath).catch(() => {\n\t\t\t\t\t\t\t// Ignore errors\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlog.error('FileCache failed to enforce max keys', {\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync get<T>(key: string): Promise<T | null> {\n\t\ttry {\n\t\t\tawait this.ensureInitialized();\n\t\t\tconst filePath = this.getFilePath(key);\n\t\t\tconst content = await fs.readFile(filePath, 'utf-8');\n\t\t\tconst entry: CacheEntry = JSON.parse(content);\n\n\t\t\tif (entry.expiresAt !== -1 && Date.now() > entry.expiresAt) {\n\t\t\t\tawait this.delete(key);\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn entry.value as T;\n\t\t} catch (error: any) {\n\t\t\tif (error.code === 'ENOENT') {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlog.error('FileCache failed to get key', {\n\t\t\t\tkey,\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync set(key: string, value: unknown, ttl?: number): Promise<void> {\n\t\ttry {\n\t\t\tawait this.ensureInitialized();\n\t\t\tawait this.enforceMaxKeys();\n\n\t\t\tconst expiresAt = ttl\n\t\t\t\t? Date.now() + ttl * 1000\n\t\t\t\t: this.defaultTTL > 0\n\t\t\t\t\t? Date.now() + this.defaultTTL * 1000\n\t\t\t\t\t: -1;\n\n\t\t\tconst entry: CacheEntry = { value, expiresAt };\n\t\t\tconst filePath = this.getFilePath(key);\n\n\t\t\tawait fs.writeFile(filePath, JSON.stringify(entry), 'utf-8');\n\t\t} catch (error) {\n\t\t\tlog.error('FileCache failed to set key', {\n\t\t\t\tkey,\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync delete(key: string): Promise<void> {\n\t\ttry {\n\t\t\tawait this.ensureInitialized();\n\t\t\tconst filePath = this.getFilePath(key);\n\t\t\tawait fs.unlink(filePath);\n\t\t} catch (error: any) {\n\t\t\tif (error.code !== 'ENOENT') {\n\t\t\t\tlog.error('FileCache failed to delete key', {\n\t\t\t\t\tkey,\n\t\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tasync has(key: string): Promise<boolean> {\n\t\tconst value = await this.get(key);\n\t\treturn value !== null;\n\t}\n\n\tasync clear(pattern?: string): Promise<void> {\n\t\ttry {\n\t\t\tawait this.ensureInitialized();\n\t\t\tconst files = await fs.readdir(this.cacheDir);\n\n\t\t\tif (!pattern) {\n\t\t\t\t// Clear all cache files\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tfiles\n\t\t\t\t\t\t.filter((f) => f.endsWith('.json'))\n\t\t\t\t\t\t.map((file) => {\n\t\t\t\t\t\t\tconst filePath = path.join(this.cacheDir, file);\n\t\t\t\t\t\t\treturn fs.unlink(filePath).catch(() => {\n\t\t\t\t\t\t\t\t// Ignore errors\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Convert glob pattern to regex\n\t\t\tconst regex = new RegExp('^' + pattern.replace(/\\*/g, '.*') + '$');\n\n\t\t\t// Read all files and check if they match the pattern\n\t\t\tfor (const file of files) {\n\t\t\t\tif (!file.endsWith('.json')) continue;\n\n\t\t\t\t// Extract original key from filename (reverse sanitization is approximate)\n\t\t\t\tconst keyBase = file.replace('.json', '');\n\n\t\t\t\t// We need to read the file to get the original key\n\t\t\t\t// For now, use a simple pattern match on the sanitized filename\n\t\t\t\tif (regex.test(keyBase)) {\n\t\t\t\t\tconst filePath = path.join(this.cacheDir, file);\n\t\t\t\t\tawait fs.unlink(filePath).catch(() => {\n\t\t\t\t\t\t// Ignore errors\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlog.error('FileCache failed to clear cache', {\n\t\t\t\terror: error instanceof Error ? error.message : error,\n\t\t\t});\n\t\t}\n\t}\n\n\tasync mget(keys: string[]): Promise<Array<unknown | null>> {\n\t\treturn Promise.all(keys.map((key) => this.get(key)));\n\t}\n\n\tasync mset(entries: Array<[string, unknown, number?]>): Promise<void> {\n\t\tawait Promise.all(entries.map(([key, value, ttl]) => this.set(key, value, ttl)));\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tif (this.cleanupTimer) {\n\t\t\tclearInterval(this.cleanupTimer);\n\t\t\tthis.cleanupTimer = undefined;\n\t\t}\n\t\t// Don't delete cache files on disconnect - they should persist\n\t}\n\n\t/** Get cache statistics */\n\tasync getStats() {\n\t\ttry {\n\t\t\tawait this.ensureInitialized();\n\t\t\tconst files = await fs.readdir(this.cacheDir);\n\t\t\tconst jsonFiles = files.filter((f) => f.endsWith('.json'));\n\n\t\t\t// Calculate total size\n\t\t\tlet totalSize = 0;\n\t\t\tfor (const file of jsonFiles) {\n\t\t\t\tconst filePath = path.join(this.cacheDir, file);\n\t\t\t\ttry {\n\t\t\t\t\tconst stats = await fs.stat(filePath);\n\t\t\t\t\ttotalSize += stats.size;\n\t\t\t\t} catch {\n\t\t\t\t\t// Ignore errors\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tkeys: jsonFiles.length,\n\t\t\t\tmaxKeys: this.maxKeys,\n\t\t\t\tutilization: (jsonFiles.length / this.maxKeys) * 100,\n\t\t\t\tsizeBytes: totalSize,\n\t\t\t\tcacheDir: this.cacheDir,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tlog.error('[FileCache] Failed to get stats:', error);\n\t\t\treturn {\n\t\t\t\tkeys: 0,\n\t\t\t\tmaxKeys: this.maxKeys,\n\t\t\t\tutilization: 0,\n\t\t\t\tsizeBytes: 0,\n\t\t\t\tcacheDir: this.cacheDir,\n\t\t\t};\n\t\t}\n\t}\n\n\t/** Manually trigger cleanup of expired entries */\n\tasync cleanup(): Promise<void> {\n\t\tawait this.cleanExpired();\n\t}\n}\n","import type { AuthProvider } from '@mondaydotcomorg/atp-protocol';\n\n/**\n * Environment variable based auth provider\n * Simple provider that reads credentials from process.env\n * Good for development and simple deployments\n */\nexport class EnvAuthProvider implements AuthProvider {\n\tname = 'env';\n\tprivate prefix: string;\n\tprivate credentials: Map<string, string>;\n\n\tconstructor(\n\t\toptions: {\n\t\t\tprefix?: string;\n\t\t\tcredentials?: Record<string, string>;\n\t\t} = {}\n\t) {\n\t\tthis.prefix = options.prefix || 'ATP_';\n\t\tthis.credentials = new Map();\n\n\t\tif (options.credentials) {\n\t\t\tfor (const [key, value] of Object.entries(options.credentials)) {\n\t\t\t\tthis.credentials.set(key, value);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync getCredential(key: string): Promise<string | null> {\n\t\tif (this.credentials.has(key)) {\n\t\t\treturn this.credentials.get(key) || null;\n\t\t}\n\n\t\tconst envValue = process.env[key] || process.env[`${this.prefix}${key}`];\n\t\treturn envValue || null;\n\t}\n\n\tasync setCredential(key: string, value: string, _ttl?: number): Promise<void> {\n\t\tthis.credentials.set(key, value);\n\t}\n\n\tasync deleteCredential(key: string): Promise<void> {\n\t\tthis.credentials.delete(key);\n\t}\n\n\tasync listCredentials(): Promise<string[]> {\n\t\tconst keys = new Set<string>();\n\n\t\tfor (const key of this.credentials.keys()) {\n\t\t\tkeys.add(key);\n\t\t}\n\n\t\tfor (const key of Object.keys(process.env)) {\n\t\t\tif (key.startsWith(this.prefix)) {\n\t\t\t\tkeys.add(key.substring(this.prefix.length));\n\t\t\t}\n\t\t}\n\n\t\treturn Array.from(keys);\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tthis.credentials.clear();\n\t}\n}\n","import type { ScopeChecker, TokenInfo } from '@mondaydotcomorg/atp-protocol';\nimport { log } from '@mondaydotcomorg/atp-runtime';\nimport { createHash } from 'node:crypto';\n\n/**\n * Scope checker registry\n * Manages scope checkers for different OAuth providers\n */\nexport class ScopeCheckerRegistry {\n\tprivate checkers = new Map<string, ScopeChecker>();\n\tprivate scopeCache = new Map<string, { scopes: string[]; expiresAt: number }>();\n\tprivate cleanupInterval?: NodeJS.Timeout;\n\tprivate maxCacheSize = 10000;\n\tprivate pendingChecks = new Map<string, Promise<string[]>>();\n\n\tconstructor() {\n\t\tthis.startCleanup();\n\t}\n\n\t/**\n\t * Start periodic cache cleanup\n\t */\n\tprivate startCleanup(): void {\n\t\tthis.cleanupInterval = setInterval(\n\t\t\t() => {\n\t\t\t\tthis.cleanupExpiredCache();\n\t\t\t},\n\t\t\t5 * 60 * 1000\n\t\t);\n\n\t\tif (this.cleanupInterval.unref) {\n\t\t\tthis.cleanupInterval.unref();\n\t\t}\n\t}\n\n\t/**\n\t * Stop periodic cache cleanup (for testing or shutdown)\n\t */\n\tstopCleanup(): void {\n\t\tif (this.cleanupInterval) {\n\t\t\tclearInterval(this.cleanupInterval);\n\t\t\tthis.cleanupInterval = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Remove expired entries from cache\n\t */\n\tprivate cleanupExpiredCache(): void {\n\t\tconst now = Date.now();\n\t\tlet cleaned = 0;\n\n\t\tfor (const [key, value] of this.scopeCache.entries()) {\n\t\t\tif (value.expiresAt <= now) {\n\t\t\t\tthis.scopeCache.delete(key);\n\t\t\t\tcleaned++;\n\t\t\t}\n\t\t}\n\n\t\tif (this.scopeCache.size > this.maxCacheSize) {\n\t\t\tconst entriesToRemove = this.scopeCache.size - this.maxCacheSize;\n\t\t\tconst entries = Array.from(this.scopeCache.entries());\n\n\t\t\tentries.sort((a, b) => a[1].expiresAt - b[1].expiresAt);\n\n\t\t\tfor (let i = 0; i < entriesToRemove; i++) {\n\t\t\t\tconst entry = entries[i];\n\t\t\t\tif (entry) {\n\t\t\t\t\tthis.scopeCache.delete(entry[0]);\n\t\t\t\t\tcleaned++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (cleaned > 0) {\n\t\t\tlog.debug(`Cleaned ${cleaned} expired/old scope cache entries`);\n\t\t}\n\t}\n\n\t/**\n\t * Register a custom scope checker\n\t */\n\tregister(checker: ScopeChecker): void {\n\t\tthis.checkers.set(checker.provider, checker);\n\t}\n\n\t/**\n\t * Check if a scope checker is available for a provider\n\t */\n\thasChecker(provider: string): boolean {\n\t\treturn this.checkers.has(provider);\n\t}\n\n\t/**\n\t * Get scope checker for a provider\n\t */\n\tgetChecker(provider: string): ScopeChecker | undefined {\n\t\treturn this.checkers.get(provider);\n\t}\n\n\t/**\n\t * Check what scopes a token has (with caching and deduplication)\n\t * @param provider - Provider name\n\t * @param token - Access token\n\t * @param cacheTTL - Cache TTL in seconds (default: 3600 = 1 hour)\n\t */\n\tasync checkScopes(provider: string, token: string, cacheTTL = 3600): Promise<string[]> {\n\t\tconst cacheKey = `${provider}:${this.hashToken(token)}`;\n\n\t\tconst cached = this.scopeCache.get(cacheKey);\n\t\tif (cached && cached.expiresAt > Date.now()) {\n\t\t\treturn cached.scopes;\n\t\t}\n\n\t\tconst pending = this.pendingChecks.get(cacheKey);\n\t\tif (pending) {\n\t\t\treturn pending;\n\t\t}\n\n\t\tconst checker = this.checkers.get(provider);\n\t\tif (!checker) {\n\t\t\tthrow new Error(`No scope checker registered for provider: ${provider}`);\n\t\t}\n\n\t\tconst checkPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tconst scopes = await checker.check(token);\n\n\t\t\t\tthis.scopeCache.set(cacheKey, {\n\t\t\t\t\tscopes,\n\t\t\t\t\texpiresAt: Date.now() + cacheTTL * 1000,\n\t\t\t\t});\n\n\t\t\t\treturn scopes;\n\t\t\t} finally {\n\t\t\t\tthis.pendingChecks.delete(cacheKey);\n\t\t\t}\n\t\t})();\n\n\t\tthis.pendingChecks.set(cacheKey, checkPromise);\n\t\treturn checkPromise;\n\t}\n\n\t/**\n\t * Validate if a token is still valid\n\t */\n\tasync validateToken(provider: string, token: string): Promise<boolean> {\n\t\tconst checker = this.checkers.get(provider);\n\t\tif (!checker || !checker.validate) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn await checker.validate(token);\n\t}\n\n\t/**\n\t * Get complete token information\n\t */\n\tasync getTokenInfo(provider: string, token: string): Promise<TokenInfo> {\n\t\tconst checker = this.checkers.get(provider);\n\t\tif (!checker) {\n\t\t\tthrow new Error(`No scope checker registered for provider: ${provider}`);\n\t\t}\n\n\t\tconst [scopes, valid] = await Promise.all([\n\t\t\tchecker.check(token),\n\t\t\tchecker.validate ? checker.validate(token) : Promise.resolve(true),\n\t\t]);\n\n\t\treturn {\n\t\t\tvalid,\n\t\t\tscopes,\n\t\t};\n\t}\n\n\t/**\n\t * Clear cached scopes\n\t */\n\tclearCache(provider?: string): void {\n\t\tif (provider) {\n\t\t\tfor (const key of this.scopeCache.keys()) {\n\t\t\t\tif (key.startsWith(`${provider}:`)) {\n\t\t\t\t\tthis.scopeCache.delete(key);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthis.scopeCache.clear();\n\t\t}\n\t}\n\n\t/**\n\t * Hash token for cache key (SHA-256, first 16 chars)\n\t */\n\tprivate hashToken(token: string): string {\n\t\treturn createHash('sha256').update(token).digest('hex').substring(0, 16);\n\t}\n}\n","import type { AuditEvent, AuditFilter, AuditSink } from '@mondaydotcomorg/atp-protocol';\nimport { log } from '@mondaydotcomorg/atp-runtime';\nimport { appendFile, readFile, mkdir } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\n/**\n * JSONL (JSON Lines) audit sink\n * Writes audit events to a file, one JSON object per line\n * Simple, append-only, easy to parse with standard tools\n */\nexport class JSONLAuditSink implements AuditSink {\n\tname = 'jsonl';\n\tprivate filePath: string;\n\tprivate sanitizeSecrets: boolean;\n\tprivate buffer: AuditEvent[] = [];\n\tprivate flushInterval: NodeJS.Timeout | null = null;\n\tprivate batchSize: number;\n\n\tconstructor(options: {\n\t\tfilePath: string;\n\t\tsanitizeSecrets?: boolean;\n\t\tbatchSize?: number;\n\t\tflushIntervalMs?: number;\n\t}) {\n\t\tthis.filePath = options.filePath;\n\t\tthis.sanitizeSecrets = options.sanitizeSecrets ?? true;\n\t\tthis.batchSize = options.batchSize || 10;\n\n\t\tconst dir = dirname(this.filePath);\n\t\tif (!existsSync(dir)) {\n\t\t\tmkdir(dir, { recursive: true }).catch((err) => {\n\t\t\t\tlog.error('Failed to create audit directory', { error: err.message });\n\t\t\t});\n\t\t}\n\n\t\tif (options.flushIntervalMs) {\n\t\t\tthis.flushInterval = setInterval(() => {\n\t\t\t\tif (this.buffer.length > 0) {\n\t\t\t\t\tthis.flush().catch((err) => {\n\t\t\t\t\t\tlog.error('Failed to flush audit buffer', { error: err.message });\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, options.flushIntervalMs);\n\t\t}\n\t}\n\n\tasync write(event: AuditEvent): Promise<void> {\n\t\tconst sanitized = this.sanitizeSecrets ? this.sanitizeEvent(event) : event;\n\t\tconst line = JSON.stringify(sanitized) + '\\n';\n\n\t\ttry {\n\t\t\tawait appendFile(this.filePath, line, 'utf8');\n\t\t} catch (error) {\n\t\t\tlog.error('Failed to write audit event', { error: (error as Error).message });\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync writeBatch(events: AuditEvent[]): Promise<void> {\n\t\tconst sanitized = this.sanitizeSecrets ? events.map((e) => this.sanitizeEvent(e)) : events;\n\n\t\tconst lines = sanitized.map((e) => JSON.stringify(e)).join('\\n') + '\\n';\n\n\t\ttry {\n\t\t\tawait appendFile(this.filePath, lines, 'utf8');\n\t\t} catch (error) {\n\t\t\tlog.error('Failed to write audit batch', { error: (error as Error).message });\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync query(filter: AuditFilter): Promise<AuditEvent[]> {\n\t\ttry {\n\t\t\tconst content = await readFile(this.filePath, 'utf8');\n\t\t\tconst lines = content.split('\\n').filter((line) => line.trim());\n\t\t\tconst events: AuditEvent[] = lines.map((line) => JSON.parse(line));\n\n\t\t\treturn events\n\t\t\t\t.filter((event) => {\n\t\t\t\t\tif (filter.clientId && event.clientId !== filter.clientId) return false;\n\t\t\t\t\tif (filter.userId && event.userId !== filter.userId) return false;\n\t\t\t\t\tif (filter.from && event.timestamp < filter.from) return false;\n\t\t\t\t\tif (filter.to && event.timestamp > filter.to) return false;\n\t\t\t\t\tif (filter.resource && event.resource !== filter.resource) return false;\n\n\t\t\t\t\tif (filter.eventType) {\n\t\t\t\t\t\tconst types = Array.isArray(filter.eventType) ? filter.eventType : [filter.eventType];\n\t\t\t\t\t\tif (!types.includes(event.eventType)) return false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (filter.status) {\n\t\t\t\t\t\tconst statuses = Array.isArray(filter.status) ? filter.status : [filter.status];\n\t\t\t\t\t\tif (!statuses.includes(event.status)) return false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (filter.minRiskScore && (event.riskScore || 0) < filter.minRiskScore) return false;\n\n\t\t\t\t\treturn true;\n\t\t\t\t})\n\t\t\t\t.slice(filter.offset || 0, (filter.offset || 0) + (filter.limit || 100));\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync disconnect(): Promise<void> {\n\t\tif (this.flushInterval) {\n\t\t\tclearInterval(this.flushInterval);\n\t\t}\n\n\t\tif (this.buffer.length > 0) {\n\t\t\tawait this.flush();\n\t\t}\n\t}\n\n\tprivate async flush(): Promise<void> {\n\t\tif (this.buffer.length === 0) return;\n\n\t\tawait this.writeBatch([...this.buffer]);\n\t\tthis.buffer = [];\n\t}\n\n\tprivate sanitizeEvent(event: AuditEvent): AuditEvent {\n\t\tconst sanitized = { ...event };\n\n\t\tif (sanitized.code) {\n\t\t\tsanitized.code = this.sanitizeString(sanitized.code);\n\t\t}\n\n\t\tif (sanitized.input) {\n\t\t\tsanitized.input = this.sanitizeObject(sanitized.input);\n\t\t}\n\t\tif (sanitized.output) {\n\t\t\tsanitized.output = this.sanitizeObject(sanitized.output);\n\t\t}\n\n\t\treturn sanitized;\n\t}\n\n\tprivate sanitizeString(str: string): string {\n\t\tconst patterns = [\n\t\t\t/api[_-]?key/gi,\n\t\t\t/secret/gi,\n\t\t\t/token/gi,\n\t\t\t/password/gi,\n\t\t\t/bearer/gi,\n\t\t\t/authorization/gi,\n\t\t];\n\n\t\tfor (const pattern of patterns) {\n\t\t\tstr = str.replace(\n\t\t\t\tnew RegExp(`(${pattern.source})\\\\s*[:=]\\\\s*['\\\"]?([^'\\\"\\\\s]+)`, 'gi'),\n\t\t\t\t'$1: [REDACTED]'\n\t\t\t);\n\t\t}\n\n\t\treturn str;\n\t}\n\n\tprivate sanitizeObject(obj: unknown): unknown {\n\t\tif (typeof obj !== 'object' || obj === null) {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (Array.isArray(obj)) {\n\t\t\treturn obj.map((item) => this.sanitizeObject(item));\n\t\t}\n\n\t\tconst sanitized: Record<string, unknown> = {};\n\t\tconst secretPatterns = ['key', 'secret', 'token', 'password', 'bearer', 'auth'];\n\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\tconst lowerKey = key.toLowerCase();\n\n\t\t\tif (secretPatterns.some((pattern) => lowerKey.includes(pattern))) {\n\t\t\t\tsanitized[key] = '[REDACTED]';\n\t\t\t} else if (typeof value === 'object') {\n\t\t\t\tsanitized[key] = this.sanitizeObject(value);\n\t\t\t} else {\n\t\t\t\tsanitized[key] = value;\n\t\t\t}\n\t\t}\n\n\t\treturn sanitized;\n\t}\n}\n","/**\n * OpenTelemetry Metrics Definitions\n\n/**\n * Counter metric names\n */\nexport enum OTelCounter {\n\tEXECUTIONS_TOTAL = 'atp.executions.total',\n\tTOOLS_CALLS = 'atp.tools.calls',\n\tLLM_CALLS = 'atp.llm.calls',\n\tAPPROVALS_TOTAL = 'atp.approvals.total',\n\tSECURITY_EVENTS = 'atp.security.events',\n}\n\n/**\n * Histogram metric names\n */\nexport enum OTelHistogram {\n\tEXECUTION_DURATION = 'atp.execution.duration',\n\tTOOL_DURATION = 'atp.tool.duration',\n}\n\n/**\n * Span/trace names\n */\nexport enum OTelSpan {\n\tEXECUTION_START = 'atp.execution.start',\n\tEXECUTION_COMPLETE = 'atp.execution.complete',\n\tEXECUTION_PAUSE = 'atp.execution.pause',\n\tEXECUTION_RESUME = 'atp.execution.resume',\n\tEXECUTION_ERROR = 'atp.execution.error',\n\tTOOL_CALL = 'atp.tool_call',\n\tLLM_CALL = 'atp.llm_call',\n\tAPPROVAL_REQUEST = 'atp.approval.request',\n\tAPPROVAL_RESPONSE = 'atp.approval.response',\n\tCLIENT_INIT = 'atp.client_init',\n\tERROR = 'atp.error',\n}\n\n/**\n * Attribute names (for consistent span/metric attributes)\n */\nexport enum OTelAttribute {\n\tEVENT_ID = 'atp.event.id',\n\tEVENT_TYPE = 'atp.event.type',\n\tEVENT_ACTION = 'atp.event.action',\n\tTIMESTAMP = 'atp.timestamp',\n\n\tCLIENT_ID = 'atp.client.id',\n\tUSER_ID = 'atp.user.id',\n\tIP_ADDRESS = 'atp.ip_address',\n\tUSER_AGENT = 'atp.user_agent',\n\tSTATUS = 'atp.status',\n\n\tRESOURCE = 'atp.resource',\n\tRESOURCE_ID = 'atp.resource.id',\n\n\tTOOL_NAME = 'atp.tool.name',\n\tTOOL_INPUT_SIZE = 'tool.input_size',\n\tTOOL_OUTPUT_SIZE = 'tool.output_size',\n\tAPI_GROUP = 'atp.api.group',\n\n\tDURATION_MS = 'atp.duration_ms',\n\tMEMORY_BYTES = 'atp.memory_bytes',\n\tLLM_CALLS = 'atp.llm_calls',\n\tHTTP_CALLS = 'atp.http_calls',\n\n\tRISK_SCORE = 'atp.security.risk_score',\n\tSECURITY_EVENTS = 'atp.security.events',\n\tSECURITY_EVENTS_COUNT = 'atp.security.events_count',\n\n\tERROR_MESSAGE = 'atp.error.message',\n\tERROR_CODE = 'atp.error.code',\n\tERROR_STACK = 'atp.error.stack',\n}\n\n/**\n * Metric configurations\n */\nexport const METRIC_CONFIGS = {\n\t[OTelCounter.EXECUTIONS_TOTAL]: {\n\t\tdescription: 'Total number of executions',\n\t\tunit: '1',\n\t},\n\t[OTelCounter.TOOLS_CALLS]: {\n\t\tdescription: 'Tool call count',\n\t\tunit: '1',\n\t},\n\t[OTelCounter.LLM_CALLS]: {\n\t\tdescription: 'LLM call count',\n\t\tunit: '1',\n\t},\n\t[OTelCounter.APPROVALS_TOTAL]: {\n\t\tdescription: 'Approval request count',\n\t\tunit: '1',\n\t},\n\t[OTelCounter.SECURITY_EVENTS]: {\n\t\tdescription: 'Security events count',\n\t\tunit: '1',\n\t},\n\t[OTelHistogram.EXECUTION_DURATION]: {\n\t\tdescription: 'Execution duration in milliseconds',\n\t\tunit: 'ms',\n\t},\n\t[OTelHistogram.TOOL_DURATION]: {\n\t\tdescription: 'Tool execution duration',\n\t\tunit: 'ms',\n\t},\n} as const;\n\n/**\n * OpenTelemetry tracer and meter names\n */\nexport const OTEL_SERVICE_NAME = 'agent-tool-protocol';\nexport const OTEL_TRACER_NAME = 'agent-tool-protocol';\nexport const OTEL_METER_NAME = 'agent-tool-protocol';\n\n/**\n * Attribute prefixes for custom metadata\n */\nexport const ATTRIBUTE_PREFIX_TOOL = 'atp.tool';\nexport const ATTRIBUTE_PREFIX_METADATA = 'atp.metadata';\n","import { trace, context, SpanStatusCode, metrics, Span } from '@opentelemetry/api';\nimport type { AuditSink, AuditEvent } from '@mondaydotcomorg/atp-protocol';\nimport {\n\tOTelCounter,\n\tOTelHistogram,\n\tOTelAttribute,\n\tMETRIC_CONFIGS,\n\tOTEL_TRACER_NAME,\n\tOTEL_METER_NAME,\n\tATTRIBUTE_PREFIX_TOOL,\n\tATTRIBUTE_PREFIX_METADATA,\n} from './otel-metrics.js';\n\n/**\n * OpenTelemetry-based audit sink\n * Provides industry-standard observability with distributed tracing and metrics\n */\nexport class OpenTelemetryAuditSink implements AuditSink {\n\tname = 'opentelemetry';\n\tprivate tracer = trace.getTracer(OTEL_TRACER_NAME);\n\tprivate meter = metrics.getMeter(OTEL_METER_NAME);\n\n\tprivate executionCounter = this.meter.createCounter(\n\t\tOTelCounter.EXECUTIONS_TOTAL,\n\t\tMETRIC_CONFIGS[OTelCounter.EXECUTIONS_TOTAL]\n\t);\n\n\tprivate toolCallCounter = this.meter.createCounter(\n\t\tOTelCounter.TOOLS_CALLS,\n\t\tMETRIC_CONFIGS[OTelCounter.TOOLS_CALLS]\n\t);\n\n\tprivate llmCallCounter = this.meter.createCounter(\n\t\tOTelCounter.LLM_CALLS,\n\t\tMETRIC_CONFIGS[OTelCounter.LLM_CALLS]\n\t);\n\n\tprivate approvalCounter = this.meter.createCounter(\n\t\tOTelCounter.APPROVALS_TOTAL,\n\t\tMETRIC_CONFIGS[OTelCounter.APPROVALS_TOTAL]\n\t);\n\n\tprivate executionDuration = this.meter.createHistogram(\n\t\tOTelHistogram.EXECUTION_DURATION,\n\t\tMETRIC_CONFIGS[OTelHistogram.EXECUTION_DURATION]\n\t);\n\n\tprivate toolDuration = this.meter.createHistogram(\n\t\tOTelHistogram.TOOL_DURATION,\n\t\tMETRIC_CONFIGS[OTelHistogram.TOOL_DURATION]\n\t);\n\n\tasync write(event: AuditEvent): Promise<void> {\n\t\tconst span = this.tracer.startSpan(`atp.${event.eventType}.${event.action}`, {\n\t\t\tattributes: this.buildAttributes(event),\n\t\t});\n\n\t\tawait context.with(trace.setSpan(context.active(), span), async () => {\n\t\t\ttry {\n\t\t\t\tthis.handleEvent(span, event);\n\t\t\t\tthis.recordMetrics(event);\n\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t} catch (error: any) {\n\t\t\t\tspan.setStatus({\n\t\t\t\t\tcode: SpanStatusCode.ERROR,\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t});\n\t\t\t\tspan.recordException(error);\n\t\t\t} finally {\n\t\t\t\tspan.end();\n\t\t\t}\n\t\t});\n\t}\n\n\tasync writeBatch(events: AuditEvent[]): Promise<void> {\n\t\tawait Promise.all(events.map((event) => this.write(event)));\n\t}\n\n\tprivate buildAttributes(event: AuditEvent): Record<string, any> {\n\t\tconst attrs: Record<string, any> = {\n\t\t\t[OTelAttribute.EVENT_ID]: event.eventId,\n\t\t\t[OTelAttribute.EVENT_TYPE]: event.eventType,\n\t\t\t[OTelAttribute.EVENT_ACTION]: event.action,\n\t\t\t[OTelAttribute.TIMESTAMP]: event.timestamp,\n\n\t\t\t[OTelAttribute.CLIENT_ID]: event.clientId,\n\t\t\t[OTelAttribute.STATUS]: event.status,\n\t\t};\n\n\t\tif (event.userId) attrs[OTelAttribute.USER_ID] = event.userId;\n\t\tif (event.ipAddress) attrs[OTelAttribute.IP_ADDRESS] = event.ipAddress;\n\t\tif (event.userAgent) attrs[OTelAttribute.USER_AGENT] = event.userAgent;\n\n\t\tif (event.resource) attrs[OTelAttribute.RESOURCE] = event.resource;\n\t\tif (event.resourceId) attrs[OTelAttribute.RESOURCE_ID] = event.resourceId;\n\n\t\tif (event.toolName) attrs[OTelAttribute.TOOL_NAME] = event.toolName;\n\t\tif (event.apiGroup) attrs[OTelAttribute.API_GROUP] = event.apiGroup;\n\n\t\tif (event.duration !== undefined) attrs[OTelAttribute.DURATION_MS] = event.duration;\n\t\tif (event.memoryUsed !== undefined) attrs[OTelAttribute.MEMORY_BYTES] = event.memoryUsed;\n\t\tif (event.llmCallsCount !== undefined) attrs[OTelAttribute.LLM_CALLS] = event.llmCallsCount;\n\t\tif (event.httpCallsCount !== undefined) attrs[OTelAttribute.HTTP_CALLS] = event.httpCallsCount;\n\n\t\tif (event.riskScore !== undefined) attrs[OTelAttribute.RISK_SCORE] = event.riskScore;\n\t\tif (event.securityEvents && event.securityEvents.length > 0) {\n\t\t\tattrs[OTelAttribute.SECURITY_EVENTS] = JSON.stringify(event.securityEvents);\n\t\t\tattrs[OTelAttribute.SECURITY_EVENTS_COUNT] = event.securityEvents.length;\n\t\t}\n\n\t\tif (event.error) {\n\t\t\tattrs[OTelAttribute.ERROR_MESSAGE] = event.error.message;\n\t\t\tif (event.error.code) attrs[OTelAttribute.ERROR_CODE] = event.error.code;\n\t\t\tif (event.error.stack) attrs[OTelAttribute.ERROR_STACK] = event.error.stack;\n\t\t}\n\n\t\tif (event.annotations) {\n\t\t\tObject.assign(attrs, this.flattenObject(event.annotations, ATTRIBUTE_PREFIX_TOOL));\n\t\t}\n\n\t\tif (event.metadata) {\n\t\t\tObject.assign(attrs, this.flattenObject(event.metadata, ATTRIBUTE_PREFIX_METADATA));\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tprivate handleEvent(span: Span, event: AuditEvent): void {\n\t\tswitch (event.eventType) {\n\t\t\tcase 'execution':\n\t\t\t\tif (event.action === 'start') {\n\t\t\t\t\tspan.addEvent('Execution started', {\n\t\t\t\t\t\t'client.id': event.clientId,\n\t\t\t\t\t\t'resource.id': event.resourceId,\n\t\t\t\t\t});\n\t\t\t\t} else if (event.action === 'complete') {\n\t\t\t\t\tspan.addEvent('Execution completed', {\n\t\t\t\t\t\tduration_ms: event.duration,\n\t\t\t\t\t\tstatus: event.status,\n\t\t\t\t\t\tllm_calls: event.llmCallsCount,\n\t\t\t\t\t});\n\t\t\t\t} else if (event.action === 'pause') {\n\t\t\t\t\tspan.addEvent('Execution paused', {\n\t\t\t\t\t\tstatus: event.status,\n\t\t\t\t\t});\n\t\t\t\t} else if (event.action === 'resume') {\n\t\t\t\t\tspan.addEvent('Execution resumed', {\n\t\t\t\t\t\t'resource.id': event.resourceId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'tool_call':\n\t\t\t\tspan.addEvent(`Tool ${event.action}`, {\n\t\t\t\t\t'tool.name': event.toolName,\n\t\t\t\t\t'api.group': event.apiGroup,\n\t\t\t\t\tduration_ms: event.duration,\n\t\t\t\t});\n\t\t\t\tif (event.input) {\n\t\t\t\t\tspan.setAttribute(OTelAttribute.TOOL_INPUT_SIZE, JSON.stringify(event.input).length);\n\t\t\t\t}\n\t\t\t\tif (event.output) {\n\t\t\t\t\tspan.setAttribute(OTelAttribute.TOOL_OUTPUT_SIZE, JSON.stringify(event.output).length);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'llm_call':\n\t\t\t\tspan.addEvent('LLM call', {\n\t\t\t\t\tduration_ms: event.duration,\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'approval':\n\t\t\t\tspan.addEvent(`Approval ${event.action}`, {\n\t\t\t\t\t'tool.name': event.toolName,\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'error':\n\t\t\t\tif (event.error) {\n\t\t\t\t\tspan.addEvent('Error occurred', {\n\t\t\t\t\t\t'error.message': event.error.message,\n\t\t\t\t\t\t'error.code': event.error.code,\n\t\t\t\t\t});\n\t\t\t\t\tspan.recordException(new Error(event.error.message));\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'client_init':\n\t\t\t\tspan.addEvent('Client initialized', {\n\t\t\t\t\t'client.id': event.clientId,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (event.securityEvents && event.securityEvents.length > 0) {\n\t\t\tfor (const secEvent of event.securityEvents) {\n\t\t\t\tspan.addEvent('Security event', {\n\t\t\t\t\t'security.event': secEvent,\n\t\t\t\t\t'security.risk_score': event.riskScore,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate recordMetrics(event: AuditEvent): void {\n\t\tconst commonAttrs: Record<string, any> = {\n\t\t\tclient_id: event.clientId,\n\t\t\tevent_type: event.eventType,\n\t\t\tstatus: event.status,\n\t\t};\n\n\t\tswitch (event.eventType) {\n\t\t\tcase 'execution':\n\t\t\t\tthis.executionCounter.add(1, {\n\t\t\t\t\t...commonAttrs,\n\t\t\t\t\taction: event.action,\n\t\t\t\t});\n\n\t\t\t\tif (event.duration !== undefined) {\n\t\t\t\t\tthis.executionDuration.record(event.duration, {\n\t\t\t\t\t\t...commonAttrs,\n\t\t\t\t\t\taction: event.action,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'tool_call':\n\t\t\t\tthis.toolCallCounter.add(1, {\n\t\t\t\t\t...commonAttrs,\n\t\t\t\t\ttool_name: event.toolName,\n\t\t\t\t\tapi_group: event.apiGroup,\n\t\t\t\t});\n\n\t\t\t\tif (event.duration !== undefined) {\n\t\t\t\t\tthis.toolDuration.record(event.duration, {\n\t\t\t\t\t\t...commonAttrs,\n\t\t\t\t\t\ttool_name: event.toolName,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'llm_call':\n\t\t\t\tthis.llmCallCounter.add(1, commonAttrs);\n\t\t\t\tbreak;\n\n\t\t\tcase 'approval':\n\t\t\t\tthis.approvalCounter.add(1, {\n\t\t\t\t\t...commonAttrs,\n\t\t\t\t\taction: event.action,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (event.securityEvents && event.securityEvents.length > 0) {\n\t\t\tconst securityEventCounter = this.meter.createCounter(\n\t\t\t\tOTelCounter.SECURITY_EVENTS,\n\t\t\t\tMETRIC_CONFIGS[OTelCounter.SECURITY_EVENTS]\n\t\t\t);\n\t\t\tsecurityEventCounter.add(event.securityEvents.length, {\n\t\t\t\t...commonAttrs,\n\t\t\t\trisk_score: event.riskScore,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate flattenObject(obj: any, prefix: string): Record<string, any> {\n\t\tconst result: Record<string, any> = {};\n\t\tif (!obj || typeof obj !== 'object') return result;\n\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\tconst fullKey = `${prefix}.${key}`;\n\t\t\tif (value === null || value === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t\tObject.assign(result, this.flattenObject(value, fullKey));\n\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\tresult[fullKey] = JSON.stringify(value);\n\t\t\t} else {\n\t\t\t\tresult[fullKey] = value;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n}\n"]}