this repo has no description
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add rudimentary CI/CD function. Post to vielle.dev:4321/rebuild with the body as the key to trigger a stash, pull, docker compose up -d --build --force-recreate, stash pop

TODO: see if i can replace all of this with websockets on the knot to make things less spamable

+639
+46
cicd/index.js
··· 1 + import express from "express"; 2 + import { exec as callback_exec } from "node:child_process"; 3 + import path from "node:path"; 4 + import { promisify } from "node:util"; 5 + 6 + const exec = promisify(callback_exec); 7 + 8 + const app = express(); 9 + 10 + app.use((req, _, next) => { 11 + // mime doesnt matter 12 + let data = ""; 13 + req.setEncoding("utf8"); 14 + req.on("data", (chunk) => (data += chunk)); 15 + req.on("end", () => { 16 + req.body = data; 17 + next(); 18 + }); 19 + }); 20 + 21 + app.post("/rebuild", async (req, res) => { 22 + if (req.body !== process.env.KEY) { 23 + res.status(403).send("Key invalid"); 24 + return; 25 + } 26 + 27 + // key was valid so we can trigger commands from parent dir 28 + const options = { cwd: path.join(process.cwd(), "..") }; 29 + // stash so we can pull changes without conflicts 30 + await exec("git stash", options); 31 + console.log("completed `git stash`"); 32 + await exec("git pull", options); 33 + console.log("completed `git pull`"); 34 + // docker compose up -d --build --force-recreate 35 + await exec("docker compose up -d --build --force-recreate", options); 36 + console.log("completed `docker compose up -d --build --force-recreate`"); 37 + // pop the stash 38 + await exec("git stash pop", options); 39 + console.log("completed `git stash pop`"); 40 + 41 + res.send("Complete!"); 42 + }); 43 + 44 + app.listen(4321, () => { 45 + console.log("listening on :4321"); 46 + });
+17
cicd/package.json
··· 1 + { 2 + "name": "cicd", 3 + "version": "1.0.0", 4 + "description": "", 5 + "type": "module", 6 + "main": "index.js", 7 + "scripts": { 8 + "start": "node index.js" 9 + }, 10 + "keywords": [], 11 + "author": "", 12 + "license": "ISC", 13 + "packageManager": "pnpm@10.14.0", 14 + "dependencies": { 15 + "express": "^5.1.0" 16 + } 17 + }
+576
cicd/pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + importers: 8 + 9 + .: 10 + dependencies: 11 + express: 12 + specifier: ^5.1.0 13 + version: 5.1.0 14 + 15 + packages: 16 + 17 + accepts@2.0.0: 18 + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} 19 + engines: {node: '>= 0.6'} 20 + 21 + body-parser@2.2.0: 22 + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} 23 + engines: {node: '>=18'} 24 + 25 + bytes@3.1.2: 26 + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 27 + engines: {node: '>= 0.8'} 28 + 29 + call-bind-apply-helpers@1.0.2: 30 + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 31 + engines: {node: '>= 0.4'} 32 + 33 + call-bound@1.0.4: 34 + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 35 + engines: {node: '>= 0.4'} 36 + 37 + content-disposition@1.0.0: 38 + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} 39 + engines: {node: '>= 0.6'} 40 + 41 + content-type@1.0.5: 42 + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 43 + engines: {node: '>= 0.6'} 44 + 45 + cookie-signature@1.2.2: 46 + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} 47 + engines: {node: '>=6.6.0'} 48 + 49 + cookie@0.7.2: 50 + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} 51 + engines: {node: '>= 0.6'} 52 + 53 + debug@4.4.1: 54 + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} 55 + engines: {node: '>=6.0'} 56 + peerDependencies: 57 + supports-color: '*' 58 + peerDependenciesMeta: 59 + supports-color: 60 + optional: true 61 + 62 + depd@2.0.0: 63 + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 64 + engines: {node: '>= 0.8'} 65 + 66 + dunder-proto@1.0.1: 67 + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 68 + engines: {node: '>= 0.4'} 69 + 70 + ee-first@1.1.1: 71 + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 72 + 73 + encodeurl@2.0.0: 74 + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} 75 + engines: {node: '>= 0.8'} 76 + 77 + es-define-property@1.0.1: 78 + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 79 + engines: {node: '>= 0.4'} 80 + 81 + es-errors@1.3.0: 82 + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 83 + engines: {node: '>= 0.4'} 84 + 85 + es-object-atoms@1.1.1: 86 + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 87 + engines: {node: '>= 0.4'} 88 + 89 + escape-html@1.0.3: 90 + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 91 + 92 + etag@1.8.1: 93 + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 94 + engines: {node: '>= 0.6'} 95 + 96 + express@5.1.0: 97 + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} 98 + engines: {node: '>= 18'} 99 + 100 + finalhandler@2.1.0: 101 + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} 102 + engines: {node: '>= 0.8'} 103 + 104 + forwarded@0.2.0: 105 + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 106 + engines: {node: '>= 0.6'} 107 + 108 + fresh@2.0.0: 109 + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} 110 + engines: {node: '>= 0.8'} 111 + 112 + function-bind@1.1.2: 113 + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 114 + 115 + get-intrinsic@1.3.0: 116 + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 117 + engines: {node: '>= 0.4'} 118 + 119 + get-proto@1.0.1: 120 + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 121 + engines: {node: '>= 0.4'} 122 + 123 + gopd@1.2.0: 124 + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 125 + engines: {node: '>= 0.4'} 126 + 127 + has-symbols@1.1.0: 128 + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 129 + engines: {node: '>= 0.4'} 130 + 131 + hasown@2.0.2: 132 + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 133 + engines: {node: '>= 0.4'} 134 + 135 + http-errors@2.0.0: 136 + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 137 + engines: {node: '>= 0.8'} 138 + 139 + iconv-lite@0.6.3: 140 + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 141 + engines: {node: '>=0.10.0'} 142 + 143 + inherits@2.0.4: 144 + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 145 + 146 + ipaddr.js@1.9.1: 147 + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 148 + engines: {node: '>= 0.10'} 149 + 150 + is-promise@4.0.0: 151 + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} 152 + 153 + math-intrinsics@1.1.0: 154 + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 155 + engines: {node: '>= 0.4'} 156 + 157 + media-typer@1.1.0: 158 + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} 159 + engines: {node: '>= 0.8'} 160 + 161 + merge-descriptors@2.0.0: 162 + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} 163 + engines: {node: '>=18'} 164 + 165 + mime-db@1.54.0: 166 + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} 167 + engines: {node: '>= 0.6'} 168 + 169 + mime-types@3.0.1: 170 + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} 171 + engines: {node: '>= 0.6'} 172 + 173 + ms@2.1.3: 174 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 175 + 176 + negotiator@1.0.0: 177 + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} 178 + engines: {node: '>= 0.6'} 179 + 180 + object-inspect@1.13.4: 181 + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 182 + engines: {node: '>= 0.4'} 183 + 184 + on-finished@2.4.1: 185 + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 186 + engines: {node: '>= 0.8'} 187 + 188 + once@1.4.0: 189 + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 190 + 191 + parseurl@1.3.3: 192 + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 193 + engines: {node: '>= 0.8'} 194 + 195 + path-to-regexp@8.2.0: 196 + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} 197 + engines: {node: '>=16'} 198 + 199 + proxy-addr@2.0.7: 200 + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 201 + engines: {node: '>= 0.10'} 202 + 203 + qs@6.14.0: 204 + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} 205 + engines: {node: '>=0.6'} 206 + 207 + range-parser@1.2.1: 208 + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 209 + engines: {node: '>= 0.6'} 210 + 211 + raw-body@3.0.0: 212 + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} 213 + engines: {node: '>= 0.8'} 214 + 215 + router@2.2.0: 216 + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} 217 + engines: {node: '>= 18'} 218 + 219 + safe-buffer@5.2.1: 220 + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 221 + 222 + safer-buffer@2.1.2: 223 + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 224 + 225 + send@1.2.0: 226 + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} 227 + engines: {node: '>= 18'} 228 + 229 + serve-static@2.2.0: 230 + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} 231 + engines: {node: '>= 18'} 232 + 233 + setprototypeof@1.2.0: 234 + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 235 + 236 + side-channel-list@1.0.0: 237 + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 238 + engines: {node: '>= 0.4'} 239 + 240 + side-channel-map@1.0.1: 241 + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 242 + engines: {node: '>= 0.4'} 243 + 244 + side-channel-weakmap@1.0.2: 245 + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 246 + engines: {node: '>= 0.4'} 247 + 248 + side-channel@1.1.0: 249 + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 250 + engines: {node: '>= 0.4'} 251 + 252 + statuses@2.0.1: 253 + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 254 + engines: {node: '>= 0.8'} 255 + 256 + statuses@2.0.2: 257 + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} 258 + engines: {node: '>= 0.8'} 259 + 260 + toidentifier@1.0.1: 261 + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 262 + engines: {node: '>=0.6'} 263 + 264 + type-is@2.0.1: 265 + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} 266 + engines: {node: '>= 0.6'} 267 + 268 + unpipe@1.0.0: 269 + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 270 + engines: {node: '>= 0.8'} 271 + 272 + vary@1.1.2: 273 + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 274 + engines: {node: '>= 0.8'} 275 + 276 + wrappy@1.0.2: 277 + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 278 + 279 + snapshots: 280 + 281 + accepts@2.0.0: 282 + dependencies: 283 + mime-types: 3.0.1 284 + negotiator: 1.0.0 285 + 286 + body-parser@2.2.0: 287 + dependencies: 288 + bytes: 3.1.2 289 + content-type: 1.0.5 290 + debug: 4.4.1 291 + http-errors: 2.0.0 292 + iconv-lite: 0.6.3 293 + on-finished: 2.4.1 294 + qs: 6.14.0 295 + raw-body: 3.0.0 296 + type-is: 2.0.1 297 + transitivePeerDependencies: 298 + - supports-color 299 + 300 + bytes@3.1.2: {} 301 + 302 + call-bind-apply-helpers@1.0.2: 303 + dependencies: 304 + es-errors: 1.3.0 305 + function-bind: 1.1.2 306 + 307 + call-bound@1.0.4: 308 + dependencies: 309 + call-bind-apply-helpers: 1.0.2 310 + get-intrinsic: 1.3.0 311 + 312 + content-disposition@1.0.0: 313 + dependencies: 314 + safe-buffer: 5.2.1 315 + 316 + content-type@1.0.5: {} 317 + 318 + cookie-signature@1.2.2: {} 319 + 320 + cookie@0.7.2: {} 321 + 322 + debug@4.4.1: 323 + dependencies: 324 + ms: 2.1.3 325 + 326 + depd@2.0.0: {} 327 + 328 + dunder-proto@1.0.1: 329 + dependencies: 330 + call-bind-apply-helpers: 1.0.2 331 + es-errors: 1.3.0 332 + gopd: 1.2.0 333 + 334 + ee-first@1.1.1: {} 335 + 336 + encodeurl@2.0.0: {} 337 + 338 + es-define-property@1.0.1: {} 339 + 340 + es-errors@1.3.0: {} 341 + 342 + es-object-atoms@1.1.1: 343 + dependencies: 344 + es-errors: 1.3.0 345 + 346 + escape-html@1.0.3: {} 347 + 348 + etag@1.8.1: {} 349 + 350 + express@5.1.0: 351 + dependencies: 352 + accepts: 2.0.0 353 + body-parser: 2.2.0 354 + content-disposition: 1.0.0 355 + content-type: 1.0.5 356 + cookie: 0.7.2 357 + cookie-signature: 1.2.2 358 + debug: 4.4.1 359 + encodeurl: 2.0.0 360 + escape-html: 1.0.3 361 + etag: 1.8.1 362 + finalhandler: 2.1.0 363 + fresh: 2.0.0 364 + http-errors: 2.0.0 365 + merge-descriptors: 2.0.0 366 + mime-types: 3.0.1 367 + on-finished: 2.4.1 368 + once: 1.4.0 369 + parseurl: 1.3.3 370 + proxy-addr: 2.0.7 371 + qs: 6.14.0 372 + range-parser: 1.2.1 373 + router: 2.2.0 374 + send: 1.2.0 375 + serve-static: 2.2.0 376 + statuses: 2.0.2 377 + type-is: 2.0.1 378 + vary: 1.1.2 379 + transitivePeerDependencies: 380 + - supports-color 381 + 382 + finalhandler@2.1.0: 383 + dependencies: 384 + debug: 4.4.1 385 + encodeurl: 2.0.0 386 + escape-html: 1.0.3 387 + on-finished: 2.4.1 388 + parseurl: 1.3.3 389 + statuses: 2.0.2 390 + transitivePeerDependencies: 391 + - supports-color 392 + 393 + forwarded@0.2.0: {} 394 + 395 + fresh@2.0.0: {} 396 + 397 + function-bind@1.1.2: {} 398 + 399 + get-intrinsic@1.3.0: 400 + dependencies: 401 + call-bind-apply-helpers: 1.0.2 402 + es-define-property: 1.0.1 403 + es-errors: 1.3.0 404 + es-object-atoms: 1.1.1 405 + function-bind: 1.1.2 406 + get-proto: 1.0.1 407 + gopd: 1.2.0 408 + has-symbols: 1.1.0 409 + hasown: 2.0.2 410 + math-intrinsics: 1.1.0 411 + 412 + get-proto@1.0.1: 413 + dependencies: 414 + dunder-proto: 1.0.1 415 + es-object-atoms: 1.1.1 416 + 417 + gopd@1.2.0: {} 418 + 419 + has-symbols@1.1.0: {} 420 + 421 + hasown@2.0.2: 422 + dependencies: 423 + function-bind: 1.1.2 424 + 425 + http-errors@2.0.0: 426 + dependencies: 427 + depd: 2.0.0 428 + inherits: 2.0.4 429 + setprototypeof: 1.2.0 430 + statuses: 2.0.1 431 + toidentifier: 1.0.1 432 + 433 + iconv-lite@0.6.3: 434 + dependencies: 435 + safer-buffer: 2.1.2 436 + 437 + inherits@2.0.4: {} 438 + 439 + ipaddr.js@1.9.1: {} 440 + 441 + is-promise@4.0.0: {} 442 + 443 + math-intrinsics@1.1.0: {} 444 + 445 + media-typer@1.1.0: {} 446 + 447 + merge-descriptors@2.0.0: {} 448 + 449 + mime-db@1.54.0: {} 450 + 451 + mime-types@3.0.1: 452 + dependencies: 453 + mime-db: 1.54.0 454 + 455 + ms@2.1.3: {} 456 + 457 + negotiator@1.0.0: {} 458 + 459 + object-inspect@1.13.4: {} 460 + 461 + on-finished@2.4.1: 462 + dependencies: 463 + ee-first: 1.1.1 464 + 465 + once@1.4.0: 466 + dependencies: 467 + wrappy: 1.0.2 468 + 469 + parseurl@1.3.3: {} 470 + 471 + path-to-regexp@8.2.0: {} 472 + 473 + proxy-addr@2.0.7: 474 + dependencies: 475 + forwarded: 0.2.0 476 + ipaddr.js: 1.9.1 477 + 478 + qs@6.14.0: 479 + dependencies: 480 + side-channel: 1.1.0 481 + 482 + range-parser@1.2.1: {} 483 + 484 + raw-body@3.0.0: 485 + dependencies: 486 + bytes: 3.1.2 487 + http-errors: 2.0.0 488 + iconv-lite: 0.6.3 489 + unpipe: 1.0.0 490 + 491 + router@2.2.0: 492 + dependencies: 493 + debug: 4.4.1 494 + depd: 2.0.0 495 + is-promise: 4.0.0 496 + parseurl: 1.3.3 497 + path-to-regexp: 8.2.0 498 + transitivePeerDependencies: 499 + - supports-color 500 + 501 + safe-buffer@5.2.1: {} 502 + 503 + safer-buffer@2.1.2: {} 504 + 505 + send@1.2.0: 506 + dependencies: 507 + debug: 4.4.1 508 + encodeurl: 2.0.0 509 + escape-html: 1.0.3 510 + etag: 1.8.1 511 + fresh: 2.0.0 512 + http-errors: 2.0.0 513 + mime-types: 3.0.1 514 + ms: 2.1.3 515 + on-finished: 2.4.1 516 + range-parser: 1.2.1 517 + statuses: 2.0.2 518 + transitivePeerDependencies: 519 + - supports-color 520 + 521 + serve-static@2.2.0: 522 + dependencies: 523 + encodeurl: 2.0.0 524 + escape-html: 1.0.3 525 + parseurl: 1.3.3 526 + send: 1.2.0 527 + transitivePeerDependencies: 528 + - supports-color 529 + 530 + setprototypeof@1.2.0: {} 531 + 532 + side-channel-list@1.0.0: 533 + dependencies: 534 + es-errors: 1.3.0 535 + object-inspect: 1.13.4 536 + 537 + side-channel-map@1.0.1: 538 + dependencies: 539 + call-bound: 1.0.4 540 + es-errors: 1.3.0 541 + get-intrinsic: 1.3.0 542 + object-inspect: 1.13.4 543 + 544 + side-channel-weakmap@1.0.2: 545 + dependencies: 546 + call-bound: 1.0.4 547 + es-errors: 1.3.0 548 + get-intrinsic: 1.3.0 549 + object-inspect: 1.13.4 550 + side-channel-map: 1.0.1 551 + 552 + side-channel@1.1.0: 553 + dependencies: 554 + es-errors: 1.3.0 555 + object-inspect: 1.13.4 556 + side-channel-list: 1.0.0 557 + side-channel-map: 1.0.1 558 + side-channel-weakmap: 1.0.2 559 + 560 + statuses@2.0.1: {} 561 + 562 + statuses@2.0.2: {} 563 + 564 + toidentifier@1.0.1: {} 565 + 566 + type-is@2.0.1: 567 + dependencies: 568 + content-type: 1.0.5 569 + media-typer: 1.1.0 570 + mime-types: 3.0.1 571 + 572 + unpipe@1.0.0: {} 573 + 574 + vary@1.1.2: {} 575 + 576 + wrappy@1.0.2: {}