Skip to content
reaatechREAATECH

@reaatech/secret-rotation-core

pending npm

Orchestrates zero-downtime secret rotation lifecycles, including propagation verification, rollback logic, and state management. It provides a `RotationManager` class that requires a pluggable provider adapter to interface with specific secret management services.

@reaatech/secret-rotation-core

npm version License: MIT CI

Status: Pre-1.0 — APIs may change in minor versions. Pin to a specific version in production.

Core rotation engine for Secret Rotation Kit. Orchestrates the full zero-downtime rotation lifecycle with propagation verification, resilience patterns, and pluggable provider adapters.

Installation

terminal
npm install @reaatech/secret-rotation-core
# or
pnpm add @reaatech/secret-rotation-core

To rotate secrets, you’ll also need at least one provider adapter:

terminal
pnpm add @reaatech/secret-rotation-provider-aws

Feature Overview

  • Full rotation lifecycle — generate → propagate → verify → activate → revoke
  • Overlapping key windows — old and new keys coexist during rotation (configurable overlap/grace periods)
  • Dual verification strategies — provider-level polling and consumer-level active verification
  • Resilience patterns — exponential backoff with jitter, circuit breaker, automatic rollback
  • Key lifecycle management — state machine: pending → active → expired → revoked/failed
  • Consumer registry — track consumers with health monitoring and interest groups
  • Key storage backends — in-memory (test/dev) and persistent file-system with AES-256-GCM encryption
  • Event system — typed event emitter with in-memory and disk-persisted (JSON-lines) backends
  • Pluggable providers — swap AWS, GCP, or Vault without changing application code
  • Input validation — secret name constraints, metadata limits, numeric range checks
  • Rate limiting — per-secret token-bucket rate limiter to prevent rotation flooding

Quick Start

typescript
import { RotationManager } from '@reaatech/secret-rotation-core';
import { AWSProvider } from '@reaatech/secret-rotation-provider-aws';
 
const provider = new AWSProvider({ region: 'us-east-1' });
 
const manager = new RotationManager({
  providerInstance: provider,
  rotationIntervalMs: 24 * 60 * 60 * 1000, // 24 hours
});
 
// Subscribe to events
manager.events.on('key_activated', (event) => {
  console.log(`Key ${event.keyId} active for ${event.secretName}`);
});
 
// Manual rotation
const result = await manager.rotate('database-password');
 
// Scheduled rotation
await manager.start(['database-password']);

API Reference

RotationManager

The primary entry point. Wires together provider, key store, verifier, rate limiter, rollback manager, and event emitter.

Constructor Options

PropertyTypeDefaultDescription
providerInstanceSecretProvider(required)Provider adapter instance
keyStoreKeyStoreInMemoryKeyStoreKey storage backend
verifierPropagationVerifierPollingPropagationVerifierPropagation verification strategy
eventEmitterEventEmitterInMemoryEventEmitterEvent bus for lifecycle events
loggerLoggerStructured logger
rotationIntervalMsnumberAuto-rotation interval (disabled if omitted)
verificationTimeoutMsnumber30000Default verification timeout
minConsumerCoveragenumber1.0Minimum consumer coverage ratio (0–1)
rateLimiterRateLimiterRateLimiter()Per-secret rate limiter
validateInputsbooleantrueEnable input validation
rollbackobject{ enabled: true }Rollback manager configuration

Methods

MethodDescription
rotate(secretName, options?)Execute a single rotation, returns RotationResult
start(secretNames)Begin automatic rotation on a fixed interval
stop()Stop automatic rotation
getState(secretName)Get current RotationState for a secret
eventsAccess the underlying EventEmitter
providerInstanceAccess the underlying SecretProvider
limiterAccess the rate limiter

RotationWorkflow

The lifecycle orchestrator. Executes a 7-step pipeline and emits events at each stage:

  1. Generate key material (CryptographicKeyGenerator)
  2. Save to key store
  3. Begin provider rotation session
  4. Store secret value in provider
  5. Verify propagation
  6. Activate new key (old key → expired)
  7. Complete provider session

KeyLifecycleManager

Key state machine:

code
pending → active → expired → revoked
                      ↘ failed
MethodDescription
create(options)Create a new pending key
activate(secretName, keyId)Promote pending → active (old active → expired)
expire(secretName, keyId)Force a key to expired
revoke(secretName, keyId, reason)Revoke a key (terminal state)
markFailed(secretName, keyId, error)Mark as failed (terminal state)
getState(secretName)Get RotationState summary

Verification

PollingPropagationVerifier

Polls the provider to confirm the new version is readable. Suitable for library-managed secrets.

typescript
const verifier = new PollingPropagationVerifier(provider);

ActivePropagationVerifier

Reaches out to registered consumers via HTTP to confirm they’re serving the new version.

typescript
const verifier = new ActivePropagationVerifier(provider, consumerRegistry, {
  timeout: 30000,
  minConsumerCoverage: 1.0,
});

Resilience

ExportDescription
RetryHandlerExponential backoff with full jitter: maxRetries, backoffMultiplier, initialDelayMs, maxDelayMs
CircuitBreakerFault tolerance: closed → open → half-open. Configurable failure/success thresholds and reset timeout
RollbackManagerAutomatic rollback: cancels provider session, marks key as failed, reactivates previous key
KeyWindowManagerOverlap management: old and new keys valid simultaneously for overlapPeriodMs
RateLimiterPer-secret token-bucket rate limiter: configurable burst and window

Key Storage

ExportDescription
InMemoryKeyStoreThread-safe Map-backed store with per-key locking
FileSystemKeyStoreOne JSON file per secret, atomic writes, optional AES-256-GCM encryption

Key Generation

ExportDescription
CryptographicKeyGeneratorcrypto.randomBytes-based generation. Supports base64, hex, pem, raw formats. AES-256-GCM encrypt/decrypt. Buffers zeroed after use.

Events

Event TypeWhen
key_generatedNew cryptographic key material created
key_propagatedKey stored in the provider
key_verifiedPropagation confirmed by verifier
key_activatedNew key promoted to active (previous → expired)
key_revokedOld key revoked
rotation_failedRotation failed with stage and retry hint

License

MIT