├── .gitignore ├── Dockerfile ├── index.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | .*.sw* 2 | node_modules/ 3 | *.log 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:4.4 2 | COPY . /app 3 | WORKDIR /app 4 | RUN npm install 5 | CMD npm start 6 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var express = require('express') 2 | var bodyParser = require('body-parser') 3 | 4 | var app = express() 5 | app.use(bodyParser.urlencoded({ extended: false })) 6 | app.use(bodyParser.json()) 7 | 8 | app.all('*', (req, res) => { 9 | res.json({ 10 | service: process.env.SERVICE_NAME || undefined, // Keys with value `undefined` are omitted during JSON serialization 11 | path: req.path, 12 | headers: req.headers, 13 | method: req.method, 14 | body: req.body, 15 | cookies: req.cookies, 16 | fresh: req.fresh, 17 | hostname: req.hostname, 18 | ip: req.ip, 19 | ips: req.ips, 20 | protocol: req.protocol, 21 | query: req.query, 22 | subdomains: req.subdomains, 23 | xhr: req.xhr, 24 | }) 25 | }) 26 | 27 | app.listen(process.env.PORT || 3000) 28 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@kennship/http-echo", 3 | "version": "1.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.5", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 10 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 11 | "requires": { 12 | "mime-types": "~2.1.18", 13 | "negotiator": "0.6.1" 14 | } 15 | }, 16 | "array-flatten": { 17 | "version": "1.1.1", 18 | "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 19 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 20 | }, 21 | "body-parser": { 22 | "version": "1.18.3", 23 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 24 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 25 | "requires": { 26 | "bytes": "3.0.0", 27 | "content-type": "~1.0.4", 28 | "debug": "2.6.9", 29 | "depd": "~1.1.2", 30 | "http-errors": "~1.6.3", 31 | "iconv-lite": "0.4.23", 32 | "on-finished": "~2.3.0", 33 | "qs": "6.5.2", 34 | "raw-body": "2.3.3", 35 | "type-is": "~1.6.16" 36 | } 37 | }, 38 | "bytes": { 39 | "version": "3.0.0", 40 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 41 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 42 | }, 43 | "content-disposition": { 44 | "version": "0.5.2", 45 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 46 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 47 | }, 48 | "content-type": { 49 | "version": "1.0.4", 50 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 51 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 52 | }, 53 | "cookie": { 54 | "version": "0.3.1", 55 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 56 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 57 | }, 58 | "cookie-signature": { 59 | "version": "1.0.6", 60 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 61 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 62 | }, 63 | "debug": { 64 | "version": "2.6.9", 65 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 66 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 67 | "requires": { 68 | "ms": "2.0.0" 69 | } 70 | }, 71 | "depd": { 72 | "version": "1.1.2", 73 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 74 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 75 | }, 76 | "destroy": { 77 | "version": "1.0.4", 78 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 79 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 80 | }, 81 | "ee-first": { 82 | "version": "1.1.1", 83 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 84 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 85 | }, 86 | "encodeurl": { 87 | "version": "1.0.2", 88 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 89 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 90 | }, 91 | "escape-html": { 92 | "version": "1.0.3", 93 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 94 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 95 | }, 96 | "etag": { 97 | "version": "1.8.1", 98 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 99 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 100 | }, 101 | "express": { 102 | "version": "4.16.4", 103 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 104 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 105 | "requires": { 106 | "accepts": "~1.3.5", 107 | "array-flatten": "1.1.1", 108 | "body-parser": "1.18.3", 109 | "content-disposition": "0.5.2", 110 | "content-type": "~1.0.4", 111 | "cookie": "0.3.1", 112 | "cookie-signature": "1.0.6", 113 | "debug": "2.6.9", 114 | "depd": "~1.1.2", 115 | "encodeurl": "~1.0.2", 116 | "escape-html": "~1.0.3", 117 | "etag": "~1.8.1", 118 | "finalhandler": "1.1.1", 119 | "fresh": "0.5.2", 120 | "merge-descriptors": "1.0.1", 121 | "methods": "~1.1.2", 122 | "on-finished": "~2.3.0", 123 | "parseurl": "~1.3.2", 124 | "path-to-regexp": "0.1.7", 125 | "proxy-addr": "~2.0.4", 126 | "qs": "6.5.2", 127 | "range-parser": "~1.2.0", 128 | "safe-buffer": "5.1.2", 129 | "send": "0.16.2", 130 | "serve-static": "1.13.2", 131 | "setprototypeof": "1.1.0", 132 | "statuses": "~1.4.0", 133 | "type-is": "~1.6.16", 134 | "utils-merge": "1.0.1", 135 | "vary": "~1.1.2" 136 | }, 137 | "dependencies": { 138 | "statuses": { 139 | "version": "1.4.0", 140 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 141 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 142 | } 143 | } 144 | }, 145 | "finalhandler": { 146 | "version": "1.1.1", 147 | "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 148 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 149 | "requires": { 150 | "debug": "2.6.9", 151 | "encodeurl": "~1.0.2", 152 | "escape-html": "~1.0.3", 153 | "on-finished": "~2.3.0", 154 | "parseurl": "~1.3.2", 155 | "statuses": "~1.4.0", 156 | "unpipe": "~1.0.0" 157 | }, 158 | "dependencies": { 159 | "statuses": { 160 | "version": "1.4.0", 161 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 162 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 163 | } 164 | } 165 | }, 166 | "forwarded": { 167 | "version": "0.1.2", 168 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 169 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 170 | }, 171 | "fresh": { 172 | "version": "0.5.2", 173 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 174 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 175 | }, 176 | "http-errors": { 177 | "version": "1.6.3", 178 | "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 179 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 180 | "requires": { 181 | "depd": "~1.1.2", 182 | "inherits": "2.0.3", 183 | "setprototypeof": "1.1.0", 184 | "statuses": ">= 1.4.0 < 2" 185 | } 186 | }, 187 | "iconv-lite": { 188 | "version": "0.4.23", 189 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 190 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 191 | "requires": { 192 | "safer-buffer": ">= 2.1.2 < 3" 193 | } 194 | }, 195 | "inherits": { 196 | "version": "2.0.3", 197 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 198 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 199 | }, 200 | "ipaddr.js": { 201 | "version": "1.8.0", 202 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", 203 | "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" 204 | }, 205 | "media-typer": { 206 | "version": "0.3.0", 207 | "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 208 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 209 | }, 210 | "merge-descriptors": { 211 | "version": "1.0.1", 212 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 213 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 214 | }, 215 | "methods": { 216 | "version": "1.1.2", 217 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 218 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 219 | }, 220 | "mime": { 221 | "version": "1.4.1", 222 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 223 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 224 | }, 225 | "mime-db": { 226 | "version": "1.37.0", 227 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", 228 | "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" 229 | }, 230 | "mime-types": { 231 | "version": "2.1.21", 232 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", 233 | "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", 234 | "requires": { 235 | "mime-db": "~1.37.0" 236 | } 237 | }, 238 | "ms": { 239 | "version": "2.0.0", 240 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 241 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 242 | }, 243 | "negotiator": { 244 | "version": "0.6.1", 245 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 246 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 247 | }, 248 | "on-finished": { 249 | "version": "2.3.0", 250 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 251 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 252 | "requires": { 253 | "ee-first": "1.1.1" 254 | } 255 | }, 256 | "parseurl": { 257 | "version": "1.3.2", 258 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 259 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 260 | }, 261 | "path-to-regexp": { 262 | "version": "0.1.7", 263 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 264 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 265 | }, 266 | "proxy-addr": { 267 | "version": "2.0.4", 268 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", 269 | "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", 270 | "requires": { 271 | "forwarded": "~0.1.2", 272 | "ipaddr.js": "1.8.0" 273 | } 274 | }, 275 | "qs": { 276 | "version": "6.5.2", 277 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 278 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 279 | }, 280 | "range-parser": { 281 | "version": "1.2.0", 282 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 283 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 284 | }, 285 | "raw-body": { 286 | "version": "2.3.3", 287 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 288 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 289 | "requires": { 290 | "bytes": "3.0.0", 291 | "http-errors": "1.6.3", 292 | "iconv-lite": "0.4.23", 293 | "unpipe": "1.0.0" 294 | } 295 | }, 296 | "safe-buffer": { 297 | "version": "5.1.2", 298 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 299 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 300 | }, 301 | "safer-buffer": { 302 | "version": "2.1.2", 303 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 304 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 305 | }, 306 | "send": { 307 | "version": "0.16.2", 308 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 309 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 310 | "requires": { 311 | "debug": "2.6.9", 312 | "depd": "~1.1.2", 313 | "destroy": "~1.0.4", 314 | "encodeurl": "~1.0.2", 315 | "escape-html": "~1.0.3", 316 | "etag": "~1.8.1", 317 | "fresh": "0.5.2", 318 | "http-errors": "~1.6.2", 319 | "mime": "1.4.1", 320 | "ms": "2.0.0", 321 | "on-finished": "~2.3.0", 322 | "range-parser": "~1.2.0", 323 | "statuses": "~1.4.0" 324 | }, 325 | "dependencies": { 326 | "statuses": { 327 | "version": "1.4.0", 328 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 329 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 330 | } 331 | } 332 | }, 333 | "serve-static": { 334 | "version": "1.13.2", 335 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 336 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 337 | "requires": { 338 | "encodeurl": "~1.0.2", 339 | "escape-html": "~1.0.3", 340 | "parseurl": "~1.3.2", 341 | "send": "0.16.2" 342 | } 343 | }, 344 | "setprototypeof": { 345 | "version": "1.1.0", 346 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 347 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 348 | }, 349 | "statuses": { 350 | "version": "1.5.0", 351 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 352 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 353 | }, 354 | "type-is": { 355 | "version": "1.6.16", 356 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 357 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 358 | "requires": { 359 | "media-typer": "0.3.0", 360 | "mime-types": "~2.1.18" 361 | } 362 | }, 363 | "unpipe": { 364 | "version": "1.0.0", 365 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 366 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 367 | }, 368 | "utils-merge": { 369 | "version": "1.0.1", 370 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 371 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 372 | }, 373 | "vary": { 374 | "version": "1.1.2", 375 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 376 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 377 | } 378 | } 379 | } 380 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@kennship/http-echo", 3 | "version": "1.0.1", 4 | "description": "JSON service for debugging a web setup", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "author": "Ryan Muller ", 11 | "license": "BSD-3-Clause", 12 | "engines": { 13 | "node": ">=4.4.1" 14 | }, 15 | "dependencies": { 16 | "body-parser": "^1.18.3", 17 | "express": "^4.13.4" 18 | } 19 | } 20 | --------------------------------------------------------------------------------