export interface ApprovalRequest { id: string; timestamp: number; duckName: string; mcpServer: string; toolName: string; arguments: Record; status: 'pending' | 'approved' | 'denied' | 'expired' | 'consumed'; approvedBy?: string; deniedReason?: string; expiresAt: number; } export type ApprovalStatus = 'pending' | 'approved' | 'denied' | 'expired' | 'consumed'; export declare class ApprovalService { private pendingApprovals; private approvalTimeout; private cleanupInterval; private approvedToolsForSession; constructor(approvalTimeoutSeconds?: number); createApprovalRequest(duckName: string, mcpServer: string, toolName: string, args: Record): ApprovalRequest; getApprovalRequest(id: string): ApprovalRequest | undefined; getApprovalStatus(id: string): ApprovalStatus | undefined; approveRequest(id: string, approvedBy?: string): boolean; /** * Consume an approved request, transitioning it to the terminal `consumed` * status. Single-use: returns true only on a valid approved→consumed * transition; returns false if the request is missing or not in the * `approved` state (e.g. already consumed). */ consumeApproval(id: string): boolean; denyRequest(id: string, reason?: string): boolean; getPendingApprovals(): ApprovalRequest[]; getAllApprovals(): ApprovalRequest[]; getApprovalsByDuck(duckName: string): ApprovalRequest[]; cleanupExpired(): number; private startCleanupTimer; shutdown(): void; private createSessionKey; isToolApprovedForSession(principal: string, mcpServer: string, toolName: string, args: Record): boolean; markToolAsApprovedForSession(principal: string, mcpServer: string, toolName: string, args: Record): void; clearSessionApprovals(): void; getSessionApprovals(): string[]; getStats(): { total: number; pending: number; approved: number; denied: number; expired: number; consumed: number; }; } //# sourceMappingURL=approval.d.ts.map