secretforge
v0.1.0
Published
Automatize o carregamento de segredos de forma segura, flexível e elegante — com suporte a múltiplos métodos de autenticação, tipagem automática e geração de outputs personalizados.
Maintainers
Readme
📦 Secret Forge
Secret Forge é a ponte entre o seu Vault e seus arquivos .env. Automatize o carregamento de segredos de forma segura, flexível e elegante — com suporte a múltiplos métodos de autenticação, tipagem automática e geração de outputs personalizados. Esqueça o copia-e-cola de tokens secretos. Deixe o Vault trabalhar por você. 🔐⚡
📄 Objetivo
O objetivo do Secret Forge é facilitar a integração entre aplicações e o HashiCorp Vault, transformando segredos em variáveis de ambiente de forma automatizada e segura. Ele permite configurar templates flexíveis, autenticar via diferentes métodos (token, AppRole, Kubernetes, GitHub) e gerar arquivos .env e .json prontos para uso — tudo isso com validação, tipagem e cache inteligente.
✨ Funcionalidades
- Autenticação com Vault: Suporte a múltiplos métodos de autenticação (token, AppRole, Kubernetes, GitHub)
- Template de variáveis de ambiente: Leitura de templates
.env.tpl - Tipagem automática de segredos: Conversão automática de tipos (string, number, boolean, json)
- Validação de configuração: Utiliza Zod para validar a estrutura do arquivo de configuração
- Geração de variáveis e arquivos: Popular
process.envautomaticamente e feração opcional de arquivos em (.env, .json) - Cache inteligente: Requisições otimizadas com cache interno para evitar chamadas repetidas ao Vault
- Suporte a múltiplos formatos de config: Lê configurações de arquivos .json, .yaml ou .yml
- Logger customizável: Use seu próprio logger (ex: winston, pino, etc.) ou o console padrão
💡 Roadmap Futuro
- Adicionar autenticação via AWS
⚙️ Instalação
npm install secretforge -S
🤓 Exemplo de uso
Arquivo .env.tpl
# .env.tpl
JSON={ "path": "/kv/data/example", "key": "JSON","type": "json" }
NUMBER={ "path": "/kv/data/example", "key": "NUMBER","type": "number" }
BOOL={ "path": "/kv/data/example", "key": "BOOL","type": "boolean" }
PASSWORD=/database/creds/mysql-dev#password
USERNAME=/database/creds/mysql-dev#usernameSimple
import { VaultEnvManager } from 'secretforge'
async function main() {
const loader = new VaultEnvManager({
vault: {
address: "http://vault.local",
auth: {
method: 'token',
token: '123',
}
},
output: {
processEnv: true,
file: {
env: {
enable: true,
path: `.env`
},
json: {
enable: true,
path: `env.json`
}
}
}
});
await loader.loadFromTemplate(`.env.tpl`);
}
main().catch(console.error);Config From yaml file
# vault-config.yaml
vault:
address: http://vault.local
auth:
method: token
token: 123
output:
processEnv: true
file:
env:
enable: true
path: '.env'import { VaultEnvManager } from 'secretforge'
async function main() {
const loader = VaultEnvManager.fromConfigFile(`vault-config.yaml`);
await loader.loadFromTemplate(`.env.tpl`);
}
main().catch(console.error);Config
| Parâmetro | Tipo | Obrigatório | Descrição
| ----------- |----------|------------- | --------------------------------------
| vault | object | ✅ | Conexão com Vault Valores
| output | object | ✅ | Configuração de saida Valores
Vault Connection
| Parâmetro | Tipo | Obrigatório | Descrição
| --------------- | -------- | ------------ | -----------------------------------
| address | string | ✅ | URL de conexão com vault
| auth | object | ✅ | Metodos de autenticação Valores
| version | string | ❌ | Versão do KV default: v1
| resilience | object | ❌ | Opções de resiliencia Valores
Vault Resilience
| Parâmetro | Tipo | Obrigatório | Descrição
| --------------- | -------- | ------------ | -----------------------------------
| retries | number | ✅ | Número de retentativas default: 3
| backoff | number | ✅ | Tempo de espera em cada tentativa default: 1000ms
| timeout | number | ✅ | Timeout de requisições
Vault Auth
| Parâmetro | Tipo | Obrigatório | Descrição
| --------------- | -------- | ----------- | -----------------------------------
| method | string | ✅ | Tipo de autenticação (token, github, approle, kubernetes)
| token | string | ✅|❌ | Token disponivel somente method de autenticação (token, token)
| roleId | string | ❌ | RoleId disponivel somente method de autenticação (approle)
| role | string | ❌ | Role disponivel somente method de autenticação (approle)
| jwt | string | ❌ | Jwt disponivel somente method de autenticação (kubernetes)
| secretId | string | ❌ | SecretId disponivel somente method de autenticação (kubernetes)
Output
| Parâmetro | Tipo | Obrigatório | Descrição
| --------------- | -------- | ------------ | -----------------------------------
| processEnv | bool | ✅ | Habilitar saida de dados via process.env
| file | object | ❌ | Opções de Geração de Arquivos Valores
File
| Parâmetro | Tipo | Obrigatório | Descrição
| ------------ | -------- | ------------- | -----------------------------------
| env | object | ❌ | Habilitar geração de arquivo .env Valores
| json | object | ❌ | Habilitar geração de arquivo .json Valores
File Options
| Parâmetro | Tipo | Obrigatório | Descrição
| ------------ | -------- | ------------- | -----------------------------------
| enable | object | ✅ | Habilitar geração de arquivo
| path | object | ✅ | Path de saida do arquivo gerado
📫 Contribuições
Sinta-se à vontade para abrir issues ou enviar pull requests. Sugestões são sempre bem-vindas!
🤓 Contato
Desenvolvido por: Ismael Alves 🤓🤓🤓
- Email: [email protected]
- Github: github.com/ismaelalvesgit
- Linkedin: linkedin.com/in/ismael-alves-6945531a0/
