@wonderwhy-er/desktop-commander
Version:
MCP server for terminal operations and file editing
49 lines (48 loc) • 2.24 kB
JavaScript
import { randomUUID } from 'node:crypto';
import { sanitizeTransportEvent } from '@desktop-commander/telemetry-contract/transport';
import { captureTransport } from '../utils/capture.js';
const ID = /^[A-Za-z0-9_-]{1,128}$/;
const PROCESS_ID = randomUUID();
/** Record a device transport checkpoint without affecting command handling. */
export function observeTransport(input) {
try {
const timestamp_utc = new Date().toISOString();
const receipt = 'payload' in input;
const callId = receipt ? input.payload?.call_id : input.callId;
const deviceId = input.deviceId;
if (typeof callId !== 'string' || !ID.test(callId) ||
typeof deviceId !== 'string' || !ID.test(deviceId))
return null;
if (receipt && (input.payload.device_id !== deviceId || !input.userId ||
(input.payload.user_id !== undefined && input.payload.user_id !== input.userId)))
return null;
const observationId = randomUUID();
let operationId;
if (!receipt) {
operationId = input.stage === 'operation_start' ? observationId : input.operationId;
}
const event = {
call_id: callId,
device_id: deviceId,
stage: input.stage,
...(input.transport === 'broadcast' || input.transport === 'mqtt' ? { transport: input.transport } : {}),
...(input.transport === 'broadcast' ? {
notification_id: `${callId}:broadcast:1`, attempt_number: 1,
} : {}),
...(!receipt && typeof input.toolName === 'string' && input.toolName.length > 0 &&
input.toolName.length <= 128 ? { tool_name: input.toolName } : {}),
...(!receipt && input.operation ? { operation: input.operation } : {}),
...(operationId ? { operation_id: operationId } : {}),
observation_id: observationId,
source_process_id: PROCESS_ID,
schema_version: 1,
timestamp_utc,
};
void captureTransport(input.stage, sanitizeTransportEvent(input.stage, event));
return event;
}
catch {
// Telemetry must never affect command handling.
return null;
}
}