@debugg-ai/debugg-ai-mcp
Version:
Zero-Config, Fully AI-Managed End-to-End Testing for all code gen platforms.
62 lines (61 loc) • 1.74 kB
JavaScript
/**
* Generic telemetry abstraction layer.
* Providers implement TelemetryProvider; call sites use Telemetry.capture().
* Falls back to NoopProvider when no provider is configured.
*/
import { createHash } from 'crypto';
class NoopProvider {
capture(_event) { }
identify(_distinctId, _properties) { }
async flush() { }
async shutdown() { }
}
let _provider = new NoopProvider();
let _distinctId = 'anonymous';
export const Telemetry = {
configure(provider) {
_provider = provider;
},
/**
* Derive a stable, anonymous identifier from the API key.
* Uses SHA-256 so the raw key is never stored or transmitted.
*/
setDistinctId(apiKey) {
_distinctId = createHash('sha256').update(apiKey).digest('hex').slice(0, 16);
},
capture(event, properties) {
try {
_provider.capture({ event, distinctId: _distinctId, properties, timestamp: new Date() });
}
catch {
// never let telemetry crash the app
}
},
async flush() {
try {
await _provider.flush();
}
catch {
// best-effort
}
},
async shutdown() {
try {
await _provider.shutdown();
}
catch {
// best-effort
}
},
};
export const TelemetryEvents = {
TOOL_EXECUTED: 'tool.executed',
TOOL_FAILED: 'tool.failed',
WORKFLOW_EXECUTED: 'workflow.executed',
WORKFLOW_TRANSIENT_RETRY: 'workflow.transient_retry',
TUNNEL_PROVISIONED: 'tunnel.provisioned',
TUNNEL_PROVISION_RETRY: 'tunnel.provision_retry',
TUNNEL_STOPPED: 'tunnel.stopped',
TEMPLATE_LOOKUP: 'template.lookup',
PROJECT_LOOKUP: 'project.lookup',
};