UNPKG

@gensx/storage

Version:

Cloud storage, blobs, sqlite, and vector database providers/hooks for GenSX.

292 lines 7.95 kB
import { Readable } from "stream"; /** * Error types for blob storage operations */ export type BlobErrorCode = "NOT_FOUND" | "PERMISSION_DENIED" | "CONFLICT" | "INVALID_ARGUMENT" | "INTERNAL_ERROR" | "NOT_IMPLEMENTED" | "NETWORK_ERROR"; /** * Abstract base error class for blob storage operations */ export declare abstract class BlobError extends Error { readonly code: BlobErrorCode; readonly cause?: Error | undefined; constructor(code: BlobErrorCode, message: string, cause?: Error | undefined); } /** * Error class for when a blob is not found */ export declare class BlobNotFoundError extends BlobError { constructor(message: string, cause?: Error); } /** * Error class for permission denied errors */ export declare class BlobPermissionDeniedError extends BlobError { constructor(message: string, cause?: Error); } /** * Error class for conflict errors (e.g., ETag mismatch) */ export declare class BlobConflictError extends BlobError { constructor(message: string, cause?: Error); } /** * Error class for invalid argument errors */ export declare class BlobInvalidArgumentError extends BlobError { constructor(message: string, cause?: Error); } /** * Error class for internal errors */ export declare class BlobInternalError extends BlobError { constructor(message: string, cause?: Error); } /** * Error class for not implemented errors */ export declare class BlobNotImplementedError extends BlobError { constructor(message: string, cause?: Error); } /** * Error class for network errors */ export declare class BlobNetworkError extends BlobError { constructor(message: string, cause?: Error); } /** * Options for blob operations */ export interface BlobOptions { /** * ETag for conditional operations (optimistic concurrency control) */ etag?: string; /** * Content type of the blob */ contentType?: string; /** * Custom metadata associated with the blob */ metadata?: Record<string, string>; } /** * Result of deleting a blob */ export interface DeleteBlobResult { deleted: boolean; } /** * A response from a blob operation that includes metadata */ export interface BlobResponse<T> { /** * The data content of the blob */ content: T; /** * ETag of the blob */ etag?: string; /** * Last modified timestamp */ lastModified?: Date; /** * Size of the blob in bytes */ size?: number; /** * Content type of the blob */ contentType?: string; /** * Custom metadata associated with the blob */ metadata?: Record<string, string>; } /** * Interface for a typed blob object */ export interface Blob<T> { /** * Get the blob as JSON data. * @returns The blob data as JSON, or null if not found. */ getJSON(): Promise<T | null>; /** * Get the blob as a string. * @returns The blob data as a string, or null if not found. */ getString(): Promise<string | null>; /** * Get the raw blob response with metadata. * @returns The blob response with metadata, or null if not found. */ getRaw(): Promise<BlobResponse<Buffer> | null>; /** * Get a readable stream of the blob's content. * @returns A readable stream of the blob's content. */ getStream(): Promise<Readable>; /** * Put JSON data into the blob. * @param value The JSON data to store. * @param options Optional metadata and etag for conditional updates. * @returns The etag of the stored blob. */ putJSON(value: T, options?: BlobOptions): Promise<{ etag: string; }>; /** * Put string data into the blob. * @param value The string data to store. * @param options Optional metadata and etag for conditional updates. * @returns The etag of the stored blob. */ putString(value: string, options?: BlobOptions): Promise<{ etag: string; }>; /** * Put raw data into the blob with metadata. * @param value The data to store. * @param options Optional metadata and etag for conditional updates. * @returns The etag of the stored blob. */ putRaw(value: Buffer, options?: BlobOptions): Promise<{ etag: string; }>; /** * Put a readable stream into the blob. * @param stream The readable stream to store. * @param options Optional metadata and etag for conditional updates. * @returns The etag of the stored blob. */ putStream(stream: Readable, options?: BlobOptions): Promise<{ etag: string; }>; /** * Delete the blob. */ delete(): Promise<void>; /** * Check if the blob exists. * @returns True if the blob exists, false otherwise. */ exists(): Promise<boolean>; /** * Get metadata associated with the blob * @returns The metadata or null if the blob doesn't exist */ getMetadata(): Promise<Record<string, string> | null>; /** * Update metadata associated with the blob * @param metadata The new metadata to store * @param options Optional etag for conditional update */ updateMetadata(metadata: Record<string, string>, options?: BlobOptions): Promise<void>; } /** * Options for listing blobs */ export interface ListBlobsOptions { /** * Prefix to filter blobs by */ prefix?: string; /** * Maximum number of results to return per page */ limit?: number; /** * Cursor for pagination. This should be the cursor from the previous page's response. * If not provided, returns the first page. */ cursor?: string; } /** * Response from listing blobs with pagination */ export interface ListBlobsResponse { /** * List of blobs */ blobs: { key: string; lastModified: string; size: number; }[]; /** * Cursor to get the next page of results. * If null, there are no more results. */ nextCursor?: string; } /** * Interface for blob storage */ export interface BlobStorage { /** * Get a blob object for a specific key */ getBlob<T>(key: string): Blob<T>; /** * List blobs with cursor-based pagination * @param options Options for listing blobs including prefix, pagination, and filtering */ listBlobs(options?: ListBlobsOptions): Promise<ListBlobsResponse>; /** * Check if a blob exists */ blobExists(key: string): Promise<boolean>; /** * Delete a blob */ deleteBlob(key: string): Promise<DeleteBlobResult>; } /** * Provider configuration kinds */ export type BlobStorageKind = "filesystem" | "cloud"; /** * Base storage configuration */ export interface BaseBlobStorageOptions { /** * Storage kind - if not provided, will be determined from environment */ kind?: BlobStorageKind; /** * Default prefix for all blob keys */ defaultPrefix?: string; /** * Optional project name. By default, the GENSX_PROJECT environment variable will be used then the projectName from the gensx.yaml file. */ project?: string; /** * Optional environment name. By default, the GENSX_ENV environment variable will be used then the currently selected environment in the CLI (e.g. `gensx env select`). */ environment?: string; } /** * Filesystem storage configuration */ export interface FileSystemBlobStorageOptions extends BaseBlobStorageOptions { kind?: "filesystem"; /** * Root directory for storing blobs */ rootDir?: string; } /** * Cloud storage configuration */ export interface CloudBlobStorageOptions extends BaseBlobStorageOptions { kind?: "cloud"; } /** * Union type for blob storage configuration */ export type BlobStorageOptions = FileSystemBlobStorageOptions | CloudBlobStorageOptions; //# sourceMappingURL=types.d.ts.map