Skip to main content

Configuration

In order to achieve a proper working rac-delta implementation, configuration properties are important.

Configuration will be used for the creation of the rac-delta client, the storage communication, and services optional configuration. This will make the SDK easier to use and more customizable.

NOTE: Interfaces here are written in TS, but easy to migrate to another language.

Base Configuration

Minimal base configuration:

interface RacDeltaConfig {
chunkSize: number;
maxConcurrency?: number;
storage: StorageConfig;
}
  • chunkSize will be the value used in all operations of rac-delta for the chunks, it is important to maintain consistency with this value, any changes between operations will lead to errors.

  • maxConcurrency is only used as a recommended max concurrency limit for operations like reading, writting or uploading. For better performance.

  • storage: Concrete configuration for your storage, see below.

Storage Configuration

It is not mandatory to implement all storages, but it is recommended as our philosophy for rac-delta is storage agnosticism, so being prepared for every kind of storage is always recommended.

Here are our configuration interfaces for storage.

interface BaseStorageConfig {
pathPrefix?: string;
}

The base configuration that all storages will extend. It includes a pathPrefix if your desired directory is within a subfolder.

Local Storage

Perfect for testing or to have local storage, but not recommended for real life cases.

interface LocalStorageConfig extends BaseStorageConfig {
type: 'local';
basePath: string;
}

SSH Storage

Perfect for same network storage and private storage.

interface SSHStorageConfig extends BaseStorageConfig {
type: 'ssh';
host: string;
port?: number;
credentials: {
username: string,
password?: string,
privateKey?: string,
};
}

URL Storage

Perfect for signed URLS.

interface URLStorageConfig extends BaseStorageConfig {
type: 'url';
}

This storage type does not need any configuration, but needs its own StorageAdapter type and its own Pipeline type, as method names are different from normal storages. Example: uploadChunksByUrl()

How to call URLs is up to the user, you can use any library or native methods to make HTTP calls.

See pipelines and adapters

HTTP Storage

Perfect for custom APIs, this type takes for granted that you have an API connected to your storage with endpoints like /chunks/[hash] or GET /rd-index

interface HTTPStorageConfig extends BaseStorageConfig {
type: 'http';
endpoint: string;
indexFilePath?: string;
credentials?: {
bearerToken?: string,
apiKey?: string,
};
}
  • endpoint: Base URL used for all chunk operations. Each chunk will be accessed as: {endpoint}/{pathPrefix?}/{chunk-hash}

    Example:

    endpoint: "https://ducks.com/api"
    pathPrefix: "uploads"

    => https://ducks.com/api/uploads/{chunk-hash}
  • indexFilePath: Optional path (relative to endpoint and pathPrefix) where the remote index file (rd-index.json) can be found.

    If omitted, the adapter will automatically look for:

    {endpoint}/{pathPrefix?}/rd-index.json

    Example:

    indexFilePath: "index"
    => https://ducks.com/api/index
    indexFilePath: "metadata/rd-index.json"
    => https://ducks.com/api/metadata/rd-index.json
  • credentials: Optional credentials used for authenticated HTTP requests. Supports both Bearer tokens and API keys. Adapter must include these headers.

    Example:

    credentials: {
    bearerToken: "eyJhbGciOiJIUzI1...",
    apiKey: "my-secret-key"
    }

Google Cloud Storage

Configuration for GCS support:

interface GCSStorageConfig extends BaseStorageConfig {
type: 'gcs';
bucket: string;
apiEndpoint?: string;
credentials: {
projectId: string,
clientEmail?: string,
privateKey?: string,
};
}

Azure Blob Storage

Configuration for Azure Blob support:

interface AzureBlobStorageConfig extends BaseStorageConfig {
type: 'azure';
container: string;
endpoint: string;
credentials: {
accountName?: string,
accountKey?: string,
sasToken?: string,
};
}

S3 Storage

Configuration for S3 support:

interface S3StorageConfig extends BaseStorageConfig {
type: 's3';
endpoint?: string;
region?: string;
bucket: string;
credentials: {
accessKeyId: string,
secretAccessKey: string,
sessionToken?: string,
expiration?: Date,
};
}