import { DataSource } from 'typeorm';
import { JwtService } from '@nestjs/jwt';
import { MeetingStatus } from '../entities/meeting.entity';
import { InviteChannel, MeetingInvite } from '../entities/meeting-invite.entity';
import { CreateInviteDto } from '../dto/create-invite.dto';
import { RedeemInviteDto } from '../dto/redeem-invite.dto';
import { SendInviteDto } from '../dto/send-invite.dto';
import { RoomCodeGeneratorService } from './room-code-generator.service';
import { MailsService } from '../../mails/mails.service';
export interface DeliveryPayload {
    invite: MeetingInvite;
    url: string;
    otp?: string;
    whatsapp_url?: string;
    sms_url?: string;
    message_text: string;
    email_sent: boolean;
}
export declare class MeetingInviteService {
    private readonly dataSource;
    private readonly codeGenerator;
    private readonly mailsService;
    private readonly jwt;
    private readonly logger;
    constructor(dataSource: DataSource, codeGenerator: RoomCodeGeneratorService, mailsService: MailsService, jwt: JwtService);
    private signGuestToken;
    private get publicBase();
    private hashOtp;
    private waNumber;
    create(meetingId: number, dto: CreateInviteDto, currentUserId: number): Promise<DeliveryPayload>;
    send(inviteId: number, dto: SendInviteDto, currentUserId: number): Promise<DeliveryPayload>;
    private sendEmail;
    private emailContext;
    private buildDelivery;
    listForMeeting(meetingId: number): Promise<MeetingInvite[]>;
    markSent(inviteId: number, channel: InviteChannel): Promise<MeetingInvite>;
    revoke(inviteId: number, currentUserId: number): Promise<MeetingInvite>;
    peek(token: string): Promise<{
        ok: boolean;
        requires_otp: boolean;
        requires_login: boolean;
        otp_expired: boolean;
        meeting: {
            room_code: string;
            title: string;
            company: string | null;
            host: string | null;
            scheduled_at: Date | null;
            status: MeetingStatus;
            is_recorded: boolean;
        };
        recipient_name: string | null;
        expires_at: Date;
    }>;
    redeem(token: string, dto: RedeemInviteDto): Promise<{
        ok: boolean;
        room_code: string;
        grant_role: string;
        display_name: string;
        meeting_id: number;
        invite_id: number;
        token: string;
    }>;
    resendOtp(token: string): Promise<{
        ok: true;
        sent_to: string;
    }>;
    private mask;
    private loadMeeting;
    private assertUsable;
}
