@clicktime/mcp-server
Version:
ClickTime MCP Tech Demo for AI agents to interact with ClickTime API
42 lines (41 loc) • 1.71 kB
TypeScript
import { ProcessedReceiptResult } from './expense-types.js';
export declare class ReceiptProcessor {
private static readonly MAX_FILE_SIZE;
/**
* The very small set of file extensions we’ll accept. This is a
* deliberately cheap guard to stop users from accidentally selecting
* something like ~/.ssh/id_rsa when the LLM asks for a path.
*/
private static readonly ALLOWED_EXTS;
private static readonly MIME_TYPE_MAP;
/**
* Lightweight defence‑in‑depth before we read any bytes into memory.
* 1. Extension must be one of ALLOWED_EXTS.
* 2. Reject symbolic links to avoid sneaky inode swaps.
* 3. Enforce ClickTime’s 2 MB size cap via lstat (cheap).
*/
private static validateReceiptPath;
/**
* Process a receipt from a local file path.
*/
static processReceiptFromFile(filePath: string): Promise<ProcessedReceiptResult>;
/**
* Process a receipt from base64 data.
*/
static processReceiptFromBase64(base64Data: string, mimeType: string): Promise<ProcessedReceiptResult>;
/** Validate if MIME type is supported */
private static isValidMimeType;
/** Node‑safe base64 check */
private static isValidBase64;
/** Remove data‑URL prefix if present */
static cleanBase64(base64Data: string): string;
/** Map MIME → file‑extension */
static getFileExtensionForMimeType(mimeType: string): string;
/** Human‑readable file‑size */
static formatFileSize(bytes: number): string;
/**
* Return a friendly blurb to show users explaining ClickTime’s
* receipt‑upload rules (size + formats).
*/
static getClickTimeFileInfo(): string;
}