UNPKG

@verdaccio/local-storage

Version:

Local storage implementation

95 lines (94 loc) 3.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _path = _interopRequireDefault(require("path")); var _lodash = _interopRequireDefault(require("lodash")); var _lowdb = _interopRequireDefault(require("lowdb")); var _FileAsync = _interopRequireDefault(require("lowdb/adapters/FileAsync")); var _Memory = _interopRequireDefault(require("lowdb/adapters/Memory")); var _debug = _interopRequireDefault(require("debug")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } const debug = (0, _debug.default)('verdaccio:plugin:local-storage:token'); const TOKEN_DB_NAME = '.token-db.json'; class TokenActions { constructor(config) { _defineProperty(this, "config", void 0); _defineProperty(this, "tokenDb", void 0); this.config = config; this.tokenDb = null; } _dbGenPath(dbName, config) { var _config$configPath; // TODO: self_path is a legacy property and is deprecated // TODO: display deprecation warning for self_path const selfPath = (_config$configPath = config.configPath) !== null && _config$configPath !== void 0 ? _config$configPath : config.self_path; return _path.default.join(_path.default.resolve(_path.default.dirname(selfPath || ''), config.storage, dbName)); } async getTokenDb() { if (!this.tokenDb) { debug('token database is not defined'); let adapter; if (process.env.NODE_ENV === 'test') { debug('token memory adapter'); adapter = new _Memory.default(''); } else { debug('token async adapter'); const pathDb = this._dbGenPath(TOKEN_DB_NAME, this.config); adapter = new _FileAsync.default(pathDb); } debug('token bd generated'); this.tokenDb = await (0, _lowdb.default)(adapter); } return this.tokenDb; } async saveToken(token) { debug('token key %o', token.key); const db = await this.getTokenDb(); const userData = await db.get(token.user).value(); debug('user data %o', userData); if (_lodash.default.isNil(userData)) { await db.set(token.user, [token]).write(); debug('token user %o new database', token.user); } else { // types does not match with valid implementation // @ts-ignore await db.get(token.user) // @ts-ignore .push(token).write(); } debug('data %o', await db.getState()); debug('token saved %o', token.user); } async deleteToken(user, tokenKey) { const db = await this.getTokenDb(); const userTokens = await db.get(user).value(); if (_lodash.default.isNil(userTokens)) { throw new Error('user not found'); } debug('tokens %o - %o', userTokens, userTokens.length); const remainingTokens = userTokens.filter(({ key }) => { debug('key %o', key); return key !== tokenKey; }); await db.set(user, remainingTokens).write(); debug('removed tokens key %o', tokenKey); } async readTokens(filter) { const { user } = filter; debug('read tokens with %o', user); const db = await this.getTokenDb(); const tokens = await db.get(user).value(); return tokens || []; } } exports.default = TokenActions; //# sourceMappingURL=token.js.map