import { FileData, UploadFileResponse, UploadFileRequest, UpdateFileRequest, ReadFileRequest, DownloadFileRequest, RenameFileRequest, MoveFileRequest, ReadFileAccessRequest, SetFileAccessRequest, GenerateTemporaryTokenRequest, GenerateTemporaryTokenResponse, GetPreviewLinkRequest, GetPreviewLinkResponse, CreateTemporaryLinkRequest, CreateTemporaryLinkResponse, ReadFileAccessResponse, PublicDownloadFileRequest } from "../types/files.types.js";
import { HttpClient } from "../http-client.js";
export declare class FileOperations {
    private httpClient;
    constructor(httpClient: HttpClient);
    /**
     * Upload a file to a directory
     * @param params - File upload parameters
     * @param params.file - File to upload (File object, Buffer, or string file path)
     * @param params.directory_id - Optional directory ID to upload to (defaults to root)
     * @param params.passphrase - Optional passphrase for file encryption
     * @returns Promise<UploadFileResponse> - The upload response
     * @example
     * // Upload with File object (browser)
     * await sdk.file.upload({
     *   file: fileInput.files[0],
     *   directory_id: "dir_123"
     * });
     *
     * @example
     * // Upload with string path (Node.js)
     * await sdk.file.upload({
     *   file: "test.txt",
     *   directory_id: "dir_123",
     *   passphrase: "MySecret123!" Alphanumeric passphrase with a special character is required
     * });
     */
    upload(params: UploadFileRequest): Promise<UploadFileResponse>;
    /**
     * Read a file by ID
     * @param params - File read parameters
     * @param params.fileId - The ID of the file to retrieve
     * @param params.includeChunks - Optional flag to include IPFS chunks (default: false)
     * @returns Promise<FileData> - The file details
     */
    read(params: ReadFileRequest): Promise<FileData>;
    /**
     * Update a file
     * @param fileId - The ID of the file to update
     * @param params - File update parameters
     * @returns Promise<string> - Success message
     */
    update(fileId: string, params: UpdateFileRequest): Promise<string>;
    /**
     * Delete a file
     * @param fileId - The ID of the file to delete
     * @returns Promise<string> - Success message
     */
    delete(fileId: string): Promise<string>;
    /**
     * Download a file by ID (authenticated/private)
     * @param params - File download parameters
     * @param params.fileId - The ID of the file to download
     * @param params.passphrase - Optional passphrase for file decryption (required for encrypted files)
     * @returns Promise<Buffer> - The file content as buffer
     * @example
     * await sdk.file.download({ fileId: "file_1234567890", passphrase: "MySecret123!" });
     */
    download(params: DownloadFileRequest): Promise<Buffer>;
    /**
     * Rename a file by ID
     * @param params - Rename parameters
     * @param params.fileId - The ID of the file to rename
     * @param params.name - The new name for the file
     * @returns Promise<string> - Success message
     * @example
     * await sdk.file.rename({ fileId: "file_1234567890", name: "test2.txt" });
     */
    rename(params: RenameFileRequest): Promise<string>;
    /**
     * Move a file to a different directory
     * @param params - Move parameters
     * @param params.fileId - The ID of the file to move
     * @param params.directoryId - The ID of the target directory
     * @returns Promise<string> - Success message
     * @example
     * await sdk.file.move({ fileId: "file_1234567890", directoryId: "dir_1234567890" });
     */
    move(params: MoveFileRequest): Promise<string>;
    /**
     * Set file access permissions
     * @param params - File access set parameters
     * @param params.fileId - The ID of the file to set access for
     * @param params.access - The access type: "public", "private", "password", "email"
     * @param params.value - Required for password (string) and email (string[])
     * @returns Promise<string> - Success message
     * @example
     * // Set to public
     * await sdk.file.setAccess({
     *   fileId: "file_1234567890",
     *   access: "public"
     * });
     *
     * // Set to private
     * await sdk.file.setAccess({
     *   fileId: "file_1234567890",
     *   access: "private"
     * });
     *
     * @example
     * // Set password protection
     * await sdk.file.setAccess({
     *   fileId: "file_1234567890",
     *   access: "password",
     *   value: "1234567890"
     * });
     *
     * @example
     * // Set email access
     * await sdk.file.setAccess({
     *   fileId: "file_1234567890",
     *   access: "email",
     *   value: ["test@test.com", "test2@test.com"] // make sure to pass existing koneksi email accounts
     * });
     */
    setAccess(params: SetFileAccessRequest): Promise<string>;
    /**
     * Generate a temporary token for file access
     * @param params - Generate temporary token parameters
     * @param params.fileId - The ID of the file to generate a temporary token for
     * @param params.expiresIn - Optional expiration time in seconds (default: 24 hours)
     * @returns Promise<GenerateTemporaryTokenResponse> - The temporary token response with file_key and duration
     * @example
     * const token = await sdk.file.generateTemporaryToken({
     *   fileId: "file_1234567890",
     *   expiresIn: 3600 // 1 hour
     * });
     * // Returns: { duration: "1h0m0s", file_key: "file_1234567890_abc123..." }
     */
    generateTemporaryToken(params: GenerateTemporaryTokenRequest): Promise<GenerateTemporaryTokenResponse>;
    /**
     * Get a preview link for a file
     * @param params - Get preview link parameters
     * @param params.fileId - The ID of the file to get a preview link for
     * @returns Promise<GetPreviewLinkResponse> - The preview link response
     * @example
     * const preview = await sdk.file.getPreviewLink({
     *   fileId: "file_1234567890"
     * });
     * // Returns: { previewUrl: "https://staging.koneksi.co.kr/preview/file_1234567890" }
     */
    getPreviewLink(params: GetPreviewLinkRequest): Promise<GetPreviewLinkResponse>;
    /**
     * Create a temporary preview link for a file
     * @param params - Create temporary link parameters
     * @param params.fileId - The ID of the file to create a temporary link for
     * @param params.expiresIn - Optional expiration time in seconds (e.g 3600 for 1 hour)
     * @returns Promise<CreateTemporaryLinkResponse> - The temporary preview link response
     * @example
     * const tempLink = await sdk.file.createTemporaryLink({
     *   fileId: "file_1234567890",
     *   expiresIn: 3600 // 1 hour
     * });
     * // Returns: {
     * //   temporaryPreviewUrl: "https://app-staging.koneksi.co.kr/preview/file_1234567890?token=abc123...",
     * //   duration: "1h0m0s",
     * //   file_key: "file_1234567890_abc123..."
     * // }
     */
    createTemporaryLink(params: CreateTemporaryLinkRequest): Promise<CreateTemporaryLinkResponse>;
    /**
     * Read file access information by ID (using public endpoint)
     * @param params - File access read parameters
     * @param params.fileId - The ID of the file to get access information for
     * @returns Promise<ReadFileAccessResponse> - The file access information
     * @example
     * await sdk.file.publicRead({ fileId: "file_1234567890" });
     */
    publicRead(params: ReadFileAccessRequest): Promise<ReadFileAccessResponse>;
    /**
     * Download a file by ID (public/token/password access)
     * @param params - Public file download parameters
     * @param params.fileId - The ID of the file to download
     * @param params.temporaryToken - Optional temporary token
     * @param params.shared - Optional shared access parameters for password-protected files
     * @param params.passphrase - Optional passphrase for file decryption
     * @returns Promise<Buffer> - The file content as buffer
     * @example
     * await sdk.file.publicDownload({ fileId: "file_1234567890", temporaryToken: "token123" });
     * await sdk.file.publicDownload({ fileId: "file_1234567890", shared: { access: "password", value: "Password123!" } });
     */
    publicDownload(params: PublicDownloadFileRequest): Promise<Buffer>;
}
