/**
* MTKruto - Cross-runtime JavaScript library for building Telegram clients
* Copyright (C) 2023-2026 Roj
*
* This file is part of MTKruto.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*/
import { Api } from "../2_tl.js";
import type { LinkPreviewMediaSize } from "./0_link_preview_media_size.js";
import { type Audio } from "./1_audio.js";
import type { PeerGetter } from "./1_chat_p.js";
import { type Document } from "./1_document.js";
import { type Photo } from "./1_photo.js";
import { type Gift } from "./4_gift.js";
/**
* A link preview to be passed as an input.
* @unlisted
*/
export interface InputLinkPreview {
type: "input";
/** Whether link preview is disabled. */
isDisabled?: boolean;
/** The URL of the preview. */
url?: string;
/** The size of the media that will potentially be shown. */
mediaSize?: LinkPreviewMediaSize;
/** Whether the preview is to be shown above the message's text. */
isAboveText?: boolean;
}
/**
* A link preview.
* @unlisted
*/
export interface _LinkPreviewBase {
/** The ID of the link preview. */
id: string;
/** The size at which the media is expected to be displayed. */
mediaSize: LinkPreviewMediaSize;
/** Whether the preview is to be shown above the message's text. */
isAboveText: boolean;
}
/**
* A link preview that is being loaded.
* @unlisted
*/
export interface LinkPreviewLoading extends _LinkPreviewBase {
type: "loading";
/** The URL of the link preview. */
url?: string;
/** The point in time when the link preview started to load. */
date: number;
}
/**
* A link preview that was not loaded.
* @unlisted
*/
export interface LinkPreviewNotLoaded extends _LinkPreviewBase {
type: "notLoaded";
/** The URL of the link preview. */
url?: string;
}
/** @unlisted */
export interface _LinkPreviewLoadedBase extends _LinkPreviewBase {
/** The URL of the link preview. */
url: string;
}
/**
* A link preview of an unknown type.
* @unlisted
*/
export interface LinkPreviewUnknown extends _LinkPreviewLoadedBase {
type: "unknown";
}
/**
* An embedded video link preview.
* @unlisted
*/
export interface LinkPreviewPhoto extends _LinkPreviewLoadedBase {
type: "photo";
photo: Photo;
}
/** @unlisted */
export interface _LinkPreviewEmbeddedBase extends _LinkPreviewLoadedBase {
embedUrl: string;
width: number;
height: number;
duration: number;
}
/**
* An embedded video link preview.
* @unlisted
*/
export interface LinkPreviewEmbeddedVideo extends _LinkPreviewEmbeddedBase {
type: "embeddedVideo";
thumbnail?: Photo;
}
/**
* An embedded video link preview.
* @unlisted
*/
export interface LinkPreviewExternalVideo extends _LinkPreviewEmbeddedBase {
type: "externalVideo";
mimeType: string;
width: number;
height: number;
duration: number;
}
/** @unlisted */
export interface LinkPreviewVideo extends _LinkPreviewLoadedBase {
type: "video";
video: Document;
startTimestamp?: number;
thumbnail?: Photo;
}
/**
* An embedded audio link preview.
* @unlisted
*/
export interface LinkPreviewEmbeddedAudio extends _LinkPreviewEmbeddedBase {
type: "embeddedAudio";
duration: number;
width: number;
height: number;
}
/**
* An external audio link preview.
* @unlisted
*/
export interface LinkPreviewExternalAudio extends _LinkPreviewEmbeddedBase {
type: "externalAudio";
mimeType: string;
duration: number;
}
/**
* An audio link preview.
* @unlisted
*/
export interface LinkPreviewAudio extends _LinkPreviewLoadedBase {
type: "audio";
audio: Audio;
}
/**
* An gift link preview.
* @unlisted
*/
export interface LinkPreviewGift extends _LinkPreviewLoadedBase {
type: "gift";
gift: Gift;
}
/**
* A link preview that was loaded.
* @unlisted
*/
export type LinkPreviewLoaded = LinkPreviewUnknown | LinkPreviewPhoto | LinkPreviewEmbeddedVideo | LinkPreviewExternalVideo | LinkPreviewVideo | LinkPreviewEmbeddedAudio | LinkPreviewExternalAudio | LinkPreviewAudio | LinkPreviewGift;
/** A link preview. */
export type LinkPreview = InputLinkPreview | LinkPreviewLoading | LinkPreviewNotLoaded | LinkPreviewLoaded;
export declare function constructLinkPreview(media: Api.messageMediaWebPage, invert: boolean | undefined, getPeer: PeerGetter): LinkPreview;
//# sourceMappingURL=5_link_preview.d.ts.map