├── .env.example ├── .gitignore ├── img ├── icon.png └── twitter.svg ├── tsconfig.json ├── Dockerfile ├── package.json ├── readme.md ├── views ├── 404.ejs └── index.ejs ├── style.sass ├── .github └── workflows │ └── deploy.yml ├── index.ts ├── LICENSE └── pnpm-lock.yaml /.env.example: -------------------------------------------------------------------------------- 1 | TOKEN= 2 | PORT=3000 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | out 3 | .env 4 | debug.log 5 | *.lock 6 | -------------------------------------------------------------------------------- /img/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/advaith1/stickers/HEAD/img/icon.png -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "moduleResolution": "node", 5 | "outDir": "out", 6 | "target": "ES2020" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:18-alpine 2 | ENV PNPM_HOME="/pnpm" 3 | ENV PATH="$PNPM_HOME:$PATH" 4 | WORKDIR /app 5 | COPY . . 6 | RUN apk update && apk add build-base curl 7 | RUN corepack enable 8 | RUN pnpm i 9 | RUN pnpm i -g sass typescript typescript-transpile-only 10 | RUN tsc-transpile-only 11 | RUN pnpm sass 12 | CMD ["pnpm", "start"] 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "bulma": "0.9.2", 4 | "dotenv": "^8.6.0", 5 | "ejs": "^3.1.10", 6 | "express": "^4.21.2", 7 | "node-fetch": "^2.7.0", 8 | "sass": "1.32.13" 9 | }, 10 | "devDependencies": { 11 | "@types/express": "^4.17.21", 12 | "@types/node-fetch": "^2.6.12", 13 | "typescript": "^5.7.3" 14 | }, 15 | "scripts": { 16 | "tsc": "tsc", 17 | "start": "node -r dotenv/config out", 18 | "sass": "sass --no-source-map style.sass out/style.css" 19 | }, 20 | "type": "module" 21 | } 22 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # [Discord Sticker List](https://stickers.advaith.io) 2 | 3 | Shows a page with all currently available [Discord stickers](https://dis.gd/stickerswhen), displayed in columns by sticker pack, showing the sticker's tags on hover. 4 | 5 | To avoid hitting Discord ratelimits, data is cached for 30 seconds. 6 | 7 | You can view the site at [stickers.advaith.io](https://stickers.advaith.io). 8 | 9 | --- 10 | 11 | ### Setup 12 | 13 | Requires [Node.js](https://nodejs.org) 14+, [TypeScript](https://typescriptlang.org), [pnpm](https://pnpm.js.org), and [Sass](https://sass-lang.com). You must also have a [Discord bot application](https://discord.com/developers). 14 | 15 | 1. Rename `.env.example` to `.env` and fill it out 16 | 2. Install dependencies with `pnpm i` 17 | 3. Compile the TypeScript code with `tsc` 18 | 4. Compile the Sass code with `pnpm sass` 19 | 5. Run with `pnpm start` 20 | -------------------------------------------------------------------------------- /views/404.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 404 | Discord Sticker List 7 | 8 | 9 | 16 | 17 | 18 |
19 |
20 |
21 |

22 | 404: Page Not Found 23 |

24 |

25 | go home 26 |

