node-swiftclient
Version:
A Node.js client library for interacting with OpenStack Swift Object Storage
280 lines (272 loc) • 11.7 kB
TypeScript
import { Readable } from 'stream';
/**
* Represents the main client for interacting with a Swift storage service.
* Provides methods to manage containers and objects within those containers.
*/
export declare class SwiftClient {
private sw;
constructor(config: SwiftClientOptions);
/**
* Creates a new container in the Swift storage.
* @param containerName - The name of the container to create.
* @param publicRead - Whether the container should be publicly readable.
* @param meta - Optional metadata to associate with the container.
* @param extraHeaders - Optional extra headers to include in the request.
* @returns A promise that resolves when the container is successfully created.
*/
createContainer(containerName: string, publicRead: boolean, meta?: Record<string, string> | null, extraHeaders?: Record<string, string> | null): Promise<void>;
/**
* Retrieves information about the client configuration or state.
* @returns A promise resolving with client information.
*/
getClientInfo(): Promise<any>;
/**
* Fetches metadata for a specified container.
* @param containerName - The name of the container.
* @returns A promise resolving with the container's metadata as a key-value object.
*/
getContainerMeta(containerName: string): Promise<Record<string, string>>;
/**
* Deletes a specified container.
* @param containerName - The name of the container to delete.
* @returns A promise that resolves when the container is successfully deleted.
*/
deleteContainer(containerName: string): Promise<void>;
/**
* Lists all containers accessible to the client.
* @param query - Optional query parameters as a string or key-value pairs.
* @param extraHeaders - Optional extra headers to include in the request.
* @returns A promise resolving with an array of container data.
*/
listAllContainers(query?: {
[s: string]: string;
}, extraHeaders?: {
[s: string]: string;
}): Promise<SwiftContainerData[]>;
/**
* Retrieves an interface to interact with a specific container.
* @param containerName - The name of the container.
* @returns A SwiftContainer instance for interacting with the container.
*/
getContainer(containerName: string): SwiftContainer;
}
export declare type SwiftClientOptions = {
authVersion: 1;
authUrl: string;
userName: string;
password: string;
tenant?: string;
} | ({
authVersion: 2;
} & SwiftConnection) | ({
authVersion: 3;
} & SwiftConnection);
declare type SwiftConnection = {
authUrl: string;
region?: string;
userAgent?: string;
apiKey?: string;
userName?: string;
userId?: string;
domain?: string;
domainId?: string;
applicationCredentialId?: string;
applicationCredentialName?: string;
applicationCredentialSecret?: string;
tenant?: string;
tenantId?: string;
tenantDomain?: string;
tenantDomainId?: string;
trustId?: string;
};
/**
* Represents a container in the Swift storage service.
* Provides methods for listing, managing, and interacting with objects and directories within the container.
*/
export declare interface SwiftContainer {
/**
* Retrieves a list of objects in the container with optional filtering and pagination.
*
* @param options - Configuration for filtering and pagination:
* - `prefix`: Filters objects by their prefix.
* - `delimiter`: Groups objects by the specified delimiter.
* - `limit`: Limits the number of returned objects.
* - `reverse`: Reverses the order of the results.
* - `marker`: Specifies the marker to start listing from.
* - `end_marker`: Specifies the marker to end the listing at.
* @param additionalQueryParams - Additional query parameters for the API request.
* @param extraHeaders - Additional headers to include in the request.
* @returns A promise resolving to an array of `SwiftObject` instances.
*/
listObjects(options?: {
prefix?: string;
delimiter?: string;
limit?: number;
reverse?: boolean;
marker?: string;
end_marker?: string;
}, additionalQueryParams?: {
[s: string]: string;
}, extraHeaders?: {
[s: string]: string;
}): Promise<SwiftObject[]>;
/**
* Retrieves a list of object "folders" (subdirectories) in the container with optional filtering and pagination.
*
* @param options - Configuration for filtering and pagination:
* - `delimiter`: Groups objects by the specified delimiter.
* - `limit`: Limits the number of returned directories.
* - `reverse`: Reverses the order of the results.
* - `marker`: Specifies the marker to start listing from.
* - `end_marker`: Specifies the marker to end the listing at.
* @param additionalQueryParams - Additional query parameters for the API request.
* @param extraHeaders - Additional headers to include in the request.
* @returns A promise resolving to an array of `SwiftSubDir` instances.
*/
listObjectFolders(options?: {
delimiter?: string;
limit?: number;
reverse?: boolean;
marker?: string;
end_marker?: string;
}, additionalQueryParams?: Record<string, string>, extraHeaders?: Record<string, string>): Promise<SwiftSubDir[]>;
/**
* Iterates over all objects in the container, one at a time, in batches defined by the specified options.
*
* This method fetches objects in chunks, making it possible to process large datasets without high memory usage.
*
* @param options - Configuration for iteration:
* - `prefix`: Filters objects by their prefix.
* - `delimiter`: Groups objects by the specified delimiter.
* - `batchSize`: The number of objects to fetch per batch (default: 10000).
* @param additionalQueryParams - Additional query parameters for the API request.
* @param extraHeaders - Additional headers to include in the request.
* @returns An async generator yielding individual `SwiftObject` instances.
*
* @example
* const options = { batchSize: 1000 };
*
* for await (const swiftObject of container.iterateObjects(options)) {
* console.log(`Processing object: ${swiftObject.name}`);
* }
*/
iterateObjects(options?: {
prefix?: string;
delimiter?: string;
batchSize: number;
}, additionalQueryParams?: {
[s: string]: string;
}, extraHeaders?: {
[s: string]: string;
}): AsyncGenerator<SwiftObject>;
/**
* Iterates over all object "folders" (subdirectories) in the container, one at a time, in batches defined by the specified options.
*
* @param options - Configuration for iteration:
* - `delimiter`: Groups objects by the specified delimiter.
* - `batchSize`: The number of directories to fetch per batch (default: 10000).
* @param additionalQueryParams - Additional query parameters for the API request.
* @param extraHeaders - Additional headers to include in the request.
* @returns An async generator yielding individual `SwiftSubDir` instances.
*/
iterateObjectFolders(options?: {
delimiter?: string;
batchSize: number;
}, additionalQueryParams?: {
[s: string]: string;
}, extraHeaders?: {
[s: string]: string;
}): AsyncGenerator<SwiftSubDir>;
/**
* Retrieves metadata for a specific object in the container.
*
* @param objectName - The name of the object.
* @returns A promise resolving to the object's metadata as a key-value object.
*/
getObjectMeta(objectName: string): Promise<Record<string, string>>;
/**
* Updates metadata for a specific object in the container.
*
* @param name - The name of the object.
* @param meta - The metadata to update for the object.
* @param extraHeaders - Additional headers to include in the request.
* @returns A promise that resolves when the metadata update is complete.
*/
patchObjectMeta(name: string, meta: Record<string, string> | null, extraHeaders?: Record<string, string> | null): Promise<void>;
/**
* Uploads a readable stream as an object to the container.
*
* @param objectName - The name of the object.
* @param stream - The readable stream containing the object data.
* @param meta - Optional metadata to associate with the object.
* @param extraHeaders - Additional headers to include in the request.
* @returns A promise that resolves when the upload is complete.
*/
putObject(objectName: string, stream: Readable, meta?: Record<string, string> | null, extraHeaders?: Record<string, string> | null): Promise<void>;
/**
* Uploads a buffer as an object to the container.
*
* @param objectName - The name of the object.
* @param buffer - The buffer containing the object data.
* @param meta - Optional metadata to associate with the object.
* @param extraHeaders - Additional headers to include in the request.
* @returns A promise that resolves when the upload is complete.
*/
putObject(objectName: string, buffer: Buffer, meta?: Record<string, string> | null, extraHeaders?: Record<string, string> | null): Promise<void>;
/**
* Deletes a specific object from the container.
*
* @param objectName - The name of the object.
* @param when - Optional timestamp or date to schedule the deletion.
* @returns A promise that resolves when the object is successfully deleted.
*/
deleteObject(objectName: string, when?: Date | number): Promise<void>;
/**
* Downloads a specific object from the container as a readable stream.
*
* @param objectName - The name of the object.
* @returns A promise resolving to a readable stream of the object data.
*/
getObject(objectName: string): Promise<ReadableStreamDefaultReader<Uint8Array>>;
/**
* Downloads a specific object from the container as a buffer.
*
* @param objectName - The name of the object.
* @returns A promise resolving to a buffer containing the object data.
*/
getObjectAsBuffer(objectName: string): Promise<Buffer>;
/**
* Retrieves information about an object without downloading its content.
*
* @param objectName - The name of the object.
* @returns A promise resolving to the object's information as a `SwiftObjectData` instance.
*/
getObjectInfo(objectName: string): Promise<SwiftObjectData>;
}
declare type SwiftContainerData = {
/** The number of objects in the container. */
count: number;
/** The total size of all objects in the container, in bytes. */
bytes: number;
/** The last modified date of the container. */
last_modified: string;
/** The name of the container. */
name: string;
};
declare type SwiftObject = {
name: string;
bytes: number;
hash: string;
last_modified: Date;
content_type: string;
};
declare type SwiftObjectData = {
bytes: number;
last_modified: Date;
name: string;
content_type: string;
hash?: string;
};
declare type SwiftSubDir = {
subdir: string;
};