UNPKG

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
// 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;