/// <reference types="node" />
import { Bucket, File, GetSignedUrlConfig, Storage } from '@google-cloud/storage';
import * as T from 'fp-ts/lib/Task';
import * as TE from 'fp-ts/lib/TaskEither';
import * as R from 'fp-ts/lib/Reader';
import * as RT from 'fp-ts/lib/ReaderTask';
import * as RTE from 'fp-ts/lib/ReaderTaskEither';
import * as FileType from 'functional-types/lib/FileType';
declare type FileType = FileType.FileType;
export { FileType };
export interface Path {
    bucket: string;
    filename: string;
}
export interface ReadOnlyConfig {
    expires_in: number;
}
export interface WriteOnlyConfig extends ReadOnlyConfig {
    file_type: FileType;
}
export interface ListFilesOptions {
    prefix?: string;
    delimiter?: string;
}
export interface Metadata {
    kind: string;
    id: string;
    selfLink: string;
    mediaLink: string;
    name: string;
    bucket: string;
    generation: string;
    contentType: string;
    size: string;
    timeCreated: string;
    updated: string;
}
/**
 * ```haskell
 * isPath :: a -> bool
 * ```
 */
export declare const isPath: (a: unknown) => a is Path;
/**
 * ```haskell
 * getWriteOnlySignedUrlConfigFromConfig :: WriteOnlyConfig -> GetSignedUrlConfig
 * ```
 */
export declare const getWriteOnlySignedUrlConfigFromConfig: (config: WriteOnlyConfig) => GetSignedUrlConfig;
/**
 * ```haskell
 * getReadOnlySignedUrlConfigFromConfig :: WriteOnlyConfig -> GetSignedUrlConfig
 * ```
 */
export declare const getReadOnlySignedUrlConfigFromConfig: (config: ReadOnlyConfig) => GetSignedUrlConfig;
/**
 * ```haskell
 * getSignedUrlTask :: File -> ReaderTask GetSignedUrlConfig [String]
 * ```
 */
export declare const getSignedUrlTask: (file: File) => RT.ReaderTask<GetSignedUrlConfig, [string]>;
/**
 * ```haskell
 * getWriteOnlySignedUrlArrayFromFileTask :: File -> ReaderTask WriteOnlyConfig [String]
 * ```
 */
export declare const getWriteOnlySignedUrlArrayFromFileTask: (file: File) => R.Reader<WriteOnlyConfig, T.Task<[string]>>;
/**
 * ```haskell
 * getReadOnlySignedUrlArrayFromFileTask :: File -> ReaderTask WriteOnlyConfig [String]
 * ```
 */
export declare const getReadOnlySignedUrlArrayFromFileTask: (file: File) => R.Reader<ReadOnlyConfig, T.Task<[string]>>;
/**
 * ```haskell
 * getUploadUrlFromFileTask :: File -> ReaderTask WriteOnlyConfig String
 * ```
 */
export declare const getUploadUrlFromFileTask: (file: File) => RT.ReaderTask<WriteOnlyConfig, string>;
/**
 * ```haskell
 * getDownloadUrlFromFileTask :: File -> ReaderTask WriteOnlyConfig String
 * ```
 */
export declare const getDownloadUrlFromFileTask: (file: File) => RT.ReaderTask<ReadOnlyConfig, string>;
/**
 * ```haskell
 * getTaskEitherFromTask :: Task -> TaskEither
 * ```
 */
export declare const getTaskEitherFromTask: <A>(thunk: T.Task<A>) => TE.TaskEither<Error, A>;
/**
 * ```haskell
 * getUploadUrlFromFile :: File -> ReaderTaskEither WriteOnlyConfig String Error
 * ```
 */
export declare const getUploadUrlFromFile: (file: File) => RTE.ReaderTaskEither<WriteOnlyConfig, Error, string>;
/**
 * ```haskell
 * getDownloadUrlFromFile :: File -> ReaderTaskEither WriteOnlyConfig String Error
 * ```
 */
export declare const getDownloadUrlFromFile: (file: File) => RTE.ReaderTaskEither<ReadOnlyConfig, Error, string>;
/**
 * ```haskell
 * getFileFromBucket :: Bucket -> Reader Path File
 * ```
 */
