1'use strict'; 2 3var WHITELIST = [ 4 'ETIMEDOUT', 5 'ECONNRESET', 6 'EADDRINUSE', 7 'ESOCKETTIMEDOUT', 8 'ECONNREFUSED', 9 'EPIPE', 10 'EHOSTUNREACH', 11 'EAI_AGAIN' 12]; 13 14var BLACKLIST = [ 15 'ENOTFOUND', 16 'ENETUNREACH', 17 18 // SSL errors from https://github.com/nodejs/node/blob/ed3d8b13ee9a705d89f9e0397d9e96519e7e47ac/src/node_crypto.cc#L1950 19 'UNABLE_TO_GET_ISSUER_CERT', 20 'UNABLE_TO_GET_CRL', 21 'UNABLE_TO_DECRYPT_CERT_SIGNATURE', 22 'UNABLE_TO_DECRYPT_CRL_SIGNATURE', 23 'UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY', 24 'CERT_SIGNATURE_FAILURE', 25 'CRL_SIGNATURE_FAILURE', 26 'CERT_NOT_YET_VALID', 27 'CERT_HAS_EXPIRED', 28 'CRL_NOT_YET_VALID', 29 'CRL_HAS_EXPIRED', 30 'ERROR_IN_CERT_NOT_BEFORE_FIELD', 31 'ERROR_IN_CERT_NOT_AFTER_FIELD', 32 'ERROR_IN_CRL_LAST_UPDATE_FIELD', 33 'ERROR_IN_CRL_NEXT_UPDATE_FIELD', 34 'OUT_OF_MEM', 35 'DEPTH_ZERO_SELF_SIGNED_CERT', 36 'SELF_SIGNED_CERT_IN_CHAIN', 37 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY', 38 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', 39 'CERT_CHAIN_TOO_LONG', 40 'CERT_REVOKED', 41 'INVALID_CA', 42 'PATH_LENGTH_EXCEEDED', 43 'INVALID_PURPOSE', 44 'CERT_UNTRUSTED', 45 'CERT_REJECTED' 46]; 47 48module.exports = function (err) { 49 if (!err || !err.code) { 50 return true; 51 } 52 53 if (WHITELIST.indexOf(err.code) !== -1) { 54 return true; 55 } 56 57 if (BLACKLIST.indexOf(err.code) !== -1) { 58 return false; 59 } 60 61 return true; 62}; 63