import type { Db } from "@rudderhq/db";
import { instanceSettingsService } from "./instance-settings.js";
type IssueCommentAttachmentMethodContext = {
    db: Db;
    instanceSettings: ReturnType<typeof instanceSettingsService>;
    redactIssueComment: <T extends {
        body: string;
    }>(comment: T, censorUsernameInLogs: boolean) => T;
};
export declare function createIssueCommentAttachmentMethods(ctx: IssueCommentAttachmentMethodContext): {
    findMentionedAgents: (orgId: string, body: string) => Promise<string[]>;
    findMentionedProjectIds: (issueId: string) => Promise<string[]>;
    listComments: (issueId: string, opts?: {
        afterCommentId?: string | null;
        order?: "asc" | "desc";
        limit?: number | null;
    }) => Promise<({
        issueId: string;
        id: string;
        orgId: string;
        createdAt: Date;
        updatedAt: Date;
        body: string;
        authorAgentId: string | null;
        authorUserId: string | null;
        deletedAt: Date | null;
        deletedByUserId: string | null;
    } & {
        shortRef?: string;
    })[]>;
    getCommentCursor: (issueId: string) => Promise<{
        totalComments: number;
        latestCommentId: string;
        latestCommentAt: Date;
    }>;
    resolveCommentReference: (issueId: string, commentRef: string) => Promise<string>;
    getComment: (commentId: string) => Promise<({
        issueId: string;
        id: string;
        orgId: string;
        createdAt: Date;
        updatedAt: Date;
        body: string;
        authorAgentId: string | null;
        authorUserId: string | null;
        deletedAt: Date | null;
        deletedByUserId: string | null;
    } & {
        shortRef?: string;
    }) | null>;
    addComment: (issueId: string, body: string, actor: {
        agentId?: string;
        userId?: string;
    }) => Promise<{
        issueId: string;
        id: string;
        orgId: string;
        createdAt: Date;
        updatedAt: Date;
        body: string;
        authorAgentId: string | null;
        authorUserId: string | null;
        deletedAt: Date | null;
        deletedByUserId: string | null;
    } & {
        shortRef?: string;
    }>;
    updateComment: (issueId: string, commentId: string, body: string, actor: {
        userId: string;
    }) => Promise<{
        id: string;
        orgId: string;
        issueId: string;
        authorAgentId: string | null;
        authorUserId: string | null;
        body: string;
        deletedAt: Date | null;
        deletedByUserId: string | null;
        createdAt: Date;
        updatedAt: Date;
    } & {
        shortRef?: string;
    }>;
    deleteComment: (issueId: string, commentId: string, actor: {
        userId: string;
        allowAgentAuthored?: boolean;
    }) => Promise<{
        id: string;
        orgId: string;
        issueId: string;
        authorAgentId: string | null;
        authorUserId: string | null;
        body: string;
        deletedAt: Date | null;
        deletedByUserId: string | null;
        createdAt: Date;
        updatedAt: Date;
    } & {
        shortRef?: string;
    }>;
    createAttachment: (input: {
        issueId: string;
        issueCommentId?: string | null;
        usage?: string;
        provider: string;
        objectKey: string;
        contentType: string;
        byteSize: number;
        sha256: string;
        originalFilename?: string | null;
        createdByAgentId?: string | null;
        createdByUserId?: string | null;
    }) => Promise<{
        id: string;
        orgId: string;
        issueId: string;
        issueCommentId: string | null;
        assetId: string;
        usage: string;
        provider: string;
        objectKey: string;
        contentType: string;
        byteSize: number;
        sha256: string;
        originalFilename: string | null;
        createdByAgentId: string | null;
        createdByUserId: string | null;
        createdAt: Date;
        updatedAt: Date;
    }>;
    listAttachments: (issueId: string) => Promise<{
        id: string;
        orgId: string;
        issueId: string;
        issueCommentId: string | null;
        assetId: string;
        usage: string;
        provider: string;
        objectKey: string;
        contentType: string;
        byteSize: number;
        sha256: string;
        originalFilename: string | null;
        createdByAgentId: string | null;
        createdByUserId: string | null;
        createdAt: Date;
        updatedAt: Date;
    }[]>;
    getAttachmentById: (id: string) => Promise<{
        id: string;
        orgId: string;
        issueId: string;
        issueCommentId: string | null;
        assetId: string;
        usage: string;
        provider: string;
        objectKey: string;
        contentType: string;
        byteSize: number;
        sha256: string;
        originalFilename: string | null;
        createdByAgentId: string | null;
        createdByUserId: string | null;
        createdAt: Date;
        updatedAt: Date;
    }>;
    removeAttachment: (id: string) => Promise<{
        id: string;
        orgId: string;
        issueId: string;
        issueCommentId: string | null;
        assetId: string;
        usage: string;
        provider: string;
        objectKey: string;
        contentType: string;
        byteSize: number;
        sha256: string;
        originalFilename: string | null;
        createdByAgentId: string | null;
        createdByUserId: string | null;
        createdAt: Date;
        updatedAt: Date;
    } | null>;
};
export {};
//# sourceMappingURL=issues.comments-attachments.d.ts.map