@itwin/object-storage-core
Version:
Core generic object storage interfaces
113 lines • 7.17 kB
TypeScript
import { Readable } from "stream";
import { BaseDirectory, ContentHeaders, Metadata, MultipartUploadOptions, ObjectDirectory, ObjectProperties, ObjectReference, TransferConfig } from "../common";
import { ExpiryOptions, MultipartUploadData, TransferData, EntityPageListIterator, CopyOptions } from "./Interfaces";
export declare abstract class ServerStorage implements PresignedUrlProvider, TransferConfigProvider {
abstract download(reference: ObjectReference, transferType: "buffer"): Promise<Buffer>;
abstract download(reference: ObjectReference, transferType: "stream"): Promise<Readable>;
abstract download(reference: ObjectReference, transferType: "local", localPath?: string): Promise<string>;
abstract upload(reference: ObjectReference, data: TransferData, metadata?: Metadata, headers?: ContentHeaders): Promise<void>;
abstract uploadInMultipleParts(reference: ObjectReference, data: MultipartUploadData, options?: MultipartUploadOptions, headers?: ContentHeaders): Promise<void>;
abstract createBaseDirectory(directory: BaseDirectory): Promise<void>;
listDirectories(): Promise<BaseDirectory[]>;
/**
* Get list of directories iterator
* @param maxPageSize Max number of directories returned in the page 1000
* by default
* @returns {EntityPageListIterator<BaseDirectory>} Paged iterator to list
* directories.
*/
abstract getListDirectoriesPagedIterator(maxPageSize: number): EntityPageListIterator<BaseDirectory>;
listObjects(directory: BaseDirectory): Promise<ObjectReference[]>;
protected listAllEntriesFromIterator<TEntry>(pageIterator: EntityPageListIterator<TEntry>): Promise<TEntry[]>;
/**
* Get list of objects iterator
* @param maxPageSize Max number of objects returned in the page 1000
* by default
* @returns {EntityPageListIterator<ObjectReference>} Paged iterator to list
* objects.
*/
abstract getListObjectsPagedIterator(directory: BaseDirectory, maxPageSize: number): EntityPageListIterator<ObjectReference>;
/**
* @deprecated Use listObjects method instead.
*/
abstract list(directory: BaseDirectory): Promise<ObjectReference[]>;
/**
* Deletes the specified directory. Note that some storage providers (Azure,
* for example) do not immediately delete all associated resources and cleanup
* can take up to several minutes. To check if the resource has been deleted
* use the {@link exists} method.
* @param {BaseDirectory} directory base directory
* @returns {Promise<void>}
*/
abstract deleteBaseDirectory(directory: BaseDirectory): Promise<void>;
/**
* Deletes the specified object. Note that some storage providers (Azure, for
* example) do not immediately delete all associated resources and cleanup can
* take up to several minutes. To check if the resource has been deleted use
* the {@link exists} method.
* @param {ObjectReference} reference object reference
* @returns {Promise<void>}
*/
abstract deleteObject(reference: ObjectReference): Promise<void>;
/**
* Checks if the specified directory has been deleted.
* @param {BaseDirectory} directory base directory
* @returns `true` if the resource has not been deleted, `false` otherwise.
*/
abstract baseDirectoryExists(directory: BaseDirectory): Promise<boolean>;
/**
* Checks if the specified object has been deleted.
* @param {ObjectReference} reference object reference
* @returns `true` if the resource has not been deleted, `false` otherwise.
*/
abstract objectExists(reference: ObjectReference): Promise<boolean>;
/**
* Copies object from another {@link ServerStorage} instance to this storage.
* @param {ServerStorage} sourceStorage source storage. Must be of the same type as this storage.
* @param {ObjectReference} sourceReference object reference in the source storage.
* @param {ObjectReference} targetReference object reference in the target storage.
* @returns {Promise<void>}
* @note This uses server-side copying. Cross-region copy support depends on the storage provider.
*/
abstract copyObject(sourceStorage: ServerStorage, sourceReference: ObjectReference, targetReference: ObjectReference): Promise<void>;
private listObjectsFiltered;
private buildTaskKey;
private copyObjectWithKey;
/**
* Copies objects from a base directory in another {@link ServerStorage} instance to this storage.
* @param {ServerStorage} sourceStorage source storage. Must be of the same type as this storage.
* @param {BaseDirectory} sourceDirectory base directory in the source storage that will be copied.
* @param {BaseDirectory} target base directory in the target storage or a callback to generate object
* reference in the target storage.
* @param {Function} predicate optional predicate to filter objects to copy. If not specified, all
* objects from the sourceDirectory will be copied.
* @returns {Promise<void>}
* @note This uses server-side copying. Cross-region copy support depends on the storage provider.
*/
copyDirectory(sourceStorage: ServerStorage, sourceDirectory: BaseDirectory, target: BaseDirectory | ((objectReference: ObjectReference) => ObjectReference), predicate?: (objectReference: ObjectReference) => boolean, copyOptions?: CopyOptions): Promise<void>;
abstract updateMetadata(reference: ObjectReference, metadata: Metadata): Promise<void>;
abstract getObjectProperties(reference: ObjectReference): Promise<ObjectProperties>;
abstract getDownloadUrl(reference: ObjectReference, expiry?: ExpiryOptions): Promise<string>;
abstract getUploadUrl(reference: ObjectReference, expiry?: ExpiryOptions): Promise<string>;
/** Azure will only be limited to baseDirectory. */
abstract getDownloadConfig(directory: ObjectDirectory, expiry?: ExpiryOptions): Promise<TransferConfig>;
/** Azure will only be limited to baseDirectory. */
abstract getUploadConfig(directory: ObjectDirectory, expiry?: ExpiryOptions): Promise<TransferConfig>;
abstract getDirectoryAccessConfig(directory: ObjectDirectory, expiry?: ExpiryOptions): Promise<TransferConfig>;
/**
* Closes underlying resources, sockets for example. Clients should call this
* method after an instance of this class is not used anymore to free the
* resources and avoid hanging processes or similar issues.
*/
abstract releaseResources(): Promise<void>;
}
export interface PresignedUrlProvider {
getDownloadUrl(reference: ObjectReference, expiry?: ExpiryOptions): Promise<string>;
getUploadUrl(reference: ObjectReference, expiry?: ExpiryOptions): Promise<string>;
}
export interface TransferConfigProvider {
getDownloadConfig(directory: ObjectDirectory, expiry?: ExpiryOptions): Promise<TransferConfig>;
getUploadConfig(directory: ObjectDirectory, expiry?: ExpiryOptions): Promise<TransferConfig>;
getDirectoryAccessConfig(directory: ObjectDirectory, expiry?: ExpiryOptions): Promise<TransferConfig>;
}
//# sourceMappingURL=ServerStorage.d.ts.map