From 8326a6fccf9e60c8ab3cd255e3b8aadfb21dcd31 Mon Sep 17 00:00:00 2001 From: Guillaume GABOREL Date: Wed, 1 Apr 2020 16:00:38 +0200 Subject: [PATCH 01/12] chore(deps): updated dependencies --- .gitignore | 3 ++- package.json | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 34977ee..0433bbc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -.idea \ No newline at end of file +.idea +package-lock.json diff --git a/package.json b/package.json index e6226ee..3096364 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,10 @@ "author": "Thomas Watson Steen ", "license": "MIT", "dependencies": { - "get-port": "^4.0.0" + "get-port": "^5.1.1" }, "devDependencies": { - "standard": "^12.0.1" + "standard": "^14.3.3" }, "preferGlobal": true, "repository": { From a750f378d48151c7c6607090ef52685d0cb86ff0 Mon Sep 17 00:00:00 2001 From: Guillaume GABOREL Date: Wed, 1 Apr 2020 16:06:23 +0200 Subject: [PATCH 02/12] feat(logs): added timestamp to logs --- index.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/index.js b/index.js index 408b7f1..63d3250 100755 --- a/index.js +++ b/index.js @@ -1,32 +1,32 @@ #!/usr/bin/env node 'use strict' -var getPort = require('get-port') -var server = require('net').createServer() +const getPort = require('get-port') +const server = require('net').createServer() -var cid = 0 +let cid = 0 module.exports = server // for testing onEmit(server, { ignore: ['connection', 'listening', 'error'] }, function (eventName) { - console.log('[server] event:', eventName) + console.log(`[${new Date().toISOString()}][server] event:`, eventName) }) server.on('connection', function (c) { - var gotData = false - var _cid = ++cid + let gotData = false + const _cid = ++cid - console.log('[server] event: connection (socket#%d)', _cid) + console.log(`[${new Date().toISOString()}][server] event: connection (socket#${_cid})`) onEmit(c, { ignore: ['lookup', 'error'] }, function (eventName) { - console.log('[socket#%d] event:', _cid, eventName) + console.log(`[${new Date().toISOString()}][socket#${_cid}] event:`, eventName) }) c.on('lookup', function (err, address, family) { if (err) { - console.log('[socket#%d] event: lookup (error: %s)', _cid, err.message) + console.log(`[${new Date().toISOString()}][socket#${_cid}] event: lookup (error: ${err.message})`) } else { - console.log('[socket#%d] event: lookup (address: %s, family: %s)', _cid, address, family) + console.log(`[${new Date().toISOString()}][socket#${_cid}] event: lookup (address: ${address}, family: ${family})`) } }) @@ -48,31 +48,31 @@ server.on('connection', function (c) { }) c.on('error', function (err) { - console.log('[socket#%d] event: error (msg: %s)', _cid, err.message) + console.log(`[${new Date().toISOString()}][socket#${_cid}] event: error (msg: ${err.message})`) }) }) server.on('listening', function () { - var port = server.address().port - console.log('[server] event: listening (port: %d)', port) + const port1 = server.address().port + console.log(`[${new Date().toISOString()}][server] event: listening (port: ${port1})`) }) server.on('error', function (err) { - console.log('[server] event: error (msg: %s)', err.message) + console.log(`[${new Date().toISOString()}][server] event: error (msg: ${err.message})`) }) -var port = process.argv[2] || process.env.PORT +const port = process.argv[2] || process.env.PORT if (port) { server.listen(port) } else { - getPort({ port: 3000 }).then(function (port) { - server.listen(port) + getPort({ port: 3000 }).then(function (port2) { + server.listen(port2) }) } function onEmit (emitter, opts, cb) { - var emitFn = emitter.emit + const emitFn = emitter.emit emitter.emit = function (eventName) { if (opts.ignore.indexOf(eventName) === -1) cb.apply(null, arguments) return emitFn.apply(emitter, arguments) From 9f4439d48e6cf2bf07a0742921e0c5746dfa7365 Mon Sep 17 00:00:00 2001 From: Guillaume GABOREL Date: Wed, 1 Apr 2020 16:16:28 +0200 Subject: [PATCH 03/12] feat(delay): added configurable delay resolves watson/http-echo-server#5 --- index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 63d3250..a678553 100755 --- a/index.js +++ b/index.js @@ -5,6 +5,7 @@ const getPort = require('get-port') const server = require('net').createServer() let cid = 0 +let timeout = 2000 module.exports = server // for testing @@ -42,7 +43,7 @@ server.on('connection', function (c) { c.write('\r\n') setTimeout(function () { c.end() - }, 2000) + }, timeout) } c.write(chunk.toString()) }) @@ -71,6 +72,14 @@ if (port) { }) } +const delay = process.argv[3] || process.env.DELAY + +if (delay) { + timeout = delay +} + +console.log(`[${new Date().toISOString()}][server] delay: ${timeout}ms`) + function onEmit (emitter, opts, cb) { const emitFn = emitter.emit emitter.emit = function (eventName) { From 3aebc41a71bbbca3674192afbb93fc7f123589a6 Mon Sep 17 00:00:00 2001 From: Guillaume GABOREL Date: Wed, 6 May 2020 15:57:42 +0200 Subject: [PATCH 04/12] chore(package): add start:dev script --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 3096364..849b24d 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "bin": "index.js", "scripts": { "test": "standard && node test.js", - "start": "node index.js" + "start": "node index.js", + "start:dev": "DELAY=250 PORT=3333 npm run start" }, "author": "Thomas Watson Steen ", "license": "MIT", From f4cb83d0cc89065fb0a493ee84274b1befbc8445 Mon Sep 17 00:00:00 2001 From: Guillaume GABOREL Date: Wed, 16 Dec 2020 09:04:51 +0100 Subject: [PATCH 05/12] chore(deps-dev): update standard to 16.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 849b24d..9709c39 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "get-port": "^5.1.1" }, "devDependencies": { - "standard": "^14.3.3" + "standard": "^16.0.3" }, "preferGlobal": true, "repository": { From b3897853444559ec269c6292452cbab04fa85c22 Mon Sep 17 00:00:00 2001 From: Guillaume GABOREL Date: Wed, 16 Dec 2020 09:05:28 +0100 Subject: [PATCH 06/12] refactor(standard): fix var in test file --- test.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test.js b/test.js index fa9d4a6..9c122d8 100644 --- a/test.js +++ b/test.js @@ -1,19 +1,19 @@ 'use strict' -var assert = require('assert') -var net = require('net') +const assert = require('assert') +const net = require('net') -var server = require('./') +const server = require('./') server.on('listening', function () { - var port = server.address().port - var client = net.createConnection({ port: port }) - var result = '' + const port = server.address().port + const client = net.createConnection({ port: port }) + let result = '' client.on('data', function (chunk) { result += chunk }) client.on('end', function () { - var lines = result.split('\r\n') + const lines = result.split('\r\n') assert.strictEqual(lines.length, 7) assert.strictEqual(lines.shift(), 'HTTP/1.1 200 OK') assert.strictEqual(lines.shift().slice(0, 6), 'Date: ') From f1edf2dbe228183a0fd5c8ac79ef26aef6166efb Mon Sep 17 00:00:00 2001 From: Guillaume GABOREL Date: Wed, 16 Dec 2020 09:19:02 +0100 Subject: [PATCH 07/12] refactor(project): move js files to the src folder --- .npmignore | 2 +- package.json | 8 ++++---- index.js => src/index.js | 0 test.js => src/test.js | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) rename index.js => src/index.js (100%) rename test.js => src/test.js (96%) diff --git a/.npmignore b/.npmignore index 737159e..43e5dc2 100644 --- a/.npmignore +++ b/.npmignore @@ -1,2 +1,2 @@ .travis.yml -test.js +src/test.js diff --git a/package.json b/package.json index 9709c39..40adf7c 100644 --- a/package.json +++ b/package.json @@ -2,11 +2,11 @@ "name": "http-echo-server", "version": "2.1.1", "description": "A simple HTTP echo server", - "main": "index.js", - "bin": "index.js", + "main": "src/index.js", + "bin": "src/index.js", "scripts": { - "test": "standard && node test.js", - "start": "node index.js", + "test": "standard && node src/test.js", + "start": "node src/index.js", "start:dev": "DELAY=250 PORT=3333 npm run start" }, "author": "Thomas Watson Steen ", diff --git a/index.js b/src/index.js similarity index 100% rename from index.js rename to src/index.js diff --git a/test.js b/src/test.js similarity index 96% rename from test.js rename to src/test.js index 9c122d8..f3cd034 100644 --- a/test.js +++ b/src/test.js @@ -3,7 +3,7 @@ const assert = require('assert') const net = require('net') -const server = require('./') +const server = require('./index') server.on('listening', function () { const port = server.address().port From f31587338cafcea935900f05517a0c2b9fa4539f Mon Sep 17 00:00:00 2001 From: Guillaume GABOREL Date: Wed, 16 Dec 2020 09:20:09 +0100 Subject: [PATCH 08/12] docs: update README and package.json --- README.md | 28 ++++++++++++++++++++++------ package.json | 10 +++------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 5ea2721..1dd00fc 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,19 @@ # http-echo-server -Will accept any TCP connection and echo back a HTTP response with the +Forked from [watson/http-echo-server](https://github.com/watson/http-echo-server/) + +Will accept any TCP connection and echo back an HTTP response with the entire content of the incoming TCP connection. The server makes no attempt to understand the incoming HTTP request hence it doesn't know when the request is completed and therefore just terminates the TCP connection 2 seconds after the first data packet. -[![npm](https://img.shields.io/npm/v/http-echo-server.svg)](https://www.npmjs.com/package/http-echo-server) -[![Build status](https://travis-ci.org/watson/http-echo-server.svg?branch=master)](https://travis-ci.org/watson/http-echo-server) -[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard) +[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/standard/standard) ## Installation -To setup a simple echo-server on Heroku just click this button: +To set up a simple echo-server on Heroku just click this button: [![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy) @@ -27,7 +27,7 @@ versions of npm): npx http-echo-server ``` -Or if you whish to install the module globally: +Or if you wish to install the module globally: ``` npm install http-echo-server -g @@ -65,6 +65,22 @@ export PORT=3005 http-echo-server ``` +## Setting response delay + +To set the response delay (in milliseconds), either supply the port as the 2nd argument to the +`http-echo-server` executable: + +``` +http-echo-server 3005 250 +``` + +Or use the `PORT` environment variable: + +``` +export DELAY=250 +http-echo-server +``` + ## License [MIT](LICENSE) diff --git a/package.json b/package.json index 40adf7c..83b120c 100644 --- a/package.json +++ b/package.json @@ -20,12 +20,12 @@ "preferGlobal": true, "repository": { "type": "git", - "url": "git+https://github.com/watson/http-echo-server.git" + "url": "git+https://github.com/Mualig/http-echo-server.git" }, "bugs": { - "url": "https://github.com/watson/http-echo-server/issues" + "url": "https://github.com/Mualig/http-echo-server/issues" }, - "homepage": "https://github.com/watson/http-echo-server", + "homepage": "https://github.com/Mualig/http-echo-server", "keywords": [ "http", "tcp", @@ -34,9 +34,5 @@ "debug", "debugger", "test" - ], - "coordinates": [ - 55.778264, - 12.593148 ] } From b6ac23f8ae75a8a83a7e468948cb8215d209f5ee Mon Sep 17 00:00:00 2001 From: Guillaume GABOREL Date: Wed, 16 Dec 2020 11:26:53 +0100 Subject: [PATCH 09/12] refactor: rename c to socket in connection event --- src/index.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/index.js b/src/index.js index a678553..9b74131 100755 --- a/src/index.js +++ b/src/index.js @@ -13,17 +13,17 @@ onEmit(server, { ignore: ['connection', 'listening', 'error'] }, function (event console.log(`[${new Date().toISOString()}][server] event:`, eventName) }) -server.on('connection', function (c) { +server.on('connection', function (socket) { let gotData = false const _cid = ++cid console.log(`[${new Date().toISOString()}][server] event: connection (socket#${_cid})`) - onEmit(c, { ignore: ['lookup', 'error'] }, function (eventName) { + onEmit(socket, { ignore: ['lookup', 'error'] }, function (eventName) { console.log(`[${new Date().toISOString()}][socket#${_cid}] event:`, eventName) }) - c.on('lookup', function (err, address, family) { + socket.on('lookup', function (err, address, family) { if (err) { console.log(`[${new Date().toISOString()}][socket#${_cid}] event: lookup (error: ${err.message})`) } else { @@ -31,24 +31,24 @@ server.on('connection', function (c) { } }) - c.on('data', function (chunk) { + socket.on('data', function (chunk) { console.log('--> ' + chunk.toString().split('\n').join('\n--> ')) if (!gotData) { gotData = true - c.write('HTTP/1.1 200 OK\r\n') - c.write('Date: ' + (new Date()).toString() + '\r\n') - c.write('Connection: close\r\n') - c.write('Content-Type: text/plain\r\n') - c.write('Access-Control-Allow-Origin: *\r\n') - c.write('\r\n') + socket.write('HTTP/1.1 200 OK\r\n') + socket.write('Date: ' + (new Date()).toString() + '\r\n') + socket.write('Connection: close\r\n') + socket.write('Content-Type: text/plain\r\n') + socket.write('Access-Control-Allow-Origin: *\r\n') + socket.write('\r\n') setTimeout(function () { - c.end() + socket.end() }, timeout) } - c.write(chunk.toString()) + socket.write(chunk.toString()) }) - c.on('error', function (err) { + socket.on('error', function (err) { console.log(`[${new Date().toISOString()}][socket#${_cid}] event: error (msg: ${err.message})`) }) }) From da4a04978fef9f218724bdcf218df13d7f1a840a Mon Sep 17 00:00:00 2001 From: Guillaume GABOREL Date: Wed, 16 Dec 2020 11:31:05 +0100 Subject: [PATCH 10/12] chore(release): add standard version to automate releases --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 83b120c..9ab9876 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "scripts": { "test": "standard && node src/test.js", "start": "node src/index.js", - "start:dev": "DELAY=250 PORT=3333 npm run start" + "start:dev": "DELAY=250 PORT=3333 npm run start", + "release": "standard-version -s" }, "author": "Thomas Watson Steen ", "license": "MIT", @@ -15,7 +16,8 @@ "get-port": "^5.1.1" }, "devDependencies": { - "standard": "^16.0.3" + "standard": "^16.0.3", + "standard-version": "^9.0.0" }, "preferGlobal": true, "repository": { From 76549f34b114f5115d42016ed154c6a10b52f939 Mon Sep 17 00:00:00 2001 From: Guillaume GABOREL Date: Wed, 16 Dec 2020 11:32:19 +0100 Subject: [PATCH 11/12] chore(release): 2.2.0 --- CHANGELOG.md | 11 +++++++++++ package.json | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..2d5f926 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [2.2.0](https://github.com/Mualig/http-echo-server/compare/v2.1.1...v2.2.0) (2020-12-16) + + +### Features + +* **delay:** added configurable delay ([9f4439d](https://github.com/Mualig/http-echo-server/commit/9f4439d48e6cf2bf07a0742921e0c5746dfa7365)), closes [watson/http-echo-server#5](https://github.com/watson/http-echo-server/issues/5) +* **logs:** added timestamp to logs ([a750f37](https://github.com/Mualig/http-echo-server/commit/a750f378d48151c7c6607090ef52685d0cb86ff0)) diff --git a/package.json b/package.json index 9ab9876..887fc6a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "http-echo-server", - "version": "2.1.1", + "version": "2.2.0", "description": "A simple HTTP echo server", "main": "src/index.js", "bin": "src/index.js", From 78ffa1e82a74d85b427b036269eb92d96bd896e6 Mon Sep 17 00:00:00 2001 From: Guillaume GABOREL Date: Fri, 23 Feb 2024 10:12:47 +0100 Subject: [PATCH 12/12] refactor: upgrade to es module and update dependencies --- package.json | 8 ++++---- src/index.js | 8 +++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 887fc6a..c878a44 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "http-echo-server", "version": "2.2.0", + "type": "module", "description": "A simple HTTP echo server", "main": "src/index.js", "bin": "src/index.js", @@ -13,13 +14,12 @@ "author": "Thomas Watson Steen ", "license": "MIT", "dependencies": { - "get-port": "^5.1.1" + "get-port": "^7.0.0" }, "devDependencies": { - "standard": "^16.0.3", - "standard-version": "^9.0.0" + "standard": "^17.1.0", + "standard-version": "^9.5.0" }, - "preferGlobal": true, "repository": { "type": "git", "url": "git+https://github.com/Mualig/http-echo-server.git" diff --git a/src/index.js b/src/index.js index 9b74131..6665a8e 100755 --- a/src/index.js +++ b/src/index.js @@ -1,13 +1,11 @@ #!/usr/bin/env node 'use strict' - -const getPort = require('get-port') -const server = require('net').createServer() +import getPort from 'get-port' +import net from 'net' let cid = 0 let timeout = 2000 - -module.exports = server // for testing +export const server = net.createServer() onEmit(server, { ignore: ['connection', 'listening', 'error'] }, function (eventName) { console.log(`[${new Date().toISOString()}][server] event:`, eventName)