diff --git a/config.js b/config.js index 3dfe020..45fc25e 100644 --- a/config.js +++ b/config.js @@ -30,8 +30,17 @@ if (process.env.AWS) { 'X-Content-Type-Options': 'nosniff', 'Access-Control-Allow-Origin': '*', 'Access-Control-Request-Method': 'GET', - 'X-Powered-By': 'https://github.com/rich-Harris/packd', + 'X-Powered-By': 'https://github.com/rich-harris/packd', 'Strict-Transport-Security': `max-age=${cacheExpiration}; includeSubDomains; preload`, }; + + exports.onBadRequest = function (res) { + res.status( 200 ); + }; + + exports.onError = function (res) { + // error will be propagated in the logs + res.status( 200 ); + }; } diff --git a/package.json b/package.json index 8f7ad06..e68e23c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "packd", - "version": "2.6.5", + "version": "2.6.6", "description": "Simple alternative to browserify-cdn", "scripts": { "start": "node server", diff --git a/server/index.js b/server/index.js index 8e9ae23..5ff877b 100644 --- a/server/index.js +++ b/server/index.js @@ -124,8 +124,6 @@ app.get( '/', ( req, res ) => { app.use( servePackage ); -// TODO 404 - app.listen( port, () => { logger.log( `started at ${new Date().toUTCString()}` ); console.log( 'listening on localhost:' + port ); diff --git a/server/serve-package.js b/server/serve-package.js index c5473a9..2fa7755 100644 --- a/server/serve-package.js +++ b/server/serve-package.js @@ -9,6 +9,7 @@ const cache = require( './cache.js' ); const etag = require('etag'); const sha1 = require('sha1'); +const { sendBadRequest, sendError } = require( './utils/responses.js' ); const { root, registry, additionalBundleResHeaders } = require( '../config.js' ); function stringify ( query ) { @@ -23,9 +24,7 @@ module.exports = function servePackage ( req, res, next ) { if ( !match ) { // TODO make this prettier - res.status( 400 ); - res.end( 'Invalid module ID' ); - return; + return sendBadRequest(res, 'Invalid module ID' ); } const user = match[1]; @@ -50,10 +49,7 @@ module.exports = function servePackage ( req, res, next ) { if ( !meta.versions ) { logger.error( `[${qualified}] invalid module` ); - res.status( 400 ); - res.end( 'invalid module' ); - - return; + return sendBadRequest(res, 'invalid module' ); } const version = findVersion( meta, tag ); @@ -61,9 +57,7 @@ module.exports = function servePackage ( req, res, next ) { if ( !semver.valid( version ) ) { logger.error( `[${qualified}] invalid tag` ); - res.status( 400 ); - res.end( 'invalid tag' ); - return; + return sendBadRequest(res, 'invalid tag' ); } if ( version !== tag ) { @@ -92,11 +86,10 @@ module.exports = function servePackage ( req, res, next ) { }) .catch( err => { logger.error( `[${qualified}] ${err.message}`, err.stack ); - res.status( 500 ); const page = sander.readFileSync( `${root}/server/templates/500.html`, { encoding: 'utf-8' }) .replace( '__ERROR__', err.message ); - res.end( page ); + sendError(res, page); }); }; diff --git a/server/utils/responses.js b/server/utils/responses.js new file mode 100644 index 0000000..2a2d1c7 --- /dev/null +++ b/server/utils/responses.js @@ -0,0 +1,21 @@ +const { onBadRequest, onError } = require( '../../config.js' ); + +module.exports.sendBadRequest = function sendBadRequest (res, msg) { + res.status( 400 ); + + if (typeof onBadRequest === 'function') { + onBadRequest(res); + } + + res.end( msg ); +}; + +module.exports.sendError = function sendError (res, msg) { + res.status( 500 ); + + if (typeof onError === 'function') { + onError(res); + } + + res.end( msg ); +};