docs: function(key, cb, reader) {
          var decrypt, finished, gunzip, jsParse;
          if (!devices) {
            if (typeof cb === "function") {
              cb('no devices', null);
            }
            return typeof done === "function" ? done() : void 0;
          } else {
            jsParse = new jsonStream.parse('*');
            decrypt = crypto.createDecipher(algorithm, settings.ENCRYPTION_KEY || settings.SESSION_SECRET || '5random7493nonsens!e');
            gunzip = zlib.createGunzip();
            finished = false;
            return async.eachSeries(devices, function(device, callback) {
              var calledBack, st;
              if (!finished) {
                calledBack = false;
                if (!reader) {
                  reader = device.getReadStream(key);
                }
                st = reader;
                if (doencrypt) {
                  st = st.pipe(decrypt);
                }
                if (dozip) {
                  st = st.pipe(gunzip);
                }
                st.pipe(jsParse).pipe(es.mapSync(function(data) {
                  finished = true;
                  calledBack = true;
                  if (typeof cb === "function") {
                    cb(null, data);
                  }
                  if (typeof done === "function") {
                    done();
                  }
                  return callback();
                }));
                reader.on('error', function(e) {
                  if (!calledBack) {
                    calledBack = true;
                    return callback();
                  }
                });
                st.on('error', function(e) {
                  if (!calledBack) {
                    calledBack = true;
                    finished = true;
                    if (typeof cb === "function") {
                      cb('encrypt error', null);
                    }
                    return callback();
                  }
                });
                jsParse.on('error', function(e) {
                  return console.log('Error parsing database - have you changed your encryption key or turned encryption on or off?  If so, update your database using ndx-framework.');
                });
                return st.on('end', function() {
                  if (!calledBack) {
                    calledBack = true;
                    return callback();
                  }
                });
              } else {
                return callback();
              }
            }, function() {
              if (!finished) {
                if (typeof cb === "function") {
                  cb('nothing found', null);
                }
                return typeof done === "function" ? done() : void 0;
              }
            });
          }
        }