diff --git a/Dockerfile b/Dockerfile
index e5e8a21..9a4c6d7 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:8.12.0
+FROM node:8.14.0
 
 # only package.json
 ADD package.json /
diff --git a/provider/lib/utils.js b/provider/lib/utils.js
index 9a77999..c863d74 100644
--- a/provider/lib/utils.js
+++ b/provider/lib/utils.js
@@ -242,22 +242,29 @@
                 json: form
             }, function(error, response) {
                 try {
-                    logger.info(method, triggerData.id, 'http post request, STATUS:', response ? response.statusCode : response);
-                    if (error || response.statusCode >= 400) {
+                    var statusCode;
+                    if (!error) {
+                        statusCode = response.statusCode;
+                    }
+                    else if (error.statusCode) {
+                        statusCode = error.statusCode;
+                    }
+                    logger.info(method, triggerData.id, 'http post request, STATUS:', statusCode);
+                    if (error || statusCode >= 400) {
                         // only manage trigger fires if they are not infinite
                         if (triggerData.maxTriggers !== -1) {
                             triggerData.triggersLeft++;
                         }
-                        logger.error(method, 'there was an error invoking', triggerData.id, response ? response.statusCode : error);
-                        if (!error && shouldDisableTrigger(response.statusCode)) {
+                        logger.error(method, 'there was an error invoking', triggerData.id, statusCode || error);
+                        if (!error && shouldDisableTrigger(statusCode)) {
                             //disable trigger
-                            var message = 'Automatically disabled after receiving a ' + response.statusCode + ' status code when firing the trigger';
-                            disableTrigger(triggerData.id, response.statusCode, message);
-                            reject('Disabled trigger ' + triggerData.id + ' due to status code: ' + response.statusCode);
+                            var message = 'Automatically disabled after receiving a ' + statusCode + ' status code when firing the trigger';
+                            disableTrigger(triggerData.id, statusCode, message);
+                            reject('Disabled trigger ' + triggerData.id + ' due to status code: ' + statusCode);
                         }
                         else {
                             if (retryCount < retryAttempts ) {
-                                var timeout = response && response.statusCode === 429 && retryCount === 0 ? 60000 : 1000 * Math.pow(retryCount + 1, 2);
+                                var timeout = statusCode === 429 && retryCount === 0 ? 60000 : 1000 * Math.pow(retryCount + 1, 2);
                                 logger.info(method, 'attempting to fire trigger again', triggerData.id, 'Retry Count:', (retryCount + 1));
                                 setTimeout(function () {
                                     postTrigger(triggerData, form, uri, (retryCount + 1))
