UNPKG

@nlabs/arkhamjs-storage-node

Version:

NodeJS storage for ArkhamJS

125 lines (124 loc) 12.1 kB
function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /** * Copyright (c) 2018-Present, Nitrogen Labs, Inc. * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms. */ import PersistStorage from 'node-persist'; export class NodeStorage { /** * Removes all keys from persistent data. * * @returns {Promise<boolean>} Whether data was successfully removed. */ static clearPersistData() { try { return new Promise((resolve)=>{ PersistStorage.clear().then(()=>resolve(true)).catch(()=>resolve(false)); }); } catch (error) { return Promise.resolve(false); } } /** * Removes a key from persistent data. * * @param {string} key Key associated with the data to remove. * @returns {Promise<boolean>} Whether data was successfully removed. */ static delPersistData(key) { try { return new Promise((resolve)=>{ PersistStorage.removeItem(key).then(()=>resolve(true)).catch(()=>resolve(false)); }); } catch (error) { return Promise.resolve(false); } } /** * Get a key value from persistent data. * * @param {string} key The key for data. * @returns {Promise<any>} the data object associated with the key. */ static getPersistData(key) { try { return new Promise((resolve)=>{ PersistStorage.getItem(key).then((value)=>{ const updatedValue = value ? JSON.parse(value) : null; resolve(updatedValue); }).catch(()=>resolve(null)); }); } catch (error) { return Promise.resolve(null); } } /** * Saves data to persistent data. * * @param {string} key Key to store data. * @param {any} value Data to store. * @returns {Promise<boolean>} Whether data was successfully saved. */ static setPersistData(key, value) { try { return new Promise((resolve)=>{ PersistStorage.setItem(key, value).then(()=>resolve(true)).catch(()=>resolve(false)); }); } catch (error) { return Promise.resolve(false); } } /** * Clears all data from storage. * * @returns {Promise<boolean>} Whether data was successfully saved. */ clearStorageData() { return NodeStorage.clearPersistData(); } /** * Get a key value from storage. * * @param {string} key The key for data. * @returns {Promise<any>} the data object associated with the key. */ getStorageData(key) { return NodeStorage.getPersistData(key); } /** * Saves data to storage. * * @param {string} key Key to store data. * @param {any} value Data to store. * @returns {Promise<boolean>} Whether data was successfully saved. */ setStorageData(key, value) { return NodeStorage.setPersistData(key, value); } constructor(options = {}){ _define_property(this, "options", { dir: '/tmp', encoding: 'utf8', expiredInterval: 3 * 60 * 1000, forgiveParseErrors: false, logging: false, parse: JSON.parse, stringify: JSON.stringify }); // Methods this.clearStorageData = this.clearStorageData.bind(this); this.getStorageData = this.getStorageData.bind(this); this.setStorageData = this.setStorageData.bind(this); // Configuration this.options = { ...this.options, ...options }; PersistStorage.init(this.options); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2Fya2hhbWpzL3BhY2thZ2VzL2Fya2hhbWpzLXN0b3JhZ2Utbm9kZS9zcmMvTm9kZVN0b3JhZ2UvTm9kZVN0b3JhZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBQZXJzaXN0U3RvcmFnZSwge0luaXRPcHRpb25zfSBmcm9tICdub2RlLXBlcnNpc3QnO1xuXG5leHBvcnQgY2xhc3MgTm9kZVN0b3JhZ2Uge1xuICBwcml2YXRlIG9wdGlvbnM6IEluaXRPcHRpb25zID0ge1xuICAgIGRpcjogJy90bXAnLFxuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgZXhwaXJlZEludGVydmFsOiAzICogNjAgKiAxMDAwLFxuICAgIGZvcmdpdmVQYXJzZUVycm9yczogZmFsc2UsXG4gICAgbG9nZ2luZzogZmFsc2UsXG4gICAgcGFyc2U6IEpTT04ucGFyc2UsXG4gICAgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeVxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEluaXRPcHRpb25zID0ge30pIHtcbiAgICAvLyBNZXRob2RzXG4gICAgdGhpcy5jbGVhclN0b3JhZ2VEYXRhID0gdGhpcy5jbGVhclN0b3JhZ2VEYXRhLmJpbmQodGhpcyk7XG4gICAgdGhpcy5nZXRTdG9yYWdlRGF0YSA9IHRoaXMuZ2V0U3RvcmFnZURhdGEuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNldFN0b3JhZ2VEYXRhID0gdGhpcy5zZXRTdG9yYWdlRGF0YS5iaW5kKHRoaXMpO1xuXG4gICAgLy8gQ29uZmlndXJhdGlvblxuICAgIHRoaXMub3B0aW9ucyA9IHsuLi50aGlzLm9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgIFBlcnNpc3RTdG9yYWdlLmluaXQodGhpcy5vcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBrZXlzIGZyb20gcGVyc2lzdGVudCBkYXRhLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gV2hldGhlciBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cbiAgICovXG4gIHN0YXRpYyBjbGVhclBlcnNpc3REYXRhKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgUGVyc2lzdFN0b3JhZ2UuY2xlYXIoKVxuICAgICAgICAgIC50aGVuKCgpID0+IHJlc29sdmUodHJ1ZSkpXG4gICAgICAgICAgLmNhdGNoKCgpID0+IHJlc29sdmUoZmFsc2UpKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEga2V5IGZyb20gcGVyc2lzdGVudCBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IEtleSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGEgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gV2hldGhlciBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cbiAgICovXG4gIHN0YXRpYyBkZWxQZXJzaXN0RGF0YShrZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgUGVyc2lzdFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpXG4gICAgICAgICAgLnRoZW4oKCkgPT4gcmVzb2x2ZSh0cnVlKSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4gcmVzb2x2ZShmYWxzZSkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGtleSB2YWx1ZSBmcm9tIHBlcnNpc3RlbnQgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IGZvciBkYXRhLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSB0aGUgZGF0YSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkuXG4gICAqL1xuICBzdGF0aWMgZ2V0UGVyc2lzdERhdGEoa2V5OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgUGVyc2lzdFN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gICAgICAgICAgLnRoZW4oKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHZhbHVlID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiBudWxsO1xuICAgICAgICAgICAgcmVzb2x2ZSh1cGRhdGVkVmFsdWUpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKCgpID0+IHJlc29sdmUobnVsbCkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgZGF0YSB0byBwZXJzaXN0ZW50IGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgS2V5IHRvIHN0b3JlIGRhdGEuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSBEYXRhIHRvIHN0b3JlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gV2hldGhlciBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgc2F2ZWQuXG4gICAqL1xuICBzdGF0aWMgc2V0UGVyc2lzdERhdGEoa2V5OiBzdHJpbmcsIHZhbHVlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBQZXJzaXN0U3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpXG4gICAgICAgICAgLnRoZW4oKCkgPT4gcmVzb2x2ZSh0cnVlKSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4gcmVzb2x2ZShmYWxzZSkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgZGF0YSBmcm9tIHN0b3JhZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBXaGV0aGVyIGRhdGEgd2FzIHN1Y2Nlc3NmdWxseSBzYXZlZC5cbiAgICovXG4gIGNsZWFyU3RvcmFnZURhdGEoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIE5vZGVTdG9yYWdlLmNsZWFyUGVyc2lzdERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBrZXkgdmFsdWUgZnJvbSBzdG9yYWdlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgZm9yIGRhdGEuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IHRoZSBkYXRhIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGtleS5cbiAgICovXG4gIGdldFN0b3JhZ2VEYXRhKGtleTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gTm9kZVN0b3JhZ2UuZ2V0UGVyc2lzdERhdGEoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBkYXRhIHRvIHN0b3JhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgS2V5IHRvIHN0b3JlIGRhdGEuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSBEYXRhIHRvIHN0b3JlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gV2hldGhlciBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgc2F2ZWQuXG4gICAqL1xuICBzZXRTdG9yYWdlRGF0YShrZXk6IHN0cmluZywgdmFsdWUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gTm9kZVN0b3JhZ2Uuc2V0UGVyc2lzdERhdGEoa2V5LCB2YWx1ZSk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJQZXJzaXN0U3RvcmFnZSIsIk5vZGVTdG9yYWdlIiwiY2xlYXJQZXJzaXN0RGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2xlYXIiLCJ0aGVuIiwiY2F0Y2giLCJlcnJvciIsImRlbFBlcnNpc3REYXRhIiwia2V5IiwicmVtb3ZlSXRlbSIsImdldFBlcnNpc3REYXRhIiwiZ2V0SXRlbSIsInZhbHVlIiwidXBkYXRlZFZhbHVlIiwiSlNPTiIsInBhcnNlIiwic2V0UGVyc2lzdERhdGEiLCJzZXRJdGVtIiwiY2xlYXJTdG9yYWdlRGF0YSIsImdldFN0b3JhZ2VEYXRhIiwic2V0U3RvcmFnZURhdGEiLCJvcHRpb25zIiwiZGlyIiwiZW5jb2RpbmciLCJleHBpcmVkSW50ZXJ2YWwiLCJmb3JnaXZlUGFyc2VFcnJvcnMiLCJsb2dnaW5nIiwic3RyaW5naWZ5IiwiYmluZCIsImluaXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxvQkFBbUMsZUFBZTtBQUV6RCxPQUFPLE1BQU1DO0lBc0JYOzs7O0dBSUMsR0FDRCxPQUFPQyxtQkFBcUM7UUFDMUMsSUFBSTtZQUNGLE9BQU8sSUFBSUMsUUFBUSxDQUFDQztnQkFDbEJKLGVBQWVLLEtBQUssR0FDakJDLElBQUksQ0FBQyxJQUFNRixRQUFRLE9BQ25CRyxLQUFLLENBQUMsSUFBTUgsUUFB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