code: function(string, secret, salt) {
                  var decryptedString = Utility.decrypt(string, secret, salt);
                  if (!decryptedString.hasError) {
                      return decryptedString.result;
                  }
                  else {
                      /**
                       * If there is a problem with decrypting cache
                       * Some body is trying to decrypt cache with wrong key
                       * or cacheSecret has been expired, so we should truncate
                       * cache databases to avoid attacks.
                       *
                       * But before deleting cache database we should make
                       * sure that cacheSecret has been retrieved fro server
                       * and is ready. If so, and cache is still not decryptable,
                       * there is definitely something wrong with the key; so we are
                       * good to go with deleting cache databases.
                       */
                      if (secret != 'undefined' && secret != '') {
                          if (db) {
                              db.threads
                                  .where('owner')
                                  .equals(userInfo.id)
                                  .count()
                                  .then(function(threadsCount) {
                                      if (threadsCount > 0) {
                                          clearCacheDatabasesOfUser(function() {
                                          });
                                      }
                                  })
                                  .catch(function(e) {
                                      console.log(e);
                                  });
                          }
                      }
                  }
              }
docs: *****************************************************
  P R I V A T E   M E T H O D S            *
  *****************************************************