├── .gitignore
├── public
├── images
│ ├── social.jpg
│ └── favicon.png
├── css
│ ├── page.css
│ └── home.css
├── page.html
└── index.html
├── now.json
├── package.json
├── app.js
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | /.env
2 | /.DS_Store
3 | .DS_Store
4 | /public/.DS_Store
5 | /node_modules
--------------------------------------------------------------------------------
/public/images/social.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oilstel/scoby/HEAD/public/images/social.jpg
--------------------------------------------------------------------------------
/public/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oilstel/scoby/HEAD/public/images/favicon.png
--------------------------------------------------------------------------------
/now.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 2,
3 | "builds": [
4 | { "src": "*.js", "use": "@now/node-server" },
5 | { "src": "public/**/**", "use": "@now/static" }
6 | ],
7 | "routes": [
8 | {
9 | "src": "/public/(.*)",
10 | "dest": "/public/"
11 | },
12 | {
13 | "src": "/(.*)",
14 | "dest": "/app.js"
15 | }
16 | ]
17 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "arena-site-generator",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "app.js",
6 | "scripts": {
7 | "start": "node app.js",
8 | "dev": "nodemon app.js"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "are.na": "^0.1.5",
14 | "body-parser": "^2.2.0",
15 | "dotenv": "^16.4.7",
16 | "express": "^4.17.1",
17 | "express-validator": "^7.2.1",
18 | "path": "^0.12.7"
19 | },
20 | "devDependencies": {
21 | "nodemon": "^3.1.9"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/public/css/page.css:
--------------------------------------------------------------------------------
1 | * { box-sizing: border-box; }
2 | /* body {
3 | padding: 10px;
4 | font-family: Arial, Helvetica, sans-serif;
5 | -webkit-font-smoothing: antialiased;
6 | -webkit-text-size-adjust: none;
7 | -moz-osx-font-smoothing: grayscale;
8 | background: #ffffff;
9 | color: #1f1209;
10 | } */
11 | /* h1, h2, h3, h4, a, ul, ol, li, p, figure {
12 | font-size: 14px;
13 | font-weight: normal;
14 | margin: 0;
15 | padding: 0;
16 | }
17 | h1 {
18 | font-weight: bold;
19 | }
20 | h1, h2, h3, h4, ul, ol, p {
21 | margin-bottom: 1.3em;
22 | }
23 | ol li, ul li {
24 | list-style-position: inside;
25 | }
26 | ul li {
27 | list-style-type: none;
28 | }
29 | #blocks div {
30 | margin-bottom: 1em;
31 | }
32 | #blocks div img, #blocks div video {
33 | max-width: 100%;;
34 | }
35 | #title {
36 | margin-bottom: 2em;
37 | }
38 | a {
39 | color: #000;
40 | } */
41 |
42 | #load-more {
43 | /* outline: none;
44 | border: 1px solid black; */
45 | cursor: pointer;
46 | display: none;
47 | }
48 |
49 | /* #load-more, #loading {
50 | width: 100%;
51 | padding: 2rem;
52 | border-radius: 50%;
53 | text-align: center;
54 | font-size: 50px;
55 | letter-spacing:-0.06em;
56 | }
57 |
58 | #load-more:hover {
59 | border-radius: 2rem;
60 | } */
61 |
62 | #load-more.able-to-load {display: block}
63 | #loading.done-loading {display: none}
--------------------------------------------------------------------------------
/public/css/home.css:
--------------------------------------------------------------------------------
1 | * { box-sizing: border-box; }
2 | :root {
3 | --font-family: Arial;
4 | --text-color: #000;
5 | --bg-color: #f7f8c5;
6 | --fs: 24px;
7 | --lh: 30px;
8 | }
9 | body {
10 | font-family: var(--font-family);
11 | /* -webkit-font-smoothing: antialiased;
12 | -webkit-text-size-adjust: none;
13 | -moz-osx-font-smoothing: grayscale; */
14 | color: var(--text-color);
15 | background-color: var(--bg-color);
16 | padding: 10px 15px;
17 | margin: 0;
18 | }
19 | ol li, ul li {
20 | list-style-position: inside;
21 | }
22 | ul li {
23 | list-style-type: none;
24 | margin-bottom: 1em;
25 | }
26 | h1, p {
27 | font-size: var(--fs);
28 | line-height: var(--lh);
29 | }
30 | h1 {
31 | font-size: 50px;
32 | margin-top: 10px;
33 | }
34 | a { color: var(--text-color); }
35 |
36 | #title-and-description {
37 | margin-bottom: 10px;
38 | }
39 |
40 | #welcome {
41 | display: flex;
42 | flex-flow: column wrap;
43 | gap: 0px;
44 | }
45 | p {
46 | font-size: var(--fs);
47 | line-height: var(--lh);
48 | margin: 10px 0;
49 | }
50 |
51 | main#home {
52 | /* max-width: 400px; */
53 | margin: 0 auto;
54 | }
55 |
56 | /* Scobies */
57 | #scobies {
58 | display: flex;
59 | flex-flow: column nowrap;
60 | }
61 | #scobies a {
62 | text-decoration: none;
63 | font-size: var(--fs);
64 | line-height: var(--lh);
65 | border-bottom: 1px solid #000000;
66 | padding: 8px 0px;
67 | }
68 | /* #scobies a:nth-child(odd) {
69 | background: #f1f1f1;
70 | } */
71 | #scobies a u {
72 | color: blue;
73 | text-decoration: underline;
74 | font-size: 16px;
75 | word-break: break-all;
76 | display: none;
77 | }
78 | #scobies a:hover {
79 | background-color: #c5ddf372;
80 | }
81 |
82 | #load-more {
83 | padding: 6px;
84 | margin: 2em 0;
85 | font-family: var(--font-family);
86 | border: 1px solid #000;
87 | color: var(--text-color);
88 | background: var(--bg-color);
89 | cursor: pointer;
90 | font-size: 14px;
91 | border-radius: 4px;
92 | display: none;
93 | }
94 |
95 | #loading {
96 | font-size: 16px;
97 | color: var(--text-color);
98 | }
99 |
100 | #loading.done-loading {
101 | display: none;
102 | }
103 |
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const bodyParser = require('body-parser');
3 | const app = express();
4 | const router = express.Router();
5 | app.use(bodyParser.json());
6 | const path = require('path');
7 | const Arena = require('are.na');
8 | let arena = new Arena();
9 |
10 | // Simple in-memory cache for aggregated channel contents
11 | const CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
12 | let allChannelsCache = {
13 | data: null,
14 | cachedAt: 0
15 | };
16 |
17 | app.use(bodyParser.urlencoded({ extended: false }));
18 |
19 | // We'll keep this endpoint for backward compatibility
20 | app.get('/api/sites', async function(req, res) {
21 | const page = req.query.page || 1;
22 | const per = Math.min(parseInt(req.query.per || 50, 10), 50);
23 |
24 | try {
25 | const response = await fetch(`https://api.are.na/v2/channels/scoby/contents?per=${per}&page=${page}&direction=desc&sort=position`, {
26 | method: 'GET',
27 | headers: {
28 | 'Accept': 'application/json',
29 | 'User-Agent': 'Scoby/1.0',
30 | 'Cache-Control': 'no-cache'
31 | }
32 | });
33 |
34 | if (!response.ok) {
35 | const errorText = await response.text();
36 | console.error('API Error:', {
37 | status: response.status,
38 | statusText: response.statusText,
39 | headers: Object.fromEntries(response.headers.entries()),
40 | body: errorText
41 | });
42 | res.status(response.status).send({
43 | error: 'API request failed',
44 | status: response.status,
45 | message: errorText
46 | });
47 | return;
48 | }
49 |
50 | const data = await response.json();
51 | console.log('API Response for /api/sites:', JSON.stringify(data).slice(0, 200));
52 |
53 | // Handle different response formats
54 | let contents = [];
55 | if (data.contents) {
56 | contents = data.contents;
57 | } else if (Array.isArray(data)) {
58 | contents = data;
59 | }
60 |
61 | // Add pagination info to the response
62 | const responseData = {
63 | contents: contents,
64 | current_page: parseInt(page),
65 | per_page: per,
66 | has_more: contents.length === parseInt(per)
67 | };
68 |
69 | res.send(responseData);
70 | } catch (err) {
71 | console.error('Fetch Error:', err);
72 | res.status(500).send({
73 | error: 'Internal server error',
74 | message: err.message
75 | });
76 | }
77 | });
78 |
79 | // Aggregated endpoint: returns ALL channels in the `scoby` channel, cached
80 | app.get('/api/sites/all', async function(req, res) {
81 | const per = 50; // Are.na cap
82 | const refresh = req.query.refresh === '1' || req.query.refresh === 'true';
83 | const now = Date.now();
84 |
85 | // Serve from cache unless refresh requested or cache expired
86 | if (!refresh && allChannelsCache.data && (now - allChannelsCache.cachedAt < CACHE_TTL_MS)) {
87 | res.send({
88 | contents: allChannelsCache.data,
89 | total: allChannelsCache.data.length,
90 | cached_at: new Date(allChannelsCache.cachedAt).toISOString(),
91 | cache_ttl_ms: CACHE_TTL_MS,
92 | from_cache: true
93 | });
94 | return;
95 | }
96 |
97 | try {
98 | // Get channel to determine total length
99 | const channelResponse = await fetch('https://api.are.na/v2/channels/scoby', {
100 | method: 'GET',
101 | headers: {
102 | 'Accept': 'application/json',
103 | 'User-Agent': 'Scoby/1.0',
104 | 'Cache-Control': 'no-cache'
105 | }
106 | });
107 |
108 | if (!channelResponse.ok) {
109 | const errorText = await channelResponse.text();
110 | res.status(channelResponse.status).send({
111 | error: 'Failed to fetch channel info',
112 | status: channelResponse.status,
113 | message: errorText
114 | });
115 | return;
116 | }
117 |
118 | const channelData = await channelResponse.json();
119 | const totalBlocks = channelData.length || 0;
120 | const totalPages = Math.max(1, Math.ceil(totalBlocks / per));
121 |
122 | // Fetch all pages in parallel
123 | const pageNumbers = Array.from({ length: totalPages }, (_, i) => i + 1);
124 | const requests = pageNumbers.map(pageNum =>
125 | fetch(`https://api.are.na/v2/channels/scoby/contents?page=${pageNum}&per=${per}&direction=desc&sort=position`, {
126 | method: 'GET',
127 | headers: {
128 | 'Accept': 'application/json',
129 | 'User-Agent': 'Scoby/1.0',
130 | 'Cache-Control': 'no-cache'
131 | }
132 | }).then(r => {
133 | if (!r.ok) throw new Error(`Contents request failed: ${r.status}`);
134 | return r.json();
135 | })
136 | );
137 |
138 | const pages = await Promise.all(requests);
139 |
140 | // Merge, filter to Channels, and dedupe by id
141 | const seenIds = new Set();
142 | const merged = [];
143 | pages.forEach(data => {
144 | if (data && data.contents && data.contents.length) {
145 | data.contents.forEach(item => {
146 | if (item.class === 'Channel' && !seenIds.has(item.id)) {
147 | seenIds.add(item.id);
148 | merged.push(item);
149 | }
150 | });
151 | }
152 | });
153 |
154 | // Update cache
155 | allChannelsCache.data = merged;
156 | allChannelsCache.cachedAt = now;
157 |
158 | res.send({
159 | contents: merged,
160 | total: merged.length,
161 | cached_at: new Date(allChannelsCache.cachedAt).toISOString(),
162 | cache_ttl_ms: CACHE_TTL_MS,
163 | from_cache: false
164 | });
165 | } catch (err) {
166 | console.error('Error aggregating channels:', err);
167 | res.status(500).send({
168 | error: 'Internal server error',
169 | message: err.message
170 | });
171 | }
172 | });
173 |
174 | app.get('/api/:site', function(req, res){
175 | // add search params for page, eg /api/scoby?page=2
176 | // ------------------------------------------------
177 | // its an art to find the perfect balance between
178 | // amount of blocks to return per request and the
179 | // actual amount of requests needed to load content
180 | arena.channel(req.params.site).contents({ page: req.query.page ? req.query.page : 1,
181 | per: req.query.per ? req.query.per : 24,
182 | direction: 'desc',
183 | sort: 'position'
184 | })
185 | .then(contents => {
186 | // console.log(contents)
187 | res.send(contents);
188 | // res.sendFile(__dirname + '/public/index.html');
189 | })
190 | .catch(err => console.log(err));
191 | })
192 |
193 | app.get('/', (req, res) => {
194 | res.sendFile(__dirname + '/public/index.html');
195 | });
196 |
197 | app.get('/:page', (req, res) => {
198 | res.sendFile(__dirname + '/public/page.html');
199 | });
200 |
201 | app.use(express.static(__dirname + '/public', {
202 | extensions: ['html', 'htm'],
203 | }));
204 |
205 | app.listen(process.env.PORT || 3001, process.env.IP || '0.0.0.0', () => {
206 | console.log('app listening on port 3001');
207 | });
--------------------------------------------------------------------------------
/public/page.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | ...
23 |
24 |
25 |
167 |
168 |
169 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | scoby.page - Turn any Are.na channel into a website
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
scoby.page
23 |
24 |
Turn any open or closed Are.na channel into a website.
25 |
26 |
Style your Scoby by adding a block titled "stylesheet" with some CSS to your channel.
27 |
28 |
Watch a short tutorial.
29 |
30 |
Please consider supporting this project. Made by Elliott Cost.
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | Loading scobies...
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
170 |
171 |
172 |
173 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | accepts@~1.3.8:
6 | version "1.3.8"
7 | resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz"
8 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
9 | dependencies:
10 | mime-types "~2.1.34"
11 | negotiator "0.6.3"
12 |
13 | anymatch@~3.1.2:
14 | version "3.1.3"
15 | resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz"
16 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
17 | dependencies:
18 | normalize-path "^3.0.0"
19 | picomatch "^2.0.4"
20 |
21 | are.na@^0.1.5:
22 | version "0.1.5"
23 | resolved "https://registry.npmjs.org/are.na/-/are.na-0.1.5.tgz"
24 | integrity sha512-ZM5zBXfO/Ug+nB40emqbQsJmI3F2V3nX8NAIaSxRUfsUYNvVe/t0Elb3c2SEk41260NLjZ8sSOi13IxFW1K9EQ==
25 | dependencies:
26 | axios "^0.18.1"
27 | qs "^6.5.1"
28 |
29 | array-flatten@1.1.1:
30 | version "1.1.1"
31 | resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"
32 | integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
33 |
34 | axios@^0.18.1:
35 | version "0.18.1"
36 | resolved "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz"
37 | integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==
38 | dependencies:
39 | follow-redirects "1.5.10"
40 | is-buffer "^2.0.2"
41 |
42 | balanced-match@^1.0.0:
43 | version "1.0.2"
44 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
45 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
46 |
47 | binary-extensions@^2.0.0:
48 | version "2.3.0"
49 | resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz"
50 | integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
51 |
52 | body-parser@^2.2.0:
53 | version "2.2.0"
54 | resolved "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz"
55 | integrity sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==
56 | dependencies:
57 | bytes "^3.1.2"
58 | content-type "^1.0.5"
59 | debug "^4.4.0"
60 | http-errors "^2.0.0"
61 | iconv-lite "^0.6.3"
62 | on-finished "^2.4.1"
63 | qs "^6.14.0"
64 | raw-body "^3.0.0"
65 | type-is "^2.0.0"
66 |
67 | body-parser@1.20.3:
68 | version "1.20.3"
69 | resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz"
70 | integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==
71 | dependencies:
72 | bytes "3.1.2"
73 | content-type "~1.0.5"
74 | debug "2.6.9"
75 | depd "2.0.0"
76 | destroy "1.2.0"
77 | http-errors "2.0.0"
78 | iconv-lite "0.4.24"
79 | on-finished "2.4.1"
80 | qs "6.13.0"
81 | raw-body "2.5.2"
82 | type-is "~1.6.18"
83 | unpipe "1.0.0"
84 |
85 | brace-expansion@^1.1.7:
86 | version "1.1.11"
87 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
88 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
89 | dependencies:
90 | balanced-match "^1.0.0"
91 | concat-map "0.0.1"
92 |
93 | braces@~3.0.2:
94 | version "3.0.3"
95 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz"
96 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
97 | dependencies:
98 | fill-range "^7.1.1"
99 |
100 | bytes@^3.1.2, bytes@3.1.2:
101 | version "3.1.2"
102 | resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz"
103 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
104 |
105 | call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
106 | version "1.0.2"
107 | resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz"
108 | integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
109 | dependencies:
110 | es-errors "^1.3.0"
111 | function-bind "^1.1.2"
112 |
113 | call-bound@^1.0.2:
114 | version "1.0.4"
115 | resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz"
116 | integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
117 | dependencies:
118 | call-bind-apply-helpers "^1.0.2"
119 | get-intrinsic "^1.3.0"
120 |
121 | chokidar@^3.5.2:
122 | version "3.6.0"
123 | resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz"
124 | integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
125 | dependencies:
126 | anymatch "~3.1.2"
127 | braces "~3.0.2"
128 | glob-parent "~5.1.2"
129 | is-binary-path "~2.1.0"
130 | is-glob "~4.0.1"
131 | normalize-path "~3.0.0"
132 | readdirp "~3.6.0"
133 | optionalDependencies:
134 | fsevents "~2.3.2"
135 |
136 | concat-map@0.0.1:
137 | version "0.0.1"
138 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
139 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
140 |
141 | content-disposition@0.5.4:
142 | version "0.5.4"
143 | resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz"
144 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
145 | dependencies:
146 | safe-buffer "5.2.1"
147 |
148 | content-type@^1.0.5, content-type@~1.0.4, content-type@~1.0.5:
149 | version "1.0.5"
150 | resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz"
151 | integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
152 |
153 | cookie-signature@1.0.6:
154 | version "1.0.6"
155 | resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
156 | integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
157 |
158 | cookie@0.7.1:
159 | version "0.7.1"
160 | resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz"
161 | integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==
162 |
163 | debug@^4:
164 | version "4.4.0"
165 | resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz"
166 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
167 | dependencies:
168 | ms "^2.1.3"
169 |
170 | debug@^4.4.0:
171 | version "4.4.0"
172 | resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz"
173 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
174 | dependencies:
175 | ms "^2.1.3"
176 |
177 | debug@=3.1.0:
178 | version "3.1.0"
179 | resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz"
180 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
181 | dependencies:
182 | ms "2.0.0"
183 |
184 | debug@2.6.9:
185 | version "2.6.9"
186 | resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
187 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
188 | dependencies:
189 | ms "2.0.0"
190 |
191 | depd@2.0.0:
192 | version "2.0.0"
193 | resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz"
194 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
195 |
196 | destroy@1.2.0:
197 | version "1.2.0"
198 | resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz"
199 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
200 |
201 | dotenv@^16.4.7:
202 | version "16.4.7"
203 | resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz"
204 | integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==
205 |
206 | dunder-proto@^1.0.1:
207 | version "1.0.1"
208 | resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz"
209 | integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
210 | dependencies:
211 | call-bind-apply-helpers "^1.0.1"
212 | es-errors "^1.3.0"
213 | gopd "^1.2.0"
214 |
215 | ee-first@1.1.1:
216 | version "1.1.1"
217 | resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
218 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
219 |
220 | encodeurl@~1.0.2:
221 | version "1.0.2"
222 | resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"
223 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
224 |
225 | encodeurl@~2.0.0:
226 | version "2.0.0"
227 | resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz"
228 | integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
229 |
230 | es-define-property@^1.0.1:
231 | version "1.0.1"
232 | resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz"
233 | integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
234 |
235 | es-errors@^1.3.0:
236 | version "1.3.0"
237 | resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz"
238 | integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
239 |
240 | es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
241 | version "1.1.1"
242 | resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz"
243 | integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
244 | dependencies:
245 | es-errors "^1.3.0"
246 |
247 | escape-html@~1.0.3:
248 | version "1.0.3"
249 | resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
250 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
251 |
252 | etag@~1.8.1:
253 | version "1.8.1"
254 | resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"
255 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
256 |
257 | express-validator@^7.2.1:
258 | version "7.2.1"
259 | resolved "https://registry.npmjs.org/express-validator/-/express-validator-7.2.1.tgz"
260 | integrity sha512-CjNE6aakfpuwGaHQZ3m8ltCG2Qvivd7RHtVMS/6nVxOM7xVGqr4bhflsm4+N5FP5zI7Zxp+Hae+9RE+o8e3ZOQ==
261 | dependencies:
262 | lodash "^4.17.21"
263 | validator "~13.12.0"
264 |
265 | express@^4.17.1:
266 | version "4.21.2"
267 | resolved "https://registry.npmjs.org/express/-/express-4.21.2.tgz"
268 | integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==
269 | dependencies:
270 | accepts "~1.3.8"
271 | array-flatten "1.1.1"
272 | body-parser "1.20.3"
273 | content-disposition "0.5.4"
274 | content-type "~1.0.4"
275 | cookie "0.7.1"
276 | cookie-signature "1.0.6"
277 | debug "2.6.9"
278 | depd "2.0.0"
279 | encodeurl "~2.0.0"
280 | escape-html "~1.0.3"
281 | etag "~1.8.1"
282 | finalhandler "1.3.1"
283 | fresh "0.5.2"
284 | http-errors "2.0.0"
285 | merge-descriptors "1.0.3"
286 | methods "~1.1.2"
287 | on-finished "2.4.1"
288 | parseurl "~1.3.3"
289 | path-to-regexp "0.1.12"
290 | proxy-addr "~2.0.7"
291 | qs "6.13.0"
292 | range-parser "~1.2.1"
293 | safe-buffer "5.2.1"
294 | send "0.19.0"
295 | serve-static "1.16.2"
296 | setprototypeof "1.2.0"
297 | statuses "2.0.1"
298 | type-is "~1.6.18"
299 | utils-merge "1.0.1"
300 | vary "~1.1.2"
301 |
302 | fill-range@^7.1.1:
303 | version "7.1.1"
304 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz"
305 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
306 | dependencies:
307 | to-regex-range "^5.0.1"
308 |
309 | finalhandler@1.3.1:
310 | version "1.3.1"
311 | resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz"
312 | integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==
313 | dependencies:
314 | debug "2.6.9"
315 | encodeurl "~2.0.0"
316 | escape-html "~1.0.3"
317 | on-finished "2.4.1"
318 | parseurl "~1.3.3"
319 | statuses "2.0.1"
320 | unpipe "~1.0.0"
321 |
322 | follow-redirects@1.5.10:
323 | version "1.5.10"
324 | resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz"
325 | integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
326 | dependencies:
327 | debug "=3.1.0"
328 |
329 | forwarded@0.2.0:
330 | version "0.2.0"
331 | resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz"
332 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
333 |
334 | fresh@0.5.2:
335 | version "0.5.2"
336 | resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"
337 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
338 |
339 | fsevents@~2.3.2:
340 | version "2.3.3"
341 | resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
342 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
343 |
344 | function-bind@^1.1.2:
345 | version "1.1.2"
346 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
347 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
348 |
349 | get-intrinsic@^1.2.5, get-intrinsic@^1.3.0:
350 | version "1.3.0"
351 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz"
352 | integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
353 | dependencies:
354 | call-bind-apply-helpers "^1.0.2"
355 | es-define-property "^1.0.1"
356 | es-errors "^1.3.0"
357 | es-object-atoms "^1.1.1"
358 | function-bind "^1.1.2"
359 | get-proto "^1.0.1"
360 | gopd "^1.2.0"
361 | has-symbols "^1.1.0"
362 | hasown "^2.0.2"
363 | math-intrinsics "^1.1.0"
364 |
365 | get-proto@^1.0.1:
366 | version "1.0.1"
367 | resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz"
368 | integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
369 | dependencies:
370 | dunder-proto "^1.0.1"
371 | es-object-atoms "^1.0.0"
372 |
373 | glob-parent@~5.1.2:
374 | version "5.1.2"
375 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
376 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
377 | dependencies:
378 | is-glob "^4.0.1"
379 |
380 | gopd@^1.2.0:
381 | version "1.2.0"
382 | resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz"
383 | integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
384 |
385 | has-flag@^3.0.0:
386 | version "3.0.0"
387 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
388 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
389 |
390 | has-symbols@^1.1.0:
391 | version "1.1.0"
392 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz"
393 | integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
394 |
395 | hasown@^2.0.2:
396 | version "2.0.2"
397 | resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz"
398 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
399 | dependencies:
400 | function-bind "^1.1.2"
401 |
402 | http-errors@^2.0.0, http-errors@2.0.0:
403 | version "2.0.0"
404 | resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz"
405 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
406 | dependencies:
407 | depd "2.0.0"
408 | inherits "2.0.4"
409 | setprototypeof "1.2.0"
410 | statuses "2.0.1"
411 | toidentifier "1.0.1"
412 |
413 | iconv-lite@^0.6.3, iconv-lite@0.6.3:
414 | version "0.6.3"
415 | resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"
416 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
417 | dependencies:
418 | safer-buffer ">= 2.1.2 < 3.0.0"
419 |
420 | iconv-lite@0.4.24:
421 | version "0.4.24"
422 | resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
423 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
424 | dependencies:
425 | safer-buffer ">= 2.1.2 < 3"
426 |
427 | ignore-by-default@^1.0.1:
428 | version "1.0.1"
429 | resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz"
430 | integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==
431 |
432 | inherits@2.0.3:
433 | version "2.0.3"
434 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
435 | integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
436 |
437 | inherits@2.0.4:
438 | version "2.0.4"
439 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
440 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
441 |
442 | ipaddr.js@1.9.1:
443 | version "1.9.1"
444 | resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
445 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
446 |
447 | is-binary-path@~2.1.0:
448 | version "2.1.0"
449 | resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz"
450 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
451 | dependencies:
452 | binary-extensions "^2.0.0"
453 |
454 | is-buffer@^2.0.2:
455 | version "2.0.5"
456 | resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz"
457 | integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
458 |
459 | is-extglob@^2.1.1:
460 | version "2.1.1"
461 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
462 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
463 |
464 | is-glob@^4.0.1, is-glob@~4.0.1:
465 | version "4.0.3"
466 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
467 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
468 | dependencies:
469 | is-extglob "^2.1.1"
470 |
471 | is-number@^7.0.0:
472 | version "7.0.0"
473 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
474 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
475 |
476 | lodash@^4.17.21:
477 | version "4.17.21"
478 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
479 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
480 |
481 | math-intrinsics@^1.1.0:
482 | version "1.1.0"
483 | resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz"
484 | integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
485 |
486 | media-typer@^1.1.0:
487 | version "1.1.0"
488 | resolved "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz"
489 | integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==
490 |
491 | media-typer@0.3.0:
492 | version "0.3.0"
493 | resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
494 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
495 |
496 | merge-descriptors@1.0.3:
497 | version "1.0.3"
498 | resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz"
499 | integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==
500 |
501 | methods@~1.1.2:
502 | version "1.1.2"
503 | resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"
504 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
505 |
506 | mime-db@^1.54.0:
507 | version "1.54.0"
508 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz"
509 | integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==
510 |
511 | mime-db@1.52.0:
512 | version "1.52.0"
513 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
514 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
515 |
516 | mime-types@^3.0.0:
517 | version "3.0.1"
518 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz"
519 | integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==
520 | dependencies:
521 | mime-db "^1.54.0"
522 |
523 | mime-types@~2.1.24, mime-types@~2.1.34:
524 | version "2.1.35"
525 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
526 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
527 | dependencies:
528 | mime-db "1.52.0"
529 |
530 | mime@1.6.0:
531 | version "1.6.0"
532 | resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"
533 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
534 |
535 | minimatch@^3.1.2:
536 | version "3.1.2"
537 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
538 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
539 | dependencies:
540 | brace-expansion "^1.1.7"
541 |
542 | ms@^2.1.3:
543 | version "2.1.3"
544 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
545 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
546 |
547 | ms@2.0.0:
548 | version "2.0.0"
549 | resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
550 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
551 |
552 | ms@2.1.3:
553 | version "2.1.3"
554 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
555 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
556 |
557 | negotiator@0.6.3:
558 | version "0.6.3"
559 | resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz"
560 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
561 |
562 | nodemon@^3.1.9:
563 | version "3.1.9"
564 | resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.1.9.tgz"
565 | integrity sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==
566 | dependencies:
567 | chokidar "^3.5.2"
568 | debug "^4"
569 | ignore-by-default "^1.0.1"
570 | minimatch "^3.1.2"
571 | pstree.remy "^1.1.8"
572 | semver "^7.5.3"
573 | simple-update-notifier "^2.0.0"
574 | supports-color "^5.5.0"
575 | touch "^3.1.0"
576 | undefsafe "^2.0.5"
577 |
578 | normalize-path@^3.0.0, normalize-path@~3.0.0:
579 | version "3.0.0"
580 | resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
581 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
582 |
583 | object-inspect@^1.13.3:
584 | version "1.13.4"
585 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz"
586 | integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
587 |
588 | on-finished@^2.4.1, on-finished@2.4.1:
589 | version "2.4.1"
590 | resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz"
591 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
592 | dependencies:
593 | ee-first "1.1.1"
594 |
595 | parseurl@~1.3.3:
596 | version "1.3.3"
597 | resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"
598 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
599 |
600 | path-to-regexp@0.1.12:
601 | version "0.1.12"
602 | resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz"
603 | integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==
604 |
605 | path@^0.12.7:
606 | version "0.12.7"
607 | resolved "https://registry.npmjs.org/path/-/path-0.12.7.tgz"
608 | integrity sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==
609 | dependencies:
610 | process "^0.11.1"
611 | util "^0.10.3"
612 |
613 | picomatch@^2.0.4, picomatch@^2.2.1:
614 | version "2.3.1"
615 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
616 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
617 |
618 | process@^0.11.1:
619 | version "0.11.10"
620 | resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz"
621 | integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
622 |
623 | proxy-addr@~2.0.7:
624 | version "2.0.7"
625 | resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz"
626 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
627 | dependencies:
628 | forwarded "0.2.0"
629 | ipaddr.js "1.9.1"
630 |
631 | pstree.remy@^1.1.8:
632 | version "1.1.8"
633 | resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz"
634 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
635 |
636 | qs@^6.14.0:
637 | version "6.14.0"
638 | resolved "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz"
639 | integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==
640 | dependencies:
641 | side-channel "^1.1.0"
642 |
643 | qs@^6.5.1, qs@6.13.0:
644 | version "6.13.0"
645 | resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz"
646 | integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==
647 | dependencies:
648 | side-channel "^1.0.6"
649 |
650 | range-parser@~1.2.1:
651 | version "1.2.1"
652 | resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"
653 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
654 |
655 | raw-body@^3.0.0:
656 | version "3.0.0"
657 | resolved "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz"
658 | integrity sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==
659 | dependencies:
660 | bytes "3.1.2"
661 | http-errors "2.0.0"
662 | iconv-lite "0.6.3"
663 | unpipe "1.0.0"
664 |
665 | raw-body@2.5.2:
666 | version "2.5.2"
667 | resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz"
668 | integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
669 | dependencies:
670 | bytes "3.1.2"
671 | http-errors "2.0.0"
672 | iconv-lite "0.4.24"
673 | unpipe "1.0.0"
674 |
675 | readdirp@~3.6.0:
676 | version "3.6.0"
677 | resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"
678 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
679 | dependencies:
680 | picomatch "^2.2.1"
681 |
682 | safe-buffer@5.2.1:
683 | version "5.2.1"
684 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
685 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
686 |
687 | "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
688 | version "2.1.2"
689 | resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
690 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
691 |
692 | semver@^7.5.3:
693 | version "7.7.1"
694 | resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz"
695 | integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
696 |
697 | send@0.19.0:
698 | version "0.19.0"
699 | resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz"
700 | integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==
701 | dependencies:
702 | debug "2.6.9"
703 | depd "2.0.0"
704 | destroy "1.2.0"
705 | encodeurl "~1.0.2"
706 | escape-html "~1.0.3"
707 | etag "~1.8.1"
708 | fresh "0.5.2"
709 | http-errors "2.0.0"
710 | mime "1.6.0"
711 | ms "2.1.3"
712 | on-finished "2.4.1"
713 | range-parser "~1.2.1"
714 | statuses "2.0.1"
715 |
716 | serve-static@1.16.2:
717 | version "1.16.2"
718 | resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz"
719 | integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==
720 | dependencies:
721 | encodeurl "~2.0.0"
722 | escape-html "~1.0.3"
723 | parseurl "~1.3.3"
724 | send "0.19.0"
725 |
726 | setprototypeof@1.2.0:
727 | version "1.2.0"
728 | resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz"
729 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
730 |
731 | side-channel-list@^1.0.0:
732 | version "1.0.0"
733 | resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz"
734 | integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==
735 | dependencies:
736 | es-errors "^1.3.0"
737 | object-inspect "^1.13.3"
738 |
739 | side-channel-map@^1.0.1:
740 | version "1.0.1"
741 | resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz"
742 | integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==
743 | dependencies:
744 | call-bound "^1.0.2"
745 | es-errors "^1.3.0"
746 | get-intrinsic "^1.2.5"
747 | object-inspect "^1.13.3"
748 |
749 | side-channel-weakmap@^1.0.2:
750 | version "1.0.2"
751 | resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz"
752 | integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==
753 | dependencies:
754 | call-bound "^1.0.2"
755 | es-errors "^1.3.0"
756 | get-intrinsic "^1.2.5"
757 | object-inspect "^1.13.3"
758 | side-channel-map "^1.0.1"
759 |
760 | side-channel@^1.0.6, side-channel@^1.1.0:
761 | version "1.1.0"
762 | resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz"
763 | integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==
764 | dependencies:
765 | es-errors "^1.3.0"
766 | object-inspect "^1.13.3"
767 | side-channel-list "^1.0.0"
768 | side-channel-map "^1.0.1"
769 | side-channel-weakmap "^1.0.2"
770 |
771 | simple-update-notifier@^2.0.0:
772 | version "2.0.0"
773 | resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz"
774 | integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==
775 | dependencies:
776 | semver "^7.5.3"
777 |
778 | statuses@2.0.1:
779 | version "2.0.1"
780 | resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"
781 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
782 |
783 | supports-color@^5.5.0:
784 | version "5.5.0"
785 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
786 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
787 | dependencies:
788 | has-flag "^3.0.0"
789 |
790 | to-regex-range@^5.0.1:
791 | version "5.0.1"
792 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
793 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
794 | dependencies:
795 | is-number "^7.0.0"
796 |
797 | toidentifier@1.0.1:
798 | version "1.0.1"
799 | resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz"
800 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
801 |
802 | touch@^3.1.0:
803 | version "3.1.1"
804 | resolved "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz"
805 | integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==
806 |
807 | type-is@^2.0.0:
808 | version "2.0.1"
809 | resolved "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz"
810 | integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==
811 | dependencies:
812 | content-type "^1.0.5"
813 | media-typer "^1.1.0"
814 | mime-types "^3.0.0"
815 |
816 | type-is@~1.6.18:
817 | version "1.6.18"
818 | resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
819 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
820 | dependencies:
821 | media-typer "0.3.0"
822 | mime-types "~2.1.24"
823 |
824 | undefsafe@^2.0.5:
825 | version "2.0.5"
826 | resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz"
827 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
828 |
829 | unpipe@~1.0.0, unpipe@1.0.0:
830 | version "1.0.0"
831 | resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
832 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
833 |
834 | util@^0.10.3:
835 | version "0.10.4"
836 | resolved "https://registry.npmjs.org/util/-/util-0.10.4.tgz"
837 | integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==
838 | dependencies:
839 | inherits "2.0.3"
840 |
841 | utils-merge@1.0.1:
842 | version "1.0.1"
843 | resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"
844 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
845 |
846 | validator@~13.12.0:
847 | version "13.12.0"
848 | resolved "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz"
849 | integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==
850 |
851 | vary@~1.1.2:
852 | version "1.1.2"
853 | resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
854 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
855 |
--------------------------------------------------------------------------------