diff --git a/examples/middleware/echo.js b/examples/middleware/echo.js new file mode 100755 index 0000000..f7a823f --- /dev/null +++ b/examples/middleware/echo.js @@ -0,0 +1,57 @@ +#!/usr/bin/env node +const readline = require("readline"); +const StringDecoder = require("string_decoder").StringDecoder + +const rl = readline.createInterface({ + input: process.stdin +}); + +var ignoreIds = new Set(); +var ignoreAddresses = "/api"; +const decoder = new StringDecoder("utf8"); + +function convertHexString(hex) { + var bytes = []; + for (var i = 0; i < hex.length - 1; i += 2) { + bytes.push(parseInt(hex.substr(i, 2), 16)); + } + return decoder.write(Buffer.from(bytes)); +} + +function log(output) { + console.error("==================="); + console.error(output); +} + +function shouldOutputLine(request) { + const components = request.split("\n"); + const header = components[0].split(" "); + const type = parseInt(header[0]); + const tag = header[1]; + + if (type === 3) { + return true; + } + if (type === 1) { + // Check if it's oauth + const endpoint = components[1].split(" ")[1]; + if (!endpoint.startsWith(ignoreAddresses)) { + ignoreIds.add(tag); + return false; + } + } else if (type === 2) { + if (ignoreIds.has(tag)) { + ignoreIds.delete(tag); + return false; + } + } + return true; +} + +rl.on("line", (input) => { + const str = convertHexString(input); + console.log(input); + if (shouldOutputLine(str)) { + log(str); + } +});