use a view to retrieve trigger docs (#73)

diff --git a/.jshintrc b/.jshintrc
index f8e9dc9..d6a6c55 100644
--- a/.jshintrc
+++ b/.jshintrc
@@ -1,5 +1,6 @@
 {
   "esversion"     : 6,
   "module"        : true,
-  "node"          : true
+  "node"          : true,
+  "predef" : ["emit"]
 }
diff --git a/provider/app.js b/provider/app.js
index 28787e0..c6845cb 100644
--- a/provider/app.js
+++ b/provider/app.js
@@ -48,6 +48,7 @@
 var dbProtocol = process.env.DB_PROTOCOL;
 var dbPrefix = process.env.DB_PREFIX;
 var databaseName = dbPrefix + constants.TRIGGER_DB_SUFFIX;
+var ddname = '_design/filters';
 
 // Create the Provider Server
 var server = http.createServer(app);
@@ -56,32 +57,55 @@
 });
 
 function createDatabase (nanop) {
+    logger.info(tid, 'createDatabase', 'creating the trigger database');
+    return new Promise(function(resolve, reject) {
+        nanop.db.create(databaseName, function (err, body) {
+            if (!err) {
+                logger.info(tid, databaseName, ' database for triggers was created.');
+            }
+            else {
+                logger.info(tid, databaseName, 'failed to create the trigger database.  it might already exist ',err);
+            }
+            var db = nanop.db.use(databaseName);
+            var only_triggers = {
+                map: function (doc) {
+                    if (doc.maxTriggers) {
+                        emit(doc._id, 1);
+                    }
+                }.toString()
+            };
 
-  logger.info(tid, 'createDatabase', 'creating the trigger database');
-  if (nanop !== null) {
-    nanop.db.create(databaseName, function(err, body, header) {
-        if (!err) {
-          logger.info(tid, databaseName, ' database for triggers was created.');
-        } else {
-          logger.info(tid, databaseName, 'failed to create the trigger database.  it might already exist ',err);
-        }
+            db.get(ddname, function (error, body) {
+                if (error) {
+                    //new design doc
+                    db.insert({
+                        views: {
+                            only_triggers: only_triggers
+                        },
+                    }, ddname, function (error, body) {
+                        if (error) {
+                            reject("view could not be created: " + error);
+                        }
+                        resolve(db);
+                    });
+                }
+                else {
+                    resolve(db);
+                }
+            });
+        });
     });
-    var chDb = nanop.db.use(databaseName);
-    return chDb;
-  } else {
-    logger.info(tid, databaseName, 'failed to create the trigger database.  nano provider did not get created.  check db URL: ' + dbHost);
-    return null;
-  }
-
 }
 
 function createTriggerDb () {
-
-  logger.info('url is ' +  dbProtocol + '://' + dbUsername + ':' + dbPassword + '@' + dbHost);
-  var nanop = require('nano')(dbProtocol + '://' + dbUsername + ':' + dbPassword + '@' + dbHost);
-
-  return createDatabase (nanop);
-
+    logger.info('url is ' +  dbProtocol + '://' + dbUsername + ':' + dbPassword + '@' + dbHost);
+    var nanop = require('nano')(dbProtocol + '://' + dbUsername + ':' + dbPassword + '@' + dbHost);
+    if (nanop !== null) {
+        return createDatabase (nanop);
+    }
+    else {
+        Promise.reject('nano provider did not get created.  check db URL: ' + dbHost);
+    }
 }
 
 // Initialize the Provider Server
@@ -95,34 +119,33 @@
         }
     }
 
-    var nanoDb = createTriggerDb();
-    if (nanoDb === null) {
-    	logger.error(tid, 'init', 'an error occurred creating database');
-    } else {
+    createTriggerDb()
+    .then(nanoDb => {
+        logger.info(tid, 'init', 'trigger storage database details: ', nanoDb);
 
-      logger.info(tid, 'init', 'trigger storage database details: ', nanoDb);
+        var providerUtils = new ProviderUtils(tid, logger, app, retriesBeforeDelete, nanoDb, routerHost, supportIncludeDocs);
+        var providerRAS = new ProviderRAS(tid, logger, providerUtils);
+        var providerHealth = new ProviderHealth(tid, logger, providerUtils);
+        var providerUpdate = new ProviderUpdate(tid, logger, providerUtils);
+        var providerDelete = new ProviderDelete(tid, logger, providerUtils);
 
-      var providerUtils = new ProviderUtils (tid, logger, app, retriesBeforeDelete, nanoDb, routerHost, supportIncludeDocs);
-      var providerRAS = new ProviderRAS (tid, logger, providerUtils);
-      var providerHealth = new ProviderHealth (tid, logger, providerUtils);
-      var providerUpdate = new ProviderUpdate (tid, logger, providerUtils);
-      var providerDelete = new ProviderDelete (tid, logger, providerUtils);
+        // RAS Endpoint
+        app.get(providerRAS.endPoint, providerRAS.ras);
 
-      // RAS Endpoint
-      app.get(providerRAS.endPoint, providerRAS.ras);
+        // Health Endpoint
+        app.get(providerHealth.endPoint, providerHealth.health);
 
-      // Health Endpoint
-      app.get(providerHealth.endPoint, providerHealth.health);
+        // Endpoint for Update OR Create a Trigger
+        app.put(providerUpdate.endPoint, providerUtils.authorize, providerUpdate.update);
 
-      // Endpoint for Update OR Create a Trigger
-      app.put(providerUpdate.endPoint, providerUtils.authorize, providerUpdate.update);
+        // Endpoint for Deleting an existing Trigger.
+        app.delete(providerDelete.endPoint, providerUtils.authorize, providerDelete.delete);
 
-      // Endpoint for Deleting an existing Trigger.
-      app.delete(providerDelete.endPoint, providerUtils.authorize, providerDelete.delete);
+        providerUtils.initAllTriggers();
 
-      providerUtils.initAllTriggers();
-
-    }
+    }).catch(err => {
+        logger.error(tid, 'init', 'an error occurred creating database:', err);
+    });
 
 }
 
diff --git a/provider/lib/utils.js b/provider/lib/utils.js
index bf758ab..8c5db12 100644
--- a/provider/lib/utils.js
+++ b/provider/lib/utils.js
@@ -213,7 +213,7 @@
         var method = 'initAllTriggers';
         logger.info(tid, that.module, method, 'Initializing all cloudant triggers from database.');
 
-        triggerDB.list({include_docs: true}, function(err, body) {
+        triggerDB.view('filters', 'only_triggers', {include_docs: true}, function(err, body) {
             if (!err) {
                 body.rows.forEach(function(trigger) {