/**
 * WelcomeFirstTimeContributorUseCase — spec 097, FR-28.
 *
 * Triggered on `pull_request.opened`. If the PR opener has zero prior
 * merged PRs in the target repository:
 *   1. Upsert a `Contributor` row (idempotent on github_login).
 *   2. Emit a `RecognitionEvent` of kind `firstPR` (idempotent on
 *      (contributor_id, kind, pr_number) — see NFR-11 / FR-22).
 *   3. Generate a welcome comment.
 *   4. Gate the comment via `IContributorActionGate` and post via
 *      `IGitHubIssueWriter` only when approved (NFR-5).
 *   5. Fire a desktop notification so a maintainer notices the PR.
 *
 * Non-first-timers are a no-op — the use case returns early without
 * writing or notifying.
 */
import { type Contributor, type RecognitionEvent } from '../../../domain/generated/output.js';
import type { IContributorRepository } from '../../ports/output/repositories/contributor-repository.interface.js';
import type { IRecognitionEventRepository } from '../../ports/output/repositories/recognition-event-repository.interface.js';
import type { IGitHubIssueWriter, IssueRef } from '../../ports/output/services/github-issue-writer.interface.js';
import type { IContributorActionGate } from '../../ports/output/services/contributor-action-gate.interface.js';
import type { IExternalIssueFetcher } from '../../ports/output/services/external-issue-fetcher.interface.js';
import type { IDesktopNotifier } from '../../ports/output/services/i-desktop-notifier.js';
export interface WelcomeFirstTimeContributorInput {
    /** Pull-request reference. `issueNumber` is the PR number. */
    prRef: IssueRef;
    /** GitHub login of the PR opener. */
    authorLogin: string;
    /** Optional public display name. */
    authorDisplayName?: string;
    /** Optional avatar URL from the PR opener's profile. */
    authorAvatarUrl?: string;
}
export type WelcomeFirstTimeContributorResult = {
    firstTime: false;
} | {
    firstTime: true;
    contributor: Contributor;
    recognitionEvent: RecognitionEvent;
    commentPosted: boolean;
    gateRationale: string;
};
export declare class WelcomeFirstTimeContributorUseCase {
    private readonly fetcher;
    private readonly contributors;
    private readonly events;
    private readonly issueWriter;
    private readonly gate;
    private readonly notifier;
    constructor(fetcher: IExternalIssueFetcher, contributors: IContributorRepository, events: IRecognitionEventRepository, issueWriter: IGitHubIssueWriter, gate: IContributorActionGate, notifier: IDesktopNotifier);
    execute(input: WelcomeFirstTimeContributorInput): Promise<WelcomeFirstTimeContributorResult>;
    private upsertContributor;
    private recordFirstPr;
}
//# sourceMappingURL=welcome-first-time-contributor.use-case.d.ts.map