securedbg
Version:
A robust, cross-platform solution for securely storing credentials, API keys, and other secrets in Node.js applications.
67 lines (62 loc) • 2.17 kB
JavaScript
// src/storage.js
/**
* @class Storage
* @abstract
*
* Esta é uma classe base abstrata que define a interface (o "contrato")
* para todos os adaptadores de armazenamento no pacote securedbg.
*
* Qualquer adaptador (como KeytarAdapter ou FileAdapter) deve herdar desta
* classe e implementar todos os seus métodos.
*
* Tentar usar esta classe diretamente ou usar um adaptador que não implementou
* os métodos resultará em um erro.
*/
class Storage {
/**
* O construtor da classe base.
* @param {string} serviceName - O nome do serviço para agrupar os segredos.
* @throws {Error} Se esta classe for instanciada diretamente.
*/
constructor(serviceName) {
if (this.constructor === Storage) {
throw new Error("A classe 'Storage' é abstrata e não pode ser instanciada diretamente.");
}
this.serviceName = serviceName;
}
/**
* Armazena um par de nome/valor de segredo.
* Este método DEVE ser implementado pela subclasse.
*
* @param {string} name - O nome do segredo.
* @param {string} secret - O valor do segredo.
* @returns {Promise<void>}
* @abstract
*/
async setSecret(name, secret) {
throw new Error(`O método 'setSecret' não foi implementado no adaptador '${this.constructor.name}'.`);
}
/**
* Recupera o valor de um segredo pelo seu nome.
* Este método DEVE ser implementado pela subclasse.
*
* @param {string} name - O nome do segredo a ser recuperado.
* @returns {Promise<string|null>} O valor do segredo ou null se não for encontrado.
* @abstract
*/
async getSecret(name) {
throw new Error(`O método 'getSecret' não foi implementado no adaptador '${this.constructor.name}'.`);
}
/**
* Deleta um segredo pelo seu nome.
* Este método DEVE ser implementado pela subclasse.
*
* @param {string} name - O nome do segredo a ser deletado.
* @returns {Promise<boolean>} True se o segredo foi deletado, false se não foi encontrado.
* @abstract
*/
async deleteSecret(name) {
throw new Error(`O método 'deleteSecret' não foi implementado no adaptador '${this.constructor.name}'.`);
}
}
module.exports = Storage;