27 |
28 |
29 |
30 | 31 | 32 | -------------------------------------------------------------------------------- /img/twitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /style.sass: -------------------------------------------------------------------------------- 1 | .spacer 2 | width: 5px 3 | display: inline-block 4 | 5 | #img[src=""] 6 | display: none 7 | 8 | #lottie 9 | max-width: 160px 10 | max-height: 160px 11 | 12 | .emoji 13 | height: 1em 14 | width: 1em 15 | margin: 0 .05em 0 .1em 16 | vertical-align: -0.1em 17 | 18 | #twitter 19 | width: 1em 20 | 21 | .column 22 | min-width: 250px 23 | 24 | .section 25 | overflow: auto 26 | 27 | @media screen and (min-width: 769px) 28 | #info 29 | height: 5.5em 30 | 31 | #img-col 32 | margin: auto 0 10px 33 | 34 | @import "node_modules/bulma/sass/utilities/_all" 35 | 36 | $scheme-main: #141414 37 | $text: $white-ter 38 | $text-strong: $white-ter 39 | $link: $cyan 40 | $link-hover: $blue 41 | $footer-background-color: transparent 42 | 43 | @import "node_modules/bulma/sass/base/_all" 44 | @import "node_modules/bulma/sass/elements/_all" 45 | @import "node_modules/bulma/sass/grid/_all" 46 | @import "node_modules/bulma/sass/helpers/_all" 47 | @import "node_modules/bulma/sass/layout/_all" 48 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | on: 3 | push: 4 | branches: 5 | - main 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v2 11 | - name: Login 12 | run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login ${{ secrets.DOCKER_HOST }} -u admin --password-stdin 13 | - name: Build 14 | run: docker build -t ${{ secrets.DOCKER_HOST }}/stickers:${{github.sha}} . 15 | - name: Push 16 | run: docker push ${{ secrets.DOCKER_HOST }}/stickers:${{github.sha}} 17 | deploy: 18 | needs: build 19 | runs-on: ubuntu-latest 20 | steps: 21 | - name: Login 22 | run: | 23 | mkdir ~/.kube 24 | echo "${{ secrets.KUBE_CONFIG }}" > ~/.kube/config 25 | - name: Set image 26 | run: kubectl set image deployment/stickers stickers=${{ secrets.DOCKER_HOST }}/stickers:${{github.sha}} 27 | - name: Rollout status 28 | run: kubectl rollout status deployment/stickers 29 | -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | import express from 'express' 2 | import fetch from 'node-fetch' 3 | import path from 'path' 4 | 5 | const app = express() 6 | app.set('view engine', 'ejs') 7 | 8 | const token = process.env.TOKEN 9 | 10 | let cache: { 11 | lastUpdated?: number 12 | data?: object 13 | } = {} 14 | 15 | app.get('/', async (_, res) => { 16 | if(!cache.data || Date.now() - cache.lastUpdated > 30000) { 17 | const r = await fetch('https://discord.com/api/v10/sticker-packs', {headers: {authorization: `Bot ${token}`}}) 18 | cache.data = await r.json() 19 | cache.lastUpdated = Date.now() 20 | } 21 | res.render('index', { data: cache.data }) 22 | }) 23 | 24 | app.get('/lottie/:id', async (req, res) => { 25 | const r = await fetch(`https://discord.com/stickers/${req.params.id}.json`) 26 | r.body.pipe(res) 27 | }) 28 | 29 | app.get('/style.css', (_, res) => res.sendFile(path.resolve('out/style.css'))) 30 | 31 | app.use('/img', express.static(path.resolve('img'))) 32 | 33 | app.use((_, res) => res.status(404).render('404')) 34 | 35 | app.listen(process.env.PORT, () => console.log('✔ started!')) 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Advaith 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 | -------------------------------------------------------------------------------- /views/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Discord Sticker List 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 21 | 22 | 23 |
24 |
25 |
26 |
27 |
28 |

29 | Discord Sticker List 30 |

31 |

32 | All the currently available Discord standard stickers 33 |

34 |

35 | Hover over a sticker to show it 36 |

37 |

38 | Name:
39 | Description:
40 | Tags:
41 |

