├── .env.sample ├── .gitignore ├── LICENSE ├── Procfile ├── README.md ├── deta.json ├── index.js ├── package-lock.json ├── package.json └── src ├── middleware.js ├── schemas.js ├── static ├── images │ ├── api-icon.png │ ├── contact-icon.png │ ├── favicons │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── apple-touch-icon.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ └── site.webmanifest │ ├── github-icon.png │ ├── privacy-icon.png │ └── save.svg └── js │ ├── js.cookie.min.js │ ├── main.js │ ├── paste.js │ └── sweetalert2.min.js ├── utils.js └── views ├── error.ejs ├── main.ejs ├── paste.ejs └── template.ejs /.env.sample: -------------------------------------------------------------------------------- 1 | HOST = "0.0.0.0" 2 | PORT = 8000 3 | DETA_BASE_NAME = "pasting" 4 | DETA_PROJECT_KEY = "" 5 | KEY_LENGTH = 8 6 | WEBSITE_NAME = "pasting" 7 | BINARY_CONTENT_TYPES = "*" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.env 3 | .deta -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Adnan Ahmad 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 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: npm run heroku -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
Pasting is a minimalist publishing tool that allows you to create richly formatted posts and push them to the Web in just a click.
3 | In simple words it's a website like Telegraph but it can be used as a pastebin too.
4 |
5 |
6 | Unable to find your pasted code maybe it doesn't exists. An unknown error has occurred. Contact the developer with the url to fix it. Inconvenience is strictly regretted.
37 | Unable to find your pasted code maybe it doesn't exists.
38 |
3 | <%- website_name %>
4 | is a minimalist publishing tool that allows you to create richly formatted posts and push them to the Web
5 | in just a click.
6 | In simple words it's a website like Telegra.ph but it can be used as a pastebin too.
7 |
7 |
8 |
9 | ## Installing
10 | It can be deployed on deta or you need node v16.13.0 or later and also need deta's project key if not deploying on deta.
11 |
12 | ### Configuration
13 | - Set `HOST` and `PORT` in environment variables or in arguments. Default it will listen on `127.0.0.1:8000`.
14 | - Set `DETA_PROJECT_KEY` in environment varibales.
15 |
16 | ### Deployment
17 | - Install dependencies using `npm`
18 | ```
19 | npm install
20 | ```
21 | - Run it using `node`
22 | ```
23 | node index.js
24 | ```
25 |
26 | ### Copyright & License
27 | Copyright (©) 2022 by [Adnan Ahmad](https://github.com/viperadnan-git).
28 | Licensed under the terms of the [MIT](./LICENSE)
--------------------------------------------------------------------------------
/deta.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Pasting",
3 | "description": "Pasting is a minimalist publishing tool that allows you to create richly formatted posts and push them to the Web in just a click. In simple words it's a website like Telegraph but it can be used as a pastebin too.",
4 | "env": [
5 | {
6 | "key": "WEBSITE_NAME",
7 | "description": "Your website name, defaults to \"pasting\"",
8 | "value": "pasting",
9 | "required": false
10 | },
11 | {
12 | "key": "BINARY_CONTENT_TYPES",
13 | "description": "This should be (*) to serve types of static files.",
14 | "value": "*",
15 | "required": true
16 | },
17 | {
18 | "key": "DETA_BASE_NAME",
19 | "description": "Deta Base name to use be used.",
20 | "value": "pasting",
21 | "required": false
22 | },
23 | {
24 | "key": "KEY_LENGTH",
25 | "description": "Length of the random generated key, default to 8",
26 | "value": "8",
27 | "required": false
28 | }
29 | ]
30 | }
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | require('dotenv').config()
2 |
3 | const path = require('path');
4 | const { Deta } = require('deta');
5 | const express = require('express');
6 | const { marked } = require('marked');
7 | const schemas = require('./src/schemas');
8 | const { JoiValidate } = require('./src/middleware');
9 | const { pages, generateKey, generateDomainName } = require('./src/utils');
10 |
11 |
12 | const app = express();
13 | const deta = Deta(process.env.DETA_PROJECT_KEY);
14 | const db = deta.Base(process.env.DETA_BASE_NAME || 'pasting');
15 |
16 | const port = process.argv[3] || process.env.PORT || 8000;
17 | const hostname = process.argv[2] || process.env.HOST || '127.0.0.1';
18 | const domain = generateDomainName(hostname, port);
19 | const websiteName = process.env.WEBSITE_NAME || 'pasting';
20 |
21 |
22 | app.use(async (req, res, next) => {
23 | console.log(`${req.method} ${req.path}`);
24 | next();
25 | });
26 |
27 |
28 | app.use(express.json({ limit: '2mb' }));
29 | app.use('/static', express.static('./src/static'));
30 | app.set('view engine', 'ejs');
31 | app.set('views', path.join(__dirname, './src/views'));
32 |
33 |
34 | app.get("/", async (req, res) => {
35 | res.render('main', { website_name: websiteName })
36 | });
37 |
38 |
39 | app.post("/api", JoiValidate(schemas.Paste), async (req, res) => {
40 | console.log(req.body);
41 | try {
42 | if (!req.body.key) {
43 | req.body.key = await generateKey()
44 | }
45 | data = await db.insert(req.body)
46 | res.json({
47 | 'key': data.key,
48 | 'url': `http://${domain}/${data.key}`
49 | })
50 | } catch (error) {
51 | res.status(400).json({
52 | 'error': error.message
53 | });
54 | }
55 | });
56 |
57 |
58 | app.get("/raw/:key", async (req, res) => {
59 | data = await db.get(req.params.key);
60 | if (data && data.raw) {
61 | res.setHeader('Content-Type', 'text/plain');
62 | res.end(data.content);
63 | } else {
64 | res.setHeader('Content-Type', 'text/html');
65 | res.end(await getPage(page_404));
66 | }
67 | });
68 |
69 |
70 | app.get("/:key", async (req, res) => {
71 | data = await db.get(req.params.key);
72 | if (data) {
73 | if (!data.code) {
74 | data.content = marked.parse(data.content)
75 | }
76 | res.render('paste', { data: data, website_name: websiteName });
77 | } else {
78 | res.render('paste', { data: pages.Page404, website_name: websiteName })
79 | }
80 | });
81 |
82 |
83 | if (process.env.DETA_RUNTIME) {
84 | module.exports = app;
85 | } else {
86 | app.listen(port, hostname, async () => {
87 | console.log(`Listening at ${hostname}:${port}`);
88 | });
89 | }
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "pasting",
3 | "version": "0.4.1",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "pasting",
9 | "version": "0.4.1",
10 | "license": "MIT",
11 | "dependencies": {
12 | "deta": "^1.0.1",
13 | "dotenv": "^10.0.0",
14 | "ejs": "^3.1.7",
15 | "express": "^4.17.1",
16 | "joi": "^17.5.0",
17 | "marked": "^4.0.8"
18 | },
19 | "engines": {
20 | "node": "16.13.0",
21 | "npm": "8.1.4"
22 | }
23 | },
24 | "node_modules/@hapi/hoek": {
25 | "version": "9.2.1",
26 | "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz",
27 | "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw=="
28 | },
29 | "node_modules/@hapi/topo": {
30 | "version": "5.1.0",
31 | "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
32 | "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
33 | "dependencies": {
34 | "@hapi/hoek": "^9.0.0"
35 | }
36 | },
37 | "node_modules/@sideway/address": {
38 | "version": "4.1.3",
39 | "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz",
40 | "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==",
41 | "dependencies": {
42 | "@hapi/hoek": "^9.0.0"
43 | }
44 | },
45 | "node_modules/@sideway/formula": {
46 | "version": "3.0.1",
47 | "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz",
48 | "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg=="
49 | },
50 | "node_modules/@sideway/pinpoint": {
51 | "version": "2.0.0",
52 | "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
53 | "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="
54 | },
55 | "node_modules/accepts": {
56 | "version": "1.3.7",
57 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
58 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
59 | "dependencies": {
60 | "mime-types": "~2.1.24",
61 | "negotiator": "0.6.2"
62 | },
63 | "engines": {
64 | "node": ">= 0.6"
65 | }
66 | },
67 | "node_modules/ansi-styles": {
68 | "version": "4.3.0",
69 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
70 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
71 | "dependencies": {
72 | "color-convert": "^2.0.1"
73 | },
74 | "engines": {
75 | "node": ">=8"
76 | },
77 | "funding": {
78 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
79 | }
80 | },
81 | "node_modules/array-flatten": {
82 | "version": "1.1.1",
83 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
84 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
85 | },
86 | "node_modules/async": {
87 | "version": "3.2.5",
88 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
89 | "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg=="
90 | },
91 | "node_modules/balanced-match": {
92 | "version": "1.0.2",
93 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
94 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
95 | },
96 | "node_modules/body-parser": {
97 | "version": "1.19.0",
98 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
99 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
100 | "dependencies": {
101 | "bytes": "3.1.0",
102 | "content-type": "~1.0.4",
103 | "debug": "2.6.9",
104 | "depd": "~1.1.2",
105 | "http-errors": "1.7.2",
106 | "iconv-lite": "0.4.24",
107 | "on-finished": "~2.3.0",
108 | "qs": "6.7.0",
109 | "raw-body": "2.4.0",
110 | "type-is": "~1.6.17"
111 | },
112 | "engines": {
113 | "node": ">= 0.8"
114 | }
115 | },
116 | "node_modules/body-parser/node_modules/qs": {
117 | "version": "6.7.0",
118 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
119 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
120 | "engines": {
121 | "node": ">=0.6"
122 | }
123 | },
124 | "node_modules/brace-expansion": {
125 | "version": "1.1.11",
126 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
127 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
128 | "dependencies": {
129 | "balanced-match": "^1.0.0",
130 | "concat-map": "0.0.1"
131 | }
132 | },
133 | "node_modules/bytes": {
134 | "version": "3.1.0",
135 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
136 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
137 | "engines": {
138 | "node": ">= 0.8"
139 | }
140 | },
141 | "node_modules/chalk": {
142 | "version": "4.1.2",
143 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
144 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
145 | "dependencies": {
146 | "ansi-styles": "^4.1.0",
147 | "supports-color": "^7.1.0"
148 | },
149 | "engines": {
150 | "node": ">=10"
151 | },
152 | "funding": {
153 | "url": "https://github.com/chalk/chalk?sponsor=1"
154 | }
155 | },
156 | "node_modules/color-convert": {
157 | "version": "2.0.1",
158 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
159 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
160 | "dependencies": {
161 | "color-name": "~1.1.4"
162 | },
163 | "engines": {
164 | "node": ">=7.0.0"
165 | }
166 | },
167 | "node_modules/color-name": {
168 | "version": "1.1.4",
169 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
170 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
171 | },
172 | "node_modules/concat-map": {
173 | "version": "0.0.1",
174 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
175 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
176 | },
177 | "node_modules/content-disposition": {
178 | "version": "0.5.3",
179 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
180 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
181 | "dependencies": {
182 | "safe-buffer": "5.1.2"
183 | },
184 | "engines": {
185 | "node": ">= 0.6"
186 | }
187 | },
188 | "node_modules/content-type": {
189 | "version": "1.0.4",
190 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
191 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
192 | "engines": {
193 | "node": ">= 0.6"
194 | }
195 | },
196 | "node_modules/cookie": {
197 | "version": "0.4.0",
198 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
199 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
200 | "engines": {
201 | "node": ">= 0.6"
202 | }
203 | },
204 | "node_modules/cookie-signature": {
205 | "version": "1.0.6",
206 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
207 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
208 | },
209 | "node_modules/debug": {
210 | "version": "2.6.9",
211 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
212 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
213 | "dependencies": {
214 | "ms": "2.0.0"
215 | }
216 | },
217 | "node_modules/depd": {
218 | "version": "1.1.2",
219 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
220 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
221 | "engines": {
222 | "node": ">= 0.6"
223 | }
224 | },
225 | "node_modules/destroy": {
226 | "version": "1.0.4",
227 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
228 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
229 | },
230 | "node_modules/deta": {
231 | "version": "1.0.1",
232 | "resolved": "https://registry.npmjs.org/deta/-/deta-1.0.1.tgz",
233 | "integrity": "sha512-7PoMfBoZp1b8g8KRrvS0EIbym9D+mTiJeEqK3yMrkqHw1RPXKURDqIU9imG+vTogEquPmsxmWKjiEwWuxMm8lQ==",
234 | "dependencies": {
235 | "node-fetch": "^2.6.1"
236 | }
237 | },
238 | "node_modules/dotenv": {
239 | "version": "10.0.0",
240 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
241 | "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
242 | "engines": {
243 | "node": ">=10"
244 | }
245 | },
246 | "node_modules/ee-first": {
247 | "version": "1.1.1",
248 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
249 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
250 | },
251 | "node_modules/ejs": {
252 | "version": "3.1.7",
253 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.7.tgz",
254 | "integrity": "sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==",
255 | "dependencies": {
256 | "jake": "^10.8.5"
257 | },
258 | "bin": {
259 | "ejs": "bin/cli.js"
260 | },
261 | "engines": {
262 | "node": ">=0.10.0"
263 | }
264 | },
265 | "node_modules/encodeurl": {
266 | "version": "1.0.2",
267 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
268 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
269 | "engines": {
270 | "node": ">= 0.8"
271 | }
272 | },
273 | "node_modules/escape-html": {
274 | "version": "1.0.3",
275 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
276 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
277 | },
278 | "node_modules/etag": {
279 | "version": "1.8.1",
280 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
281 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
282 | "engines": {
283 | "node": ">= 0.6"
284 | }
285 | },
286 | "node_modules/express": {
287 | "version": "4.17.1",
288 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
289 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
290 | "dependencies": {
291 | "accepts": "~1.3.7",
292 | "array-flatten": "1.1.1",
293 | "body-parser": "1.19.0",
294 | "content-disposition": "0.5.3",
295 | "content-type": "~1.0.4",
296 | "cookie": "0.4.0",
297 | "cookie-signature": "1.0.6",
298 | "debug": "2.6.9",
299 | "depd": "~1.1.2",
300 | "encodeurl": "~1.0.2",
301 | "escape-html": "~1.0.3",
302 | "etag": "~1.8.1",
303 | "finalhandler": "~1.1.2",
304 | "fresh": "0.5.2",
305 | "merge-descriptors": "1.0.1",
306 | "methods": "~1.1.2",
307 | "on-finished": "~2.3.0",
308 | "parseurl": "~1.3.3",
309 | "path-to-regexp": "0.1.7",
310 | "proxy-addr": "~2.0.5",
311 | "qs": "6.7.0",
312 | "range-parser": "~1.2.1",
313 | "safe-buffer": "5.1.2",
314 | "send": "0.17.1",
315 | "serve-static": "1.14.1",
316 | "setprototypeof": "1.1.1",
317 | "statuses": "~1.5.0",
318 | "type-is": "~1.6.18",
319 | "utils-merge": "1.0.1",
320 | "vary": "~1.1.2"
321 | },
322 | "engines": {
323 | "node": ">= 0.10.0"
324 | }
325 | },
326 | "node_modules/express/node_modules/qs": {
327 | "version": "6.7.0",
328 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
329 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
330 | "engines": {
331 | "node": ">=0.6"
332 | }
333 | },
334 | "node_modules/filelist": {
335 | "version": "1.0.4",
336 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
337 | "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
338 | "dependencies": {
339 | "minimatch": "^5.0.1"
340 | }
341 | },
342 | "node_modules/filelist/node_modules/brace-expansion": {
343 | "version": "2.0.1",
344 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
345 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
346 | "dependencies": {
347 | "balanced-match": "^1.0.0"
348 | }
349 | },
350 | "node_modules/filelist/node_modules/minimatch": {
351 | "version": "5.1.6",
352 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
353 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
354 | "dependencies": {
355 | "brace-expansion": "^2.0.1"
356 | },
357 | "engines": {
358 | "node": ">=10"
359 | }
360 | },
361 | "node_modules/finalhandler": {
362 | "version": "1.1.2",
363 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
364 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
365 | "dependencies": {
366 | "debug": "2.6.9",
367 | "encodeurl": "~1.0.2",
368 | "escape-html": "~1.0.3",
369 | "on-finished": "~2.3.0",
370 | "parseurl": "~1.3.3",
371 | "statuses": "~1.5.0",
372 | "unpipe": "~1.0.0"
373 | },
374 | "engines": {
375 | "node": ">= 0.8"
376 | }
377 | },
378 | "node_modules/forwarded": {
379 | "version": "0.1.2",
380 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
381 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
382 | "engines": {
383 | "node": ">= 0.6"
384 | }
385 | },
386 | "node_modules/fresh": {
387 | "version": "0.5.2",
388 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
389 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
390 | "engines": {
391 | "node": ">= 0.6"
392 | }
393 | },
394 | "node_modules/has-flag": {
395 | "version": "4.0.0",
396 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
397 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
398 | "engines": {
399 | "node": ">=8"
400 | }
401 | },
402 | "node_modules/http-errors": {
403 | "version": "1.7.2",
404 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
405 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
406 | "dependencies": {
407 | "depd": "~1.1.2",
408 | "inherits": "2.0.3",
409 | "setprototypeof": "1.1.1",
410 | "statuses": ">= 1.5.0 < 2",
411 | "toidentifier": "1.0.0"
412 | },
413 | "engines": {
414 | "node": ">= 0.6"
415 | }
416 | },
417 | "node_modules/iconv-lite": {
418 | "version": "0.4.24",
419 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
420 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
421 | "dependencies": {
422 | "safer-buffer": ">= 2.1.2 < 3"
423 | },
424 | "engines": {
425 | "node": ">=0.10.0"
426 | }
427 | },
428 | "node_modules/inherits": {
429 | "version": "2.0.3",
430 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
431 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
432 | },
433 | "node_modules/ipaddr.js": {
434 | "version": "1.9.1",
435 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
436 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
437 | "engines": {
438 | "node": ">= 0.10"
439 | }
440 | },
441 | "node_modules/jake": {
442 | "version": "10.8.7",
443 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
444 | "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
445 | "dependencies": {
446 | "async": "^3.2.3",
447 | "chalk": "^4.0.2",
448 | "filelist": "^1.0.4",
449 | "minimatch": "^3.1.2"
450 | },
451 | "bin": {
452 | "jake": "bin/cli.js"
453 | },
454 | "engines": {
455 | "node": ">=10"
456 | }
457 | },
458 | "node_modules/joi": {
459 | "version": "17.5.0",
460 | "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz",
461 | "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==",
462 | "dependencies": {
463 | "@hapi/hoek": "^9.0.0",
464 | "@hapi/topo": "^5.0.0",
465 | "@sideway/address": "^4.1.3",
466 | "@sideway/formula": "^3.0.0",
467 | "@sideway/pinpoint": "^2.0.0"
468 | }
469 | },
470 | "node_modules/marked": {
471 | "version": "4.0.10",
472 | "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz",
473 | "integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==",
474 | "bin": {
475 | "marked": "bin/marked.js"
476 | },
477 | "engines": {
478 | "node": ">= 12"
479 | }
480 | },
481 | "node_modules/media-typer": {
482 | "version": "0.3.0",
483 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
484 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
485 | "engines": {
486 | "node": ">= 0.6"
487 | }
488 | },
489 | "node_modules/merge-descriptors": {
490 | "version": "1.0.1",
491 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
492 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
493 | },
494 | "node_modules/methods": {
495 | "version": "1.1.2",
496 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
497 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
498 | "engines": {
499 | "node": ">= 0.6"
500 | }
501 | },
502 | "node_modules/mime": {
503 | "version": "1.6.0",
504 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
505 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
506 | "bin": {
507 | "mime": "cli.js"
508 | },
509 | "engines": {
510 | "node": ">=4"
511 | }
512 | },
513 | "node_modules/mime-db": {
514 | "version": "1.47.0",
515 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
516 | "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==",
517 | "engines": {
518 | "node": ">= 0.6"
519 | }
520 | },
521 | "node_modules/mime-types": {
522 | "version": "2.1.30",
523 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
524 | "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
525 | "dependencies": {
526 | "mime-db": "1.47.0"
527 | },
528 | "engines": {
529 | "node": ">= 0.6"
530 | }
531 | },
532 | "node_modules/minimatch": {
533 | "version": "3.1.2",
534 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
535 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
536 | "dependencies": {
537 | "brace-expansion": "^1.1.7"
538 | },
539 | "engines": {
540 | "node": "*"
541 | }
542 | },
543 | "node_modules/ms": {
544 | "version": "2.0.0",
545 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
546 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
547 | },
548 | "node_modules/negotiator": {
549 | "version": "0.6.2",
550 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
551 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
552 | "engines": {
553 | "node": ">= 0.6"
554 | }
555 | },
556 | "node_modules/node-fetch": {
557 | "version": "2.6.11",
558 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
559 | "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
560 | "dependencies": {
561 | "whatwg-url": "^5.0.0"
562 | },
563 | "engines": {
564 | "node": "4.x || >=6.0.0"
565 | },
566 | "peerDependencies": {
567 | "encoding": "^0.1.0"
568 | },
569 | "peerDependenciesMeta": {
570 | "encoding": {
571 | "optional": true
572 | }
573 | }
574 | },
575 | "node_modules/on-finished": {
576 | "version": "2.3.0",
577 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
578 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
579 | "dependencies": {
580 | "ee-first": "1.1.1"
581 | },
582 | "engines": {
583 | "node": ">= 0.8"
584 | }
585 | },
586 | "node_modules/parseurl": {
587 | "version": "1.3.3",
588 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
589 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
590 | "engines": {
591 | "node": ">= 0.8"
592 | }
593 | },
594 | "node_modules/path-to-regexp": {
595 | "version": "0.1.7",
596 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
597 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
598 | },
599 | "node_modules/proxy-addr": {
600 | "version": "2.0.6",
601 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
602 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
603 | "dependencies": {
604 | "forwarded": "~0.1.2",
605 | "ipaddr.js": "1.9.1"
606 | },
607 | "engines": {
608 | "node": ">= 0.10"
609 | }
610 | },
611 | "node_modules/range-parser": {
612 | "version": "1.2.1",
613 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
614 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
615 | "engines": {
616 | "node": ">= 0.6"
617 | }
618 | },
619 | "node_modules/raw-body": {
620 | "version": "2.4.0",
621 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
622 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
623 | "dependencies": {
624 | "bytes": "3.1.0",
625 | "http-errors": "1.7.2",
626 | "iconv-lite": "0.4.24",
627 | "unpipe": "1.0.0"
628 | },
629 | "engines": {
630 | "node": ">= 0.8"
631 | }
632 | },
633 | "node_modules/safe-buffer": {
634 | "version": "5.1.2",
635 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
636 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
637 | },
638 | "node_modules/safer-buffer": {
639 | "version": "2.1.2",
640 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
641 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
642 | },
643 | "node_modules/send": {
644 | "version": "0.17.1",
645 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
646 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
647 | "dependencies": {
648 | "debug": "2.6.9",
649 | "depd": "~1.1.2",
650 | "destroy": "~1.0.4",
651 | "encodeurl": "~1.0.2",
652 | "escape-html": "~1.0.3",
653 | "etag": "~1.8.1",
654 | "fresh": "0.5.2",
655 | "http-errors": "~1.7.2",
656 | "mime": "1.6.0",
657 | "ms": "2.1.1",
658 | "on-finished": "~2.3.0",
659 | "range-parser": "~1.2.1",
660 | "statuses": "~1.5.0"
661 | },
662 | "engines": {
663 | "node": ">= 0.8.0"
664 | }
665 | },
666 | "node_modules/send/node_modules/ms": {
667 | "version": "2.1.1",
668 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
669 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
670 | },
671 | "node_modules/serve-static": {
672 | "version": "1.14.1",
673 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
674 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
675 | "dependencies": {
676 | "encodeurl": "~1.0.2",
677 | "escape-html": "~1.0.3",
678 | "parseurl": "~1.3.3",
679 | "send": "0.17.1"
680 | },
681 | "engines": {
682 | "node": ">= 0.8.0"
683 | }
684 | },
685 | "node_modules/setprototypeof": {
686 | "version": "1.1.1",
687 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
688 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
689 | },
690 | "node_modules/statuses": {
691 | "version": "1.5.0",
692 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
693 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
694 | "engines": {
695 | "node": ">= 0.6"
696 | }
697 | },
698 | "node_modules/supports-color": {
699 | "version": "7.2.0",
700 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
701 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
702 | "dependencies": {
703 | "has-flag": "^4.0.0"
704 | },
705 | "engines": {
706 | "node": ">=8"
707 | }
708 | },
709 | "node_modules/toidentifier": {
710 | "version": "1.0.0",
711 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
712 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
713 | "engines": {
714 | "node": ">=0.6"
715 | }
716 | },
717 | "node_modules/tr46": {
718 | "version": "0.0.3",
719 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
720 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
721 | },
722 | "node_modules/type-is": {
723 | "version": "1.6.18",
724 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
725 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
726 | "dependencies": {
727 | "media-typer": "0.3.0",
728 | "mime-types": "~2.1.24"
729 | },
730 | "engines": {
731 | "node": ">= 0.6"
732 | }
733 | },
734 | "node_modules/unpipe": {
735 | "version": "1.0.0",
736 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
737 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
738 | "engines": {
739 | "node": ">= 0.8"
740 | }
741 | },
742 | "node_modules/utils-merge": {
743 | "version": "1.0.1",
744 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
745 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
746 | "engines": {
747 | "node": ">= 0.4.0"
748 | }
749 | },
750 | "node_modules/vary": {
751 | "version": "1.1.2",
752 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
753 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
754 | "engines": {
755 | "node": ">= 0.8"
756 | }
757 | },
758 | "node_modules/webidl-conversions": {
759 | "version": "3.0.1",
760 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
761 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
762 | },
763 | "node_modules/whatwg-url": {
764 | "version": "5.0.0",
765 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
766 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
767 | "dependencies": {
768 | "tr46": "~0.0.3",
769 | "webidl-conversions": "^3.0.0"
770 | }
771 | }
772 | },
773 | "dependencies": {
774 | "@hapi/hoek": {
775 | "version": "9.2.1",
776 | "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz",
777 | "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw=="
778 | },
779 | "@hapi/topo": {
780 | "version": "5.1.0",
781 | "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
782 | "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
783 | "requires": {
784 | "@hapi/hoek": "^9.0.0"
785 | }
786 | },
787 | "@sideway/address": {
788 | "version": "4.1.3",
789 | "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz",
790 | "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==",
791 | "requires": {
792 | "@hapi/hoek": "^9.0.0"
793 | }
794 | },
795 | "@sideway/formula": {
796 | "version": "3.0.1",
797 | "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz",
798 | "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg=="
799 | },
800 | "@sideway/pinpoint": {
801 | "version": "2.0.0",
802 | "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
803 | "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="
804 | },
805 | "accepts": {
806 | "version": "1.3.7",
807 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
808 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
809 | "requires": {
810 | "mime-types": "~2.1.24",
811 | "negotiator": "0.6.2"
812 | }
813 | },
814 | "ansi-styles": {
815 | "version": "4.3.0",
816 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
817 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
818 | "requires": {
819 | "color-convert": "^2.0.1"
820 | }
821 | },
822 | "array-flatten": {
823 | "version": "1.1.1",
824 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
825 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
826 | },
827 | "async": {
828 | "version": "3.2.5",
829 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
830 | "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg=="
831 | },
832 | "balanced-match": {
833 | "version": "1.0.2",
834 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
835 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
836 | },
837 | "body-parser": {
838 | "version": "1.19.0",
839 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
840 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
841 | "requires": {
842 | "bytes": "3.1.0",
843 | "content-type": "~1.0.4",
844 | "debug": "2.6.9",
845 | "depd": "~1.1.2",
846 | "http-errors": "1.7.2",
847 | "iconv-lite": "0.4.24",
848 | "on-finished": "~2.3.0",
849 | "qs": "6.7.0",
850 | "raw-body": "2.4.0",
851 | "type-is": "~1.6.17"
852 | },
853 | "dependencies": {
854 | "qs": {
855 | "version": "6.7.0",
856 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
857 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
858 | }
859 | }
860 | },
861 | "brace-expansion": {
862 | "version": "1.1.11",
863 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
864 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
865 | "requires": {
866 | "balanced-match": "^1.0.0",
867 | "concat-map": "0.0.1"
868 | }
869 | },
870 | "bytes": {
871 | "version": "3.1.0",
872 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
873 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
874 | },
875 | "chalk": {
876 | "version": "4.1.2",
877 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
878 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
879 | "requires": {
880 | "ansi-styles": "^4.1.0",
881 | "supports-color": "^7.1.0"
882 | }
883 | },
884 | "color-convert": {
885 | "version": "2.0.1",
886 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
887 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
888 | "requires": {
889 | "color-name": "~1.1.4"
890 | }
891 | },
892 | "color-name": {
893 | "version": "1.1.4",
894 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
895 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
896 | },
897 | "concat-map": {
898 | "version": "0.0.1",
899 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
900 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
901 | },
902 | "content-disposition": {
903 | "version": "0.5.3",
904 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
905 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
906 | "requires": {
907 | "safe-buffer": "5.1.2"
908 | }
909 | },
910 | "content-type": {
911 | "version": "1.0.4",
912 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
913 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
914 | },
915 | "cookie": {
916 | "version": "0.4.0",
917 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
918 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
919 | },
920 | "cookie-signature": {
921 | "version": "1.0.6",
922 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
923 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
924 | },
925 | "debug": {
926 | "version": "2.6.9",
927 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
928 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
929 | "requires": {
930 | "ms": "2.0.0"
931 | }
932 | },
933 | "depd": {
934 | "version": "1.1.2",
935 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
936 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
937 | },
938 | "destroy": {
939 | "version": "1.0.4",
940 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
941 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
942 | },
943 | "deta": {
944 | "version": "1.0.1",
945 | "resolved": "https://registry.npmjs.org/deta/-/deta-1.0.1.tgz",
946 | "integrity": "sha512-7PoMfBoZp1b8g8KRrvS0EIbym9D+mTiJeEqK3yMrkqHw1RPXKURDqIU9imG+vTogEquPmsxmWKjiEwWuxMm8lQ==",
947 | "requires": {
948 | "node-fetch": "^2.6.1"
949 | }
950 | },
951 | "dotenv": {
952 | "version": "10.0.0",
953 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
954 | "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q=="
955 | },
956 | "ee-first": {
957 | "version": "1.1.1",
958 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
959 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
960 | },
961 | "ejs": {
962 | "version": "3.1.7",
963 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.7.tgz",
964 | "integrity": "sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==",
965 | "requires": {
966 | "jake": "^10.8.5"
967 | }
968 | },
969 | "encodeurl": {
970 | "version": "1.0.2",
971 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
972 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
973 | },
974 | "escape-html": {
975 | "version": "1.0.3",
976 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
977 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
978 | },
979 | "etag": {
980 | "version": "1.8.1",
981 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
982 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
983 | },
984 | "express": {
985 | "version": "4.17.1",
986 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
987 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
988 | "requires": {
989 | "accepts": "~1.3.7",
990 | "array-flatten": "1.1.1",
991 | "body-parser": "1.19.0",
992 | "content-disposition": "0.5.3",
993 | "content-type": "~1.0.4",
994 | "cookie": "0.4.0",
995 | "cookie-signature": "1.0.6",
996 | "debug": "2.6.9",
997 | "depd": "~1.1.2",
998 | "encodeurl": "~1.0.2",
999 | "escape-html": "~1.0.3",
1000 | "etag": "~1.8.1",
1001 | "finalhandler": "~1.1.2",
1002 | "fresh": "0.5.2",
1003 | "merge-descriptors": "1.0.1",
1004 | "methods": "~1.1.2",
1005 | "on-finished": "~2.3.0",
1006 | "parseurl": "~1.3.3",
1007 | "path-to-regexp": "0.1.7",
1008 | "proxy-addr": "~2.0.5",
1009 | "qs": "6.7.0",
1010 | "range-parser": "~1.2.1",
1011 | "safe-buffer": "5.1.2",
1012 | "send": "0.17.1",
1013 | "serve-static": "1.14.1",
1014 | "setprototypeof": "1.1.1",
1015 | "statuses": "~1.5.0",
1016 | "type-is": "~1.6.18",
1017 | "utils-merge": "1.0.1",
1018 | "vary": "~1.1.2"
1019 | },
1020 | "dependencies": {
1021 | "qs": {
1022 | "version": "6.7.0",
1023 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
1024 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
1025 | }
1026 | }
1027 | },
1028 | "filelist": {
1029 | "version": "1.0.4",
1030 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
1031 | "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
1032 | "requires": {
1033 | "minimatch": "^5.0.1"
1034 | },
1035 | "dependencies": {
1036 | "brace-expansion": {
1037 | "version": "2.0.1",
1038 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
1039 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
1040 | "requires": {
1041 | "balanced-match": "^1.0.0"
1042 | }
1043 | },
1044 | "minimatch": {
1045 | "version": "5.1.6",
1046 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
1047 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
1048 | "requires": {
1049 | "brace-expansion": "^2.0.1"
1050 | }
1051 | }
1052 | }
1053 | },
1054 | "finalhandler": {
1055 | "version": "1.1.2",
1056 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
1057 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
1058 | "requires": {
1059 | "debug": "2.6.9",
1060 | "encodeurl": "~1.0.2",
1061 | "escape-html": "~1.0.3",
1062 | "on-finished": "~2.3.0",
1063 | "parseurl": "~1.3.3",
1064 | "statuses": "~1.5.0",
1065 | "unpipe": "~1.0.0"
1066 | }
1067 | },
1068 | "forwarded": {
1069 | "version": "0.1.2",
1070 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
1071 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
1072 | },
1073 | "fresh": {
1074 | "version": "0.5.2",
1075 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1076 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
1077 | },
1078 | "has-flag": {
1079 | "version": "4.0.0",
1080 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1081 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
1082 | },
1083 | "http-errors": {
1084 | "version": "1.7.2",
1085 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
1086 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
1087 | "requires": {
1088 | "depd": "~1.1.2",
1089 | "inherits": "2.0.3",
1090 | "setprototypeof": "1.1.1",
1091 | "statuses": ">= 1.5.0 < 2",
1092 | "toidentifier": "1.0.0"
1093 | }
1094 | },
1095 | "iconv-lite": {
1096 | "version": "0.4.24",
1097 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1098 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1099 | "requires": {
1100 | "safer-buffer": ">= 2.1.2 < 3"
1101 | }
1102 | },
1103 | "inherits": {
1104 | "version": "2.0.3",
1105 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1106 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
1107 | },
1108 | "ipaddr.js": {
1109 | "version": "1.9.1",
1110 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1111 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1112 | },
1113 | "jake": {
1114 | "version": "10.8.7",
1115 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
1116 | "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
1117 | "requires": {
1118 | "async": "^3.2.3",
1119 | "chalk": "^4.0.2",
1120 | "filelist": "^1.0.4",
1121 | "minimatch": "^3.1.2"
1122 | }
1123 | },
1124 | "joi": {
1125 | "version": "17.5.0",
1126 | "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz",
1127 | "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==",
1128 | "requires": {
1129 | "@hapi/hoek": "^9.0.0",
1130 | "@hapi/topo": "^5.0.0",
1131 | "@sideway/address": "^4.1.3",
1132 | "@sideway/formula": "^3.0.0",
1133 | "@sideway/pinpoint": "^2.0.0"
1134 | }
1135 | },
1136 | "marked": {
1137 | "version": "4.0.10",
1138 | "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz",
1139 | "integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw=="
1140 | },
1141 | "media-typer": {
1142 | "version": "0.3.0",
1143 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1144 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
1145 | },
1146 | "merge-descriptors": {
1147 | "version": "1.0.1",
1148 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1149 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
1150 | },
1151 | "methods": {
1152 | "version": "1.1.2",
1153 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1154 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
1155 | },
1156 | "mime": {
1157 | "version": "1.6.0",
1158 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1159 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1160 | },
1161 | "mime-db": {
1162 | "version": "1.47.0",
1163 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
1164 | "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw=="
1165 | },
1166 | "mime-types": {
1167 | "version": "2.1.30",
1168 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
1169 | "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
1170 | "requires": {
1171 | "mime-db": "1.47.0"
1172 | }
1173 | },
1174 | "minimatch": {
1175 | "version": "3.1.2",
1176 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1177 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1178 | "requires": {
1179 | "brace-expansion": "^1.1.7"
1180 | }
1181 | },
1182 | "ms": {
1183 | "version": "2.0.0",
1184 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1185 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1186 | },
1187 | "negotiator": {
1188 | "version": "0.6.2",
1189 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
1190 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
1191 | },
1192 | "node-fetch": {
1193 | "version": "2.6.11",
1194 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
1195 | "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
1196 | "requires": {
1197 | "whatwg-url": "^5.0.0"
1198 | }
1199 | },
1200 | "on-finished": {
1201 | "version": "2.3.0",
1202 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1203 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
1204 | "requires": {
1205 | "ee-first": "1.1.1"
1206 | }
1207 | },
1208 | "parseurl": {
1209 | "version": "1.3.3",
1210 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1211 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1212 | },
1213 | "path-to-regexp": {
1214 | "version": "0.1.7",
1215 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1216 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
1217 | },
1218 | "proxy-addr": {
1219 | "version": "2.0.6",
1220 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
1221 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
1222 | "requires": {
1223 | "forwarded": "~0.1.2",
1224 | "ipaddr.js": "1.9.1"
1225 | }
1226 | },
1227 | "range-parser": {
1228 | "version": "1.2.1",
1229 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1230 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1231 | },
1232 | "raw-body": {
1233 | "version": "2.4.0",
1234 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
1235 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
1236 | "requires": {
1237 | "bytes": "3.1.0",
1238 | "http-errors": "1.7.2",
1239 | "iconv-lite": "0.4.24",
1240 | "unpipe": "1.0.0"
1241 | }
1242 | },
1243 | "safe-buffer": {
1244 | "version": "5.1.2",
1245 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1246 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1247 | },
1248 | "safer-buffer": {
1249 | "version": "2.1.2",
1250 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1251 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1252 | },
1253 | "send": {
1254 | "version": "0.17.1",
1255 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
1256 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
1257 | "requires": {
1258 | "debug": "2.6.9",
1259 | "depd": "~1.1.2",
1260 | "destroy": "~1.0.4",
1261 | "encodeurl": "~1.0.2",
1262 | "escape-html": "~1.0.3",
1263 | "etag": "~1.8.1",
1264 | "fresh": "0.5.2",
1265 | "http-errors": "~1.7.2",
1266 | "mime": "1.6.0",
1267 | "ms": "2.1.1",
1268 | "on-finished": "~2.3.0",
1269 | "range-parser": "~1.2.1",
1270 | "statuses": "~1.5.0"
1271 | },
1272 | "dependencies": {
1273 | "ms": {
1274 | "version": "2.1.1",
1275 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1276 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
1277 | }
1278 | }
1279 | },
1280 | "serve-static": {
1281 | "version": "1.14.1",
1282 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
1283 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
1284 | "requires": {
1285 | "encodeurl": "~1.0.2",
1286 | "escape-html": "~1.0.3",
1287 | "parseurl": "~1.3.3",
1288 | "send": "0.17.1"
1289 | }
1290 | },
1291 | "setprototypeof": {
1292 | "version": "1.1.1",
1293 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
1294 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
1295 | },
1296 | "statuses": {
1297 | "version": "1.5.0",
1298 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
1299 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
1300 | },
1301 | "supports-color": {
1302 | "version": "7.2.0",
1303 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1304 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1305 | "requires": {
1306 | "has-flag": "^4.0.0"
1307 | }
1308 | },
1309 | "toidentifier": {
1310 | "version": "1.0.0",
1311 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
1312 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
1313 | },
1314 | "tr46": {
1315 | "version": "0.0.3",
1316 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1317 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
1318 | },
1319 | "type-is": {
1320 | "version": "1.6.18",
1321 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1322 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1323 | "requires": {
1324 | "media-typer": "0.3.0",
1325 | "mime-types": "~2.1.24"
1326 | }
1327 | },
1328 | "unpipe": {
1329 | "version": "1.0.0",
1330 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1331 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1332 | },
1333 | "utils-merge": {
1334 | "version": "1.0.1",
1335 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1336 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1337 | },
1338 | "vary": {
1339 | "version": "1.1.2",
1340 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1341 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1342 | },
1343 | "webidl-conversions": {
1344 | "version": "3.0.1",
1345 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1346 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
1347 | },
1348 | "whatwg-url": {
1349 | "version": "5.0.0",
1350 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1351 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
1352 | "requires": {
1353 | "tr46": "~0.0.3",
1354 | "webidl-conversions": "^3.0.0"
1355 | }
1356 | }
1357 | }
1358 | }
1359 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "pasting",
3 | "version": "0.4.1",
4 | "description": "A website to render html and markdown codes.",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "node index.js",
8 | "heroku": "node index.js 0.0.0.0",
9 | "test": "node index.js 127.0.0.1 8000"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/viperadnan-git/pasting.git"
14 | },
15 | "keywords": [
16 | "render",
17 | "render-html",
18 | "render-md",
19 | "html",
20 | "markdown",
21 | "pastebin",
22 | "highlighter"
23 | ],
24 | "author": "viperadnan",
25 | "license": "MIT",
26 | "bugs": {
27 | "url": "https://github.com/viperadnan-git/pasting/issues"
28 | },
29 | "homepage": "https://github.com/viperadnan-git/pasting#readme",
30 | "engines": {
31 | "npm": "8.1.4",
32 | "node": "16.13.0"
33 | },
34 | "dependencies": {
35 | "deta": "^1.0.1",
36 | "dotenv": "^10.0.0",
37 | "ejs": "^3.1.7",
38 | "express": "^4.17.1",
39 | "joi": "^17.5.0",
40 | "marked": "^4.0.8"
41 | }
42 | }
--------------------------------------------------------------------------------
/src/middleware.js:
--------------------------------------------------------------------------------
1 | const Joi = require('joi');
2 |
3 |
4 | const JoiValidate = (schema) => {
5 | return (req, res, next) => {
6 | const { error } = schema.validate(req.body);
7 | const valid = error == null;
8 |
9 | if (valid) {
10 | next();
11 | } else {
12 | const { details } = error;
13 | const message = details.map(i => i.message).join(',');
14 |
15 | console.log("error", message);
16 | res.status(422).json({ error: message })
17 | }
18 | }
19 | }
20 |
21 |
22 | module.exports = {
23 | JoiValidate
24 | }
--------------------------------------------------------------------------------
/src/schemas.js:
--------------------------------------------------------------------------------
1 | const Joi = require('joi');
2 | const websiteName = process.env.WEBSITE_NAME || 'pasting';
3 |
4 |
5 | const schemas = {
6 | Paste: Joi.object().keys({
7 | content: Joi.string().required(),
8 | key: Joi.string().empty(['', false, null]).alphanum().max(16),
9 | heading: Joi.string().default(websiteName),
10 | code: Joi.bool().default(false),
11 | raw: Joi.bool().default(true),
12 | })
13 | };
14 |
15 |
16 | module.exports = schemas;
--------------------------------------------------------------------------------
/src/static/images/api-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/viperadnan-git/pasting/e25b2eeadd32e1f7034de44ee0b9dd4308adfa45/src/static/images/api-icon.png
--------------------------------------------------------------------------------
/src/static/images/contact-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/viperadnan-git/pasting/e25b2eeadd32e1f7034de44ee0b9dd4308adfa45/src/static/images/contact-icon.png
--------------------------------------------------------------------------------
/src/static/images/favicons/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/viperadnan-git/pasting/e25b2eeadd32e1f7034de44ee0b9dd4308adfa45/src/static/images/favicons/android-chrome-192x192.png
--------------------------------------------------------------------------------
/src/static/images/favicons/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/viperadnan-git/pasting/e25b2eeadd32e1f7034de44ee0b9dd4308adfa45/src/static/images/favicons/android-chrome-512x512.png
--------------------------------------------------------------------------------
/src/static/images/favicons/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/viperadnan-git/pasting/e25b2eeadd32e1f7034de44ee0b9dd4308adfa45/src/static/images/favicons/apple-touch-icon.png
--------------------------------------------------------------------------------
/src/static/images/favicons/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/viperadnan-git/pasting/e25b2eeadd32e1f7034de44ee0b9dd4308adfa45/src/static/images/favicons/favicon-16x16.png
--------------------------------------------------------------------------------
/src/static/images/favicons/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/viperadnan-git/pasting/e25b2eeadd32e1f7034de44ee0b9dd4308adfa45/src/static/images/favicons/favicon-32x32.png
--------------------------------------------------------------------------------
/src/static/images/favicons/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/viperadnan-git/pasting/e25b2eeadd32e1f7034de44ee0b9dd4308adfa45/src/static/images/favicons/favicon.ico
--------------------------------------------------------------------------------
/src/static/images/favicons/site.webmanifest:
--------------------------------------------------------------------------------
1 | {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
--------------------------------------------------------------------------------
/src/static/images/github-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/viperadnan-git/pasting/e25b2eeadd32e1f7034de44ee0b9dd4308adfa45/src/static/images/github-icon.png
--------------------------------------------------------------------------------
/src/static/images/privacy-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/viperadnan-git/pasting/e25b2eeadd32e1f7034de44ee0b9dd4308adfa45/src/static/images/privacy-icon.png
--------------------------------------------------------------------------------
/src/static/images/save.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/static/js/js.cookie.min.js:
--------------------------------------------------------------------------------
1 | /*! js-cookie v3.0.1 | MIT */
2 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,function(){var n=e.Cookies,o=e.Cookies=t();o.noConflict=function(){return e.Cookies=n,o}}())}(this,(function(){"use strict";function e(e){for(var t=1;t
`);
94 | })
95 | });
96 |
97 |
98 | inputTextarea.keyup(function () {
99 | if (!contentDiv.hasClass("d-none")) {
100 | if (codeRadio.is(":checked")) {
101 | contentDiv.html("
");
102 | $("#code").text($(this).val());
103 | } else {
104 | contentDiv.html(marked.parse($(this).val()));
105 | }
106 | }
107 | });
108 |
109 |
110 | liveOutputRadio.click(function () {
111 | if (liveOutputRadio.is(":checked")) {
112 | inputTextarea.css("height", (screen.height / 1.5) + "px");
113 | contentDiv.addClass("d-none");
114 | Cookies.set('live-output', 'true', { expires: 365 })
115 | } else {
116 | inputTextarea.css("height", (screen.height / 3) + "px");
117 | contentDiv.removeClass("d-none");
118 | Cookies.set('live-output', 'false', { expires: 365 })
119 | }
120 | });
121 |
122 |
123 | $('#upload-file').change((event) => {
124 | const input = event.target;
125 | if ('files' in input && input.files.length > 0) {
126 | readFileContent(input.files[0]).then(content => {
127 | inputTextarea.val(content);
128 | }).catch(error => alert(error));
129 | }
130 | });
131 |
132 |
133 | function readFileContent(file) {
134 | const reader = new FileReader();
135 | if (file.type.includes("image")) {
136 | return new Promise((resolve, reject) => {
137 | reader.onload = event => resolve("");
138 | reader.onerror = error => reject(error);
139 | reader.readAsDataURL(file);
140 | });
141 | } else {
142 | return new Promise((resolve, reject) => {
143 | reader.onload = event => resolve(event.target.result);
144 | reader.onerror = error => reject(error);
145 | reader.readAsText(file);
146 | });
147 | }
148 | }
--------------------------------------------------------------------------------
/src/static/js/paste.js:
--------------------------------------------------------------------------------
1 | const Toast = Swal.mixin({
2 | toast: true,
3 | position: 'top',
4 | showConfirmButton: false,
5 | timer: 3000,
6 | // timerProgressBar: true,
7 | showCloseButton: true,
8 | didOpen: (toast) => {
9 | toast.addEventListener('mouseenter', Swal.stopTimer)
10 | toast.addEventListener('mouseleave', Swal.resumeTimer)
11 | }
12 | })
13 |
14 | function copyToClipboard(id) {
15 | var range = document.createRange();
16 | range.selectNode(document.getElementById(id));
17 | window.getSelection().removeAllRanges();
18 | window.getSelection().addRange(range);
19 | document.execCommand('copy');
20 | window.getSelection().removeAllRanges();
21 | }
22 |
23 | const copyButton = $('#copy-content');
24 | copyButton.click(function (e) {
25 | e.preventDefault();
26 | copyToClipboard('content')
27 | Toast.fire({
28 | icon: "success",
29 | title: "Copied Successfully",
30 | text: "Text copied to clipboard successfully."
31 | })
32 | });
--------------------------------------------------------------------------------
/src/static/js/sweetalert2.min.js:
--------------------------------------------------------------------------------
1 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Sweetalert2=t()}(this,function(){"use strict";const u=Object.freeze({cancel:"cancel",backdrop:"backdrop",close:"close",esc:"esc",timer:"timer"}),t="SweetAlert2:",o=e=>e.charAt(0).toUpperCase()+e.slice(1),s=e=>Array.prototype.slice.call(e),a=e=>{console.warn("".concat(t," ").concat("object"==typeof e?e.join(" "):e))},r=e=>{console.error("".concat(t," ").concat(e))},n=[],i=(e,t)=>{t='"'.concat(e,'" is deprecated and will be removed in the next major release. Please use "').concat(t,'" instead.'),n.includes(t)||(n.push(t),a(t))},d=e=>"function"==typeof e?e():e,c=e=>e&&"function"==typeof e.toPromise,l=e=>c(e)?e.toPromise():Promise.resolve(e),p=e=>e&&Promise.resolve(e)===e,m=e=>"object"==typeof e&&e.jquery,g=e=>e instanceof Element||m(e);var e=e=>{const t={};for(const n in e)t[e[n]]="swal2-"+e[n];return t};const h=e(["container","shown","height-auto","iosfix","popup","modal","no-backdrop","no-transition","toast","toast-shown","show","hide","close","title","html-container","actions","confirm","deny","cancel","default-outline","footer","icon","icon-content","image","input","file","range","select","radio","checkbox","label","textarea","inputerror","input-label","validation-message","progress-steps","active-progress-step","progress-step","progress-step-line","loader","loading","styled","top","top-start","top-end","top-left","top-right","center","center-start","center-end","center-left","center-right","bottom","bottom-start","bottom-end","bottom-left","bottom-right","grow-row","grow-column","grow-fullscreen","rtl","timer-progress-bar","timer-progress-bar-container","scrollbar-measure","icon-success","icon-warning","icon-info","icon-question","icon-error"]),f=e(["success","warning","info","question","error"]),b=()=>document.body.querySelector(".".concat(h.container)),y=e=>{const t=b();return t?t.querySelector(e):null},v=e=>y(".".concat(e)),w=()=>v(h.popup),C=()=>v(h.icon),k=()=>v(h.title),A=()=>v(h["html-container"]),P=()=>v(h.image),B=()=>v(h["progress-steps"]),x=()=>v(h["validation-message"]),E=()=>y(".".concat(h.actions," .").concat(h.confirm)),S=()=>y(".".concat(h.actions," .").concat(h.deny));const T=()=>y(".".concat(h.loader)),O=()=>y(".".concat(h.actions," .").concat(h.cancel)),L=()=>v(h.actions),j=()=>v(h.footer),D=()=>v(h["timer-progress-bar"]),M=()=>v(h.close),I=()=>{const e=s(w().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((e,t)=>(e=parseInt(e.getAttribute("tabindex")),(t=parseInt(t.getAttribute("tabindex")))
\n \n
\n \n \n \n \n
")),re(e)}const Ct=["swal-title","swal-html","swal-footer"],kt=e=>{e="string"==typeof e.template?document.querySelector(e.template):e.template;if(!e)return{};e=e.content;return(e=>{const n=Ct.concat(["swal-param","swal-button","swal-image","swal-icon","swal-input","swal-input-option"]);s(e.children).forEach(e=>{const t=e.tagName.toLowerCase();if(n.indexOf(t)===-1)a("Unrecognized element <".concat(t,">"))})})(e),Object.assign((e=>{const o={};return s(e.querySelectorAll("swal-param")).forEach(e=>{At(e,["name","value"]);const t=e.getAttribute("name");let n=e.getAttribute("value");if(typeof Ye[t]==="boolean"&&n==="false")n=false;if(typeof Ye[t]==="object")n=JSON.parse(n);o[t]=n}),o})(e),(e=>{const n={};return s(e.querySelectorAll("swal-button")).forEach(e=>{At(e,["type","color","aria-label"]);const t=e.getAttribute("type");n["".concat(t,"ButtonText")]=e.innerHTML;n["show".concat(o(t),"Button")]=true;if(e.hasAttribute("color"))n["".concat(t,"ButtonColor")]=e.getAttribute("color");if(e.hasAttribute("aria-label"))n["".concat(t,"ButtonAriaLabel")]=e.getAttribute("aria-label")}),n})(e),(e=>{const t={},n=e.querySelector("swal-image");if(n){At(n,["src","width","height","alt"]);if(n.hasAttribute("src"))t.imageUrl=n.getAttribute("src");if(n.hasAttribute("width"))t.imageWidth=n.getAttribute("width");if(n.hasAttribute("height"))t.imageHeight=n.getAttribute("height");if(n.hasAttribute("alt"))t.imageAlt=n.getAttribute("alt")}return t})(e),(e=>{const t={},n=e.querySelector("swal-icon");if(n){At(n,["type","color"]);if(n.hasAttribute("type"))t.icon=n.getAttribute("type");if(n.hasAttribute("color"))t.iconColor=n.getAttribute("color");t.iconHtml=n.innerHTML}return t})(e),(e=>{const o={},t=e.querySelector("swal-input");if(t){At(t,["type","label","placeholder","value"]);o.input=t.getAttribute("type")||"text";if(t.hasAttribute("label"))o.inputLabel=t.getAttribute("label");if(t.hasAttribute("placeholder"))o.inputPlaceholder=t.getAttribute("placeholder");if(t.hasAttribute("value"))o.inputValue=t.getAttribute("value")}const n=e.querySelectorAll("swal-input-option");if(n.length){o.inputOptions={};s(n).forEach(e=>{At(e,["value"]);const t=e.getAttribute("value");const n=e.innerHTML;o.inputOptions[t]=n})}return o})(e),((e,t)=>{const n={};for(const o in t){const i=t[o];const s=e.querySelector(i);if(s){At(s,[]);n[i.replace(/^swal-/,"")]=s.innerHTML.trim()}}return n})(e,Ct))},At=(t,n)=>{s(t.attributes).forEach(e=>{-1===n.indexOf(e.name)&&a(['Unrecognized attribute "'.concat(e.name,'" on <').concat(t.tagName.toLowerCase(),">."),"".concat(n.length?"Allowed attributes are: ".concat(n.join(", ")):"To set the value, use HTML within the element.")])})},Pt=10,Bt=e=>{const t=b(),n=w();"function"==typeof e.willOpen&&e.willOpen(n);var o=window.getComputedStyle(document.body).overflowY;((e,t,n)=>{if(K(e,n.showClass.backdrop),t.style.setProperty("opacity","0","important"),X(t,"grid"),setTimeout(()=>{K(t,n.showClass.popup);t.style.removeProperty("opacity")},Pt),K([document.documentElement,document.body],h.shown),n.heightAuto&&n.backdrop&&!n.toast)K([document.documentElement,document.body],h["height-auto"])})(t,n,e),setTimeout(()=>{((e,t)=>{if(ue&&oe(t)){e.style.overflowY="hidden";t.addEventListener(ue,xt)}else e.style.overflowY="auto"})(t,n)},Pt),H()&&(((e,t,n)=>{if(at(),t&&n!=="hidden")it();setTimeout(()=>{e.scrollTop=0})})(t,e.scrollbarPadding,o),(()=>{const e=s(document.body.children);e.forEach(e=>{e===b()||e.contains(b())||(e.hasAttribute("aria-hidden")&&e.setAttribute("data-previous-aria-hidden",e.getAttribute("aria-hidden")),e.setAttribute("aria-hidden","true"))})})()),q()||Ne.previousActiveElement||(Ne.previousActiveElement=document.activeElement),"function"==typeof e.didOpen&&setTimeout(()=>e.didOpen(n)),Y(t,h["no-transition"])},xt=e=>{const t=w();if(e.target===t){const n=b();t.removeEventListener(ue,xt),n.style.overflowY="auto"}},Et=(e,t)=>{"select"===t.input||"radio"===t.input?((t,n)=>{const o=w(),i=e=>Tt[n.input](o,Ot(e),n);if(c(n.inputOptions)||p(n.inputOptions)){qe(E());l(n.inputOptions).then(e=>{t.hideLoading();i(e)})}else if(typeof n.inputOptions==="object")i(n.inputOptions);else r("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof n.inputOptions))})(e,t):["text","email","number","tel","textarea"].includes(t.input)&&(c(t.inputValue)||p(t.inputValue))&&(qe(E()),((t,n)=>{const o=t.getInput();$(o),l(n.inputValue).then(e=>{o.value=n.input==="number"?parseFloat(e)||0:"".concat(e);X(o);o.focus();t.hideLoading()}).catch(e=>{r("Error in inputValue promise: ".concat(e));o.value="";X(o);o.focus();t.hideLoading()})})(e,t))},St=(e,t)=>{const n=e.getInput();if(!n)return null;switch(t.input){case"checkbox":return n.checked?1:0;case"radio":return(o=n).checked?o.value:null;case"file":return(o=n).files.length?null!==o.getAttribute("multiple")?o.files:o.files[0]:null;default:return t.inputAutoTrim?n.value.trim():n.value}var o},Tt={select:(e,t,i)=>{const s=Z(e,h.select),a=(e,t,n)=>{const o=document.createElement("option");o.value=n,U(o,t),o.selected=Lt(n,i.inputValue),e.appendChild(o)};t.forEach(e=>{var t=e[0];const n=e[1];if(Array.isArray(n)){const o=document.createElement("optgroup");o.label=t,o.disabled=!1,s.appendChild(o),n.forEach(e=>a(o,e[1],e[0]))}else a(s,n,t)}),s.focus()},radio:(e,t,s)=>{const a=Z(e,h.radio);t.forEach(e=>{var t=e[0],e=e[1];const n=document.createElement("input"),o=document.createElement("label");n.type="radio",n.name=h.radio,n.value=t,Lt(t,s.inputValue)&&(n.checked=!0);const i=document.createElement("span");U(i,e),i.className=h.label,o.appendChild(n),o.appendChild(i),a.appendChild(o)});const n=a.querySelectorAll("input");n.length&&n[0].focus()}},Ot=n=>{const o=[];return"undefined"!=typeof Map&&n instanceof Map?n.forEach((e,t)=>{let n=e;"object"==typeof n&&(n=Ot(n)),o.push([t,n])}):Object.keys(n).forEach(e=>{let t=n[e];"object"==typeof t&&(t=Ot(t)),o.push([e,t])}),o},Lt=(e,t)=>t&&t.toString()===e.toString(),jt=e=>{var t=ge.innerParams.get(e);e.disableButtons(),t.input?It(e,"confirm"):Ut(e,!0)},Dt=e=>{var t=ge.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?It(e,"deny"):qt(e,!1)},Mt=(e,t)=>{e.disableButtons(),t(u.cancel)},It=(e,t)=>{var n=ge.innerParams.get(e),o=St(e,n);n.inputValidator?Ht(e,o,t):e.getInput().checkValidity()?("deny"===t?qt:Ut)(e,o):(e.enableButtons(),e.showValidationMessage(n.validationMessage))},Ht=(t,n,o)=>{const e=ge.innerParams.get(t);t.disableInput();const i=Promise.resolve().then(()=>l(e.inputValidator(n,e.validationMessage)));i.then(e=>{t.enableButtons(),t.enableInput(),e?t.showValidationMessage(e):("deny"===o?qt:Ut)(t,n)})},qt=(t,n)=>{const e=ge.innerParams.get(t||void 0);if(e.showLoaderOnDeny&&qe(S()),e.preDeny){ge.awaitingPromise.set(t||void 0,!0);const o=Promise.resolve().then(()=>l(e.preDeny(n,e.validationMessage)));o.then(e=>{!1===e?t.hideLoading():t.closePopup({isDenied:!0,value:void 0===e?n:e})}).catch(e=>Nt(t||void 0,e))}else t.closePopup({isDenied:!0,value:n})},Vt=(e,t)=>{e.closePopup({isConfirmed:!0,value:t})},Nt=(e,t)=>{e.rejectPromise(t)},Ut=(t,n)=>{const e=ge.innerParams.get(t||void 0);if(e.showLoaderOnConfirm&&qe(),e.preConfirm){t.resetValidationMessage(),ge.awaitingPromise.set(t||void 0,!0);const o=Promise.resolve().then(()=>l(e.preConfirm(n,e.validationMessage)));o.then(e=>{ee(x())||!1===e?t.hideLoading():Vt(t,void 0===e?n:e)}).catch(e=>Nt(t||void 0,e))}else Vt(t,n)},Ft=(t,e,n,o)=>{e.keydownTarget&&e.keydownHandlerAdded&&(e.keydownTarget.removeEventListener("keydown",e.keydownHandler,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!1),n.toast||(e.keydownHandler=e=>((e,t,n)=>{const o=ge.innerParams.get(e);o&&(o.stopKeydownPropagation&&t.stopPropagation(),"Enter"===t.key?_t(e,t,o):"Tab"===t.key?Kt(t,o):[...zt,...Wt].includes(t.key)?Yt(t.key):"Escape"===t.key&&Zt(t,o,n))})(t,e,o),e.keydownTarget=n.keydownListenerCapture?window:w(),e.keydownListenerCapture=n.keydownListenerCapture,e.keydownTarget.addEventListener("keydown",e.keydownHandler,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!0)},Rt=(e,t,n)=>{const o=I();if(o.length)return(t+=n)===o.length?t=0:-1===t&&(t=o.length-1),o[t].focus();w().focus()},zt=["ArrowRight","ArrowDown"],Wt=["ArrowLeft","ArrowUp"],_t=(e,t,n)=>{t.isComposing||t.target&&e.getInput()&&t.target.outerHTML===e.getInput().outerHTML&&(["textarea","file"].includes(n.input)||(He(),t.preventDefault()))},Kt=(e,t)=>{var n=e.target,o=I();let i=-1;for(let e=0;e404 - Page not found
500 - Unknown Error
404
36 |