@uploadcare/upload-client
Version:
Library for work with Uploadcare Upload API
547 lines (543 loc) • 22 kB
TypeScript
// Generated by dts-bundle-generator v6.12.0
import NodeFormData from 'form-data';
export type CustomUserAgentOptions = {
publicKey: string;
libraryName: string;
libraryVersion: string;
languageName: string;
integration?: string;
};
export type CustomUserAgentFn = (options: CustomUserAgentOptions) => string;
export type CustomUserAgent = string | CustomUserAgentFn;
export type GetUserAgentOptions = {
libraryName: string;
libraryVersion: string;
publicKey?: string;
integration?: string;
userAgent?: CustomUserAgent | null;
};
export declare function getUserAgent({ libraryName, libraryVersion, userAgent, publicKey, integration }: GetUserAgentOptions): string;
export declare class UploadcareError extends Error {
}
export declare class NetworkError extends UploadcareError {
originalProgressEvent: ProgressEvent;
constructor(progressEvent: ProgressEvent);
}
export type GeoLocation = {
latitude: number;
longitude: number;
};
export type ImageInfo = {
height: number;
width: number;
geoLocation: GeoLocation | null;
datetimeOriginal: string | null;
format: string;
colorMode: string;
dpi: {
"0": number;
"1": number;
} | null;
orientation: number | null;
sequence: boolean | null;
};
export type AudioInfo = {
bitrate: number | null;
codec: string | null;
sampleRate: number | null;
channels: string | null;
};
export type VideoInfo = {
duration: number;
format: string;
bitrate: number;
audio: AudioInfo | null;
video: {
height: number;
width: number;
frameRate: number;
bitrate: number;
codec: string;
};
};
export type MimeInfo = {
mime: string;
type: string;
subtype: string;
};
export type ContentInfo = {
mime?: MimeInfo;
image?: ImageInfo;
video?: VideoInfo;
};
export type Metadata = Record<string, string>;
export type StoreValue = "auto" | boolean;
export declare class CancelError extends UploadcareError {
isCancel: boolean;
constructor(message?: string);
}
export interface DefaultSettings {
baseCDN: string;
baseURL: string;
maxContentLength: number;
retryThrottledRequestMaxTimes: number;
retryNetworkErrorMaxTimes: number;
multipartMinFileSize: number;
multipartChunkSize: number;
multipartMinLastPartSize: number;
maxConcurrentRequests: number;
pollingTimeoutMilliseconds: number;
pusherKey: string;
}
export interface Settings extends Partial<DefaultSettings> {
publicKey: string;
fileName?: string;
contentType?: string;
store?: StoreValue;
secureSignature?: string;
secureExpire?: string;
integration?: string;
userAgent?: CustomUserAgent;
checkForUrlDuplicates?: boolean;
saveUrlForRecurrentUploads?: boolean;
source?: string;
jsonpCallback?: string;
}
export type BrowserFile = Blob | File;
export type NodeFile = Buffer;
export type ReactNativeAsset = {
type: string;
uri: string;
name?: string;
};
export type SupportedFileInput = BrowserFile | NodeFile | ReactNativeAsset;
export type Sliceable = BrowserFile | NodeFile;
export type FileInfo = {
size: number;
done: number;
total: number;
uuid: Uuid;
fileId: Uuid;
originalFilename: string;
filename: string;
mimeType: string;
isImage: boolean;
isStored: boolean;
isReady: string;
imageInfo: ImageInfo | null;
videoInfo: VideoInfo | null;
contentInfo: ContentInfo | null;
s3Bucket?: string;
metadata?: Metadata;
};
export type GroupFileInfo = FileInfo & {
defaultEffects: string;
};
export type GroupInfo = {
datetimeCreated: string;
datetimeStored: string | null;
filesCount: string;
cdnUrl: string;
files: (GroupFileInfo | null)[];
url: string;
id: GroupId;
};
export type Token = string;
export type Uuid = string;
export type GroupId = string;
export type Url = string;
export type ComputableProgressInfo = {
isComputable: true;
value: number;
};
export type UnknownProgressInfo = {
isComputable: false;
};
export type ProgressCallback<T = ComputableProgressInfo | UnknownProgressInfo> = (arg: T) => void;
export type BaseResponse = {
file: Uuid;
};
export type BaseOptions = {
publicKey: string;
fileName?: string;
baseURL?: string;
secureSignature?: string;
secureExpire?: string;
store?: StoreValue;
contentType?: string;
signal?: AbortSignal;
onProgress?: ProgressCallback;
source?: string;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
metadata?: Metadata;
};
/**
* Performs file uploading request to Uploadcare Upload API. Can be canceled and
* has progress.
*/
export function base(file: SupportedFileInput, { publicKey, fileName, contentType, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, metadata }: BaseOptions): Promise<BaseResponse>;
export declare enum TypeEnum {
Token = "token",
FileInfo = "file_info"
}
export type TokenResponse = {
type: TypeEnum.Token;
token: string;
};
export type FileInfoResponse = {
type: TypeEnum.FileInfo;
} & FileInfo;
export type FromUrlSuccessResponse = FileInfoResponse | TokenResponse;
export type FromUrlResponse = FromUrlSuccessResponse;
export type FromUrlOptions = {
publicKey: string;
baseURL?: string;
store?: StoreValue;
fileName?: string;
checkForUrlDuplicates?: boolean;
saveUrlForRecurrentUploads?: boolean;
secureSignature?: string;
secureExpire?: string;
signal?: AbortSignal;
source?: string;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
metadata?: Metadata;
};
/** Uploading files from URL. */
export function fromUrl(sourceUrl: Url, { publicKey, baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, metadata }: FromUrlOptions): Promise<FromUrlSuccessResponse>;
/** @see https://uploadcare.com/api-refs/upload-api/#tag/Errors */
export type ServerErrorCode = "AccountBlockedError" | "AccountLimitsExceededError" | "AccountUnpaidError" | "AutostoreDisabledError" | "BaseViewsError" | "FileMetadataKeyDuplicatedError" | "FileMetadataKeyEmptyError" | "FileMetadataKeyForbiddenError" | "FileMetadataKeyLengthTooBigError" | "FileMetadataKeysNumberTooBigError" | "FileMetadataValueEmptyError" | "FileMetadataValueForbiddenError" | "FileMetadataValueLengthTooBigError" | "FileSizeLimitExceededError" | "MethodNotAllowedError" | "NullCharactersForbiddenError" | "PostRequestParserFailedError" | "ProjectPublicKeyInvalidError" | "ProjectPublicKeyRemovedError" | "ProjectPublicKeyRequiredError" | "RequestFileNumberLimitExceededError" | "RequestFiledsNumberLimitExceededError" | "RequestSizeLimitExceededError" | "RequestThrottledError" | "SignatureExpirationError" | "SignatureExpirationInvalidError" | "SignatureExpirationRequiredError" | "SignatureInvalidError" | "SignatureRequiredError" | "UploadAPIError" | "UploadFailedError" | "DownloadFileError" | "DownloadFileHTTPClientError" | "DownloadFileHTTPNetworkError" | "DownloadFileHTTPServerError" | "DownloadFileHTTPURLValidationError" | "DownloadFileInternalServerError" | "DownloadFileNotFoundError" | "DownloadFileSizeLimitExceededError" | "DownloadFileTaskFailedError" | "DownloadFileTimeLimitExceededError" | "DownloadFileValidationFailedError" | "FileIdInvalidError" | "FileIdNotUniqueError" | "FileIdRequiredError" | "FileNotFoundError" | "FileRequiredError" | "FilesNumberLimitExceededError" | "FilesRequiredError" | "InternalRequestForbiddenError" | "InternalRequestInvalidError" | "MultipartFileAlreadyUploadedError" | "MultipartFileCompletionFailedError" | "MultipartFileIdRequiredError" | "MultipartFileNotFoundError" | "MultipartFileSizeLimitExceededError" | "MultipartFileSizeTooSmallError" | "MultipartPartSizeInvalidError" | "MultipartPartSizeTooBigError" | "MultipartPartSizeTooSmallError" | "MultipartSizeInvalidError" | "MultipartUploadSizeTooLargeError" | "MultipartUploadSizeTooSmallError" | "RequestParamRequiredError" | "SourceURLRequiredError" | "TokenRequiredError" | "UUIDInvalidError" | "UploadViewsError" | "UploadcareFileIdDuplicatedError" | "UploadcareFileIdInvalidError" | "UploadcareFileIdRequiredError" | "GroupFileURLParsingFailedError" | "GroupFilesInvalidError" | "GroupFilesNotFoundError" | "GroupIdRequiredError" | "GroupNotFoundError" | "GroupViewsError" | "FileInfectedError" | "FileTypeForbiddenError" | "HostnameNotFoundError" | "URLBlacklistedError" | "URLHostMalformedError" | "URLHostPrivateIPForbiddenError" | "URLHostRequiredError" | "URLParsingFailedError" | "URLRedirectsLimitExceededError" | "URLSchemeInvalidError" | "URLSchemeRequiredError" | "URLValidationError";
export declare enum Status {
Unknown = "unknown",
Waiting = "waiting",
Progress = "progress",
Error = "error",
Success = "success"
}
export type StatusUnknownResponse = {
status: Status.Unknown;
};
export type StatusWaitingResponse = {
status: Status.Waiting;
};
export type StatusProgressResponse = {
status: Status.Progress;
size: number;
done: number;
total: number | "unknown";
};
export type StatusErrorResponse = {
status: Status.Error;
error: string;
errorCode: ServerErrorCode;
};
export type StatusSuccessResponse = {
status: Status.Success;
} & FileInfo;
export type FromUrlStatusResponse = StatusUnknownResponse | StatusWaitingResponse | StatusProgressResponse | StatusErrorResponse | StatusSuccessResponse;
export type FromUrlStatusOptions = {
publicKey?: string;
baseURL?: string;
signal?: AbortSignal;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
};
/** Checking upload status and working with file tokens. */
export function fromUrlStatus(token: Token, { publicKey, baseURL, signal, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }?: FromUrlStatusOptions): Promise<FromUrlStatusResponse>;
export type GroupOptions = {
publicKey: string;
baseURL?: string;
jsonpCallback?: string;
secureSignature?: string;
secureExpire?: string;
signal?: AbortSignal;
source?: string;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
};
/** Create files group. */
export function group(uuids: Uuid[], { publicKey, baseURL, jsonpCallback, secureSignature, secureExpire, signal, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }: GroupOptions): Promise<GroupInfo>;
export type GroupInfoOptions = {
publicKey: string;
baseURL?: string;
signal?: AbortSignal;
source?: string;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
};
/** Get info about group. */
export function groupInfo(id: GroupId, { publicKey, baseURL, signal, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }: GroupInfoOptions): Promise<GroupInfo>;
export type InfoOptions = {
publicKey: string;
baseURL?: string;
signal?: AbortSignal;
source?: string;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
};
/** Returns a JSON dictionary holding file info. */
export function info(uuid: Uuid, { publicKey, baseURL, signal, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }: InfoOptions): Promise<FileInfo>;
export type MultipartStartOptions = {
publicKey: string;
contentType?: string;
fileName?: string;
baseURL?: string;
secureSignature?: string;
secureExpire?: string;
store?: StoreValue;
multipartChunkSize?: number;
signal?: AbortSignal;
source?: string;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
metadata?: Metadata;
};
export type MultipartPart = string;
export type MultipartStartResponse = {
parts: MultipartPart[];
uuid: Uuid;
};
/** Start multipart uploading. */
export function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, metadata }: MultipartStartOptions): Promise<MultipartStartResponse>;
export type MultipartUploadOptions = {
publicKey?: string;
contentType?: string;
signal?: AbortSignal;
onProgress?: ProgressCallback<ComputableProgressInfo>;
integration?: string;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
};
export type MultipartUploadResponse = {
code?: number;
};
/** Complete multipart uploading. */
export function multipartUpload(part: SupportedFileInput, url: MultipartPart, { contentType, signal, onProgress, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }: MultipartUploadOptions): Promise<MultipartUploadResponse>;
export type MultipartCompleteOptions = {
publicKey: string;
baseURL?: string;
signal?: AbortSignal;
source?: string;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
};
/** Complete multipart uploading. */
export function multipartComplete(uuid: Uuid, { publicKey, baseURL, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }: MultipartCompleteOptions): Promise<FileInfo>;
export declare class UploadcareFile {
readonly uuid: Uuid;
readonly name: string;
readonly size: number;
readonly isStored: boolean;
readonly isImage: boolean;
readonly mimeType: string;
readonly cdnUrl: string;
readonly s3Url: string | null;
readonly originalFilename: string;
readonly imageInfo: ImageInfo | null;
readonly videoInfo: VideoInfo | null;
readonly contentInfo: ContentInfo | null;
readonly metadata: Metadata | null;
readonly s3Bucket: string | null;
readonly defaultEffects: null | string;
constructor(fileInfo: FileInfo | GroupFileInfo, { baseCDN, fileName }?: {
baseCDN?: string;
fileName?: string;
});
}
export type FileFromOptions = {
publicKey: string;
fileName?: string;
baseURL?: string;
secureSignature?: string;
secureExpire?: string;
store?: StoreValue;
signal?: AbortSignal;
onProgress?: ProgressCallback;
source?: string;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
contentType?: string;
multipartMinFileSize?: number;
multipartChunkSize?: number;
maxConcurrentRequests?: number;
baseCDN?: string;
checkForUrlDuplicates?: boolean;
saveUrlForRecurrentUploads?: boolean;
pusherKey?: string;
metadata?: Metadata;
};
/** Uploads file from provided data. */
export declare function uploadFile(data: SupportedFileInput | Url | Uuid, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, maxConcurrentRequests, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata }: FileFromOptions): Promise<UploadcareFile>;
export type DirectOptions = {
publicKey: string;
fileName?: string;
baseURL?: string;
secureSignature?: string;
secureExpire?: string;
store?: StoreValue;
contentType?: string;
signal?: AbortSignal;
onProgress?: ProgressCallback;
source?: string;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
baseCDN?: string;
metadata?: Metadata;
};
export declare const uploadDirect: (file: SupportedFileInput, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata }: DirectOptions) => Promise<UploadcareFile>;
export type FromUploadedOptions = {
publicKey: string;
fileName?: string;
baseURL?: string;
signal?: AbortSignal;
onProgress?: ProgressCallback;
source?: string;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
baseCDN?: string;
};
export declare const uploadFromUploaded: (uuid: Uuid, { publicKey, fileName, baseURL, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN }: FromUploadedOptions) => Promise<UploadcareFile>;
export type UploadFromUrlOptions = {
baseCDN?: string;
onProgress?: ProgressCallback;
pusherKey?: string;
} & FromUrlOptions;
export declare const uploadFromUrl: (sourceUrl: string, { publicKey, fileName, baseURL, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, pusherKey, metadata }: UploadFromUrlOptions) => Promise<UploadcareFile>;
export type MultipartOptions = {
publicKey: string;
contentType?: string;
multipartChunkSize?: number;
fileName?: string;
fileSize?: number;
baseURL?: string;
secureSignature?: string;
secureExpire?: string;
store?: StoreValue;
signal?: AbortSignal;
onProgress?: ProgressCallback<ComputableProgressInfo>;
source?: string;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
maxConcurrentRequests?: number;
baseCDN?: string;
metadata?: Metadata;
};
export declare const uploadMultipart: (file: SupportedFileInput, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartChunkSize, maxConcurrentRequests, baseCDN, metadata }: MultipartOptions) => Promise<UploadcareFile>;
export declare class UploadcareGroup {
readonly uuid: GroupId;
readonly filesCount: string;
readonly totalSize: number;
readonly isStored: boolean;
readonly isImage: boolean;
readonly cdnUrl: string;
readonly files: UploadcareFile[];
readonly createdAt: string;
readonly storedAt: string | null;
constructor(groupInfo: GroupInfo, { baseCDN }?: {
baseCDN?: string;
});
}
export type GroupFromOptions = {
jsonpCallback?: string;
};
export declare function uploadFileGroup(data: SupportedFileInput[] | Url[] | Uuid[], { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartChunkSize, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, jsonpCallback }: FileFromOptions & GroupFromOptions): Promise<UploadcareGroup>;
export type IsReadyPoolOptions = {
publicKey: string;
baseURL?: string;
source?: string;
integration?: string;
userAgent?: CustomUserAgent;
retryThrottledRequestMaxTimes?: number;
retryNetworkErrorMaxTimes?: number;
onProgress?: ProgressCallback<ComputableProgressInfo>;
signal?: AbortSignal;
};
export declare function isReadyPoll(uuid: Uuid, { publicKey, baseURL, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, signal, onProgress }: IsReadyPoolOptions): Promise<FileInfo>;
export declare class UploadClient {
private settings;
constructor(settings: Settings);
updateSettings(newSettings: Settings): void;
getSettings(): Settings;
base(file: SupportedFileInput, options?: Partial<BaseOptions>): Promise<BaseResponse>;
info(uuid: Uuid, options?: Partial<InfoOptions>): Promise<FileInfo>;
fromUrl(sourceUrl: Url, options?: Partial<FromUrlOptions>): Promise<FromUrlResponse>;
fromUrlStatus(token: Token, options?: Partial<FromUrlStatusOptions>): Promise<FromUrlStatusResponse>;
group(uuids: Uuid[], options?: Partial<GroupOptions>): Promise<GroupInfo>;
groupInfo(id: GroupId, options?: Partial<GroupInfoOptions>): Promise<GroupInfo>;
multipartStart(size: number, options?: Partial<MultipartStartOptions>): Promise<MultipartStartResponse>;
multipartUpload(part: Sliceable, url: MultipartPart, options?: Partial<MultipartUploadOptions>): Promise<MultipartUploadResponse>;
multipartComplete(uuid: Uuid, options?: Partial<MultipartCompleteOptions>): Promise<FileInfo>;
uploadFile(data: SupportedFileInput | Url | Uuid, options?: Partial<FileFromOptions>): Promise<UploadcareFile>;
uploadFileGroup(data: SupportedFileInput[] | Url[] | Uuid[], options?: Partial<FileFromOptions & GroupFromOptions>): Promise<UploadcareGroup>;
isReadyPoll(uuid: Uuid, options?: Partial<IsReadyPoolOptions>): Promise<FileInfo>;
}
export type Task<T = unknown> = () => Promise<T>;
export declare class Queue {
private _concurrency;
private _pending;
private _running;
private _resolvers;
private _rejectors;
constructor(concurrency: number);
private _run;
add<T>(task: Task<T>): Promise<T>;
get pending(): number;
get running(): number;
set concurrency(value: number);
get concurrency(): number;
}
export type Headers = {
[key: string]: string | string[] | undefined;
};
export type ErrorRequestInfo = {
method?: string;
url: string;
query?: string;
data?: NodeFormData | FormData | SupportedFileInput;
headers?: Headers;
};
export type ErrorResponseInfo = {
error?: {
statusCode: number;
content: string;
errorCode: ServerErrorCode;
};
};
export declare class UploadError extends UploadcareError {
readonly code?: ServerErrorCode;
readonly request?: ErrorRequestInfo;
readonly response?: ErrorResponseInfo;
readonly headers?: Headers;
constructor(message: string, code?: ServerErrorCode, request?: ErrorRequestInfo, response?: ErrorResponseInfo, headers?: Headers);
}
/** @deprecated Please use NetworkError instead. */
export declare const UploadcareNetworkError: typeof NetworkError;
/** @deprecated Please use UploadError instead. */
export declare const UploadClientError: typeof UploadError;
export {};