Secrets
In-memory credential store with AES-256-GCM encryption at rest.
Overview
@consensus-tools/secrets provides an in-memory encrypted credential store. Credentials are keyed by provider + keyName (e.g. slack / bot_token) and encrypted using a master secret derived via scrypt. Use it to store API tokens, webhook secrets, and other sensitive values without exposing plaintext.
Installation
Quick start
API reference
CredentialManager
In-memory encrypted credential store. Constructor takes a secret: string which is derived internally via scrypt.
upsert(provider, keyName, value)
Insert or update a credential.
- provider
string-- service name (e.g."slack","github") - keyName
string-- credential identifier (e.g."bot_token") - value
string-- plaintext credential value - Returns
{ id, provider, keyName, updated }whereupdatedistrueon overwrite
get(provider, keyName)
Retrieve and decrypt a stored credential.
- Returns
string | null-- decrypted value, ornullif missing or corrupt
list()
List all stored credentials without exposing values.
delete(provider, keyName)
Remove a credential. Returns true if removed.
getProviderStatus(provider)
Check which keys exist for a provider.
encrypt(plaintext, key)
Low-level AES-256-GCM encryption. Returns a base64 string containing IV + tag + ciphertext. key must be a 32-byte Buffer.
decrypt(encoded, key)
Low-level AES-256-GCM decryption. Takes a base64 string, returns plaintext.
Master secret management
The master secret is used to derive the encryption key. If you lose it, all stored credentials become unrecoverable. Store the master secret securely outside the application.
Examples
Full credential lifecycle
Related
- Schemas package -- shared types used across all packages
- Architecture -- how secrets fits into the system