42 |
43 |
44 | Sticker Image 45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | <% data.sticker_packs?.map(pack => { %> 55 |
56 | 57 | 58 | 59 | 60 | 61 |

<%= pack.name %>

62 | <% pack.stickers.sort((a, b) => a.name.localeCompare(b.name)).map(sticker => { %> 63 |

<%= sticker.name %>

64 | <% }) %> 65 |
66 | <% }) %> 67 |
68 |
69 |
70 | 73 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | bulma: 12 | specifier: 0.9.2 13 | version: 0.9.2 14 | dotenv: 15 | specifier: ^8.6.0 16 | version: 8.6.0 17 | ejs: 18 | specifier: ^3.1.10 19 | version: 3.1.10 20 | express: 21 | specifier: ^4.21.2 22 | version: 4.21.2 23 | node-fetch: 24 | specifier: ^2.7.0 25 | version: 2.7.0 26 | sass: 27 | specifier: 1.32.13 28 | version: 1.32.13 29 | devDependencies: 30 | '@types/express': 31 | specifier: ^4.17.21 32 | version: 4.17.21 33 | '@types/node-fetch': 34 | specifier: ^2.6.12 35 | version: 2.6.12 36 | typescript: 37 | specifier: ^5.7.3 38 | version: 5.7.3 39 | 40 | packages: 41 | 42 | '@types/body-parser@1.19.0': 43 | resolution: {integrity: sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==} 44 | 45 | '@types/connect@3.4.33': 46 | resolution: {integrity: sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==} 47 | 48 | '@types/express-serve-static-core@4.19.6': 49 | resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} 50 | 51 | '@types/express@4.17.21': 52 | resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} 53 | 54 | '@types/mime@1.3.5': 55 | resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} 56 | 57 | '@types/mime@2.0.3': 58 | resolution: {integrity: sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==} 59 | 60 | '@types/node-fetch@2.6.12': 61 | resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} 62 | 63 | '@types/node@22.10.10': 64 | resolution: {integrity: sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==} 65 | 66 | '@types/qs@6.9.5': 67 | resolution: {integrity: sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==} 68 | 69 | '@types/range-parser@1.2.7': 70 | resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} 71 | 72 | '@types/send@0.17.4': 73 | resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} 74 | 75 | '@types/serve-static@1.13.7': 76 | resolution: {integrity: sha512-3diZWucbR+xTmbDlU+FRRxBf+31OhFew7cJXML/zh9NmvSPTNoFecAwHB66BUqFgENJtqMiyl7JAwUE/siqdLw==} 77 | 78 | accepts@1.3.8: 79 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 80 | engines: {node: '>= 0.6'} 81 | 82 | ansi-styles@4.3.0: 83 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 84 | engines: {node: '>=8'} 85 | 86 | anymatch@3.1.3: 87 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 88 | engines: {node: '>= 8'} 89 | 90 | array-flatten@1.1.1: 91 | resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} 92 | 93 | async@3.2.6: 94 | resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} 95 | 96 | asynckit@0.4.0: 97 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 98 | 99 | balanced-match@1.0.2: 100 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 101 | 102 | binary-extensions@2.3.0: 103 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 104 | engines: {node: '>=8'} 105 | 106 | body-parser@1.20.3: 107 | resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} 108 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 109 | 110 | brace-expansion@1.1.11: 111 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 112 | 113 | brace-expansion@2.0.1: 114 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 115 | 116 | braces@3.0.3: 117 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 118 | engines: {node: '>=8'} 119 | 120 | bulma@0.9.2: 121 | resolution: {integrity: sha512-e14EF+3VSZ488yL/lJH0tR8mFWiEQVCMi/BQUMi2TGMBOk+zrDg4wryuwm/+dRSHJw0gMawp2tsW7X1JYUCE3A==} 122 | 123 | bytes@3.1.2: 124 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 125 | engines: {node: '>= 0.8'} 126 | 127 | call-bind-apply-helpers@1.0.1: 128 | resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} 129 | engines: {node: '>= 0.4'} 130 | 131 | call-bound@1.0.3: 132 | resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} 133 | engines: {node: '>= 0.4'} 134 | 135 | chalk@4.1.2: 136 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 137 | engines: {node: '>=10'} 138 | 139 | chokidar@3.6.0: 140 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 141 | engines: {node: '>= 8.10.0'} 142 | 143 | color-convert@2.0.1: 144 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 145 | engines: {node: '>=7.0.0'} 146 | 147 | color-name@1.1.4: 148 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 149 | 150 | combined-stream@1.0.8: 151 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 152 | engines: {node: '>= 0.8'} 153 | 154 | concat-map@0.0.1: 155 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 156 | 157 | content-disposition@0.5.4: 158 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} 159 | engines: {node: '>= 0.6'} 160 | 161 | content-type@1.0.4: 162 | resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} 163 | engines: {node: '>= 0.6'} 164 | 165 | content-type@1.0.5: 166 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 167 | engines: {node: '>= 0.6'} 168 | 169 | cookie-signature@1.0.6: 170 | resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} 171 | 172 | cookie@0.7.1: 173 | resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} 174 | engines: {node: '>= 0.6'} 175 | 176 | debug@2.6.9: 177 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 178 | peerDependencies: 179 | supports-color: '*' 180 | peerDependenciesMeta: 181 | supports-color: 182 | optional: true 183 | 184 | delayed-stream@1.0.0: 185 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 186 | engines: {node: '>=0.4.0'} 187 | 188 | depd@2.0.0: 189 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 190 | engines: {node: '>= 0.8'} 191 | 192 | destroy@1.2.0: 193 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 194 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 195 | 196 | dotenv@8.6.0: 197 | resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} 198 | engines: {node: '>=10'} 199 | 200 | dunder-proto@1.0.1: 201 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 202 | engines: {node: '>= 0.4'} 203 | 204 | ee-first@1.1.1: 205 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 206 | 207 | ejs@3.1.10: 208 | resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} 209 | engines: {node: '>=0.10.0'} 210 | hasBin: true 211 | 212 | encodeurl@1.0.2: 213 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} 214 | engines: {node: '>= 0.8'} 215 | 216 | encodeurl@2.0.0: 217 | resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} 218 | engines: {node: '>= 0.8'} 219 | 220 | es-define-property@1.0.1: 221 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 222 | engines: {node: '>= 0.4'} 223 | 224 | es-errors@1.3.0: 225 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 226 | engines: {node: '>= 0.4'} 227 | 228 | es-object-atoms@1.1.1: 229 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 230 | engines: {node: '>= 0.4'} 231 | 232 | escape-html@1.0.3: 233 | resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} 234 | 235 | etag@1.8.1: 236 | resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} 237 | engines: {node: '>= 0.6'} 238 | 239 | express@4.21.2: 240 | resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} 241 | engines: {node: '>= 0.10.0'} 242 | 243 | filelist@1.0.4: 244 | resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} 245 | 246 | fill-range@7.1.1: 247 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 248 | engines: {node: '>=8'} 249 | 250 | finalhandler@1.3.1: 251 | resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} 252 | engines: {node: '>= 0.8'} 253 | 254 | form-data@4.0.1: 255 | resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} 256 | engines: {node: '>= 6'} 257 | 258 | forwarded@0.2.0: 259 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 260 | engines: {node: '>= 0.6'} 261 | 262 | fresh@0.5.2: 263 | resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} 264 | engines: {node: '>= 0.6'} 265 | 266 | fsevents@2.3.3: 267 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 268 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 269 | os: [darwin] 270 | 271 | function-bind@1.1.2: 272 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 273 | 274 | get-intrinsic@1.2.7: 275 | resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} 276 | engines: {node: '>= 0.4'} 277 | 278 | get-proto@1.0.1: 279 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 280 | engines: {node: '>= 0.4'} 281 | 282 | glob-parent@5.1.2: 283 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 284 | engines: {node: '>= 6'} 285 | 286 | gopd@1.2.0: 287 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 288 | engines: {node: '>= 0.4'} 289 | 290 | has-flag@4.0.0: 291 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 292 | engines: {node: '>=8'} 293 | 294 | has-symbols@1.1.0: 295 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 296 | engines: {node: '>= 0.4'} 297 | 298 | hasown@2.0.2: 299 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 300 | engines: {node: '>= 0.4'} 301 | 302 | http-errors@2.0.0: 303 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 304 | engines: {node: '>= 0.8'} 305 | 306 | iconv-lite@0.4.24: 307 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 308 | engines: {node: '>=0.10.0'} 309 | 310 | inherits@2.0.4: 311 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 312 | 313 | ipaddr.js@1.9.1: 314 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 315 | engines: {node: '>= 0.10'} 316 | 317 | is-binary-path@2.1.0: 318 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 319 | engines: {node: '>=8'} 320 | 321 | is-extglob@2.1.1: 322 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 323 | engines: {node: '>=0.10.0'} 324 | 325 | is-glob@4.0.3: 326 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 327 | engines: {node: '>=0.10.0'} 328 | 329 | is-number@7.0.0: 330 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 331 | engines: {node: '>=0.12.0'} 332 | 333 | jake@10.9.2: 334 | resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} 335 | engines: {node: '>=10'} 336 | hasBin: true 337 | 338 | math-intrinsics@1.1.0: 339 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 340 | engines: {node: '>= 0.4'} 341 | 342 | media-typer@0.3.0: 343 | resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} 344 | engines: {node: '>= 0.6'} 345 | 346 | merge-descriptors@1.0.3: 347 | resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} 348 | 349 | methods@1.1.2: 350 | resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} 351 | engines: {node: '>= 0.6'} 352 | 353 | mime-db@1.44.0: 354 | resolution: {integrity: sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==} 355 | engines: {node: '>= 0.6'} 356 | 357 | mime-db@1.52.0: 358 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 359 | engines: {node: '>= 0.6'} 360 | 361 | mime-types@2.1.27: 362 | resolution: {integrity: sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==} 363 | engines: {node: '>= 0.6'} 364 | 365 | mime-types@2.1.35: 366 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 367 | engines: {node: '>= 0.6'} 368 | 369 | mime@1.6.0: 370 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 371 | engines: {node: '>=4'} 372 | hasBin: true 373 | 374 | minimatch@3.1.2: 375 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 376 | 377 | minimatch@5.1.6: 378 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 379 | engines: {node: '>=10'} 380 | 381 | ms@2.0.0: 382 | resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} 383 | 384 | ms@2.1.3: 385 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 386 | 387 | negotiator@0.6.3: 388 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 389 | engines: {node: '>= 0.6'} 390 | 391 | node-fetch@2.7.0: 392 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 393 | engines: {node: 4.x || >=6.0.0} 394 | peerDependencies: 395 | encoding: ^0.1.0 396 | peerDependenciesMeta: 397 | encoding: 398 | optional: true 399 | 400 | normalize-path@3.0.0: 401 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 402 | engines: {node: '>=0.10.0'} 403 | 404 | object-inspect@1.13.3: 405 | resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} 406 | engines: {node: '>= 0.4'} 407 | 408 | on-finished@2.4.1: 409 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 410 | engines: {node: '>= 0.8'} 411 | 412 | parseurl@1.3.3: 413 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 414 | engines: {node: '>= 0.8'} 415 | 416 | path-to-regexp@0.1.12: 417 | resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} 418 | 419 | picomatch@2.3.1: 420 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 421 | engines: {node: '>=8.6'} 422 | 423 | proxy-addr@2.0.7: 424 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 425 | engines: {node: '>= 0.10'} 426 | 427 | qs@6.13.0: 428 | resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} 429 | engines: {node: '>=0.6'} 430 | 431 | range-parser@1.2.1: 432 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 433 | engines: {node: '>= 0.6'} 434 | 435 | raw-body@2.5.2: 436 | resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} 437 | engines: {node: '>= 0.8'} 438 | 439 | readdirp@3.6.0: 440 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 441 | engines: {node: '>=8.10.0'} 442 | 443 | safe-buffer@5.2.1: 444 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 445 | 446 | safer-buffer@2.1.2: 447 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 448 | 449 | sass@1.32.13: 450 | resolution: {integrity: sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==} 451 | engines: {node: '>=8.9.0'} 452 | hasBin: true 453 | 454 | send@0.19.0: 455 | resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} 456 | engines: {node: '>= 0.8.0'} 457 | 458 | serve-static@1.16.2: 459 | resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} 460 | engines: {node: '>= 0.8.0'} 461 | 462 | setprototypeof@1.2.0: 463 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 464 | 465 | side-channel-list@1.0.0: 466 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 467 | engines: {node: '>= 0.4'} 468 | 469 | side-channel-map@1.0.1: 470 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 471 | engines: {node: '>= 0.4'} 472 | 473 | side-channel-weakmap@1.0.2: 474 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 475 | engines: {node: '>= 0.4'} 476 | 477 | side-channel@1.1.0: 478 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 479 | engines: {node: '>= 0.4'} 480 | 481 | statuses@2.0.1: 482 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 483 | engines: {node: '>= 0.8'} 484 | 485 | supports-color@7.2.0: 486 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 487 | engines: {node: '>=8'} 488 | 489 | to-regex-range@5.0.1: 490 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 491 | engines: {node: '>=8.0'} 492 | 493 | toidentifier@1.0.1: 494 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 495 | engines: {node: '>=0.6'} 496 | 497 | tr46@0.0.3: 498 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 499 | 500 | type-is@1.6.18: 501 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 502 | engines: {node: '>= 0.6'} 503 | 504 | typescript@5.7.3: 505 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} 506 | engines: {node: '>=14.17'} 507 | hasBin: true 508 | 509 | undici-types@6.20.0: 510 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 511 | 512 | unpipe@1.0.0: 513 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 514 | engines: {node: '>= 0.8'} 515 | 516 | utils-merge@1.0.1: 517 | resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} 518 | engines: {node: '>= 0.4.0'} 519 | 520 | vary@1.1.2: 521 | resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} 522 | engines: {node: '>= 0.8'} 523 | 524 | webidl-conversions@3.0.1: 525 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 526 | 527 | whatwg-url@5.0.0: 528 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 529 | 530 | snapshots: 531 | 532 | '@types/body-parser@1.19.0': 533 | dependencies: 534 | '@types/connect': 3.4.33 535 | '@types/node': 22.10.10 536 | 537 | '@types/connect@3.4.33': 538 | dependencies: 539 | '@types/node': 22.10.10 540 | 541 | '@types/express-serve-static-core@4.19.6': 542 | dependencies: 543 | '@types/node': 22.10.10 544 | '@types/qs': 6.9.5 545 | '@types/range-parser': 1.2.7 546 | '@types/send': 0.17.4 547 | 548 | '@types/express@4.17.21': 549 | dependencies: 550 | '@types/body-parser': 1.19.0 551 | '@types/express-serve-static-core': 4.19.6 552 | '@types/qs': 6.9.5 553 | '@types/serve-static': 1.13.7 554 | 555 | '@types/mime@1.3.5': {} 556 | 557 | '@types/mime@2.0.3': {} 558 | 559 | '@types/node-fetch@2.6.12': 560 | dependencies: 561 | '@types/node': 22.10.10 562 | form-data: 4.0.1 563 | 564 | '@types/node@22.10.10': 565 | dependencies: 566 | undici-types: 6.20.0 567 | 568 | '@types/qs@6.9.5': {} 569 | 570 | '@types/range-parser@1.2.7': {} 571 | 572 | '@types/send@0.17.4': 573 | dependencies: 574 | '@types/mime': 1.3.5 575 | '@types/node': 22.10.10 576 | 577 | '@types/serve-static@1.13.7': 578 | dependencies: 579 | '@types/mime': 2.0.3 580 | '@types/node': 22.10.10 581 | 582 | accepts@1.3.8: 583 | dependencies: 584 | mime-types: 2.1.35 585 | negotiator: 0.6.3 586 | 587 | ansi-styles@4.3.0: 588 | dependencies: 589 | color-convert: 2.0.1 590 | 591 | anymatch@3.1.3: 592 | dependencies: 593 | normalize-path: 3.0.0 594 | picomatch: 2.3.1 595 | 596 | array-flatten@1.1.1: {} 597 | 598 | async@3.2.6: {} 599 | 600 | asynckit@0.4.0: {} 601 | 602 | balanced-match@1.0.2: {} 603 | 604 | binary-extensions@2.3.0: {} 605 | 606 | body-parser@1.20.3: 607 | dependencies: 608 | bytes: 3.1.2 609 | content-type: 1.0.5 610 | debug: 2.6.9 611 | depd: 2.0.0 612 | destroy: 1.2.0 613 | http-errors: 2.0.0 614 | iconv-lite: 0.4.24 615 | on-finished: 2.4.1 616 | qs: 6.13.0 617 | raw-body: 2.5.2 618 | type-is: 1.6.18 619 | unpipe: 1.0.0 620 | transitivePeerDependencies: 621 | - supports-color 622 | 623 | brace-expansion@1.1.11: 624 | dependencies: 625 | balanced-match: 1.0.2 626 | concat-map: 0.0.1 627 | 628 | brace-expansion@2.0.1: 629 | dependencies: 630 | balanced-match: 1.0.2 631 | 632 | braces@3.0.3: 633 | dependencies: 634 | fill-range: 7.1.1 635 | 636 | bulma@0.9.2: {} 637 | 638 | bytes@3.1.2: {} 639 | 640 | call-bind-apply-helpers@1.0.1: 641 | dependencies: 642 | es-errors: 1.3.0 643 | function-bind: 1.1.2 644 | 645 | call-bound@1.0.3: 646 | dependencies: 647 | call-bind-apply-helpers: 1.0.1 648 | get-intrinsic: 1.2.7 649 | 650 | chalk@4.1.2: 651 | dependencies: 652 | ansi-styles: 4.3.0 653 | supports-color: 7.2.0 654 | 655 | chokidar@3.6.0: 656 | dependencies: 657 | anymatch: 3.1.3 658 | braces: 3.0.3 659 | glob-parent: 5.1.2 660 | is-binary-path: 2.1.0 661 | is-glob: 4.0.3 662 | normalize-path: 3.0.0 663 | readdirp: 3.6.0 664 | optionalDependencies: 665 | fsevents: 2.3.3 666 | 667 | color-convert@2.0.1: 668 | dependencies: 669 | color-name: 1.1.4 670 | 671 | color-name@1.1.4: {} 672 | 673 | combined-stream@1.0.8: 674 | dependencies: 675 | delayed-stream: 1.0.0 676 | 677 | concat-map@0.0.1: {} 678 | 679 | content-disposition@0.5.4: 680 | dependencies: 681 | safe-buffer: 5.2.1 682 | 683 | content-type@1.0.4: {} 684 | 685 | content-type@1.0.5: {} 686 | 687 | cookie-signature@1.0.6: {} 688 | 689 | cookie@0.7.1: {} 690 | 691 | debug@2.6.9: 692 | dependencies: 693 | ms: 2.0.0 694 | 695 | delayed-stream@1.0.0: {} 696 | 697 | depd@2.0.0: {} 698 | 699 | destroy@1.2.0: {} 700 | 701 | dotenv@8.6.0: {} 702 | 703 | dunder-proto@1.0.1: 704 | dependencies: 705 | call-bind-apply-helpers: 1.0.1 706 | es-errors: 1.3.0 707 | gopd: 1.2.0 708 | 709 | ee-first@1.1.1: {} 710 | 711 | ejs@3.1.10: 712 | dependencies: 713 | jake: 10.9.2 714 | 715 | encodeurl@1.0.2: {} 716 | 717 | encodeurl@2.0.0: {} 718 | 719 | es-define-property@1.0.1: {} 720 | 721 | es-errors@1.3.0: {} 722 | 723 | es-object-atoms@1.1.1: 724 | dependencies: 725 | es-errors: 1.3.0 726 | 727 | escape-html@1.0.3: {} 728 | 729 | etag@1.8.1: {} 730 | 731 | express@4.21.2: 732 | dependencies: 733 | accepts: 1.3.8 734 | array-flatten: 1.1.1 735 | body-parser: 1.20.3 736 | content-disposition: 0.5.4 737 | content-type: 1.0.4 738 | cookie: 0.7.1 739 | cookie-signature: 1.0.6 740 | debug: 2.6.9 741 | depd: 2.0.0 742 | encodeurl: 2.0.0 743 | escape-html: 1.0.3 744 | etag: 1.8.1 745 | finalhandler: 1.3.1 746 | fresh: 0.5.2 747 | http-errors: 2.0.0 748 | merge-descriptors: 1.0.3 749 | methods: 1.1.2 750 | on-finished: 2.4.1 751 | parseurl: 1.3.3 752 | path-to-regexp: 0.1.12 753 | proxy-addr: 2.0.7 754 | qs: 6.13.0 755 | range-parser: 1.2.1 756 | safe-buffer: 5.2.1 757 | send: 0.19.0 758 | serve-static: 1.16.2 759 | setprototypeof: 1.2.0 760 | statuses: 2.0.1 761 | type-is: 1.6.18 762 | utils-merge: 1.0.1 763 | vary: 1.1.2 764 | transitivePeerDependencies: 765 | - supports-color 766 | 767 | filelist@1.0.4: 768 | dependencies: 769 | minimatch: 5.1.6 770 | 771 | fill-range@7.1.1: 772 | dependencies: 773 | to-regex-range: 5.0.1 774 | 775 | finalhandler@1.3.1: 776 | dependencies: 777 | debug: 2.6.9 778 | encodeurl: 2.0.0 779 | escape-html: 1.0.3 780 | on-finished: 2.4.1 781 | parseurl: 1.3.3 782 | statuses: 2.0.1 783 | unpipe: 1.0.0 784 | transitivePeerDependencies: 785 | - supports-color 786 | 787 | form-data@4.0.1: 788 | dependencies: 789 | asynckit: 0.4.0 790 | combined-stream: 1.0.8 791 | mime-types: 2.1.35 792 | 793 | forwarded@0.2.0: {} 794 | 795 | fresh@0.5.2: {} 796 | 797 | fsevents@2.3.3: 798 | optional: true 799 | 800 | function-bind@1.1.2: {} 801 | 802 | get-intrinsic@1.2.7: 803 | dependencies: 804 | call-bind-apply-helpers: 1.0.1 805 | es-define-property: 1.0.1 806 | es-errors: 1.3.0 807 | es-object-atoms: 1.1.1 808 | function-bind: 1.1.2 809 | get-proto: 1.0.1 810 | gopd: 1.2.0 811 | has-symbols: 1.1.0 812 | hasown: 2.0.2 813 | math-intrinsics: 1.1.0 814 | 815 | get-proto@1.0.1: 816 | dependencies: 817 | dunder-proto: 1.0.1 818 | es-object-atoms: 1.1.1 819 | 820 | glob-parent@5.1.2: 821 | dependencies: 822 | is-glob: 4.0.3 823 | 824 | gopd@1.2.0: {} 825 | 826 | has-flag@4.0.0: {} 827 | 828 | has-symbols@1.1.0: {} 829 | 830 | hasown@2.0.2: 831 | dependencies: 832 | function-bind: 1.1.2 833 | 834 | http-errors@2.0.0: 835 | dependencies: 836 | depd: 2.0.0 837 | inherits: 2.0.4 838 | setprototypeof: 1.2.0 839 | statuses: 2.0.1 840 | toidentifier: 1.0.1 841 | 842 | iconv-lite@0.4.24: 843 | dependencies: 844 | safer-buffer: 2.1.2 845 | 846 | inherits@2.0.4: {} 847 | 848 | ipaddr.js@1.9.1: {} 849 | 850 | is-binary-path@2.1.0: 851 | dependencies: 852 | binary-extensions: 2.3.0 853 | 854 | is-extglob@2.1.1: {} 855 | 856 | is-glob@4.0.3: 857 | dependencies: 858 | is-extglob: 2.1.1 859 | 860 | is-number@7.0.0: {} 861 | 862 | jake@10.9.2: 863 | dependencies: 864 | async: 3.2.6 865 | chalk: 4.1.2 866 | filelist: 1.0.4 867 | minimatch: 3.1.2 868 | 869 | math-intrinsics@1.1.0: {} 870 | 871 | media-typer@0.3.0: {} 872 | 873 | merge-descriptors@1.0.3: {} 874 | 875 | methods@1.1.2: {} 876 | 877 | mime-db@1.44.0: {} 878 | 879 | mime-db@1.52.0: {} 880 | 881 | mime-types@2.1.27: 882 | dependencies: 883 | mime-db: 1.44.0 884 | 885 | mime-types@2.1.35: 886 | dependencies: 887 | mime-db: 1.52.0 888 | 889 | mime@1.6.0: {} 890 | 891 | minimatch@3.1.2: 892 | dependencies: 893 | brace-expansion: 1.1.11 894 | 895 | minimatch@5.1.6: 896 | dependencies: 897 | brace-expansion: 2.0.1 898 | 899 | ms@2.0.0: {} 900 | 901 | ms@2.1.3: {} 902 | 903 | negotiator@0.6.3: {} 904 | 905 | node-fetch@2.7.0: 906 | dependencies: 907 | whatwg-url: 5.0.0 908 | 909 | normalize-path@3.0.0: {} 910 | 911 | object-inspect@1.13.3: {} 912 | 913 | on-finished@2.4.1: 914 | dependencies: 915 | ee-first: 1.1.1 916 | 917 | parseurl@1.3.3: {} 918 | 919 | path-to-regexp@0.1.12: {} 920 | 921 | picomatch@2.3.1: {} 922 | 923 | proxy-addr@2.0.7: 924 | dependencies: 925 | forwarded: 0.2.0 926 | ipaddr.js: 1.9.1 927 | 928 | qs@6.13.0: 929 | dependencies: 930 | side-channel: 1.1.0 931 | 932 | range-parser@1.2.1: {} 933 | 934 | raw-body@2.5.2: 935 | dependencies: 936 | bytes: 3.1.2 937 | http-errors: 2.0.0 938 | iconv-lite: 0.4.24 939 | unpipe: 1.0.0 940 | 941 | readdirp@3.6.0: 942 | dependencies: 943 | picomatch: 2.3.1 944 | 945 | safe-buffer@5.2.1: {} 946 | 947 | safer-buffer@2.1.2: {} 948 | 949 | sass@1.32.13: 950 | dependencies: 951 | chokidar: 3.6.0 952 | 953 | send@0.19.0: 954 | dependencies: 955 | debug: 2.6.9 956 | depd: 2.0.0 957 | destroy: 1.2.0 958 | encodeurl: 1.0.2 959 | escape-html: 1.0.3 960 | etag: 1.8.1 961 | fresh: 0.5.2 962 | http-errors: 2.0.0 963 | mime: 1.6.0 964 | ms: 2.1.3 965 | on-finished: 2.4.1 966 | range-parser: 1.2.1 967 | statuses: 2.0.1 968 | transitivePeerDependencies: 969 | - supports-color 970 | 971 | serve-static@1.16.2: 972 | dependencies: 973 | encodeurl: 2.0.0 974 | escape-html: 1.0.3 975 | parseurl: 1.3.3 976 | send: 0.19.0 977 | transitivePeerDependencies: 978 | - supports-color 979 | 980 | setprototypeof@1.2.0: {} 981 | 982 | side-channel-list@1.0.0: 983 | dependencies: 984 | es-errors: 1.3.0 985 | object-inspect: 1.13.3 986 | 987 | side-channel-map@1.0.1: 988 | dependencies: 989 | call-bound: 1.0.3 990 | es-errors: 1.3.0 991 | get-intrinsic: 1.2.7 992 | object-inspect: 1.13.3 993 | 994 | side-channel-weakmap@1.0.2: 995 | dependencies: 996 | call-bound: 1.0.3 997 | es-errors: 1.3.0 998 | get-intrinsic: 1.2.7 999 | object-inspect: 1.13.3 1000 | side-channel-map: 1.0.1 1001 | 1002 | side-channel@1.1.0: 1003 | dependencies: 1004 | es-errors: 1.3.0 1005 | object-inspect: 1.13.3 1006 | side-channel-list: 1.0.0 1007 | side-channel-map: 1.0.1 1008 | side-channel-weakmap: 1.0.2 1009 | 1010 | statuses@2.0.1: {} 1011 | 1012 | supports-color@7.2.0: 1013 | dependencies: 1014 | has-flag: 4.0.0 1015 | 1016 | to-regex-range@5.0.1: 1017 | dependencies: 1018 | is-number: 7.0.0 1019 | 1020 | toidentifier@1.0.1: {} 1021 | 1022 | tr46@0.0.3: {} 1023 | 1024 | type-is@1.6.18: 1025 | dependencies: 1026 | media-typer: 0.3.0 1027 | mime-types: 2.1.27 1028 | 1029 | typescript@5.7.3: {} 1030 | 1031 | undici-types@6.20.0: {} 1032 | 1033 | unpipe@1.0.0: {} 1034 | 1035 | utils-merge@1.0.1: {} 1036 | 1037 | vary@1.1.2: {} 1038 | 1039 | webidl-conversions@3.0.1: {} 1040 | 1041 | whatwg-url@5.0.0: 1042 | dependencies: 1043 | tr46: 0.0.3 1044 | webidl-conversions: 3.0.1 1045 | --------------------------------------------------------------------------------