{"_id":"api-umbrella-gatekeeper","_rev":"50-8b6c337cf0f4d6cd94d4c1662433519c","name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","dist-tags":{"latest":"0.8.18"},"versions":{"0.1.0":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.1.0","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"addr":"1.0.0","api-umbrella-config":"0.2.1","async":"0.9.0","atomic-write":"0.1.1","basic-auth":"1.0.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","dot-component":"0.1.1","east":"0.2.3","east-mongo":"0.1.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.3","js-yaml":"3.2.2","lockfile":"1.0.0","lodash":"2.4.1","log":"1.4.0","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.3","mongoose":"3.8.16","native-dns":"0.6.1","negotiator":"0.4.7","nomnom":"1.8.0","object-extend":"0.5.0","redis":"0.12.1","route-pattern":"0.0.6","simpleflake":"0.1.3","traverse":"0.6.6"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.8.3","chai":"1.9.1","coveralls":"2.11.1","curler":"0.0.5","csv":"0.3.6","express":"4.9.4","factory-lady":"0.1.0","forever-monitor":"1.3.0","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.0","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.12","node-uuid":"1.4.1","request":"2.44.0","sinon":"1.10.3","timekeeper":"0.0.4","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"28d95682d4387b3c6ab040a26279896701e2c415","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.1.0","_shasum":"ed14ce70fe7cd396f8ac193619f59a6c17954ab8","_from":".","_npmVersion":"1.4.21","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"ed14ce70fe7cd396f8ac193619f59a6c17954ab8","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.1.0.tgz","integrity":"sha512-0Y49szbLVzpNdOTUOmnQxX2bbpo8bg2VHke1r2bLYRzMqhwAd9fpilq544IpMRxEs48v0DwLmur1zx87IKCEvw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/HnBIBwWDqf0UTBqX5BUqIGUlXWcfNs0h6Ghvx5t20QIga04f9v1BkU7PWW61Qso+dHYAcFujJfIFyRR2HEp7EYE="}]}},"0.1.1":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.1.1","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"addr":"1.0.1","api-umbrella-config":"0.2.1","async":"0.9.0","atomic-write":"0.1.1","basic-auth":"1.0.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","dot-component":"0.1.1","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.3","js-yaml":"3.2.2","lockfile":"1.0.0","lodash":"2.4.1","log":"1.4.0","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.3","mongoose":"3.8.17","native-dns":"0.6.1","negotiator":"0.4.8","nomnom":"1.8.0","object-extend":"0.5.0","redis":"0.12.1","route-pattern":"0.0.6","simpleflake":"0.1.3","traverse":"0.6.6"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.0","chai":"1.9.1","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.9.5","factory-lady":"0.1.0","forever-monitor":"1.3.0","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.1","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.17","mversion":"1.3.0","node-uuid":"1.4.1","request":"2.44.0","sinon":"1.10.3","timekeeper":"0.0.4","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"6d72574d2da02e24d566a7b5380efb8adda14454","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.1.1","_shasum":"38fe4ccb2af545b4236915ff20a0ac624a315db8","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"38fe4ccb2af545b4236915ff20a0ac624a315db8","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.1.1.tgz","integrity":"sha512-9qkNf5pOUIAAUOB/Nfy5kfDwmM2WwA2A/YAwp+97A/mYQvogC1NdJJNn1XnwKly7TMyhB4QAUClQ9F+8luwffg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFQm+6ElokxiC2+emlBcctk2ZrychDpUZvMrUrKDgAg6AiBvpEG1M3n4bEbY4DJZULbourq4BH+GlRu0yCxy7BQgmg=="}]}},"0.2.0":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.2.0","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"addr":"1.0.1","api-umbrella-config":"0.2.1","async":"0.9.0","basic-auth":"1.0.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.3","js-yaml":"3.2.2","lodash":"2.4.1","log":"1.4.0","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.3","mongoose":"3.8.17","negotiator":"0.4.8","nomnom":"1.8.0","object-extend":"0.5.0","redis":"0.12.1","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.0","chai":"1.9.2","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.9.5","factory-lady":"0.1.0","forever-monitor":"1.3.0","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.1","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.18","mversion":"1.6.0","node-uuid":"1.4.1","request":"2.45.0","sinon":"1.10.3","timekeeper":"0.0.4","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"bdbdbe9fa52b8ddcc2aa347ba8724b916b8c3356","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.2.0","_shasum":"b74b26ad3c57fc5f05bf497f452c2b38207a87f1","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"b74b26ad3c57fc5f05bf497f452c2b38207a87f1","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.2.0.tgz","integrity":"sha512-NpgNy601EANt4FDvCQwcSUH85ZeJpqzwRl+v4/xexSYA7ljdKp92GbL7jngFLAvurj9mRpmIQZqoH4BnSW/aYg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYFys1UgVngHx+2v14xvnTp28z78+fRkifsHqMbfpWWgIgMbG4Nf3xsOwMwLJ4RatUiDcCVelyMe3ycDGOqj2Lq6Y="}]}},"0.2.1":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.2.1","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.1","async":"0.9.0","basic-auth":"1.0.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.3","js-yaml":"3.2.2","lodash":"2.4.1","log":"1.4.0","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.3","mongoose":"3.8.17","negotiator":"0.4.8","nomnom":"1.8.0","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.0","chai":"1.9.2","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.9.5","factory-lady":"0.1.0","forever-monitor":"1.3.0","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.1","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.18","mversion":"1.6.0","node-uuid":"1.4.1","request":"2.45.0","sinon":"1.10.3","timekeeper":"0.0.4","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"88575f3188e07d5e279b23f61ce0a7e04ebfc508","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.2.1","_shasum":"9ddfe44c8b850eca3d7813894fcc5e88c39d1fab","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"9ddfe44c8b850eca3d7813894fcc5e88c39d1fab","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.2.1.tgz","integrity":"sha512-dKTY/ghFAsmFEFzZ9C1i9TQVWM0l9O2xqbgl6HwFb5k7La3TP/crfMNhTykpbTcXdnaq+bGo5L6TQeTPmHBqpg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJPBNFXukyACt68/GKd8b+2DFGau4GuRzCs5/S2cFxCwIhAPBr43szMBbzL25lpWvcNJ7kh/MbUMOk6pDH1TwCNJma"}]}},"0.2.2":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.2.2","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.1","async":"0.9.0","basic-auth":"1.0.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.3","js-yaml":"3.2.2","lodash":"2.4.1","log":"1.4.0","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.3","mongoose":"3.8.17","negotiator":"0.4.8","nomnom":"1.8.0","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.0","chai":"1.9.2","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.9.5","factory-lady":"0.1.0","forever-monitor":"1.3.0","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.1","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.18","mversion":"1.6.0","node-uuid":"1.4.1","request":"2.45.0","sinon":"1.10.3","timekeeper":"0.0.4","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"fcffd028a4030a90f247554896d9066a6c1abcb4","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.2.2","_shasum":"ca7dc2f8ec3d231859c5f7834c018b08057f493a","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"ca7dc2f8ec3d231859c5f7834c018b08057f493a","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.2.2.tgz","integrity":"sha512-MbGihdg/xjV+u+X+O2jD59pATQ7vtq+/mIQ4wT10q8JmNgP89uOM3UXUbB519Vil52egXqgENixUNKSzzH5y6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFCojPs2UhraFKmbbgREaLNw5g2h1vyDaNmb9yD2oeVdAiAo9x0QAL2bRFhLLQS7CMZgYWgShsAD/eCVdkKeDzf91Q=="}]}},"0.2.3":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.2.3","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.1","async":"0.9.0","basic-auth":"1.0.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.3","js-yaml":"3.2.2","lodash":"2.4.1","log":"1.4.0","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.3","mongoose":"3.8.17","negotiator":"0.4.8","nomnom":"1.8.0","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.0","chai":"1.9.2","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.9.5","factory-lady":"0.1.0","forever-monitor":"1.3.0","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.1","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.18","mversion":"1.6.0","node-uuid":"1.4.1","request":"2.45.0","sinon":"1.10.3","timekeeper":"0.0.4","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"40c91581efb72f7703e06bff4fd2cf44d6670725","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.2.3","_shasum":"72372cad5598353442cf8503b85d27fda239cd2a","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"72372cad5598353442cf8503b85d27fda239cd2a","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.2.3.tgz","integrity":"sha512-bovZbadxGLzU/biXk5HzGINRsL1Nx1jLCzu7Q/miG2HfbeztcAXKJt0QnHVreQdCJT105UYC+VEccSUTS7AAyw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC48G+tw+DxRnCR4utReKH9a8W+kIZVL6lO50lZKX1U2gIgAPS1PApU3HXWVT+4UAbOJupERvePF7ZtWEdG6Fu6p5U="}]}},"0.2.4":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.2.4","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.1","async":"0.9.0","basic-auth":"1.0.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.3","js-yaml":"3.2.2","lodash":"2.4.1","log":"1.4.0","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.3","mongoose":"3.8.17","negotiator":"0.4.8","nomnom":"1.8.0","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.0","chai":"1.9.2","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.9.5","factory-lady":"0.1.0","forever-monitor":"1.3.0","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.1","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.18","mversion":"1.6.0","node-uuid":"1.4.1","request":"2.45.0","sinon":"1.10.3","timekeeper":"0.0.4","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"0e421b65104a121cee505fc7468d05b1ba0a89a1","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.2.4","_shasum":"d72de944bc7fc9443852a22021431df263ea5694","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"d72de944bc7fc9443852a22021431df263ea5694","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.2.4.tgz","integrity":"sha512-I1Mzf+onK+LrMGAMu+x/EWS6h7BGSXYI2Y2pvdgDqrwwHXyXira/whwz05eq0GSTbQBbbDwQgGvTzNdJ75VB9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFqglfXpCbTPiGrqBxt2sw0M2nw5duzPGjWe1hMZLpH4AiBgex3O8UKoI4as6dKygBwdbMn++h8hKaD0fOSZiS+TXw=="}]}},"0.2.5":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.2.5","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.1","async":"0.9.0","basic-auth":"1.0.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.3","js-yaml":"3.2.2","lodash":"2.4.1","log":"1.4.0","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.3","mongoose":"3.8.17","negotiator":"0.4.8","nomnom":"1.8.0","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.0","chai":"1.9.2","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.9.5","factory-lady":"0.1.0","forever-monitor":"1.3.0","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.1","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.18","mversion":"1.6.0","node-uuid":"1.4.1","request":"2.45.0","sinon":"1.10.3","timekeeper":"0.0.4","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"e2b0d240384e74f417a36c9c2b164eeeca0d1f61","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.2.5","_shasum":"77f57743919034db3175b3302532570d5945eb37","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"77f57743919034db3175b3302532570d5945eb37","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.2.5.tgz","integrity":"sha512-mcQiX+DcnyCYQctStdBurCihEIGeP80rzc2GN20qCMLeA+rpw+Qo7OxiPtknyNTnVYnw5oTirtdntBUt4T/d4g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSGdFOynxnulC5UJznqLPTS/Me72VZLVqADxqI8VDKsAIhALIzp4QjOI4P085MaAsG/l6H/biZbjVkqbcnKUd71IqK"}]}},"0.7.0-pre1":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.7.0-pre1","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.1","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.19","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"1.10.0","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.3","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.22","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.12.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"77acea2acb7338fa99cf34e0b064dd79c4b84985","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.7.0-pre1","_shasum":"2939f677136f62c632eb11e59f371f9b3323b556","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"2939f677136f62c632eb11e59f371f9b3323b556","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.7.0-pre1.tgz","integrity":"sha512-OzsBlSfXj/gI/nwUgC1AaDMkM6HnRpBlnEzO94atmZ+efz+phDmy46QcI/hKJbZ55hLptsQSbMDR0OTCKsHuKQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+EYRUt9SF7Bc+n6mpPrb9ZUepI55RWv4e5EkOvxFQ3gIgXOQDZFCuhTgHYvcY5OdHVY0R8vO2BhHQc2NrjftB3k0="}]}},"0.7.0":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.7.0","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.1","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.19","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"1.10.0","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.3","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.22","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.12.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"5c75f0390970067f9d27f9c532a2dfaf4e39d6d3","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.7.0","_shasum":"8dd1e5edf70b177330b1ed9f6868d36b7b9f72b4","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"8dd1e5edf70b177330b1ed9f6868d36b7b9f72b4","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.7.0.tgz","integrity":"sha512-mSs47wOyG2Mfuav/0ljZjwdq8BS+8GOqwc/lPyBIGKY6NmckAKw3lkkA4ZGkWGQZnh4tYUbKJlLcIEWawCLjSg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBtzsbLi9/Zc/DK2GLZAIFaIQT5iZcdLj1Ra2hqECenQAiBiENn5AAFWb2T0xFBj18jjCjG0HealHnwHT6zG2QSEnA=="}]}},"0.7.1":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.7.1","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.1","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.19","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"1.10.0","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.3","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.22","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.12.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"d82b77acff0a50320475bd3d52b824c72d383a52","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.7.1","_shasum":"143cf033fbd9105ab66992e81056fa7eb2b6467c","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"143cf033fbd9105ab66992e81056fa7eb2b6467c","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.7.1.tgz","integrity":"sha512-23fGEz5D2kUW5wTY3wqoXf2oMxmYT8Bjz4vMr9Kz05ayXEAU255Y6DBipb6wrg6bFVP1ZYvW52FF663bvnVx4g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIQC1YSYAcphD717dmpHDFqno+bePKACLkcEnjEJIDIa/AgIfBrFW4kWW0wdYR0obchR099L6G8L9FsgnuqyGgzjKWg=="}]}},"0.8.0":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.0","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.1","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.19","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"1.10.0","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.3","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.22","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.12.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"a58f8e8d1775bf78f288cdd39ec2c1721e229df9","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.0","_shasum":"f286b91a0b501a838a4d70ef2531128cf8b30d14","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"f286b91a0b501a838a4d70ef2531128cf8b30d14","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.0.tgz","integrity":"sha512-7CnhEb+hHacguNw5dxvE5P7UXVEo4tRsD8nkd5DchniBrW4DDj1WSw04uSDXEsO68NCafnPxnw8+hvPoXxHEtA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDg6fctPlNhF1hVkT20OljyNSdbPpK26CNu1jFpzPr9xwIgMyBIvPxZVOBBJ1eASuSUylh5kOOiudsMu12/sdoO97s="}]}},"0.8.1":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.1","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.1","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.19","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"1.10.0","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.3","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.22","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.12.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"3b08ab7083c6a9972fb06e2e5445094601e0d063","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.1","_shasum":"b3ecf412baf01a29b7a51fce6980b0e927c4c2fd","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"b3ecf412baf01a29b7a51fce6980b0e927c4c2fd","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.1.tgz","integrity":"sha512-pcn9WuIKO/X3fmwOwVMm1gUbId5AGg5Ohmi0+X27jSGFS/9ibRcYz7rhB73cXMC1ON1y3lA6sPyAg7Hkp/Q0dQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsPii6ETBZ5S36kOnDxywOmBF/GbRPKD34GUzQI+94AgIgD9XdUz+4A/q1DehPBbgVv8pGtBOZECtL0XX8AHphK8c="}]}},"0.8.2":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.2","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.3","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"1.10.0","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.3","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.12.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"291b0462f5c141fa9dca64f37e6ee5feb4a068b5","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.2","_shasum":"b3c020901b86a1e67190c76e5f62f584f612bb4d","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"b3c020901b86a1e67190c76e5f62f584f612bb4d","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.2.tgz","integrity":"sha512-1PdH6Fg+PbgtjLRbJY0hWAOGyb3Bl4pRZ+GAfzMoExRUnkDXWbPJiB2phW8jOZv8JzcUMcUA2bEQeDDKbCNsvA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqS9k/MtES68x9+XdC5mWeU/sa2rBa5j5TDcF2QMhUwAIgJH1urP+y+rNn7MJQ5isNtTYjHLuyqSyQ8SO8fjISlFs="}]}},"0.8.3":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.3","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"1.10.0","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.3","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.12.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"5e011aef854b9f0f6f05846692e8003e48cebeeb","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.3","_shasum":"2d7f20f927cbf01b91acc372b8096a0db642b52d","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"2d7f20f927cbf01b91acc372b8096a0db642b52d","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.3.tgz","integrity":"sha512-P6MTFRqEdvZGgrVM8QiktEnXj7FanSVatYpOmG5s40P5LmFAZ4fMDZqYzYSoJuG9R71UzK4DpoZju/vgDNK/5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBzk/Cgee8dSREVnTudR5UB3DSgXoGFmhCC5Ma+2WswmAiEA1yTEL8s3tCDd8BEcDypUs8XLTvIPI3OrKocnmxTqmZI="}]}},"0.8.4":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.4","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"1.10.0","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.3","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.12.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"b8bb29726116c59dfc6c45fe4f19edbd2fc6afdc","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.4","_shasum":"3e9fff1976e545445ed689fe340c9ae2ebd31ccc","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"3e9fff1976e545445ed689fe340c9ae2ebd31ccc","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.4.tgz","integrity":"sha512-w0DM5qET+aUHB/6dc5u9qq7/JoUU7/jogCjq7xJU5rpGyaJ7nT+idQhqr/KrEB5F8/0PaMAl57waJQ9v9AH8ig==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGyPBaekuEI110yS5SZhPXJ4jTeOp61wpWjzAxb39FPAAiEArmGyTgrnIqscs9ePT08Ksa+dmcyM2K3ybJbGckyxIxc="}]}},"0.8.5":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.5","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"1.10.0","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.3","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.12.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"a990314f0fe4437dc195e2354b997ad6edc80f46","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.5","_shasum":"44fb32bdd157918b0a1fda1a3e67681b3f849339","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"44fb32bdd157918b0a1fda1a3e67681b3f849339","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.5.tgz","integrity":"sha512-ONjs9IzXUmWuFElggCBw5PMZgXmB1o3M3Rc/YmTnWNRtj7KkOeB7Wz3EV5DLZ7qvXYrbMcbA9tArFW2Wwi6ZGg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvn/2lURIuJkVuE28zu5IXBBCtdC7wxtnaqk4xnGQLyQIhAIzYg/fWhnW5PQBU+yIn4t7m5tZ1EXJyio559mmRwK5S"}]}},"0.8.6":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.6","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","connect":"2.26.2","connect-base":"0.1.7","clone":"0.1.18","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"1.10.0","coveralls":"2.11.2","curler":"0.0.5","csv":"0.3.6","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.10.0","grunt-mocha-test":"0.12.3","grunt-shell":"1.1.1","ipplusplus":"0.0.2","mocha-lcov-reporter":"0.0.1","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.12.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"a45c67f534ef5d29183d9e9c4dacf61237861382","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.6","_shasum":"b60cc89683a5627c16aea634ba7595e00eee9c4c","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"b60cc89683a5627c16aea634ba7595e00eee9c4c","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.6.tgz","integrity":"sha512-Zwzwe4+iwQVL6eUe8+0s8o32zEsycs51Dnp2iKhlP8HMkrVEKY5FKQWmfJeXjNP9V1eSLabRhpu5dfwRN4hDiA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVN+iBLKDNoXWXWKg9kG++NPrYvjwL6RWZGbSQ+uh/RwIgVKfPXt+iI4NLyTLDiVt3IGi/j0aQOuBYI8rNhH4niuY="}]}},"0.8.7":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.7","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","clone":"0.1.18","connect":"2.26.2","connect-base":"0.1.7","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"2.2.0","coveralls":"2.11.2","csv":"0.3.6","curler":"0.0.5","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.11.1","grunt-mocha-test":"0.12.7","grunt-shell":"1.1.2","ipplusplus":"0.0.2","mocha":"2.2.4","mocha-lcov-reporter":"0.0.2","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.14.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"15a6945dff3b54baa338f6476a17ed2c7718c3ab","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.7","_shasum":"7e66ad7343cd7914e79ee6df644c7289fa51da7c","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"7e66ad7343cd7914e79ee6df644c7289fa51da7c","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.7.tgz","integrity":"sha512-se3/pAG6lDxgEDx96EqI+VUP0Jauh4QVjD6809VzcYOX9FAAJPnc5RVvun0CZySyWGLvgcOF6PqUjDoEDHSCFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDW9/eJAAYxR+9dCBX9v9EzDrfldf0UqUN6gGLOuDR78AiAGqtSCtnuSwRUTfP+XNpY0kI+waKHfjWcvvF5eoi22ug=="}]}},"0.8.8":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.8","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","clone":"0.1.18","connect":"2.26.2","connect-base":"0.1.7","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"2.2.0","coveralls":"2.11.2","csv":"0.3.6","curler":"0.0.5","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.11.1","grunt-mocha-test":"0.12.7","grunt-shell":"1.1.2","ipplusplus":"0.0.2","mocha":"2.2.4","mocha-lcov-reporter":"0.0.2","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.14.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"de827b245944bd252036cbed99096831e2a0af51","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.8","_shasum":"96e47ff69e612633d894ed1bd66825da5814f667","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"96e47ff69e612633d894ed1bd66825da5814f667","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.8.tgz","integrity":"sha512-kgalgTjqnwHpx0XSB7SJQGWSW+sODRfu5OQGQ7/rP50inb8UEyawRSlugj4otRGEjaVe2Vo3kHkZoPzezqEtSw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkWn/HxUeqARxshX9T37FBWywCMXtXRpriwCtjUzAxTwIgOwsZyUonq5yKjYHa6hfLFJfcyCEQXHgpjQlFHSjTTnM="}]}},"0.8.9":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.9","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","clone":"0.1.18","connect":"2.26.2","connect-base":"0.1.7","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"2.2.0","coveralls":"2.11.2","csv":"0.3.6","curler":"0.0.5","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.11.1","grunt-mocha-test":"0.12.7","grunt-shell":"1.1.2","ipplusplus":"0.0.2","mocha":"2.2.4","mocha-lcov-reporter":"0.0.2","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.14.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"c141e5b61a88599a52ebb998d893fbb8281bcae0","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.9","_shasum":"a144f24e8d20536037542866bfecd9f980c27bd4","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"a144f24e8d20536037542866bfecd9f980c27bd4","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.9.tgz","integrity":"sha512-oQNxdKvLwyAMfDQ6Z+4OiBY3oX+DL7s5KHHAjya2mhkv59PLL7c8lMiD6DZPjPl5Mqx2p2R6/B5Ij+xLMLCpAg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGf76BDmHAcAoNB99igmnI86ZO0onJJaSD6yKMBtuUR2AiB5W3l6MCXFpI/pqsVHLDXIEBnLR8Hu63/EHT1UezT55w=="}]}},"0.8.10":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.10","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","clone":"0.1.18","connect":"2.26.2","connect-base":"0.1.7","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"2.2.0","coveralls":"2.11.2","csv":"0.3.6","curler":"0.0.5","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.11.1","grunt-mocha-test":"0.12.7","grunt-shell":"1.1.2","ipplusplus":"0.0.2","mocha":"2.2.4","mocha-lcov-reporter":"0.0.2","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.14.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"9d61a2092649e1fe97d723d633eaa4a28d977b5f","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.10","_shasum":"b168d0bf174eba934c0036e349e158aeb7f18df9","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"b168d0bf174eba934c0036e349e158aeb7f18df9","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.10.tgz","integrity":"sha512-KRIsApQNUIY56fDMg4KGWROv/0+DSZyf/LVNdz0kq7rLnXENE9az0zToDebMMB+l7KARejlNgpWO1/p2m+CBKA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZ5szikPZ/Cmp5LLp3DtN5sZgLhwrZ6BH/ULc33JqyTwIhAOkqUiHcNL5AJljGxva3vPqEq/FP2ShjrPZ2uc/8vnql"}]}},"0.8.11":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.11","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","clone":"0.1.18","connect":"2.26.2","connect-base":"0.1.7","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"2.2.0","coveralls":"2.11.2","csv":"0.3.6","curler":"0.0.5","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.11.1","grunt-mocha-test":"0.12.7","grunt-shell":"1.1.2","ipplusplus":"0.0.2","mocha":"2.2.4","mocha-lcov-reporter":"0.0.2","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.14.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"2aa82028b4ad1cb9edab4fcb724bc46cd0ed2747","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.11","_shasum":"375972173cfb29fbb7267a4ca12788e685bd86ff","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"375972173cfb29fbb7267a4ca12788e685bd86ff","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.11.tgz","integrity":"sha512-feiEtGWqr709L6+U1ZISvJGpRVXR7QSPoxYmEFApzyv4CQmg5bZd/vZvDG6DvGET5y26+JZtoCQchrNj7qrihw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+RVeUARzDnxqCKoVoHhuT3BdnNWqUY0EW9klbTmtdzwIhAMlJG+hBCWYIsbBrBjjQNQQant9p0PBGBpzsnyMAyul7"}]}},"0.8.12":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.12","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","clone":"0.1.18","connect":"2.26.2","connect-base":"0.1.7","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"2.2.0","coveralls":"2.11.2","csv":"0.3.6","curler":"0.0.5","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.11.1","grunt-mocha-test":"0.12.7","grunt-shell":"1.1.2","ipplusplus":"0.0.2","mocha":"2.2.4","mocha-lcov-reporter":"0.0.2","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.14.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"e199ffb96ed925a160f89fdb789665d27f3b1953","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.12","_shasum":"ee14ba2f2d2a869f85519f99557bd2c4591e3ad5","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"ee14ba2f2d2a869f85519f99557bd2c4591e3ad5","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.12.tgz","integrity":"sha512-jIx9zAl569vlwqiSqD8c4UcbTnf9WwnOtIRbrbCkOVy8GIU5ee+EGd5zMiL+vGwQXe1oahnuX9npe1zsqMsW1g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFmgnOd0JQ173/2WLGD8+RDkJU7WWOQVC/s5INNaS0RzAiEApbIkU+BPp3rdO3iqGFoervwVhto7bfW3+HVSiaxe7cE="}]}},"0.8.13":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.13","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","clone":"0.1.18","connect":"2.26.2","connect-base":"0.1.7","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"2.2.0","coveralls":"2.11.2","csv":"0.3.6","curler":"0.0.5","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.11.1","grunt-mocha-test":"0.12.7","grunt-shell":"1.1.2","ipplusplus":"0.0.2","mocha":"2.2.4","mocha-lcov-reporter":"0.0.2","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.14.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"f6ef66fd8d0d2a001a305fe8385410d077bfdf29","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.13","_shasum":"1a730dcf7f6ca9600a065513686503fafb3df235","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"1a730dcf7f6ca9600a065513686503fafb3df235","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.13.tgz","integrity":"sha512-U18pl03vSPuar75xmhmLsuNU9cT6+spBSaudCVRG3hTC7VHwVayBoKV9xbOLPxvAtHbCEOAj7OlTtDfSWHPqww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCs8DIcWjdC1Xaky2OFJso1/+C0yFvm4ti2DS9il7cZqAIhAK/LqDBA4mNK6A+snxpQWgicl9/2CnUOJFUad1+jdY17"}]}},"0.8.14":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.14","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","clone":"0.1.18","connect":"2.26.2","connect-base":"0.1.7","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"2.2.0","coveralls":"2.11.2","csv":"0.3.6","curler":"0.0.5","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.11.1","grunt-mocha-test":"0.12.7","grunt-shell":"1.1.2","ipplusplus":"0.0.2","mocha":"2.2.4","mocha-lcov-reporter":"0.0.2","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.14.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"78723a07925e12885ae035634e64a4c25714b1d8","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.14","_shasum":"3b6c49281429eb633197fbdce6b964641eb27cb2","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"}],"dist":{"shasum":"3b6c49281429eb633197fbdce6b964641eb27cb2","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.14.tgz","integrity":"sha512-IlYsBDhGA0JhK0Kmos8DgLQUtUz3A0b9iypUk5/afOiAhNVfAgfKk8pbBKMihI0MX3YpiyK9Yq5D3+V8kBQNRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+HHggWhGq9jxpHBKXzEVqz2PgCijI2RZsjhB/TYRDwAIhAPWnyyb6ro2A3KZmtZoii/MbCTJFURBqV7TOZ7PdAJZ1"}]}},"0.8.15":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.15","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","clone":"0.1.18","connect":"2.26.2","connect-base":"0.1.7","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"2.2.0","coveralls":"2.11.2","csv":"0.3.6","curler":"0.0.5","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.11.1","grunt-mocha-test":"0.12.7","grunt-shell":"1.1.2","ipplusplus":"0.0.2","mocha":"2.2.4","mocha-lcov-reporter":"0.0.2","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.14.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"71465d3cd3e2484a1aed0162bda30fc88425829f","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.15","_shasum":"d352c68c4840dec64ac2aff63d17e31db5afd6fa","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"cmc333333","email":"cm.lubinski@gmail.com"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"},{"name":"cmc333333","email":"cm.lubinski@gmail.com"}],"dist":{"shasum":"d352c68c4840dec64ac2aff63d17e31db5afd6fa","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.15.tgz","integrity":"sha512-14vfON/Mv771vPHqKkaGh/kANrt9pBZ7vRk8QU7SwXbNzqEDPMV8KSDYXe9hKhtFt6E8FWji3qasxPEHpnF0vA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbFmIcKCOLXaXMZ+RxOW75azfFlL4EZlkp26gdVxkg9AIhANwy0XHQB1JoJzRM9bK95ZLvH01yikaehpwXMsu1imGh"}]}},"0.8.16":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.16","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","clone":"0.1.18","connect":"2.26.2","connect-base":"0.1.7","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"2.2.0","coveralls":"2.11.2","csv":"0.3.6","curler":"0.0.5","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.11.1","grunt-mocha-test":"0.12.7","grunt-shell":"1.1.2","ipplusplus":"0.0.2","mocha":"2.2.4","mocha-lcov-reporter":"0.0.2","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.14.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"e4facdd3aab39497babb92fc3b3a9540629220d7","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.16","_shasum":"eced6c1bff5899b2844dbc6494de12ba4f2f120d","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"},{"name":"cmc333333","email":"cm.lubinski@gmail.com"}],"dist":{"shasum":"eced6c1bff5899b2844dbc6494de12ba4f2f120d","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.16.tgz","integrity":"sha512-s/TEHCsoquT+ULqOGBRFl/yhc6UpUn8ZyLjudjzcZgMGhEQfgl6sKxCFDubPMrHgUASO64iTNfWW66LNro9ucQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCHH6r1Zv3H5l29PHBv9lGNbWQYotqtVileV4dtk4B8HAIhAPF4thR0v47ZA9FW1cFVDPoxjqEZUAdk4UiKKe7ZFDdi"}]}},"0.8.17":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.17","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","clone":"0.1.18","connect":"2.26.2","connect-base":"0.1.7","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"2.2.0","coveralls":"2.11.2","csv":"0.3.6","curler":"0.0.5","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.11.1","grunt-mocha-test":"0.12.7","grunt-shell":"1.1.2","ipplusplus":"0.0.2","mocha":"2.2.4","mocha-lcov-reporter":"0.0.2","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.14.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"6c1704b51733affb8971bba4d509f27431754008","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.17","_shasum":"4d8b51999ec9840d47fa1bf3a64269de92d9e545","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"},{"name":"cmc333333","email":"cm.lubinski@gmail.com"}],"dist":{"shasum":"4d8b51999ec9840d47fa1bf3a64269de92d9e545","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.17.tgz","integrity":"sha512-MnXPLu4ZhHwpnR6kMyrd+6So+YVSr2lhsNyIFacPLWz8gJXqltxmxFji1AjD1+fmCez7d1Zh58EBWPHUSLc3nw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFP+ARHR5cEe5uq4ADaZSNz/24XGRNWTvxrDrcsjkOApAiEA4kZAKBho4na7juV2Xcun7UfmFtE+OjEQ7MY3b8WUleA="}]}},"0.8.18":{"name":"api-umbrella-gatekeeper","description":"A custom reverse proxy to control access to your APIs. Performs API key validation, request rate limiting, and gathers analytics.","version":"0.8.18","engines":">= 0.8.0","author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"main":"./lib/api-umbrella-gatekeeper","bin":{"api-umbrella-gatekeeper":"./bin/api-umbrella-gatekeeper","api-umbrella-distributed-rate-limits-sync":"./bin/api-umbrella-distributed-rate-limits-sync"},"scripts":{"test":"grunt"},"dependencies":{"api-umbrella-config":"0.2.4","async":"0.9.0","basic-auth":"1.0.0","bunyan":"1.2.1","bunyan-rollbar":"0.1.0","clone":"0.1.18","connect":"2.26.2","connect-base":"0.1.7","csv-string":"2.2.2","escape-regexp":"0.0.1","handlebars":"1.3.0","hiredis":"0.1.17","http-proxy":"0.10.4","ipaddr.js":"0.1.5","js-yaml":"3.2.3","lodash":"2.4.1","lru-cache":"2.5.0","mime":"1.2.11","moment":"2.8.4","mongoose":"3.8.25","negotiator":"0.4.9","nomnom":"1.8.1","object-extend":"0.5.0","proxy-addr":"1.0.3","redis":"0.12.1","rollbar":"0.4.0","route-pattern":"0.0.6","simpleflake":"0.1.3"},"devDependencies":{"basic-auth-connect":"1.0.0","blanket":"1.1.6","body-parser":"1.9.2","chai":"2.2.0","coveralls":"2.11.2","csv":"0.3.6","curler":"0.0.5","express":"4.10.2","factory-lady":"0.1.0","forever-monitor":"1.5.2","grunt":"0.4.5","grunt-cli":"0.1.13","grunt-contrib-jshint":"0.11.1","grunt-mocha-test":"0.12.7","grunt-shell":"1.1.2","ipplusplus":"0.0.2","mocha":"2.2.4","mocha-lcov-reporter":"0.0.2","mongodb":"1.4.34","mversion":"1.8.0","node-uuid":"1.4.1","request":"2.48.0","sinon":"1.14.1","timekeeper":"0.0.5","xml2js":"0.4.4"},"repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"license":"MIT","config":{"blanket":{"pattern":"/lib/","data-cover-never":["test","node_modules"]}},"gitHead":"d4964b006c5ccdee47430bbd2ea5d9e9d5e5e5cc","bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","_id":"api-umbrella-gatekeeper@0.8.18","_shasum":"b04b23d8e72ddf626ec9861ed4c71852d5e56b5b","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"gui","email":"stuff@nickm.org"},"maintainers":[{"name":"gui","email":"stuff@nickm.org"},{"name":"cmc333333","email":"cm.lubinski@gmail.com"}],"dist":{"shasum":"b04b23d8e72ddf626ec9861ed4c71852d5e56b5b","tarball":"https://registry.npmjs.org/api-umbrella-gatekeeper/-/api-umbrella-gatekeeper-0.8.18.tgz","integrity":"sha512-b0aBYiX85rT38F9Vf420LCVmwwdwIaKg/guLIanV7WXIZlBKF9zbNuC+gDfmWI8YH2gGsjoZVKq0+9DF9Yl7VQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDgpg2/eQhYtqI0k53moh8vVym7Qky0vEoYCkRty/ZTlAiEA0Ws6rtj9uQ8m3NPARTe4h21tfRLF/kqI7p5QOG95OPU="}]}}},"readme":"# API Umbrella Gatekeeper\n\nAPI Umbrella Gatekeeper is a custom reverse proxy that sits in front of your APIs and efficiently validates incoming requests. It is part of the [API Umbrella](http://github.com/NREL/api-umbrella) project. API Umbrella Gatekeeper is written in Node.js.\n\nIssues for this project are [maintained here](https://github.com/NREL/api-umbrella/issues).  \n\n## Overview\n\nThe basic aim of the Gatekeeper is to handle API keys, throttle requests, gather analytics, and optionally rewrite requests before passing incoming requests to your actual APIs.\n\nIn the API Umbrella stack, the Gatekeeper is represented below:\n\n```\n[request] ==> [load balancer] ==> [GATEKEEPER] ==> [cache] ==> [load balancer] => [api backend]\n```\n\n## Usage\n\nSee [Running API Umbrella](https://github.com/NREL/api-umbrella#running-api-umbrella) for setup instructions.\n\n## Features\n\n### API Key Validation\n\nOnce a request hits API Umbrella Gatekeeper, it validates that a valid API key has been passed with the request. If a valid API key is present, the request is allowed to hit the API backend (assuming the user has not exceeded their rate limits). If the API key is missing or invalid, then Gatekeeper immediately responds to the request and the request is not permitted to access the API backend.\n\nAPI keys can be passed in three differnet, configurable ways:\n\n- HTTP header\n- GET parameter\n- HTTP basic username\n\nCurrently, only simple API keys are supported, but it would be possible to extend API Umbrella Gatekeeper to support OAuth2 or other authentication mechanisms.\n\nAPI keys are stored in MongoDB.\n\n### Rate Limiting / Throttling\n\nIn addition to validating API keys, API Umbrella Gatekeeper also performs rate lmiting to ensure users don't overload your API backends. Rate limiting can be performed based on the users API key, IP address, or both. Rate limits can be configured in a number of ways: \n\n- Rate limit by API key, IP address, or both.\n- Rate limit by any arbitrary rolling time window (per 1 second, per 15 minutes, per hour, per day, etc).\n- Rate limits can be configured on a per API or per user basis.\n- Rate limits can be  distributed and shared across hosting environemnts. This allowing for rate limits to still be efficiently applied if API Umbrella is distributed locally or geographically. \n\nRate limiting uses both Redis and MongoDB.\n\n### Logging & Analytics\n\nDetails on each incoming API request is asyncronously logged in a database to allow for near real time analytics of all your API usage. Various details are captured for each request:\n\n- Basic details like request URL.\n- Additional header information like, \n- Geographic information on where the request originated from.\n- Response codes from the API backend, so you can look for requests that resulted in errors.\n- Performance metrics: How long each request took to respond is captured, so you can see how your API performs and look for problem areas.\n- Size metrics: Keep track of how many bytes are trasnferred for the request and the response.\n\nThe [API Umbrella Web](http://github.com/NREL/api-umbrella-web) application provides an administrative interface for browsing and querying the analtyics gathered.\n\nLogs and analytics are gathered in ElasticSearch.\n\n### API Facade / Request Rewriting\n\nAPI Umbrella Gatekeeper can optionally modify the incoming request in a variety of ways. This allows your public facing API to differ from the backend.\n\n- URL rewriting: The incoming URL can be transformed before hitting the backend. This can be as simple as presenting the API under a different URL prefix, or as complex as providing a completely different URL structure.\n- Manipulate HTTP headers: Add or remove HTTP headers from the request before it hits the API backend. You can also used Handlebars templates to dynamic set a header value based on the request coming in: `x-original-proto: {{headers.x-forwarded-proto}}`\n\nThe [API Umbrella Web](http://github.com/NREL/api-umbrella-web) application provides an administrative interface configuring the API backends and performing common types of rewriting.\n\n## License\n\nAPI Umbrella is open sourced under the [MIT license](https://github.com/NREL/api-umbrella-gatekeeper/blob/master/LICENSE.txt).\n\n## Acknowledgements\n\nGeographic data comes from GeoLite data created by [MaxMind](http://www.maxmind.com).\n\n[![githalytics.com alpha](https://cruel-carlota.pagodabox.com/dcca3eb5f7decb43edcd988b8b923393 \"githalytics.com\")](http://githalytics.com/NREL/api-umbrella-gatekeeper)\n","maintainers":[{"name":"gui","email":"stuff@nickm.org"},{"name":"cmc333333","email":"cm.lubinski@gmail.com"}],"time":{"modified":"2022-06-13T03:12:36.097Z","created":"2014-09-20T23:06:21.418Z","0.1.0":"2014-09-20T23:06:21.418Z","0.1.1":"2014-09-29T22:32:17.466Z","0.2.0":"2014-10-08T02:34:01.707Z","0.2.1":"2014-10-10T06:14:28.688Z","0.2.2":"2014-10-10T20:27:26.631Z","0.2.3":"2014-10-12T17:44:40.000Z","0.2.4":"2014-10-21T12:34:21.357Z","0.2.5":"2014-10-26T15:08:32.936Z","0.7.0-pre1":"2015-02-05T05:15:36.557Z","0.7.0":"2015-02-09T01:29:30.054Z","0.7.1":"2015-02-11T16:58:02.626Z","0.8.0":"2015-02-23T14:01:50.101Z","0.8.1":"2015-03-07T22:24:26.136Z","0.8.2":"2015-03-14T22:46:50.259Z","0.8.3":"2015-03-15T00:01:12.046Z","0.8.4":"2015-03-19T03:21:24.242Z","0.8.5":"2015-03-19T21:57:02.268Z","0.8.6":"2015-03-29T17:28:27.905Z","0.8.7":"2015-04-13T00:40:42.667Z","0.8.8":"2015-04-30T17:19:32.774Z","0.8.9":"2015-05-01T20:38:21.679Z","0.8.10":"2015-05-19T05:44:32.638Z","0.8.11":"2015-06-05T15:28:29.710Z","0.8.12":"2015-06-08T20:55:07.135Z","0.8.13":"2015-06-09T00:10:09.333Z","0.8.14":"2015-06-15T02:21:28.986Z","0.8.15":"2015-06-24T19:29:06.565Z","0.8.16":"2015-07-31T03:44:21.038Z","0.8.17":"2015-09-10T04:34:11.641Z","0.8.18":"2015-10-09T02:30:18.933Z"},"homepage":"https://github.com/NREL/api-umbrella-gatekeeper","repository":{"type":"git","url":"https://github.com/NREL/api-umbrella-gatekeeper.git"},"author":{"name":"Nick Muerdter","email":"nick.muerdter@nrel.gov"},"bugs":{"url":"https://github.com/NREL/api-umbrella-gatekeeper/issues"},"license":"MIT","readmeFilename":"README.md"}