export declare const getFileFromBucket: (bucket: Bucket) => R.Reader<Path, File>;
/**
 * ```haskell
 * getFileFromStorage :: Storage -> Reader Path File
 * ```
 */
export declare const getFileFromStorage: (storage: Storage) => R.Reader<Path, File>;
/**
 * ```haskell
 * fetchFile :: File -> TaskEither File Error
 * ```
 */
export declare const fetchFile: (file: File) => TE.TaskEither<Error, File>;
/**
 * ```haskell
 * fetchFileFromStorage :: Storage -> ReaderTaskEither Path File Error
 * ```
 */
export declare const fetchFileFromStorage: (storage: Storage) => RTE.ReaderTaskEither<Path, Error, File>;
/**
 * ```haskell
 * getUploadUrlFromStorage :: Storage -> Path -> ReaderTaskEither WriteOnlyConfig String Error
 * ```
 */
export declare const getUploadUrlFromStorage: (storage: Storage) => R.Reader<Path, RTE.ReaderTaskEither<WriteOnlyConfig, Error, string>>;
/**
 * ```haskell
 * getBufferSingletonFromFilePromise :: File -> Task [Buffer]
 * ```
 */
export declare const getBufferSingletonFromFileTask: (file: File) => T.Task<[Buffer]>;
/**
 * ```haskell
 * getBufferSingletonFromFile :: File -> TaskEither [Buffer] Error
 * ```
 */
export declare const getBufferSingletonFromFile: (file: File) => TE.TaskEither<Error, [Buffer]>;
/**
 * ```haskell
 * getBufferFromFile :: File -> TaskEither Buffer Error
 * ```
 */
export declare const getBufferFromFile: (file: File) => TE.TaskEither<Error, Buffer>;
/**
 * ```haskell
 * getBufferFromStorage :: Storage -> ReaderTaskEither Path File Error
 * ```
 */
export declare const getBufferFromStorage: (storage: Storage) => RTE.ReaderTaskEither<Path, Error, Buffer>;
/**
 * ```haskell
 * storeBufferToFileTask :: File -> ReaderTask Buffer File
 * ```
 */
export declare const storeBufferToFileTask: (file: File) => RT.ReaderTask<Buffer, File>;
/**
 * ```haskell
 * storeBufferToFile :: File -> ReaderTaskEither Buffer File Error
 * ```
 */
export declare const storeBufferToFile: (file: File) => RTE.ReaderTaskEither<Buffer, Error, File>;
/**
 * ```haskell
 * storeBufferToStorage :: Storage -> Reader Path ReaderTaskEither Buffer File Error
 * ```
 */
export declare const storeBufferToStorage: (storage: Storage) => R.Reader<Path, RTE.ReaderTaskEither<Buffer, Error, File>>;
/**
 * ```haskell
 * storeMetadataToFileTask :: File -> ReaderTask Metadata File
 * ```
 */
export declare const storeMetadataToFileTask: (file: File) => RT.ReaderTask<Partial<Metadata>, File>;
/**
 * ```haskell
 * storeMetadataToFile :: File -> ReaderTaskEither Metadata File Error
 * ```
 */
export declare const storeMetadataToFile: (file: File) => RTE.ReaderTaskEither<Partial<Metadata>, Error, File>;
/**
 * ```haskell
 * storeMetadataToStorage :: Metadata -> Reader Path ReaderTaskEither Metadata File Error
 * ```
 */
export declare const storeMetadataToStorage: (storage: Storage) => R.Reader<Path, RTE.ReaderTaskEither<Partial<Metadata>, Error, File>>;
/**
 * ```haskell
 * getBucketFromStorage :: Storage -> Reader String Bucket
 * ```
 */
export declare const getBucketFromStorage: (storage: Storage) => R.Reader<string, Bucket>;
/**
 * ```haskell
 * listFilesInBucket :: Bucket -> ReaderTaskEither ListFilesOptions [File] Error
 * ```
 */
export declare const listFilesInBucket: (bucket: Bucket) => RTE.ReaderTaskEither<ListFilesOptions, Error, File[]>;
/**
 * ```haskell
 * listFilesInStorage :: Storage -> Reader String (ReaderTaskEither ListFilesOptions [File] Error)
 * ```
 */
export declare const listFilesInStorage: (storage: Storage) => R.Reader<string, RTE.ReaderTaskEither<ListFilesOptions, Error, File[]>>;
