import { ExpressionBuilder, Insertable, Kysely, Selectable, ShallowDehydrateObject, Updateable } from 'kysely';
import { Album } from "../database";
import { SharedLinkType } from "../enum";
import { DB } from "../schema";
import { AssetExifTable } from "../schema/tables/asset-exif.table";
import { SharedLinkTable } from "../schema/tables/shared-link.table";
export type SharedLinkSearchOptions = {
    userId: string;
    id?: string;
    albumId?: string;
};
export declare const withExifInfo: (eb: ExpressionBuilder<DB, "asset">) => import("kysely").AliasedSelectQueryBuilder<{
    assetId: string;
    description: string;
    colorspace: string | null;
    state: string | null;
    make: string | null;
    model: string | null;
    exifImageWidth: number | null;
    exifImageHeight: number | null;
    fileSizeInByte: number | null;
    orientation: string | null;
    dateTimeOriginal: Date | null;
    modifyDate: Date | null;
    lensModel: string | null;
    fNumber: number | null;
    focalLength: number | null;
    iso: number | null;
    latitude: number | null;
    longitude: number | null;
    city: string | null;
    country: string | null;
    fps: number | null;
    exposureTime: string | null;
    livePhotoCID: string | null;
    timeZone: string | null;
    projectionType: string | null;
    profileDescription: string | null;
    bitsPerSample: number | null;
    autoStackId: string | null;
    rating: number | null;
    tags: string[] | null;
}, "exifInfo">;
export declare class SharedLinkRepository {
    private db;
    constructor(db: Kysely<DB>);
    get(userId: string, id: string): Promise<{
        password: string | null;
        key: Buffer<ArrayBufferLike>;
        slug: string | null;
        id: string;
        description: string | null;
        createdAt: Date;
        type: SharedLinkType;
        userId: string;
        expiresAt: Date | null;
        albumId: string | null;
        allowUpload: boolean;
        allowDownload: boolean;
        showExif: boolean;
        assets: {
            id: string;
            createdAt: string;
            type: import("src/enum").AssetType;
            duration: number | null;
            updatedAt: string;
            deletedAt: string | null;
            status: import("src/enum").AssetStatus;
            updateId: string;
            ownerId: string;
            width: number | null;
            height: number | null;
            originalPath: string;
            fileCreatedAt: string;
            fileModifiedAt: string;
            isFavorite: boolean;
            checksum: string;
            checksumAlgorithm: import("src/enum").ChecksumAlgorithm;
            livePhotoVideoId: string | null;
            originalFileName: string;
            thumbhash: string | null;
            isOffline: boolean;
            libraryId: string | null;
            isExternal: boolean;
            localDateTime: string;
            stackId: string | null;
            duplicateId: string | null;
            visibility: import("src/enum").AssetVisibility;
            isEdited: boolean;
            exifInfo: {
                description: string;
                colorspace: string | null;
                assetId: string;
                state: string | null;
                make: string | null;
                model: string | null;
                exifImageWidth: number | null;
                exifImageHeight: number | null;
                fileSizeInByte: number | null;
                orientation: string | null;
                dateTimeOriginal: string | null;
                modifyDate: string | null;
                lensModel: string | null;
                fNumber: number | null;
                focalLength: number | null;
                iso: number | null;
                latitude: number | null;
                longitude: number | null;
                city: string | null;
                country: string | null;
                fps: number | null;
                exposureTime: string | null;
                livePhotoCID: string | null;
                timeZone: string | null;
                projectionType: string | null;
                profileDescription: string | null;
                bitsPerSample: number | null;
                autoStackId: string | null;
                rating: number | null;
                tags: string[] | null;
            };
        }[];
        album: ShallowDehydrateObject<Album> | null;
    } | undefined>;
    getAll({ userId, id, albumId }: SharedLinkSearchOptions): Promise<{
        password: string | null;
        key: Buffer<ArrayBufferLike>;
        slug: string | null;
        id: string;
        description: string | null;
        createdAt: Date;
        type: SharedLinkType;
        userId: string;
        expiresAt: Date | null;
        albumId: string | null;
        allowUpload: boolean;
        allowDownload: boolean;
        showExif: boolean;
        assets: {
            id: string;
            createdAt: string;
            type: import("src/enum").AssetType;
            duration: number | null;
            updatedAt: string;
            deletedAt: string | null;
            status: import("src/enum").AssetStatus;
            updateId: string;
            ownerId: string;
            width: number | null;
            height: number | null;
            originalPath: string;
            fileCreatedAt: string;
            fileModifiedAt: string;
            isFavorite: boolean;
            checksum: string;
            checksumAlgorithm: import("src/enum").ChecksumAlgorithm;
            livePhotoVideoId: string | null;
            originalFileName: string;
            thumbhash: string | null;
            isOffline: boolean;
            libraryId: string | null;
            isExternal: boolean;
            localDateTime: string;
            stackId: string | null;
            duplicateId: string | null;
            visibility: import("src/enum").AssetVisibility;
            isEdited: boolean;
        }[];
        album: ShallowDehydrateObject<Album> | null;
    }[]>;
    getByKey(key: Buffer): Promise<{
        albumId: string | null;
        password: string | null;
        id: string;
        userId: string;
        expiresAt: Date | null;
        allowUpload: boolean;
        allowDownload: boolean;
        showExif: boolean;
        user: {
            id: string;
            email: string;
            name: string;
            isAdmin: boolean;
            quotaSizeInBytes: number | null;
            quotaUsageInBytes: number;
        } | null;
    } | undefined>;
    getBySlug(slug: string): Promise<{
        albumId: string | null;
        password: string | null;
        id: string;
        userId: string;
        expiresAt: Date | null;
        allowUpload: boolean;
        allowDownload: boolean;
        showExif: boolean;
        user: {
            id: string;
            email: string;
            name: string;
            isAdmin: boolean;
            quotaSizeInBytes: number | null;
            quotaUsageInBytes: number;
        } | null;
    } | undefined>;
    private authBuilder;
    create(entity: Insertable<SharedLinkTable> & {
        assetIds?: string[];
    }): Promise<{
        password: string | null;
        key: Buffer<ArrayBufferLike>;
        slug: string | null;
        id: string;
        description: string | null;
        createdAt: Date;
        type: SharedLinkType;
        userId: string;
        expiresAt: Date | null;
        albumId: string | null;
        allowUpload: boolean;
        allowDownload: boolean;
        showExif: boolean;
        assets: (ShallowDehydrateObject<{
            id: string;
            createdAt: Date;
            type: import("src/enum").AssetType;
            duration: number | null;
            updatedAt: Date;
            deletedAt: Date | null;
            status: import("src/enum").AssetStatus;
            updateId: string;
            ownerId: string;
            width: number | null;
            height: number | null;
            originalPath: string;
            fileCreatedAt: Date;
            fileModifiedAt: Date;
            isFavorite: boolean;
            checksum: Buffer<ArrayBufferLike>;
            checksumAlgorithm: import("src/enum").ChecksumAlgorithm;
            livePhotoVideoId: string | null;
            originalFileName: string;
            thumbhash: Buffer<ArrayBufferLike> | null;
            isOffline: boolean;
            libraryId: string | null;
            isExternal: boolean;
            localDateTime: Date;
            stackId: string | null;
            duplicateId: string | null;
            visibility: import("src/enum").AssetVisibility;
            isEdited: boolean;
        }> & {
            exifInfo: ShallowDehydrateObject<Selectable<AssetExifTable>>;
        })[];
    }>;
    update(entity: Updateable<SharedLinkTable> & {
        id: string;
        assetIds?: string[];
    }): Promise<{
        password: string | null;
        key: Buffer<ArrayBufferLike>;
        slug: string | null;
        id: string;
        description: string | null;
        createdAt: Date;
        type: SharedLinkType;
        userId: string;
        expiresAt: Date | null;
        albumId: string | null;
        allowUpload: boolean;
        allowDownload: boolean;
        showExif: boolean;
        assets: (ShallowDehydrateObject<{
            id: string;
            createdAt: Date;
            type: import("src/enum").AssetType;
            duration: number | null;
            updatedAt: Date;
            deletedAt: Date | null;
            status: import("src/enum").AssetStatus;
            updateId: string;
            ownerId: string;
            width: number | null;
            height: number | null;
            originalPath: string;
            fileCreatedAt: Date;
            fileModifiedAt: Date;
            isFavorite: boolean;
            checksum: Buffer<ArrayBufferLike>;
            checksumAlgorithm: import("src/enum").ChecksumAlgorithm;
            livePhotoVideoId: string | null;
            originalFileName: string;
            thumbhash: Buffer<ArrayBufferLike> | null;
            isOffline: boolean;
            libraryId: string | null;
            isExternal: boolean;
            localDateTime: Date;
            stackId: string | null;
            duplicateId: string | null;
            visibility: import("src/enum").AssetVisibility;
            isEdited: boolean;
        }> & {
            exifInfo: ShallowDehydrateObject<Selectable<AssetExifTable>>;
        })[];
    }>;
    remove(id: string): Promise<void>;
    addAssets(id: string, assetIds: string[]): Promise<{
        assetId: string;
    }[]>;
    private getSharedLinks;
}
