UNPKG

@splitsoftware/splitio-commons

Version:
81 lines (80 loc) 3.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateCache = void 0; var lang_1 = require("../../utils/lang"); var KeyBuilder_1 = require("../KeyBuilder"); var constants_1 = require("./constants"); var DEFAULT_CACHE_EXPIRATION_IN_DAYS = 10; var MILLIS_IN_A_DAY = 86400000; /** * Validates if cache should be cleared and sets the cache `hash` if needed. * * @returns `true` if cache should be cleared, `false` otherwise */ function validateExpiration(options, settings, keys, currentTimestamp, isThereCache) { var log = settings.log; // Check expiration var lastUpdatedTimestamp = parseInt(localStorage.getItem(keys.buildLastUpdatedKey()), 10); if (!(0, lang_1.isNaNNumber)(lastUpdatedTimestamp)) { var cacheExpirationInDays = (0, lang_1.isFiniteNumber)(options.expirationDays) && options.expirationDays >= 1 ? options.expirationDays : DEFAULT_CACHE_EXPIRATION_IN_DAYS; var expirationTimestamp = currentTimestamp - MILLIS_IN_A_DAY * cacheExpirationInDays; if (lastUpdatedTimestamp < expirationTimestamp) { log.info(constants_1.LOG_PREFIX + 'Cache expired more than ' + cacheExpirationInDays + ' days ago. Cleaning up cache'); return true; } } // Check hash var storageHashKey = keys.buildHashKey(); var storageHash = localStorage.getItem(storageHashKey); var currentStorageHash = (0, KeyBuilder_1.getStorageHash)(settings); if (storageHash !== currentStorageHash) { try { localStorage.setItem(storageHashKey, currentStorageHash); } catch (e) { log.error(constants_1.LOG_PREFIX + e); } if (isThereCache) { log.info(constants_1.LOG_PREFIX + 'SDK key, flags filter criteria, or flags spec version has changed. Cleaning up cache'); return true; } return false; // No cache to clear } // Clear on init if (options.clearOnInit) { var lastClearTimestamp = parseInt(localStorage.getItem(keys.buildLastClear()), 10); if ((0, lang_1.isNaNNumber)(lastClearTimestamp) || lastClearTimestamp < currentTimestamp - MILLIS_IN_A_DAY) { log.info(constants_1.LOG_PREFIX + 'clearOnInit was set and cache was not cleared in the last 24 hours. Cleaning up cache'); return true; } } } /** * Clean cache if: * - it has expired, i.e., its `lastUpdated` timestamp is older than the given `expirationTimestamp` * - its hash has changed, i.e., the SDK key, flags filter criteria or flags spec version was modified * - `clearOnInit` was set and cache was not cleared in the last 24 hours * * @returns `true` if cache is ready to be used, `false` otherwise (cache was cleared or there is no cache) */ function validateCache(options, settings, keys, splits, rbSegments, segments, largeSegments) { var currentTimestamp = Date.now(); var isThereCache = splits.getChangeNumber() > -1; if (validateExpiration(options, settings, keys, currentTimestamp, isThereCache)) { splits.clear(); rbSegments.clear(); segments.clear(); largeSegments.clear(); // Update last clear timestamp try { localStorage.setItem(keys.buildLastClear(), currentTimestamp + ''); } catch (e) { settings.log.error(constants_1.LOG_PREFIX + e); } return false; } // Check if ready from cache return isThereCache; } exports.validateCache = validateCache;