UNPKG

@clicktime/mcp-server

Version:

ClickTime MCP Tech Demo for AI agents to interact with ClickTime API

42 lines (41 loc) 1.71 kB
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; }