├── .gitignore ├── LICENSE ├── package.json ├── src ├── main.js ├── main_before_instrument.js ├── sub_module.js └── sub_nested_module.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 teamzerolabs 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express-monitoring", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "repository": "git@github.com:teamzerolabs/express-monitoring.git", 6 | "author": "Jack Yeh ", 7 | "license": "MIT", 8 | "reference": "$MEDIUM_LINK", 9 | "scripts": { 10 | "dev": "node src/main_before_instrument.js", 11 | "start": "node src/main.js" 12 | }, 13 | "dependencies": { 14 | "api-express-exporter": "^1.0.0", 15 | "express": "^4.17.1", 16 | "prom-client": "^11.5.3" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | const makeApiMiddleware = require("api-express-exporter"); 2 | const express = require("express"); 3 | const app = express(); 4 | 5 | app.use(makeApiMiddleware()); 6 | 7 | app.use("/api/sub", require("./sub_module")); 8 | 9 | app.get("/api", (req, res) => { 10 | res.status(200).send("Api Works."); 11 | }); 12 | app.get("/api/fast/", (req, res) => { 13 | res.status(200).send("Fast response!"); 14 | }); 15 | app.get("/api/slow", (req, res) => { 16 | setTimeout(() => { 17 | res.status(200).send("Slow response..."); 18 | }, 1000); 19 | }); 20 | 21 | app.get("/api/error", (req, res, next) => { 22 | try { 23 | throw new Error("Something broke..."); 24 | } catch (error) { 25 | res.status(500).send(error.message); 26 | } 27 | }); 28 | 29 | app.get("/api/list/:listId", (req, res, next) => { 30 | res.status(200).send(`Retrieved list ${req.params.listId}`); 31 | }); 32 | 33 | app.listen(4000, () => { 34 | console.log("Server is running on port 4000"); 35 | }); 36 | -------------------------------------------------------------------------------- /src/main_before_instrument.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const app = express(); 3 | 4 | app.get("/api", (req, res, next) => { 5 | res.status(200).send("Api Works."); 6 | }); 7 | app.get("/api/fast", (req, res, next) => { 8 | res.status(200).send("Fast response!"); 9 | }); 10 | app.get("/api/slow", (req, res, next) => { 11 | setTimeout(() => { 12 | res.status(200).send("Slow response..."); 13 | }, 1000); 14 | }); 15 | app.get("/api/list/:listId", (req, res, next) => { 16 | res.status(200).send(`Retrieved list ${req.params.listId}`); 17 | }); 18 | 19 | app.listen(4000, () => console.log("Server is running on port 4000")); 20 | -------------------------------------------------------------------------------- /src/sub_module.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | 3 | const router = express.Router(); 4 | 5 | router.get("/:id", (req, res, next) => { 6 | res.json({ 7 | result: `It's me! ${req.params.id}` 8 | }); 9 | }); 10 | 11 | router.use("/:id/more", require("./sub_nested_module")); 12 | 13 | module.exports = router; 14 | -------------------------------------------------------------------------------- /src/sub_nested_module.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | 3 | const router = express.Router(); 4 | 5 | router.get("/:id2", (req, res, next) => { 6 | res.json({ 7 | result: `It's me! ${req.params.id} and ${req.params.id2}` 8 | }); 9 | }); 10 | 11 | module.exports = router; 12 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | accepts@~1.3.7: 6 | version "1.3.7" 7 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 8 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 9 | dependencies: 10 | mime-types "~2.1.24" 11 | negotiator "0.6.2" 12 | 13 | api-express-exporter@^1.0.0: 14 | version "1.0.0" 15 | resolved "https://registry.yarnpkg.com/api-express-exporter/-/api-express-exporter-1.0.0.tgz#a70279db6d3d35479bdf6c4b5b4b2fee3f0b7e37" 16 | integrity sha512-mAYf2KF/gN7nw4+Zi9M57O7+E3Pil5qjDVLYM88Yz6MJbVmW6uKsfSJY58ZePB/DwrK5dOoNhtK5F4dttLXw6Q== 17 | dependencies: 18 | express "^4.17.1" 19 | express-list-endpoints "^4.0.1" 20 | express-prom-bundle "^5.1.5" 21 | prom-client "^11.5.3" 22 | url-pattern "^1.0.3" 23 | 24 | array-flatten@1.1.1: 25 | version "1.1.1" 26 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 27 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 28 | 29 | bintrees@1.0.1: 30 | version "1.0.1" 31 | resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.1.tgz#0e655c9b9c2435eaab68bf4027226d2b55a34524" 32 | integrity sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ= 33 | 34 | body-parser@1.19.0: 35 | version "1.19.0" 36 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 37 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 38 | dependencies: 39 | bytes "3.1.0" 40 | content-type "~1.0.4" 41 | debug "2.6.9" 42 | depd "~1.1.2" 43 | http-errors "1.7.2" 44 | iconv-lite "0.4.24" 45 | on-finished "~2.3.0" 46 | qs "6.7.0" 47 | raw-body "2.4.0" 48 | type-is "~1.6.17" 49 | 50 | bytes@3.1.0: 51 | version "3.1.0" 52 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 53 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 54 | 55 | content-disposition@0.5.3: 56 | version "0.5.3" 57 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 58 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 59 | dependencies: 60 | safe-buffer "5.1.2" 61 | 62 | content-type@~1.0.4: 63 | version "1.0.4" 64 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 65 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 66 | 67 | cookie-signature@1.0.6: 68 | version "1.0.6" 69 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 70 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 71 | 72 | cookie@0.4.0: 73 | version "0.4.0" 74 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 75 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 76 | 77 | debug@2.6.9: 78 | version "2.6.9" 79 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 80 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 81 | dependencies: 82 | ms "2.0.0" 83 | 84 | depd@~1.1.2: 85 | version "1.1.2" 86 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 87 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 88 | 89 | destroy@~1.0.4: 90 | version "1.0.4" 91 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 92 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 93 | 94 | ee-first@1.1.1: 95 | version "1.1.1" 96 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 97 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 98 | 99 | encodeurl@~1.0.2: 100 | version "1.0.2" 101 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 102 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 103 | 104 | escape-html@~1.0.3: 105 | version "1.0.3" 106 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 107 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 108 | 109 | etag@~1.8.1: 110 | version "1.8.1" 111 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 112 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 113 | 114 | express-list-endpoints@^4.0.1: 115 | version "4.0.1" 116 | resolved "https://registry.yarnpkg.com/express-list-endpoints/-/express-list-endpoints-4.0.1.tgz#f83ec9de4df21b904cfba523bc913aee4c17e9db" 117 | integrity sha512-KjY7frYk72/Jwk2VgqyvuXlTPslEkWkzjUXPUMCUguVmAWqd6fh60VHr+sEfqJgMAOE3hKhUjm/7tLASVaE2Qg== 118 | 119 | express-prom-bundle@^5.1.5: 120 | version "5.1.5" 121 | resolved "https://registry.yarnpkg.com/express-prom-bundle/-/express-prom-bundle-5.1.5.tgz#f298615879299a58cf8ec1350186f4de91d91fa4" 122 | integrity sha512-tUaQUBu0r9zGYcVDpKBI2AeWimuuodaC5BSBkzLPQxRTxaKQShQNnONQSYwjLxbHfPwlCKVZlzfbB9Recnj0Vg== 123 | dependencies: 124 | on-finished "^2.3.0" 125 | url-value-parser "^2.0.0" 126 | 127 | express@^4.17.1: 128 | version "4.17.1" 129 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 130 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 131 | dependencies: 132 | accepts "~1.3.7" 133 | array-flatten "1.1.1" 134 | body-parser "1.19.0" 135 | content-disposition "0.5.3" 136 | content-type "~1.0.4" 137 | cookie "0.4.0" 138 | cookie-signature "1.0.6" 139 | debug "2.6.9" 140 | depd "~1.1.2" 141 | encodeurl "~1.0.2" 142 | escape-html "~1.0.3" 143 | etag "~1.8.1" 144 | finalhandler "~1.1.2" 145 | fresh "0.5.2" 146 | merge-descriptors "1.0.1" 147 | methods "~1.1.2" 148 | on-finished "~2.3.0" 149 | parseurl "~1.3.3" 150 | path-to-regexp "0.1.7" 151 | proxy-addr "~2.0.5" 152 | qs "6.7.0" 153 | range-parser "~1.2.1" 154 | safe-buffer "5.1.2" 155 | send "0.17.1" 156 | serve-static "1.14.1" 157 | setprototypeof "1.1.1" 158 | statuses "~1.5.0" 159 | type-is "~1.6.18" 160 | utils-merge "1.0.1" 161 | vary "~1.1.2" 162 | 163 | finalhandler@~1.1.2: 164 | version "1.1.2" 165 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 166 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 167 | dependencies: 168 | debug "2.6.9" 169 | encodeurl "~1.0.2" 170 | escape-html "~1.0.3" 171 | on-finished "~2.3.0" 172 | parseurl "~1.3.3" 173 | statuses "~1.5.0" 174 | unpipe "~1.0.0" 175 | 176 | forwarded@~0.1.2: 177 | version "0.1.2" 178 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 179 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 180 | 181 | fresh@0.5.2: 182 | version "0.5.2" 183 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 184 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 185 | 186 | http-errors@1.7.2: 187 | version "1.7.2" 188 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 189 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 190 | dependencies: 191 | depd "~1.1.2" 192 | inherits "2.0.3" 193 | setprototypeof "1.1.1" 194 | statuses ">= 1.5.0 < 2" 195 | toidentifier "1.0.0" 196 | 197 | http-errors@~1.7.2: 198 | version "1.7.3" 199 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 200 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 201 | dependencies: 202 | depd "~1.1.2" 203 | inherits "2.0.4" 204 | setprototypeof "1.1.1" 205 | statuses ">= 1.5.0 < 2" 206 | toidentifier "1.0.0" 207 | 208 | iconv-lite@0.4.24: 209 | version "0.4.24" 210 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 211 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 212 | dependencies: 213 | safer-buffer ">= 2.1.2 < 3" 214 | 215 | inherits@2.0.3: 216 | version "2.0.3" 217 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 218 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 219 | 220 | inherits@2.0.4: 221 | version "2.0.4" 222 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 223 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 224 | 225 | ipaddr.js@1.9.0: 226 | version "1.9.0" 227 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" 228 | integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== 229 | 230 | media-typer@0.3.0: 231 | version "0.3.0" 232 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 233 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 234 | 235 | merge-descriptors@1.0.1: 236 | version "1.0.1" 237 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 238 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 239 | 240 | methods@~1.1.2: 241 | version "1.1.2" 242 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 243 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 244 | 245 | mime-db@1.42.0: 246 | version "1.42.0" 247 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" 248 | integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== 249 | 250 | mime-types@~2.1.24: 251 | version "2.1.25" 252 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" 253 | integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== 254 | dependencies: 255 | mime-db "1.42.0" 256 | 257 | mime@1.6.0: 258 | version "1.6.0" 259 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 260 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 261 | 262 | ms@2.0.0: 263 | version "2.0.0" 264 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 265 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 266 | 267 | ms@2.1.1: 268 | version "2.1.1" 269 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 270 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 271 | 272 | negotiator@0.6.2: 273 | version "0.6.2" 274 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 275 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 276 | 277 | on-finished@^2.3.0, on-finished@~2.3.0: 278 | version "2.3.0" 279 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 280 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 281 | dependencies: 282 | ee-first "1.1.1" 283 | 284 | parseurl@~1.3.3: 285 | version "1.3.3" 286 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 287 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 288 | 289 | path-to-regexp@0.1.7: 290 | version "0.1.7" 291 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 292 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 293 | 294 | prom-client@^11.5.3: 295 | version "11.5.3" 296 | resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-11.5.3.tgz#5fedfce1083bac6c2b223738e966d0e1643756f8" 297 | integrity sha512-iz22FmTbtkyL2vt0MdDFY+kWof+S9UB/NACxSn2aJcewtw+EERsen0urSkZ2WrHseNdydsvcxCTAnPcSMZZv4Q== 298 | dependencies: 299 | tdigest "^0.1.1" 300 | 301 | proxy-addr@~2.0.5: 302 | version "2.0.5" 303 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" 304 | integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== 305 | dependencies: 306 | forwarded "~0.1.2" 307 | ipaddr.js "1.9.0" 308 | 309 | qs@6.7.0: 310 | version "6.7.0" 311 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 312 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 313 | 314 | range-parser@~1.2.1: 315 | version "1.2.1" 316 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 317 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 318 | 319 | raw-body@2.4.0: 320 | version "2.4.0" 321 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 322 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 323 | dependencies: 324 | bytes "3.1.0" 325 | http-errors "1.7.2" 326 | iconv-lite "0.4.24" 327 | unpipe "1.0.0" 328 | 329 | safe-buffer@5.1.2: 330 | version "5.1.2" 331 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 332 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 333 | 334 | "safer-buffer@>= 2.1.2 < 3": 335 | version "2.1.2" 336 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 337 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 338 | 339 | send@0.17.1: 340 | version "0.17.1" 341 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 342 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 343 | dependencies: 344 | debug "2.6.9" 345 | depd "~1.1.2" 346 | destroy "~1.0.4" 347 | encodeurl "~1.0.2" 348 | escape-html "~1.0.3" 349 | etag "~1.8.1" 350 | fresh "0.5.2" 351 | http-errors "~1.7.2" 352 | mime "1.6.0" 353 | ms "2.1.1" 354 | on-finished "~2.3.0" 355 | range-parser "~1.2.1" 356 | statuses "~1.5.0" 357 | 358 | serve-static@1.14.1: 359 | version "1.14.1" 360 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 361 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 362 | dependencies: 363 | encodeurl "~1.0.2" 364 | escape-html "~1.0.3" 365 | parseurl "~1.3.3" 366 | send "0.17.1" 367 | 368 | setprototypeof@1.1.1: 369 | version "1.1.1" 370 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 371 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 372 | 373 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 374 | version "1.5.0" 375 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 376 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 377 | 378 | tdigest@^0.1.1: 379 | version "0.1.1" 380 | resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.1.tgz#2e3cb2c39ea449e55d1e6cd91117accca4588021" 381 | integrity sha1-Ljyyw56kSeVdHmzZEReszKRYgCE= 382 | dependencies: 383 | bintrees "1.0.1" 384 | 385 | toidentifier@1.0.0: 386 | version "1.0.0" 387 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 388 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 389 | 390 | type-is@~1.6.17, type-is@~1.6.18: 391 | version "1.6.18" 392 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 393 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 394 | dependencies: 395 | media-typer "0.3.0" 396 | mime-types "~2.1.24" 397 | 398 | unpipe@1.0.0, unpipe@~1.0.0: 399 | version "1.0.0" 400 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 401 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 402 | 403 | url-pattern@^1.0.3: 404 | version "1.0.3" 405 | resolved "https://registry.yarnpkg.com/url-pattern/-/url-pattern-1.0.3.tgz#0409292471b24f23c50d65a47931793d2b5acfc1" 406 | integrity sha1-BAkpJHGyTyPFDWWkeTF5PStaz8E= 407 | 408 | url-value-parser@^2.0.0: 409 | version "2.0.1" 410 | resolved "https://registry.yarnpkg.com/url-value-parser/-/url-value-parser-2.0.1.tgz#c8179a095ab9ec1f5aa17ca36af5af396b4e95ed" 411 | integrity sha512-bexECeREBIueboLGM3Y1WaAzQkIn+Tca/Xjmjmfd0S/hFHSCEoFkNh0/D0l9G4K74MkEP/lLFRlYnxX3d68Qgw== 412 | 413 | utils-merge@1.0.1: 414 | version "1.0.1" 415 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 416 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 417 | 418 | vary@~1.1.2: 419 | version "1.1.2" 420 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 421 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 422 | --------------------------------------------------------------------------------