Manages bulk operation manifest storage in Redis

Example

const storage = new ManifestStorage(redisCache);

// Generate unique ID
const manifestId = storage.generateManifestId();

// Create and store manifest
const manifest: BulkManifest = {
id: manifestId,
timestamp: Date.now(),
total: 100,
succeeded: [0, 1, 2],
failed: [3, 4],
created: { '0': 'PROJ-123', '1': 'PROJ-124' },
errors: {
'3': { status: 400, errors: { issuetype: 'required' } }
}
};

await storage.storeManifest(manifest);

// Later: retrieve for retry
const retrieved = await storage.getManifest(manifestId);

Constructors

  • Creates a new ManifestStorage instance

    Parameters

    • cache: RedisCache

      Redis cache instance

    • ttlSeconds: number = 86400

      Time-to-live in seconds (default: 86400 = 24 hours)

    • logger: Logger = defaultLogger

      Optional logger for dependency injection (defaults to console)

    Returns ManifestStorage

Methods

  • Generates a unique manifest ID

    Format: bulk-{uuid v4}

    Returns string

    Unique manifest ID

    Example

    const id = storage.generateManifestId();
    // → "bulk-12345678-1234-4234-8234-123456789abc"
  • Retrieves a manifest from Redis

    Parameters

    • manifestId: string

      Manifest ID to retrieve

    Returns Promise<null | BulkManifest>

    Manifest if found, null if not found/expired/error

    Example

    const manifest = await storage.getManifest('bulk-12345678-...');
    if (manifest) {
    console.log(`Found ${manifest.succeeded.length} succeeded`);
    }
  • Stores a manifest in Redis

    Key pattern: bulk:manifest:{manifestId}

    Gracefully degrades if Redis is unavailable (logs warning, doesn't throw).

    Parameters

    Returns Promise<void>

    Example

    await storage.storeManifest({
    id: 'bulk-12345678-...',
    timestamp: Date.now(),
    total: 10,
    succeeded: [0, 1, 2],
    failed: [3],
    created: { '0': 'PROJ-123' },
    errors: { '3': { status: 400, errors: { field: 'error' } } }
    });
  • Updates an existing manifest with retry results

    Merges new results with existing manifest:

    • Adds new succeeded indices
    • Updates failed indices
    • Merges created keys
    • Updates error details
    • Preserves original timestamp

    Parameters

    • manifestId: string

      Manifest ID to update

    • updates: ManifestUpdateData

      Retry results to merge

    Returns Promise<void>

    Example

    // After retry, update manifest with new results
    await storage.updateManifest('bulk-12345678-...', {
    succeeded: [3], // Previously failed, now succeeded
    failed: [4], // Still failed
    created: { '3': 'PROJ-124' },
    errors: { '4': { status: 400, errors: { field: 'error' } } }
    });